Name: series-workflow55w6j Phase: Failed StartedAt: 2026-07-07 21:16:24 +0000 UTC FinishedAt: 2026-07-07 21:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55w6j[0] Phase: Succeeded StartedAt: 2026-07-07 21:16:24 +0000 UTC FinishedAt: 2026-07-07 21:42:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55w6j[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 21:16:24 +0000 UTC FinishedAt: 2026-07-07 21:42: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+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgaGFyZHdhcmUgZHJpdmVyIChzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIGZlYXR1cmUpLiBTaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTc5MmRkMDUxYjAzNWQxNGJmZGI1NWI4ZGI2NDYyM2ZjODRiOGJiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjE6NDA6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxuaW5kZXggMjI3MGUyZTU1MGRkOWUuLjNjYzcyODNiNjIxNWUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oXG5AQCAtMTAxNiw3ICYjNDM7MTAxNiw3IEBAIHN0cnVjdCBtbHg1ZV9wcm9maWxlIHtcbiBcdHZvaWRcdCgqY2xlYW51cF9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0aW50XHQoKmluaXRfdHgpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqY2xlYW51cF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLVx0dm9pZFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiYjNDM7XHRpbnRcdCgqZW5hYmxlKShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gXHR2b2lkXHQoKmRpc2FibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdGludFx0KCp1cGRhdGVfcngpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqdXBkYXRlX3N0YXRzKShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuaW5kZXggMDkxYjgwYTY3MTg5ZGQuLjQ5NzNmYjQ3M2ZmMDIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oXG5AQCAtODgsMTMgJiM0Mzs4OCwxOCBAQCBlbnVtIHtcbiAjaWZkZWYgQ09ORklHX01MWDVfRU5fQVJGU1xuIFx0TUxYNUVfQVJGU19GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCAmIzQzOyAxLFxuICNlbmRpZlxuLSNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX0lQU0VDKSB8fCBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01MWDVfRU5fSVBTRUMpXG4gXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgJiM0MzsgMSxcbiBcdE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9FUlJfTEVWRUwsXG4gXHRNTFg1RV9BQ0NFTF9GU19QT0xfRlRfTEVWRUwsXG4gXHRNTFg1RV9BQ0NFTF9GU19QT0xfTUlTU19GVF9MRVZFTCxcbiBcdE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9ST0NFX0xFVkVMLFxuICNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXG4mIzQzO1x0TUxYNUVfQUNDRUxfRlNfUFNQX0ZUX0xFVkVMID0gTUxYNUVfSU5ORVJfVFRDX0ZUX0xFVkVMICYjNDM7IDEsXG4mIzQzO1x0TUxYNUVfQUNDRUxfRlNfUFNQX0VSUl9GVF9MRVZFTCxcbiYjNDM7XHRNTFg1RV9BQ0NFTF9GU19QU1BfUlhfRlRfTEVWRUwsXG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmc7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuaW5kZXggYjUyNmIzODk4YzIyZTAuLjNmMjEyZTQ2ZmMyZjllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG5AQCAtMjIwLDE4ICYjNDM7MjIwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XG4tXHRpZiAoZXJyKVxuLVx0XHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcbi1cbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuQEAgLTI0MiwxMiAmIzQzOzIzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbiBcdHJldHVybiBtbHg1ZV9rdGxzX2luaXRfdHgocHJpdik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuaW5kZXggZDlhZGI5OTNlNjRkOTUuLjczYjIzMjM3OTI2M2FhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbkBAIC0yMSw1MSAmIzQzOzIxLDUyIEBAIGVudW0gYWNjZWxfcHNwX3N5bmRyb21lIHtcbiBcdFBTUF9CQURfVFJBSUxFUixcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9wc3BfdHgge1xuJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbi1cdHN0cnVjdCBtdXRleCBtdXRleDsgLyogUHJvdGVjdCBQU1AgVFggc3RlZXJpbmcgKi9cbi1cdHUzMiByZWZjbnQ7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqdHhfY291bnRlcjtcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHtcbiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSB7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpkcm9wX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYXV0aF9mYWlsX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZXJyX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYmFkX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpjb3B5X21vZGlmeV9oZHI7XG4gfTtcbiBcbi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3Qge1xuJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKm1pc3NfcnVsZTtcbiBcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKnJ4X21vZGlmeV9oZHI7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlZmF1bHRfZGVzdDtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHJ4X2Vycjtcbi1cdHUzMiByZWZjbnQ7XG4tXHRzdHJ1Y3QgbXV0ZXggcHJvdF9tdXRleDsgLyogcHJvdGVjdCBFU1A0L0VTUDYgcHJvdG9jb2wgKi9cbi1cdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpkZWZfcnVsZTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3Age1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90IGZzX3Byb3RbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcbiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1ZHBfcnVsZXNbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4gfTtcbiBcbiBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2O1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnM7XG4tXHQvKiBSeCBtYW5hZ2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mYyAqdHhfY291bnRlcjtcbiYjNDM7XHRzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHR4O1xuJiM0MztcbiYjNDM7XHQvKiBSeCAqL1xuIFx0c3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmcgKmZzO1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqcnhfZnM7XG4mIzQzO1x0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XG4mIzQzO1x0c3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyO1xuJiM0MztcdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSBkZWNyeXB0W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7XG4mIzQzO1x0c3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSByeDtcbiB9O1xuIFxuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXG5AQCAtNzcsNDQgJiM0Mzs3OCwyMDAgQEAgc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXG4gXHRyZXR1cm4gTUxYNV9UVF9JUFY2X1VEUDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZWxfcnVsZXMoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycilcbiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyICpmdF9hdHRyLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd190YWJsZSAqKmZ0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdCpmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBmdF9hdHRyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKCpmdCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoKmZ0KTtcbiYjNDM7XHRcdCpmdCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqdGFibGUpXG4ge1xuLVx0aWYgKHJ4X2Vyci1cdTAwM2ViYWRfcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2ViYWRfcnVsZSk7XG4tXHRcdHJ4X2Vyci1cdTAwM2ViYWRfcnVsZSA9IE5VTEw7XG4mIzQzO1x0aWYgKCp0YWJsZSkge1xuJiM0MztcdFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoKnRhYmxlKTtcbiYjNDM7XHRcdCp0YWJsZSA9IE5VTEw7XG4gXHR9XG4mIzQzO31cbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlZXJyX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlZXJyX3J1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlZXJyX3J1bGUgPSBOVUxMO1xuJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoKnJ1bGUpIHtcbiYjNDM7XHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMoKnJ1bGUpO1xuJiM0MztcdFx0KnJ1bGUgPSBOVUxMO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdCxcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7XG4mIzQzO1x0dTMyICppbiA9IGt2emFsbG9jKGlubGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuJiM0MztcdGlmICghaW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGluLCBzdGFydF9mbG93X2luZGV4LCBmdC1cdTAwM2VtYXhfZnRlIC0gMSk7XG4mIzQzO1x0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGluLCBlbmRfZmxvd19pbmRleCwgZnQtXHUwMDNlbWF4X2Z0ZSAtIDEpO1xuJiM0MztcdCpncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGluKTtcbiYjNDM7XHRpZiAoSVNfRVJSKCpncm91cCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoKmdyb3VwKTtcbiYjNDM7XHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4mIzQzO1x0a3ZmcmVlKGluKTtcbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VydWxlKTtcbi1cdFx0cnhfZXJyLVx1MDAzZXJ1bGUgPSBOVUxMO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCpncm91cCkge1xuJiM0MztcdFx0bWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoKmdyb3VwKTtcbiYjNDM7XHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtbHg1X2ZjICoqY291bnRlcilcbiYjNDM7e1xuJiM0MztcdCpjb3VudGVyID0gbWx4NV9mY19jcmVhdGUoZGV2LCBmYWxzZSk7XG4mIzQzO1x0aWYgKElTX0VSUigqY291bnRlcikpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBQVFJfRVJSKCpjb3VudGVyKTtcbiYjNDM7XG4mIzQzO1x0XHQqY291bnRlciA9IE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyKSB7XG4tXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIHJ4X2Vyci1cdTAwM2Vjb3B5X21vZGlmeV9oZHIpO1xuLVx0XHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gTlVMTDtcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBtbHg1X2ZjICoqY291bnRlcilcbiYjNDM7e1xuJiM0MztcdGlmICgqY291bnRlcikge1xuJiM0MztcdFx0bWx4NV9mY19kZXN0cm95KGRldiwgKmNvdW50ZXIpO1xuJiM0MztcdFx0KmNvdW50ZXIgPSBOVUxMO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfcnhfdGFibGUgKnJ4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2cngtXHUwMDNldWRwX3J1bGVzW2ldKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZyeC1cdTAwM2VtaXNzX3J1bGUpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXHUwMDI2cngtXHUwMDNlbWlzc19ncm91cCk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2cngtXHUwMDNlZnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlICpyeClcbiB7XG4tXHRhY2NlbF9wc3BfZnNfcnhfZXJyX2RlbF9ydWxlcyhmcywgcnhfZXJyKTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3RbMl0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbiYjNDM7XHRNTFg1X0RFQ0xBUkVfRkxPV19BQ1QoZmxvd19hY3QpO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiYjNDM7XHRpbnQgaSwgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0c3BlYyA9IGt6YWxsb2Nfb2JqKCpzcGVjKTtcbiYjNDM7XHRpZiAoIXNwZWMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZnRfYXR0ci5tYXhfZnRlID0gMSAmIzQzOyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTO1xuJiM0MztcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfUlhfRlRfTEVWRUw7XG4mIzQzO1x0ZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87XG4mIzQzO1x0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNnJ4LVx1MDAzZWZ0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmdCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKHJ4X2Vyci1cdTAwM2VmdCkge1xuLVx0XHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShyeF9lcnItXHUwMDNlZnQpO1xuLVx0XHRyeF9lcnItXHUwMDNlZnQgPSBOVUxMO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChyeC1cdTAwM2VmdCwgXHUwMDI2cngtXHUwMDNlbWlzc19ncm91cCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggbWlzc19ncm91cCBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qIEFkZCBtaXNzIHJ1bGUgKi9cbiYjNDM7XHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxuJiM0MztcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuJiM0MztcdGZsb3dfYWN0LmZsYWdzID0gRkxPV19BQ1RfSUdOT1JFX0ZMT1dfTEVWRUw7XG4mIzQzO1x0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbiYjNDM7XHRkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTtcbiYjNDM7XHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuJiM0MztcdGRlc3RbMV0uY291bnRlciA9IGZzLVx1MDAzZXJ4X2NvdW50ZXI7XG4mIzQzO1x0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocngtXHUwMDNlZnQsIE5VTEwsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggcnVsZSwgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRyeC1cdTAwM2VtaXNzX3J1bGUgPSBydWxlO1xuJiM0MztcbiYjNDM7XHQvKiBBZGQgVURQIHY0L3Y2IHJ1bGVzICovXG4mIzQzO1x0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgPSBNTFg1X01BVENIX09VVEVSX0hFQURFUlM7XG4mIzQzO1x0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWEsXG4mIzQzO1x0XHRcdCBvdXRlcl9oZWFkZXJzLmlwX3ZlcnNpb24pO1xuJiM0MztcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3NldF9seXJfMl80LCBzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhLFxuJiM0MztcdFx0XHQgaXBfcHJvdG9jb2wpO1xuJiM0MztcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgaXBfcHJvdG9jb2wsXG4mIzQzO1x0XHQgSVBQUk9UT19VRFApO1xuJiM0MztcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4mIzQzO1x0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4mIzQzO1x0Zmxvd19hY3QuZmxhZ3MgPSAwO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgdmVyc2lvbiA9IGkgPT0gQUNDRUxfRlNfUFNQNCA/IDQgOiA2O1xuJiM0MztcbiYjNDM7XHRcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbiYjNDM7XHRcdFx0IG91dGVyX2hlYWRlcnMuaXBfdmVyc2lvbiwgdmVyc2lvbik7XG4mIzQzO1x0XHRkZXN0WzBdID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XG4mIzQzO1x0XHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuJiM0MztcdFx0ZGVzdFsxXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfY291bnRlcjtcbiYjNDM7XHRcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4LVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCxcbiYjNDM7XHRcdFx0XHRcdCAgIDIpO1xuJiM0MztcdFx0aWYgKElTX0VSUihydWxlKSkge1xuJiM0MztcdFx0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuJiM0MztcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IFVEUCVkIHJ1bGUgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgIHZlcnNpb24sIGVycik7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJ4LVx1MDAzZXVkcF9ydWxlc1tpXSA9IHJ1bGU7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X3NwZWM7XG4mIzQzO1xuJiM0MztvdXRfZXJyOlxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTtcbiYjNDM7b3V0X3NwZWM6XG4mIzQzO1x0a3ZmcmVlKHNwZWMpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpY1xuJiM0Mzt2b2lkIGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgKmNoZWNrKVxuJiM0Mzt7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlYmFkX3J1bGUpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmNoZWNrLVx1MDAzZWVycl9ydWxlKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZjaGVjay1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlcnVsZSk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZjaGVjay1cdTAwM2Vkcm9wX2dyb3VwKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZjaGVjay1cdTAwM2VmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXG5AQCAtMTI5LDE1ICYjNDM7Mjg2LDM1IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXG4gXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2MyLCBtaXNjX3BhcmFtc18yLCBwc3Bfc3luZHJvbWUsIHN5bmRyb21lKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICoqcnVsZSlcbiB7XG4tXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbiYjNDM7XHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4mIzQzO1x0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbiYjNDM7XHRkZXN0LmNvdW50ZXIgPSBjb3VudGVyO1xuJiM0MztcdCpydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuJiM0MztcdGlmIChJU19FUlIoKnJ1bGUpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKCpydWxlKTtcbiYjNDM7XHRcdCpydWxlID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljXG4mIzQzO2ludCBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2NoZWNrX3RhYmxlICpjaGVjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3RbMl07XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9O1xuLVx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpmdGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC0xNDYsMTc0ICYjNDM7MzIzLDk3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdGlmICghc3BlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBBY3Rpb24gdG8gY29weSA3IGJpdCBwc3Bfc3luZHJvbWUgdG8gcmVnQlsyMzoyOV0gKi9cbi1cdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfU1lORFJPTUUpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDcpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3Rfb2Zmc2V0LCAyMyk7XG4mIzQzO1x0ZnRfYXR0ci5tYXhfZnRlID0gNDtcbiYjNDM7XHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XG4mIzQzO1x0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xuJiM0MztcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMO1xuJiM0MztcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmNoZWNrLVx1MDAzZWZ0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBmdCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0fVxuIFxuLVx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcbi1cdFx0XHRcdFx0ICAgICAgMSwgYWN0aW9uKTtcbi1cdGlmIChJU19FUlIobW9kaWZ5X2hkcikpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuLVx0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gYWxsb2MgcHNwIGNvcHkgbW9kaWZ5X2hlYWRlcl9pZCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGdvdG8gb3V0X3NwZWM7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGNoZWNrLVx1MDAzZWZ0LCBcdTAwMjZjaGVjay1cdTAwM2Vkcm9wX2dyb3VwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBkcm9wIGdyb3VwIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbiBcbiBcdGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfT0spO1xuIFx0LyogY3JlYXRlIGZ0ZSAqL1xuLVx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbi1cdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuLVx0ZGVzdFswXS50eXBlID0gZnNfcHJvdC1cdTAwM2VkZWZhdWx0X2Rlc3QudHlwZTtcbi1cdGRlc3RbMF0uZnQgPSBmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdC5mdDtcbi1cdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0WzFdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9mcy1cdTAwM2VyeF9jb3VudGVyO1xuLVx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcbiYjNDM7XHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4mIzQzO1x0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbiYjNDM7XHRkZXN0LmZ0ID0gZnMtXHUwMDNlcnguZnQ7XG4mIzQzO1x0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhjaGVjay1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuIFx0aWYgKElTX0VSUihmdGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggZXJyIGNvcHkgcnVsZSBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgb2sgcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlcnVsZSA9IGZ0ZTtcbiYjNDM7XHRjaGVjay1cdTAwM2VydWxlID0gZnRlO1xuIFxuIFx0LyogYWRkIGF1dGggZmFpbCBkcm9wIHJ1bGUgKi9cbiBcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcbi1cdG1lbXNldChcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XG4gXHRhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3BlYywgUFNQX0lDVl9GQUlMKTtcbi1cdC8qIGNyZWF0ZSBmdGUgKi9cbi1cdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbi1cdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0WzBdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9mcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcjtcbi1cdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCwgMSk7XG4tXHRpZiAoSVNfRVJSKGZ0ZSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihmdGUpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBhdXRoIGZhaWwgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShjaGVjay1cdTAwM2VmdCwgc3BlYyxcbiYjNDM7XHRcdFx0XHQgICAgICBmcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZjaGVjay1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgYXV0aCBmYWlsIGRyb3AgcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgICAgZXJyKTtcbi1cdFx0Z290byBvdXRfZHJvcF9ydWxlO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0cnhfZXJyLVx1MDAzZWF1dGhfZmFpbF9ydWxlID0gZnRlO1xuIFxuIFx0LyogYWRkIGZyYW1pbmcgZHJvcCBydWxlICovXG4gXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4tXHRtZW1zZXQoXHUwMDI2Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpO1xuIFx0YWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9CQURfVFJBSUxFUik7XG4tXHQvKiBjcmVhdGUgZnRlICovXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFswXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXI7XG4tXHRmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xuLVx0aWYgKElTX0VSUihmdGUpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggZnJhbWluZyBlcnIgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShjaGVjay1cdTAwM2VmdCwgc3BlYywgZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2Y2hlY2stXHUwMDNlZXJyX3J1bGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIobWRldixcbiYjNDM7XHRcdFx0ICAgICAgXCYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGZyYW1pbmcgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBlcnIpO1xuLVx0XHRnb3RvIG91dF9kcm9wX2F1dGhfZmFpbF9ydWxlO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0cnhfZXJyLVx1MDAzZWVycl9ydWxlID0gZnRlO1xuIFxuIFx0LyogYWRkIG1pc2MuIGVycm9ycyBkcm9wIHJ1bGUgKi9cbiBcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcbi1cdG1lbXNldChcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XG4tXHQvKiBjcmVhdGUgZnRlICovXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFswXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXI7XG4tXHRmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xuLVx0aWYgKElTX0VSUihmdGUpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoY2hlY2stXHUwMDNlZnQsIHNwZWMsIGZzLVx1MDAzZXJ4X2JhZF9jb3VudGVyLFxuJiM0MztcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWJhZF9ydWxlKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBtaXNjLiBlcnIgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBlcnIpO1xuLVx0XHRnb3RvIG91dF9kcm9wX2Vycm9yX3J1bGU7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlYmFkX3J1bGUgPSBmdGU7XG4tXG4tXHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcbiBcdGdvdG8gb3V0X3NwZWM7XG4gXG4tb3V0X2Ryb3BfZXJyb3JfcnVsZTpcbi1cdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWVycl9ydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VlcnJfcnVsZSA9IE5VTEw7XG4tb3V0X2Ryb3BfYXV0aF9mYWlsX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4tXHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuLW91dF9kcm9wX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VydWxlID0gTlVMTDtcbi1vdXQ6XG4tXHRtbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhtZGV2LCBtb2RpZnlfaGRyKTtcbiYjNDM7b3V0X2VycjpcbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShjaGVjayk7XG4gb3V0X3NwZWM6XG4gXHRrZnJlZShzcGVjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdClcbiB7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbi1cdGludCBlcnI7XG4tXG4tXHRmdF9hdHRyLm1heF9mdGUgPSAyO1xuLVx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xuLVx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9FUlJfTEVWRUw7IC8vIE1MWDVFX0FDQ0VMX0ZTX1RDUF9GVF9MRVZFTFxuLVx0ZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87XG4tXHRmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBcdTAwMjZmdF9hdHRyKTtcbi1cdGlmIChJU19FUlIoZnQpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnQpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBpbmxpbmUgZnQgZXJyPSVkXFxuXCYjMzQ7LCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuLVx0cnhfZXJyLVx1MDAzZWZ0ID0gZnQ7XG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKGZzLCBmc19wcm90LCByeF9lcnIpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXRfZXJyO1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tb3V0X2Vycjpcbi1cdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZ0KTtcbi1cdHJ4X2Vyci1cdTAwM2VmdCA9IE5VTEw7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXG4te1xuLVx0aWYgKGZzX3Byb3QtXHUwMDNlZGVmX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhmc19wcm90LVx1MDAzZWRlZl9ydWxlKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VkZWZfcnVsZSA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyKSB7XG4tXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIGZzX3Byb3QtXHUwMDNlcnhfbW9kaWZ5X2hkcik7XG4tXHRcdGZzX3Byb3QtXHUwMDNlcnhfbW9kaWZ5X2hkciA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VtaXNzX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhmc19wcm90LVx1MDAzZW1pc3NfcnVsZSk7XG4tXHRcdGZzX3Byb3QtXHUwMDNlbWlzc19ydWxlID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXApIHtcbi1cdFx0bWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoZnNfcHJvdC1cdTAwM2VtaXNzX2dyb3VwKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VtaXNzX2dyb3VwID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZWZ0KSB7XG4tXHRcdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZzX3Byb3QtXHUwMDNlZnQpO1xuLVx0XHRmc19wcm90LVx1MDAzZWZ0ID0gTlVMTDtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZkZWNyeXB0LVx1MDAzZXJ1bGUpO1xuJiM0MztcdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbiYjNDM7XHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIGRlY3J5cHQtXHUwMDNlcnhfbW9kaWZ5X2hkcik7XG4mIzQzO1x0XHRkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIgPSBOVUxMO1xuIFx0fVxuJiM0MztcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ydWxlKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ncm91cCk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2ZGVjcnlwdC1cdTAwM2VmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNldHVwX2Z0ZV91ZHBfcHNwKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYywgdTE2IHVkcF9wb3J0KVxuQEAgLTMyNSw3MCAmIzQzOzQyNSw2NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcbiBcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgaXBfcHJvdG9jb2wsIElQUFJPVE9fVURQKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlICpkZWNyeXB0LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KVxuIHtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucyA9IG1seDVlX2ZzX2dldF9ucyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuIFx0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcbi1cdGludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pO1xuIFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkciA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuIFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xuIFx0TUxYNV9ERUNMQVJFX0ZMT1dfQUNUKGZsb3dfYWN0KTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuIFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuLVx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4tXHR1MzIgKmZsb3dfZ3JvdXBfaW47XG4gXHRpbnQgZXJyID0gMDtcbiBcbi1cdGZsb3dfZ3JvdXBfaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7XG4gXHRzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTtcbi1cdGlmICghZmxvd19ncm91cF9pbiB8fCAhc3BlYykge1xuLVx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiYjNDM7XHRpZiAoIXNwZWMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIENyZWF0ZSBGVCAqL1xuIFx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcbi1cdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUw7XG4tXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbiYjNDM7XHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX0ZUX0xFVkVMO1xuIFx0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuIFx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAxO1xuLVx0ZnQgPSBtbHg1X2NyZWF0ZV9hdXRvX2dyb3VwZWRfZmxvd190YWJsZShucywgXHUwMDI2ZnRfYXR0cik7XG4tXHRpZiAoSVNfRVJSKGZ0KSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZ0KTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZnQgZXJyPSVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmRlY3J5cHQtXHUwMDNlZnQpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgZnQgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRmc19wcm90LVx1MDAzZWZ0ID0gZnQ7XG4gXG4gXHQvKiBDcmVhdGUgbWlzc19ncm91cCAqL1xuLVx0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGZsb3dfZ3JvdXBfaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVx1MDAzZW1heF9mdGUgLSAxKTtcbi1cdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBlbmRfZmxvd19pbmRleCwgZnQtXHUwMDNlbWF4X2Z0ZSAtIDEpO1xuLVx0bWlzc19ncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGZsb3dfZ3JvdXBfaW4pO1xuLVx0aWYgKElTX0VSUihtaXNzX2dyb3VwKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG1pc3NfZ3JvdXApO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX2dyb3VwIGVycj0lZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoZGVjcnlwdC1cdTAwM2VmdCwgXHUwMDI2ZGVjcnlwdC1cdTAwM2VtaXNzX2dyb3VwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfZ3JvdXAgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXAgPSBtaXNzX2dyb3VwO1xuIFxuIFx0LyogQ3JlYXRlIG1pc3MgcnVsZSAqL1xuLVx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdCwgMSk7XG4mIzQzO1x0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUO1xuJiM0MztcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZWZhdWx0X2Rlc3QsXG4mIzQzO1x0XHRcdFx0ICAgMSk7XG4gXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfcnVsZSBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlbWlzc19ydWxlID0gcnVsZTtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4gXG4tXHQvKiBBZGQgZGVmYXVsdCBSeCBwc3AgcnVsZSAqL1xuJiM0MztcdC8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovXG4gXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XG4gXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcbiBcdC8qIFNldCBiaXRbMzEsIDMwXSBQU1AgbWFya2VyICovXG4tXHQvKiBTZXQgYml0WzI5LTIzXSBwc3Bfc3luZHJvbWUgaXMgc2V0IGluIGVycm9yIEZUICovXG4gI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpXG4gXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XG4gXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG5AQCAtNDAzLDI3NSAmIzQzOzQ5NywxNTkgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0XHRtb2RpZnlfaGRyID0gTlVMTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0ZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFxuIFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbiBcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUjtcbiBcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbi1cdGRlc3QuZnQgPSBmc19wcm90LVx1MDAzZXJ4X2Vyci5mdDtcbi1cdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZkZXN0LCAxKTtcbiYjNDM7XHRkZXN0LmZ0ID0gZnMtXHUwMDNlY2hlY2suZnQ7XG4mIzQzO1x0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjcnlwdC1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuIFx0aWYgKElTX0VSUihydWxlKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4tXHRcdFx0ICAgICAgXCYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICBlcnIsIGZsb3dfYWN0LmFjdGlvbik7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBkZWNyeXB0IHJ1bGUsIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuIFxuLVx0ZnNfcHJvdC1cdTAwM2VkZWZfcnVsZSA9IHJ1bGU7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZXJ1bGUgPSBydWxlO1xuJiM0MztcdGdvdG8gb3V0X3NwZWM7XG4gXG4gb3V0X2Vycjpcbi1cdGFjY2VsX3BzcF9mc19yeF9mc19kZXN0cm95KGZzLCBmc19wcm90KTtcbi1vdXQ6XG4tXHRrdmZyZWUoZmxvd19ncm91cF9pbik7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgZGVjcnlwdCk7XG4mIzQzO291dF9zcGVjOlxuIFx0a3ZmcmVlKHNwZWMpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxuJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXG4tXHRhY2NlbF9wc3AgPSBmcy1cdTAwM2VyeF9mcztcbi1cbi1cdC8qIFRoZSBuZXRkZXYgdW5yZWcgYWxyZWFkeSBoYXBwZW5lZCwgc28gYWxsIG9mZmxvYWRlZCBydWxlIGFyZSBhbHJlYWR5IHJlbW92ZWQgKi9cbi1cdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFt0eXBlXTtcbi1cbi1cdGFjY2VsX3BzcF9mc19yeF9mc19kZXN0cm95KGZzLCBmc19wcm90KTtcbi1cbi1cdGFjY2VsX3BzcF9mc19yeF9lcnJfZGVzdHJveV9mdChmcywgXHUwMDI2ZnNfcHJvdC1cdTAwM2VyeF9lcnIpO1xuJiM0MztcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuJiM0MztcdGludCBpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0LyogZGlzY29ubmVjdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpKTtcbiYjNDM7XHRcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0pO1xuJiM0MztcdH1cbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSlcbiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVx0aW50IGVycjtcbi1cbi1cdGFjY2VsX3BzcCA9IGZzLVx1MDAzZXJ4X2ZzO1xuLVx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W3R5cGVdO1xuJiM0MztcdGludCBpLCBlcnI7XG4gXG4tXHRmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQodHlwZSkpO1xuLVxuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Vycl9jcmVhdGVfZnQoZnMsIGZzX3Byb3QsIFx1MDAyNmZzX3Byb3QtXHUwMDNlcnhfZXJyKTtcbi1cdGlmIChlcnIpXG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Z0X2NyZWF0ZShmcywgXHUwMDI2ZnMtXHUwMDNlcngpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTtcbi1cdGlmIChlcnIpXG4tXHRcdGFjY2VsX3BzcF9mc19yeF9lcnJfZGVzdHJveV9mdChmcywgXHUwMDI2ZnNfcHJvdC1cdTAwM2VyeF9lcnIpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXG4te1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0Yztcbi1cdGludCBlcnIgPSAwO1xuLVxuLVx0aWYgKCFmcyB8fCAhZnMtXHUwMDNlcnhfZnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0dHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRmc19wcm90ID0gXHUwMDI2YWNjZWxfcHNwLVx1MDAzZWZzX3Byb3RbdHlwZV07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VyZWZjbnQmIzQzOyYjNDM7KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdC8qIGNyZWF0ZSBGVCAqL1xuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShmcywgdHlwZSk7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShmcywgXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuIFx0aWYgKGVycikge1xuLVx0XHRmc19wcm90LVx1MDAzZXJlZmNudC0tO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0ZhaWxlZCBjcmVhdGluZyBSWCBjaGVjayBzdGVlcmluZyB0YWJsZVwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mdDtcbiBcdH1cbiBcbi1cdC8qIGNvbm5lY3QgKi9cbi1cdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4tXHRkZXN0LmZ0ID0gZnNfcHJvdC1cdTAwM2VmdDtcbi1cdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KHR5cGUpLCBcdTAwMjZkZXN0KTtcbi1cbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSlcbi17XG4tXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcbi1cbi1cdGFjY2VsX3BzcCA9IGZzLVx1MDAzZXJ4X2ZzO1xuLVx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W3R5cGVdO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0aWYgKC0tZnNfcHJvdC1cdTAwM2VyZWZjbnQpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0LyogZGlzY29ubmVjdCAqL1xuLVx0bWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdDtcbiYjNDM7XG4mIzQzO1x0XHRkZXN0ID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XG4mIzQzO1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHUwMDI2ZGVzdCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIGRlY3J5cHQgc3RlZXJpbmcgdGFibGVcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycl9kZWNyeXB0X2Z0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4mIzQzO1x0XHRkZXN0LmZ0ID0gZnMtXHUwMDNlZGVjcnlwdFtpXS5mdDtcbiYjNDM7XHRcdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpLCBcdTAwMjZkZXN0KTtcbiYjNDM7XHR9XG4gXG4tXHQvKiByZW1vdmUgRlQgKi9cbi1cdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KGZzLCB0eXBlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiBcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbiYjNDM7ZXJyX2RlY3J5cHRfZnQ6XG4mIzQzO1x0d2hpbGUgKC0taSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdG1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpO1xuJiM0MztcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZWNoZWNrKTtcbiYjNDM7ZXJyX2Z0OlxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZXJ4KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xuLVxuLVx0aWYgKCFmcy1cdTAwM2VyeF9mcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyKTtcbi1cdG1seDVfZmNfZGVzdHJveShmcy1cdTAwM2VtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuLVx0bWx4NV9mY19kZXN0cm95KGZzLVx1MDAzZW1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W2ldO1xuLVx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRcdFdBUk5fT04oZnNfcHJvdC1cdTAwM2VyZWZjbnQpO1xuLVx0fVxuLVx0a2ZyZWUoZnMtXHUwMDNlcnhfZnMpO1xuLVx0ZnMtXHUwMDNlcnhfZnMgPSBOVUxMO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfY291bnRlcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVfZmMgKmZsb3dfY291bnRlcjtcbi1cdGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgaTtcbiBcdGludCBlcnI7XG4gXG4tXHRhY2NlbF9wc3AgPSBremFsbG9jX29iaigqYWNjZWxfcHNwKTtcbi1cdGlmICghYWNjZWxfcHNwKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFtpXTtcbi1cdFx0bXV0ZXhfaW5pdChcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0fVxuLVxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2NvdW50ZXIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZsb3cgY291bnRlciBlcnI9JXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBmbG93X2NvdW50ZXIpO1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZmxvdyBjb3VudGVyIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuIFxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBhdXRoIGZhaWwgZmxvdyBjb3VudGVyIGVycj0lcGVcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIGZsb3dfY291bnRlcik7XG4tXHRcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcbi1cdFx0Z290byBvdXRfY291bnRlcl9lcnI7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggYXV0aCBmYWlsIGZsb3cgY291bnRlciBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBlcnIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuIFxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBlcnJvciBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9hdXRoX2ZhaWxfY291bnRlcl9lcnI7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XG4gXG4tXHRmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7XG4tXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGJhZCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9lcnJfY291bnRlcl9lcnI7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggYmFkIGZsb3cgY291bnRlciBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBlcnIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuLVxuLVx0ZnMtXHUwMDNlcnhfZnMgPSBhY2NlbF9wc3A7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1vdXRfZXJyX2NvdW50ZXJfZXJyOlxuLVx0bWx4NV9mY19kZXN0cm95KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9lcnJfY291bnRlcik7XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIgPSBOVUxMO1xuLW91dF9hdXRoX2ZhaWxfY291bnRlcl9lcnI6XG4tXHRtbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlciA9IE5VTEw7XG4tb3V0X2NvdW50ZXJfZXJyOlxuLVx0bWx4NV9mY19kZXN0cm95KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9jb3VudGVyKTtcbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9jb3VudGVyID0gTlVMTDtcbiBvdXRfZXJyOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W2ldO1xuLVx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHR9XG4tXHRrZnJlZShhY2NlbF9wc3ApO1xuLVx0ZnMtXHUwMDNlcnhfZnMgPSBOVUxMO1xuLVxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9jbGVhbnVwKGZzKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X3B1dChwcml2LVx1MDAzZXBzcC1cdTAwM2VmcywgaSk7XG4tfVxuLVxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcztcbi1cdGludCBlcnIsIGk7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZzID0gcHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnM7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dF9lcnI7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1vdXRfZXJyOlxuLVx0aS0tO1xuLVx0d2hpbGUgKGkgXHUwMDNlPSAwKSB7XG4tXHRcdGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoZnMsIGkpO1xuLVx0XHQtLWk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdG5ldGRldl9sb2NrKHByaXYtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcyk7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXG4ge1xuIFx0aW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuQEAgLTY4MSw3ICYjNDM7NjU5LDYgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0dTMyICppbiwgKm1jLCAqb3V0ZXJfaGVhZGVyc19jO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03MDAsOCAmIzQzOzY3Nyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9QU1BfTEVWRUw7XG4gXHRmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDE7XG4gXG4tXHR0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVx0ZnQgPSBtbHg1X2NyZWF0ZV9mbG93X3RhYmxlKHR4X2ZzLVx1MDAzZW5zLCBcdTAwMjZmdF9hdHRyKTtcbiYjNDM7XHRmdCA9IG1seDVfY3JlYXRlX2Zsb3dfdGFibGUodHgtXHUwMDNlbnMsIFx1MDAyNmZ0X2F0dHIpO1xuIFx0aWYgKElTX0VSUihmdCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihmdCk7XG4gXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7UFNQOiBmYWlsIHRvIGFkZCBwc3AgdHggZmxvdyB0YWJsZSwgZXJyID0gJWRcXG5cJiMzNDssIGVycik7XG5AQCAtNzI3LDcgJiM0Mzs3MDMsNyBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0VOQ1JZUFQgfFxuIFx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuIFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbi1cdGRlc3QuY291bnRlciA9IHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXI7XG4mIzQzO1x0ZGVzdC5jb3VudGVyID0gZnMtXHUwMDNldHhfY291bnRlcjtcbiBcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4gXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG5AQCAtNzM1LDkgJiM0Mzs3MTEsOSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4gXHRcdGdvdG8gZXJyX2FkZF9mbG93X3J1bGU7XG4gXHR9XG4gXG4tXHR0eF9mcy1cdTAwM2VmdCA9IGZ0O1xuLVx0dHhfZnMtXHUwMDNlZmcgPSBmZztcbi1cdHR4X2ZzLVx1MDAzZXJ1bGUgPSBydWxlO1xuJiM0MztcdHR4LVx1MDAzZWZ0ID0gZnQ7XG4mIzQzO1x0dHgtXHUwMDNlZmcgPSBmZztcbiYjNDM7XHR0eC1cdTAwM2VydWxlID0gcnVsZTtcbiBcdGdvdG8gb3V0O1xuIFxuIGVycl9hZGRfZmxvd19ydWxlOlxuQEAgLTc1MCw4NyAmIzQzOzcyNiwzNSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcylcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXG4ge1xuLVx0aWYgKCF0eF9mcy1cdTAwM2VmdClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bWx4NV9kZWxfZmxvd19ydWxlcyh0eF9mcy1cdTAwM2VydWxlKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKHR4X2ZzLVx1MDAzZWZnKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKHR4X2ZzLVx1MDAzZWZ0KTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZ0eC1cdTAwM2VydWxlKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNnR4LVx1MDAzZWZnKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZ0eC1cdTAwM2VmdCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBmcy1cdTAwM2V0eF9mcztcbi1cdGludCBlcnIgPSAwO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRpZiAodHhfZnMtXHUwMDNlcmVmY250JiM0MzsmIzQzOylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKGZzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHR4X2ZzLVx1MDAzZXJlZmNudC0tO1xuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNldHhfY291bnRlcik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc190eF9mdF9wdXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4te1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBmcy1cdTAwM2V0eF9mcztcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2dHhfZnMtXHUwMDNlbXV0ZXgpO1xuLVx0aWYgKC0tdHhfZnMtXHUwMDNlcmVmY250KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGFjY2VsX3BzcF9mc190eF9kZXN0cm95KHR4X2ZzKTtcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2dHhfZnMtXHUwMDNlbXV0ZXgpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF90eChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbi17XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVxuLVx0aWYgKCF0eF9mcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bWx4NV9mY19kZXN0cm95KGZzLVx1MDAzZW1kZXYsIHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIpO1xuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRXQVJOX09OKHR4X2ZzLVx1MDAzZXJlZmNudCk7XG4tXHRrZnJlZSh0eF9mcyk7XG4tXHRmcy1cdTAwM2V0eF9mcyA9IE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfdHgoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xuLVx0c3RydWN0IG1seDVfZmMgKmZsb3dfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzO1xuJiM0MztcdGludCBlcnI7XG4gXG4tXHRucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfRUdSRVNTX0lQU0VDKTtcbi1cdGlmICghbnMpXG4mIzQzO1x0ZnMtXHUwMDNldHgubnMgPSBtbHg1X2dldF9mbG93X25hbWVzcGFjZShtZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIE1MWDVfRkxPV19OQU1FU1BBQ0VfRUdSRVNTX0lQU0VDKTtcbiYjNDM7XHRpZiAoIWZzLVx1MDAzZXR4Lm5zKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR0eF9mcyA9IGt6YWxsb2Nfb2JqKCp0eF9mcyk7XG4tXHRpZiAoIXR4X2ZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCBcdTAwMjZmcy1cdTAwM2V0eF9jb3VudGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0a2ZyZWUodHhfZnMpO1xuLVx0XHRyZXR1cm4gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHR4IGZsb3cgY291bnRlciBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdH1cbi1cdHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XG4tXHRtdXRleF9pbml0KFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdHR4X2ZzLVx1MDAzZW5zID0gbnM7XG4tXHRmcy1cdTAwM2V0eF9mcyA9IHR4X2ZzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTgzOCwzMiAmIzQzOzc2MiwyOSBAQCBzdGF0aWMgdm9pZFxuIG1seDVlX2FjY2VsX3BzcF9mc19nZXRfc3RhdHNfZmlsbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9zdGF0cyAqc3RhdHMpXG4ge1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcy1cdTAwM2V0eF9mcztcbiYjNDM7XHRzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzO1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXG4tXHRhY2NlbF9wc3AgPSAoc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqKXByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXJ4X2ZzO1xuIFxuLVx0aWYgKHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIpXG4tXHRcdG1seDVfZmNfcXVlcnkobWRldiwgdHhfZnMtXHUwMDNldHhfY291bnRlciwgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3R4X3BrdHMsXG4mIzQzO1x0aWYgKGZzLVx1MDAzZXR4X2NvdW50ZXIpXG4mIzQzO1x0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGZzLVx1MDAzZXR4X2NvdW50ZXIsIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF90eF9wa3RzLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF90eF9ieXRlcyk7XG4gXG4tXHRpZiAoYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIpXG4tXHRcdG1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIsIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9wa3RzLFxuJiM0MztcdGlmIChmcy1cdTAwM2VyeF9jb3VudGVyKVxuJiM0MztcdFx0bWx4NV9mY19xdWVyeShtZGV2LCBmcy1cdTAwM2VyeF9jb3VudGVyLCBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfcGt0cyxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXMpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXG4mIzQzO1x0aWYgKGZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKVxuJiM0MztcdFx0bWx4NV9mY19xdWVyeShtZGV2LCBmcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfcGt0c19hdXRoX2ZhaWwsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X2J5dGVzX2F1dGhfZmFpbCk7XG4gXG4tXHRpZiAoYWNjZWxfcHNwLVx1MDAzZXJ4X2Vycl9jb3VudGVyKVxuLVx0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9lcnJfY291bnRlcixcbiYjNDM7XHRpZiAoZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIpXG4mIzQzO1x0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGZzLVx1MDAzZXJ4X2Vycl9jb3VudGVyLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9wa3RzX2ZyYW1lX2VycixcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXNfZnJhbWVfZXJyKTtcbiBcbi1cdGlmIChhY2NlbF9wc3AtXHUwMDNlcnhfYmFkX2NvdW50ZXIpXG4tXHRcdG1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyLFxuJiM0MztcdGlmIChmcy1cdTAwM2VyeF9iYWRfY291bnRlcilcbiYjNDM7XHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfZHJvcCxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXNfZHJvcCk7XG4gfVxuQEAgLTg3MywyMSAmIzQzOzc5NCwxNSBAQCB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0aWYgKCFwcml2LVx1MDAzZXBzcClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YWNjZWxfcHNwX2ZzX3R4X2Z0X3B1dChwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcyk7XG4tfVxuLVxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbiYjNDM7XHRuZXRkZXZfbG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMtXHUwMDNldHgpO1xuJiM0MztcdG5ldGRldl91bmxvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1ZV9hY2NlbF9wc3BfZnNfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChmcyk7XG4tXHRhY2NlbF9wc3BfZnNfY2xlYW51cF90eChmcyk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoZnMpO1xuJiM0MztcdGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTtcbiBcdGtmcmVlKGZzKTtcbiB9XG4gXG5AQCAtOTAxLDI5ICYjNDM7ODE2LDYzIEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NWVfcHNwX2ZzICptbHg1ZV9hY2NlbF9wc3BfZnNfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRmcy1cdTAwM2VtZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX2luaXRfdHgoZnMpO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc190eF9pbml0KGZzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3R4O1xuIFxuIFx0ZnMtXHUwMDNlZnMgPSBwcml2LVx1MDAzZWZzO1xuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX2luaXRfcngoZnMpO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9pbml0KGZzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3J4O1xuIFxuIFx0cmV0dXJuIGZzO1xuIFxuIGVycl9yeDpcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfdHhfY2xlYW51cChmcyk7XG4gZXJyX3R4OlxuIFx0a2ZyZWUoZnMpO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc190eF9mdF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIFx1MDAyNnByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXR4KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZhaWxlZCBjcmVhdGluZyBUWCBzdGVlcmluZyB0YWJsZVwmIzM0Oyk7XG4mIzQzO1x0XHRhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcyk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMtXHUwMDNldHgpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gbWx4NWVfcHNwX3NldF9jb25maWcoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9kZXZfY29uZmlnICpjb25mLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRyZXR1cm4gMDsgLyogVE9ETzogdGhpcyBzaG91bGQgYWN0dWFsbHkgZG8gdGhpbmdzIHRvIHRoZSBkZXZpY2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHBzZC1cdTAwM2VtYWluX25ldGRldik7XG4mIzQzO1x0Ym9vbCBwc3BfZW5hYmxlZCA9IHBzZC1cdTAwM2Vjb25maWcudmVyc2lvbnM7XG4mIzQzO1x0Ym9vbCBlbmFibGVfcHNwID0gY29uZi1cdTAwM2V2ZXJzaW9ucztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2xvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdGlmICghcHNwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGVuYWJsZV9wc3ApXG4mIzQzO1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlKHByaXYsIGV4dGFjayk7XG4mIzQzO1x0ZWxzZSBpZiAocHNwX2VuYWJsZWQgXHUwMDI2XHUwMDI2ICFlbmFibGVfcHNwKVxuJiM0MztcdFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3kocHJpdik7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludFxuQEAgLTEwNzIsMjEgJiM0MzsxMDIxLDIxIEBAIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi1cdTAwM2Vwc3A7XG4gXG4tXHRpZiAoIXBzcCB8fCAhcHNwLVx1MDAzZXBzcClcbiYjNDM7XHRpZiAoIXBzcCB8fCAhcHNwLVx1MDAzZXBzZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHNwX2Rldl91bnJlZ2lzdGVyKHBzcC1cdTAwM2Vwc3ApO1xuLVx0cHNwLVx1MDAzZXBzcCA9IE5VTEw7XG4mIzQzO1x0cHNwX2Rldl91bnJlZ2lzdGVyKHBzcC1cdTAwM2Vwc2QpO1xuJiM0MztcdHBzcC1cdTAwM2Vwc2QgPSBOVUxMO1xuIH1cbiBcbi12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7aW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVx1MDAzZXBzcDtcbiBcdHN0cnVjdCBwc3BfZGV2ICpwc2Q7XG4gXG4gXHQvKiBGVyBDYXBzIG1pc3NpbmcgKi9cbiBcdGlmICghcHJpdi1cdTAwM2Vwc3ApXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0cHNwLVx1MDAzZWNhcHMuYXNzb2NfZHJ2X3NwYyA9IHNpemVvZih1MzIpO1xuIFx0cHNwLVx1MDAzZWNhcHMudmVyc2lvbnMgPSAxIFx1MDAzY1x1MDAzYyBQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMTI4O1xuQEAgLTEwOTgsOSAmIzQzOzEwNDcsMTEgQEAgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoSVNfRVJSKHBzZCkpIHtcbiBcdFx0bWx4NV9jb3JlX2Vycihwcml2LVx1MDAzZW1kZXYsIFwmIzM0O1BTUCBmYWlsZWQgdG8gcmVnaXN0ZXIgZHVlIHRvICVwZVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBwc2QpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwc2QpO1xuIFx0fVxuLVx0cHNwLVx1MDAzZXBzcCA9IHBzZDtcbiYjNDM7XHRwc3AtXHUwMDNlcHNkID0gcHNkO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxuaW5kZXggNmI2MmZlZjBkOWE3MzguLjNmNDQxZTdkZDU1YWMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3N0YXRzIHtcbiB9O1xuIFxuIHN0cnVjdCBtbHg1ZV9wc3Age1xuLVx0c3RydWN0IHBzcF9kZXYgKnBzcDtcbiYjNDM7XHRzdHJ1Y3QgcHNwX2RldiAqcHNkO1xuIFx0c3RydWN0IHBzcF9kZXZfY2FwcyBjYXBzO1xuIFx0c3RydWN0IG1seDVlX3BzcF9mcyAqZnM7XG4gXHRhdG9taWNfdCB0eF9rZXlfY250O1xuQEAgLTQzLDMzICYjNDM7NDMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4tdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBpbnQgbWx4NWVfcHNwX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBpbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4tc3RhdGljIGlubGluZSBpbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXG5pbmRleCBlZjdmNTMzODU0MGZkZi4uMzQ4ZmQ3YTk2MjYxNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbkBAIC0xNCwxMiAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9wc3Bfcnh0eC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW5fYWNjZWwvcHNwLmhcJiMzNDtcbiBcbi1lbnVtIHtcbi1cdE1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0RFQ1JZUFRFRCxcbi1cdE1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0FVVEhfRkFJTEVELFxuLVx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfQkFEX1RSQUlMRVIsXG4tfTtcbi1cbiBzdGF0aWMgdm9pZCBtbHg1ZV9wc3Bfc2V0X3N3cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUgKnBzcF9zdCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgbWx4NV93cWVfZXRoX3NlZyAqZXNlZylcbkBAIC0xMjIsMTYgJiM0MzsxMTYsMTEgQEAgc3RhdGljIGJvb2wgbWx4NWVfcHNwX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHR1MzIgcHNwX21ldGFfZGF0YSA9IGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSk7XG4gXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHR1MTYgZGV2X2lkID0gcHJpdi1cdTAwM2Vwc3AtXHUwMDNlcHNwLVx1MDAzZWlkO1xuJiM0MztcdHUxNiBkZXZfaWQgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vwc2QtXHUwMDNlaWQ7XG4gXHRib29sIHN0cmlwX2ljdiA9IHRydWU7XG4gXHR1OCBnZW5lcmF0aW9uID0gMDtcbiBcbi1cdC8qIFRCRDogcmVwb3J0IGVycm9ycyBhcyBTVyBjb3VudGVycyB0byBldGh0b29sLCBhbnkgZnVydGhlciBoYW5kbGluZyA/ICovXG4tXHRpZiAoTUxYNV9QU1BfTUVUQURBVEFfU1lORFJPTUUocHNwX21ldGFfZGF0YSkgIT0gTUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVEKVxuLVx0XHRnb3RvIGRyb3A7XG4tXG4gXHRpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIGdlbmVyYXRpb24sIHN0cmlwX2ljdikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG5pbmRleCA3MDI4OWM5MjFiZDZiMy4uMmIwODBjMzljYzM3ZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmhcbkBAIC0xMCw5ICYjNDM7MTAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2VuLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlbi90eHJ4LmhcJiMzNDtcbiBcbi0vKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjktMjM6IFBTUCBzeW5kcm9tZSwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xuJiM0MzsvKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xuICNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcdTAwM2VcdTAwM2UgMzApIFx1MDAyNiAweDMpID09IDB4Mylcbi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX1NZTkRST01FKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDIzKSBcdTAwMjYgR0VOTUFTSyg2LCAwKSlcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFx1MDAyNiBHRU5NQVNLKDIyLCAwKSlcbiBcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuaW5kZXggNzc1ZjBjNmU1NWM5NTUuLjJjYjQ4YjI0ZDVlYWM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYxOTEsNyAmIzQzOzYxOTEsNyBAQCBzdGF0aWMgaW50IG1seDVlX2luaXRfbmljX3R4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4mIzQzO3N0YXRpYyBpbnQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbkBAIC02MTk5LDcgJiM0Mzs2MTk5LDkgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBcdG1seDVlX2ZzX2luaXRfbDJfYWRkcihwcml2LVx1MDAzZWZzLCBuZXRkZXYpO1xuIFx0bWx4NWVfaXBzZWNfaW5pdChwcml2KTtcbi1cdG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XHRlcnIgPSBtbHg1ZV9wc3BfcmVnaXN0ZXIocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2lwc2VjX2NsZWFudXA7XG4gXG4gXHRlcnIgPSBtbHg1ZV9tYWNzZWNfaW5pdChwcml2KTtcbiBcdGlmIChlcnIpXG5AQCAtNjIyMiw3ICYjNDM7NjIyNCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1ZV9wY2llX2NvbmdfZXZlbnRfaW5pdChwcml2KTtcbiBcdG1seDVlX2h2X3ZoY2Ffc3RhdHNfY3JlYXRlKHByaXYpO1xuIFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0bWx4NWVfZGNibmxfaW5pdF9hcHAocHJpdik7XG4gXG4gXHRtbHg1ZV9uaWNfc2V0X3J4X21vZGUocHJpdik7XG5AQCAtNjIzNSw2ICYjNDM7NjIzNywxMiBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfaXBzZWNfY2xlYW51cDpcbiYjNDM7XHRtbHg1ZV9pcHNlY19jbGVhbnVwKHByaXYpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVlX25pY19kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuQEAgLTY2MTYsMTMgJiM0Mzs2NjI0LDE4IEBAIGludCBtbHg1ZV9hdHRhY2hfbmV0ZGV2KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfY2xlYW51cF90eDtcbiBcbi1cdGlmIChwcm9maWxlLVx1MDAzZWVuYWJsZSlcbi1cdFx0cHJvZmlsZS1cdTAwM2VlbmFibGUocHJpdik7XG4mIzQzO1x0aWYgKHByb2ZpbGUtXHUwMDNlZW5hYmxlKSB7XG4mIzQzO1x0XHRlcnIgPSBwcm9maWxlLVx1MDAzZWVuYWJsZShwcml2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX2NsZWFudXBfcng7XG4mIzQzO1x0fVxuIFxuIFx0bWx4NWVfdXBkYXRlX2ZlYXR1cmVzKHByaXYtXHUwMDNlbmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfY2xlYW51cF9yeDpcbiYjNDM7XHRwcm9maWxlLVx1MDAzZWNsZWFudXBfcngocHJpdik7XG4gZXJyX2NsZWFudXBfdHg6XG4gXHRwcm9maWxlLVx1MDAzZWNsZWFudXBfdHgocHJpdik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jXG5pbmRleCBjOGI3NmQzMDFjOTJjZi4uNjAzMDUxYWIxZWFhNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xuQEAgLTEyNjIsOSAmIzQzOzEyNjIsMTEgQEAgc3RhdGljIHZvaWQgbWx4NWVfY2xlYW51cF9yZXBfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1ZV9yZXBfbmVpZ2hfY2xlYW51cChycHJpdik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4mIzQzO3N0YXRpYyBpbnQgbWx4NWVfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRtbHg1ZV9zZXRfbmV0ZGV2X210dV9ib3VuZGFyaWVzKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG5AQCAtMTMyMiw3ICYjNDM7MTMyNCw3IEBAIHN0YXRpYyBpbnQgdXBsaW5rX3JlcF9hc3luY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3VwbGlua19yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0MztzdGF0aWMgaW50IG1seDVlX3VwbGlua19yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LVx1MDAzZW5ldGRldjtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuQEAgLTEzNTcsNiAmIzQzOzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBoYXJkd2FyZSBkcml2ZXIgKHNwZWNpZmljYWxseSB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZSkuIFNpbmNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU3OTJkZDA1MWIwMzVkMTRiZmRiNTViOGRiNjQ2MjNmYzg0YjhiYjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDIxOjQwOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaAppbmRleCAyMjcwZTJlNTUwZGQ5ZS4uM2NjNzI4M2I2MjE1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oCkBAIC0xMDE2LDcgJiM0MzsxMDE2LDcgQEAgc3RydWN0IG1seDVlX3Byb2ZpbGUgewogCXZvaWQJKCpjbGVhbnVwX3J4KShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiAJaW50CSgqaW5pdF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogCXZvaWQJKCpjbGVhbnVwX3R4KShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7Ci0Jdm9pZAkoKmVuYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwomIzQzOwlpbnQJKCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIAl2b2lkCSgqZGlzYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogCWludAkoKnVwZGF0ZV9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogCXZvaWQJKCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmgKaW5kZXggMDkxYjgwYTY3MTg5ZGQuLjQ5NzNmYjQ3M2ZmMDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaApAQCAtODgsMTMgJiM0Mzs4OCwxOCBAQCBlbnVtIHsKICNpZmRlZiBDT05GSUdfTUxYNV9FTl9BUkZTCiAJTUxYNUVfQVJGU19GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCAmIzQzOyAxLAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9JUFNFQykgfHwgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01MWDVfRU5fSVBTRUMpCiAJTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0xFVkVMID0gTUxYNUVfSU5ORVJfVFRDX0ZUX0xFVkVMICYjNDM7IDEsCiAJTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0VSUl9MRVZFTCwKIAlNTFg1RV9BQ0NFTF9GU19QT0xfRlRfTEVWRUwsCiAJTUxYNUVfQUNDRUxfRlNfUE9MX01JU1NfRlRfTEVWRUwsCiAJTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX1JPQ0VfTEVWRUwsCiAjZW5kaWYKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApCiYjNDM7CU1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCAmIzQzOyAxLAomIzQzOwlNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMLAomIzQzOwlNTFg1RV9BQ0NFTF9GU19QU1BfUlhfRlRfTEVWRUwsCiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgbWx4NWVfZmxvd19zdGVlcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmgKaW5kZXggYjUyNmIzODk4YzIyZTAuLjNmMjEyZTQ2ZmMyZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaApAQCAtMjIwLDE4ICYjNDM7MjIwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLAogCiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewotCWludCBlcnI7Ci0KLQllcnIgPSBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhwcml2KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG1seDVlX2t0bHNfaW5pdF9yeChwcml2KTsKLQlpZiAoZXJyKQotCQltbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTsKLQotb3V0OgotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQpAQCAtMjQyLDEyICYjNDM7MjMxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAKIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHByaXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAlyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMKaW5kZXggZDlhZGI5OTNlNjRkOTUuLjczYjIzMjM3OTI2M2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jCkBAIC0yMSw1MSAmIzQzOzIxLDUyIEBAIGVudW0gYWNjZWxfcHNwX3N5bmRyb21lIHsKIAlQU1BfQkFEX1RSQUlMRVIsCiB9OwogCi1zdHJ1Y3QgbWx4NWVfcHNwX3R4IHsKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHsKIAlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnM7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiAJc3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7Ci0Jc3RydWN0IG11dGV4IG11dGV4OyAvKiBQcm90ZWN0IFBTUCBUWCBzdGVlcmluZyAqLwotCXUzMiByZWZjbnQ7Ci0Jc3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7CiB9OwogCi1zdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciB7CiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSB7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmRyb3BfZ3JvdXA7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmF1dGhfZmFpbF9ydWxlOwogCXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICplcnJfcnVsZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYmFkX3J1bGU7Ci0Jc3RydWN0IG1seDVfbW9kaWZ5X2hkciAqY29weV9tb2RpZnlfaGRyOwogfTsKIAotc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90IHsKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgewogCXN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0OwogCXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKm1pc3NfcnVsZTsKIAlzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpyeF9tb2RpZnlfaGRyOwotCXN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVmYXVsdF9kZXN0OwotCXN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHJ4X2VycjsKLQl1MzIgcmVmY250OwotCXN0cnVjdCBtdXRleCBwcm90X211dGV4OyAvKiBwcm90ZWN0IEVTUDQvRVNQNiBwcm90b2NvbCAqLwotCXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpkZWZfcnVsZTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiB9OwogCi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwIHsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgZnNfcHJvdFtBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTsKLQlzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjsKLQlzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7Ci0Jc3RydWN0IG1seDVfZmMgKnJ4X2Vycl9jb3VudGVyOwotCXN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjsKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHsKJiM0MzsJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1ZHBfcnVsZXNbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107CiB9OwogCiBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldjsKLQlzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mczsKLQkvKiBSeCBtYW5hZ2UgKi8KJiM0MzsJc3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUgdHg7CiYjNDM7CiYjNDM7CS8qIFJ4ICovCiAJc3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmcgKmZzOwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKnJ4X2ZzOwomIzQzOwlzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjsKJiM0MzsJc3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyOwomIzQzOwlzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7CiYjNDM7CXN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjsKJiM0MzsKJiM0MzsJc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIGRlY3J5cHRbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfcnhfdGFibGUgcng7CiB9OwogCiAvKiBQU1AgUlggZmxvdyBzdGVlcmluZyAqLwpAQCAtNzcsNDQgJiM0Mzs3OCwyMDAgQEAgc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpCiAJcmV0dXJuIE1MWDVfVFRfSVBWNl9VRFA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9lcnJfZGVsX3J1bGVzKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAotCQkJCQkgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpCiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAomIzQzOwkJCQkgIHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciAqZnRfYXR0ciwKJiM0MzsJCQkJICBzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqZnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtJmd0O2ZzLCBmYWxzZSk7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwkqZnQgPSBtbHg1X2NyZWF0ZV9hdXRvX2dyb3VwZWRfZmxvd190YWJsZShucywgZnRfYXR0cik7CiYjNDM7CWlmIChJU19FUlIoKmZ0KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUigqZnQpOwomIzQzOwkJKmZ0ID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqdGFibGUpCiB7Ci0JaWYgKHJ4X2Vyci0mZ3Q7YmFkX3J1bGUpIHsKLQkJbWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItJmd0O2JhZF9ydWxlKTsKLQkJcnhfZXJyLSZndDtiYWRfcnVsZSA9IE5VTEw7CiYjNDM7CWlmICgqdGFibGUpIHsKJiM0MzsJCW1seDVfZGVzdHJveV9mbG93X3RhYmxlKCp0YWJsZSk7CiYjNDM7CQkqdGFibGUgPSBOVUxMOwogCX0KJiM0Mzt9CiAKLQlpZiAocnhfZXJyLSZndDtlcnJfcnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7ZXJyX3J1bGUpOwotCQlyeF9lcnItJmd0O2Vycl9ydWxlID0gTlVMTDsKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpCiYjNDM7ewomIzQzOwlpZiAoKnJ1bGUpIHsKJiM0MzsJCW1seDVfZGVsX2Zsb3dfcnVsZXMoKnJ1bGUpOwomIzQzOwkJKnJ1bGUgPSBOVUxMOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cCkKJiM0Mzt7CiYjNDM7CWludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pOwomIzQzOwl1MzIgKmluID0ga3Z6YWxsb2MoaW5sZW4sIEdGUF9LRVJORUwpOwomIzQzOwlpbnQgZXJyID0gMDsKIAotCWlmIChyeF9lcnItJmd0O2F1dGhfZmFpbF9ydWxlKSB7Ci0JCW1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLSZndDthdXRoX2ZhaWxfcnVsZSk7Ci0JCXJ4X2Vyci0mZ3Q7YXV0aF9mYWlsX3J1bGUgPSBOVUxMOwomIzQzOwlpZiAoIWluKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CU1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBpbiwgc3RhcnRfZmxvd19pbmRleCwgZnQtJmd0O21heF9mdGUgLSAxKTsKJiM0MzsJTUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGluLCBlbmRfZmxvd19pbmRleCwgZnQtJmd0O21heF9mdGUgLSAxKTsKJiM0MzsJKmdyb3VwID0gbWx4NV9jcmVhdGVfZmxvd19ncm91cChmdCwgaW4pOwomIzQzOwlpZiAoSVNfRVJSKCpncm91cCkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoKmdyb3VwKTsKJiM0MzsJCSpncm91cCA9IE5VTEw7CiAJfQomIzQzOwlrdmZyZWUoaW4pOwogCi0JaWYgKHJ4X2Vyci0mZ3Q7cnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7cnVsZSk7Ci0JCXJ4X2Vyci0mZ3Q7cnVsZSA9IE5VTEw7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKQomIzQzO3sKJiM0MzsJaWYgKCpncm91cCkgewomIzQzOwkJbWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoKmdyb3VwKTsKJiM0MzsJCSpncm91cCA9IE5VTEw7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKQomIzQzO3sKJiM0MzsJKmNvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShkZXYsIGZhbHNlKTsKJiM0MzsJaWYgKElTX0VSUigqY291bnRlcikpIHsKJiM0MzsJCWludCBlcnIgPSBQVFJfRVJSKCpjb3VudGVyKTsKJiM0MzsKJiM0MzsJCSpjb3VudGVyID0gTlVMTDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogCi0JaWYgKHJ4X2Vyci0mZ3Q7Y29weV9tb2RpZnlfaGRyKSB7Ci0JCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCByeF9lcnItJmd0O2NvcHlfbW9kaWZ5X2hkcik7Ci0JCXJ4X2Vyci0mZ3Q7Y29weV9tb2RpZnlfaGRyID0gTlVMTDsKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsCiYjNDM7CQkJCQkgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKQomIzQzO3sKJiM0MzsJaWYgKCpjb3VudGVyKSB7CiYjNDM7CQltbHg1X2ZjX2Rlc3Ryb3koZGV2LCAqY291bnRlcik7CiYjNDM7CQkqY291bnRlciA9IE5VTEw7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCi0JCQkJCSAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpCiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KQomIzQzOwkJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtyeC0mZ3Q7dWRwX3J1bGVzW2ldKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtyeC0mZ3Q7bWlzc19ydWxlKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cCgmYW1wO3J4LSZndDttaXNzX2dyb3VwKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoJmFtcDtyeC0mZ3Q7ZnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpCiB7Ci0JYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZWxfcnVsZXMoZnMsIHJ4X2Vycik7CiYjNDM7CXN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtJmd0O21kZXY7CiYjNDM7CU1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlOwomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiYjNDM7CWludCBpLCBlcnIgPSAwOwomIzQzOwomIzQzOwlzcGVjID0ga3phbGxvY19vYmooKnNwZWMpOwomIzQzOwlpZiAoIXNwZWMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZnRfYXR0ci5tYXhfZnRlID0gMSAmIzQzOyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOwomIzQzOwlmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMOwomIzQzOwlmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTzsKJiM0MzsJZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7cngtJmd0O2Z0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmdCBlcnI9JWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwomIzQzOwl9CiAKLQlpZiAocnhfZXJyLSZndDtmdCkgewotCQltbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShyeF9lcnItJmd0O2Z0KTsKLQkJcnhfZXJyLSZndDtmdCA9IE5VTEw7CiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChyeC0mZ3Q7ZnQsICZhbXA7cngtJmd0O21pc3NfZ3JvdXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwogCX0KJiM0MzsKJiM0MzsJLyogQWRkIG1pc3MgcnVsZSAqLwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfAomIzQzOwkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwomIzQzOwlmbG93X2FjdC5mbGFncyA9IEZMT1dfQUNUX0lHTk9SRV9GTE9XX0xFVkVMOwomIzQzOwlkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwomIzQzOwlkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTsKJiM0MzsJZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKJiM0MzsJZGVzdFsxXS5jb3VudGVyID0gZnMtJmd0O3J4X2NvdW50ZXI7CiYjNDM7CXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4LSZndDtmdCwgTlVMTCwgJmFtcDtmbG93X2FjdCwgZGVzdCwgMik7CiYjNDM7CWlmIChJU19FUlIocnVsZSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIocnVsZSk7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IHJ1bGUsIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgZXJyKTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsJfQomIzQzOwlyeC0mZ3Q7bWlzc19ydWxlID0gcnVsZTsKJiM0MzsKJiM0MzsJLyogQWRkIFVEUCB2NC92NiBydWxlcyAqLwomIzQzOwlzcGVjLSZndDttYXRjaF9jcml0ZXJpYV9lbmFibGUgPSBNTFg1X01BVENIX09VVEVSX0hFQURFUlM7CiYjNDM7CU1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3BhcmFtLCBzcGVjLSZndDttYXRjaF9jcml0ZXJpYSwKJiM0MzsJCQkgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uKTsKJiM0MzsJTUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtJmd0O21hdGNoX2NyaXRlcmlhLAomIzQzOwkJCSBpcF9wcm90b2NvbCk7CiYjNDM7CU1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy0mZ3Q7bWF0Y2hfdmFsdWUsIGlwX3Byb3RvY29sLAomIzQzOwkJIElQUFJPVE9fVURQKTsKJiM0MzsJZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKJiM0MzsJCU1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDsKJiM0MzsJZmxvd19hY3QuZmxhZ3MgPSAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCB2ZXJzaW9uID0gaSA9PSBBQ0NFTF9GU19QU1A0ID8gNCA6IDY7CiYjNDM7CiYjNDM7CQlNTFg1X1NFVChmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtJmd0O21hdGNoX3ZhbHVlLAomIzQzOwkJCSBvdXRlcl9oZWFkZXJzLmlwX3ZlcnNpb24sIHZlcnNpb24pOwomIzQzOwkJZGVzdFswXSA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKJiM0MzsJCWRlc3RbMV0uY291bnRlciA9IGZzLSZndDtyeF9jb3VudGVyOwomIzQzOwkJcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocngtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZXN0LAomIzQzOwkJCQkJICAgMik7CiYjNDM7CQlpZiAoSVNfRVJSKHJ1bGUpKSB7CiYjNDM7CQkJZXJyID0gUFRSX0VSUihydWxlKTsKJiM0MzsJCQltbHg1X2NvcmVfZXJyKG1kZXYsCiYjNDM7CQkJCSAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IFVEUCVkIHJ1bGUgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkJICAgICAgdmVyc2lvbiwgZXJyKTsKJiM0MzsJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQl9CiYjNDM7CQlyeC0mZ3Q7dWRwX3J1bGVzW2ldID0gcnVsZTsKJiM0MzsJfQomIzQzOwlnb3RvIG91dF9zcGVjOwomIzQzOwomIzQzO291dF9lcnI6CiYjNDM7CWFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTsKJiM0MztvdXRfc3BlYzoKJiM0MzsJa3ZmcmVlKHNwZWMpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMKJiM0Mzt2b2lkIGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgKmNoZWNrKQomIzQzO3sKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtjaGVjay0mZ3Q7YmFkX3J1bGUpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZSgmYW1wO2NoZWNrLSZndDtlcnJfcnVsZSk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKCZhbXA7Y2hlY2stJmd0O2F1dGhfZmFpbF9ydWxlKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtjaGVjay0mZ3Q7cnVsZSk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoJmFtcDtjaGVjay0mZ3Q7ZHJvcF9ncm91cCk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KCZhbXA7Y2hlY2stJmd0O2Z0KTsKIH0KIAogc3RhdGljIHZvaWQgYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYywKQEAgLTEyOSwxNSAmIzQzOzI4NiwzNSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLAogCU1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbWlzYzIsIG1pc2NfcGFyYW1zXzIsIHBzcF9zeW5kcm9tZSwgc3luZHJvbWUpOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9lcnJfYWRkX3J1bGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCi0JCQkJCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdCwKLQkJCQkJc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycikKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LAomIzQzOwkJCQkgICBzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsCiYjNDM7CQkJCSAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLAomIzQzOwkJCQkgICBzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpCiB7Ci0JdTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8CiYjNDM7CQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7CiYjNDM7CWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7CiYjNDM7CWRlc3QuY291bnRlciA9IGNvdW50ZXI7CiYjNDM7CSpydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKJiM0MzsJaWYgKElTX0VSUigqcnVsZSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoKnJ1bGUpOwomIzQzOwkJKnJ1bGUgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYwomIzQzO2ludCBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAomIzQzOwkJCQkgICAgc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9OwomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLSZndDttZGV2OwotCXN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdFsyXTsKIAlzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9OwotCXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmZ0ZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiAJaW50IGVyciA9IDA7CkBAIC0xNDYsMTc0ICYjNDM7MzIzLDk3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogQWN0aW9uIHRvIGNvcHkgNyBiaXQgcHNwX3N5bmRyb21lIHRvIHJlZ0JbMjM6MjldICovCi0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfQ09QWSk7Ci0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfU1lORFJPTUUpOwotCU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19vZmZzZXQsIDApOwotCU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgNyk7Ci0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7Ci0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMjMpOwomIzQzOwlmdF9hdHRyLm1heF9mdGUgPSA0OwomIzQzOwlmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7CiYjNDM7CWZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMjsKJiM0MzsJZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUw7CiYjNDM7CWZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7Y2hlY2stJmd0O2Z0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2Vycihmcy0mZ3Q7bWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBmdCBlcnI9JWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwomIzQzOwl9CiAKLQltb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLAotCQkJCQkgICAgICAxLCBhY3Rpb24pOwotCWlmIChJU19FUlIobW9kaWZ5X2hkcikpIHsKLQkJZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LAotCQkJICAgICAgJiMzNDtmYWlsIHRvIGFsbG9jIHBzcCBjb3B5IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXG4mIzM0OywgZXJyKTsKLQkJZ290byBvdXRfc3BlYzsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGNoZWNrLSZndDtmdCwgJmFtcDtjaGVjay0mZ3Q7ZHJvcF9ncm91cCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1seDVfY29yZV9lcnIoZnMtJmd0O21kZXYsCiYjNDM7CQkJICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggY2hlY2sgZHJvcCBncm91cCBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQogCiAJYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9PSyk7CiAJLyogY3JlYXRlIGZ0ZSAqLwotCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwotCWZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyOwotCWRlc3RbMF0udHlwZSA9IGZzX3Byb3QtJmd0O2RlZmF1bHRfZGVzdC50eXBlOwotCWRlc3RbMF0uZnQgPSBmc19wcm90LSZndDtkZWZhdWx0X2Rlc3QuZnQ7Ci0JZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKLQlkZXN0WzFdLmNvdW50ZXIgPSBmcy0mZ3Q7cnhfZnMtJmd0O3J4X2NvdW50ZXI7Ci0JZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZXN0LCAyKTsKJiM0MzsJZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUOwomIzQzOwlkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwomIzQzOwlkZXN0LmZ0ID0gZnMtJmd0O3J4LmZ0OwomIzQzOwlmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGNoZWNrLSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKIAlpZiAoSVNfRVJSKGZ0ZSkpIHsKIAkJZXJyID0gUFRSX0VSUihmdGUpOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGVyciBjb3B5IHJ1bGUgZXJyPSVkXG4mIzM0OywgZXJyKTsKLQkJZ290byBvdXQ7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIG9rIHJ1bGUgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwogCX0KLQlyeF9lcnItJmd0O3J1bGUgPSBmdGU7CiYjNDM7CWNoZWNrLSZndDtydWxlID0gZnRlOwogCiAJLyogYWRkIGF1dGggZmFpbCBkcm9wIHJ1bGUgKi8KIAltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7Ci0JbWVtc2V0KCZhbXA7Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpOwogCWFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfSUNWX0ZBSUwpOwotCS8qIGNyZWF0ZSBmdGUgKi8KLQlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8Ci0JCQkgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDsKLQlkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSOwotCWRlc3RbMF0uY291bnRlciA9IGZzLSZndDtyeF9mcy0mZ3Q7cnhfYXV0aF9mYWlsX2NvdW50ZXI7Ci0JZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZXN0LCAxKTsKLQlpZiAoSVNfRVJSKGZ0ZSkpIHsKLQkJZXJyID0gUFRSX0VSUihmdGUpOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXG4mIzM0OywKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoY2hlY2stJmd0O2Z0LCBzcGVjLAomIzQzOwkJCQkgICAgICBmcy0mZ3Q7cnhfYXV0aF9mYWlsX2NvdW50ZXIsCiYjNDM7CQkJCSAgICAgICZhbXA7Y2hlY2stJmd0O2F1dGhfZmFpbF9ydWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXG4mIzM0OywKIAkJCSAgICAgIGVycik7Ci0JCWdvdG8gb3V0X2Ryb3BfcnVsZTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKIAl9Ci0JcnhfZXJyLSZndDthdXRoX2ZhaWxfcnVsZSA9IGZ0ZTsKIAogCS8qIGFkZCBmcmFtaW5nIGRyb3AgcnVsZSAqLwogCW1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTsKLQltZW1zZXQoJmFtcDtmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7CiAJYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9CQURfVFJBSUxFUik7Ci0JLyogY3JlYXRlIGZ0ZSAqLwotCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwotCWRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7Ci0JZGVzdFswXS5jb3VudGVyID0gZnMtJmd0O3J4X2ZzLSZndDtyeF9lcnJfY291bnRlcjsKLQlmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7ZnQsIHNwZWMsICZhbXA7Zmxvd19hY3QsIGRlc3QsIDEpOwotCWlmIChJU19FUlIoZnRlKSkgewotCQllcnIgPSBQVFJfRVJSKGZ0ZSk7Ci0JCW1seDVfY29yZV9lcnIobWRldiwgJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggZnJhbWluZyBlcnIgZHJvcCBydWxlIGVycj0lZFxuJiMzNDssCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLSZndDtmdCwgc3BlYywgZnMtJmd0O3J4X2Vycl9jb3VudGVyLAomIzQzOwkJCQkgICAgICAmYW1wO2NoZWNrLSZndDtlcnJfcnVsZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBmcmFtaW5nIGRyb3AgcnVsZSBlcnI9JWRcbiYjMzQ7LAogCQkJICAgICAgZXJyKTsKLQkJZ290byBvdXRfZHJvcF9hdXRoX2ZhaWxfcnVsZTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKIAl9Ci0JcnhfZXJyLSZndDtlcnJfcnVsZSA9IGZ0ZTsKIAogCS8qIGFkZCBtaXNjLiBlcnJvcnMgZHJvcCBydWxlICovCiAJbWVtc2V0KHNwZWMsIDAsIHNpemVvZigqc3BlYykpOwotCW1lbXNldCgmYW1wO2Zsb3dfYWN0LCAwLCBzaXplb2YoZmxvd19hY3QpKTsKLQkvKiBjcmVhdGUgZnRlICovCi0JZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfAotCQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7Ci0JZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKLQlkZXN0WzBdLmNvdW50ZXIgPSBmcy0mZ3Q7cnhfZnMtJmd0O3J4X2JhZF9jb3VudGVyOwotCWZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgZGVzdCwgMSk7Ci0JaWYgKElTX0VSUihmdGUpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZnRlKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBtaXNjLiBlcnIgZHJvcCBydWxlIGVycj0lZFxuJiMzNDssCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLSZndDtmdCwgc3BlYywgZnMtJmd0O3J4X2JhZF9jb3VudGVyLAomIzQzOwkJCQkgICAgICAmYW1wO2NoZWNrLSZndDtiYWRfcnVsZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBtaXNjLiBlcnIgZHJvcCBydWxlIGVycj0lZFxuJiMzNDssCiAJCQkgICAgICBlcnIpOwotCQlnb3RvIG91dF9kcm9wX2Vycm9yX3J1bGU7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQotCXJ4X2Vyci0mZ3Q7YmFkX3J1bGUgPSBmdGU7Ci0KLQlyeF9lcnItJmd0O2NvcHlfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiAKIAlnb3RvIG91dF9zcGVjOwogCi1vdXRfZHJvcF9lcnJvcl9ydWxlOgotCW1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLSZndDtlcnJfcnVsZSk7Ci0JcnhfZXJyLSZndDtlcnJfcnVsZSA9IE5VTEw7Ci1vdXRfZHJvcF9hdXRoX2ZhaWxfcnVsZToKLQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7YXV0aF9mYWlsX3J1bGUpOwotCXJ4X2Vyci0mZ3Q7YXV0aF9mYWlsX3J1bGUgPSBOVUxMOwotb3V0X2Ryb3BfcnVsZToKLQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7cnVsZSk7Ci0JcnhfZXJyLSZndDtydWxlID0gTlVMTDsKLW91dDoKLQltbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhtZGV2LCBtb2RpZnlfaGRyKTsKJiM0MztvdXRfZXJyOgomIzQzOwlhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShjaGVjayk7CiBvdXRfc3BlYzoKIAlrZnJlZShzcGVjKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9lcnJfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAotCQkJCQkgc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90LAotCQkJCQkgc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycikKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdCkKIHsKLQlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtJmd0O2ZzLCBmYWxzZSk7Ci0Jc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKLQlzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDsKLQlpbnQgZXJyOwotCi0JZnRfYXR0ci5tYXhfZnRlID0gMjsKLQlmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDI7Ci0JZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9FUlJfTEVWRUw7IC8vIE1MWDVFX0FDQ0VMX0ZTX1RDUF9GVF9MRVZFTAotCWZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPOwotCWZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsICZhbXA7ZnRfYXR0cik7Ci0JaWYgKElTX0VSUihmdCkpIHsKLQkJZXJyID0gUFRSX0VSUihmdCk7Ci0JCW1seDVfY29yZV9lcnIoZnMtJmd0O21kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGlubGluZSBmdCBlcnI9JWRcbiYjMzQ7LCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXJ4X2Vyci0mZ3Q7ZnQgPSBmdDsKLQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKGZzLCBmc19wcm90LCByeF9lcnIpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2VycjsKLQotCXJldHVybiAwOwotCi1vdXRfZXJyOgotCW1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZ0KTsKLQlyeF9lcnItJmd0O2Z0ID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKLQkJCQkgICAgICAgc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90KQotewotCWlmIChmc19wcm90LSZndDtkZWZfcnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtJmd0O2RlZl9ydWxlKTsKLQkJZnNfcHJvdC0mZ3Q7ZGVmX3J1bGUgPSBOVUxMOwotCX0KLQotCWlmIChmc19wcm90LSZndDtyeF9tb2RpZnlfaGRyKSB7Ci0JCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCBmc19wcm90LSZndDtyeF9tb2RpZnlfaGRyKTsKLQkJZnNfcHJvdC0mZ3Q7cnhfbW9kaWZ5X2hkciA9IE5VTEw7Ci0JfQotCi0JaWYgKGZzX3Byb3QtJmd0O21pc3NfcnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtJmd0O21pc3NfcnVsZSk7Ci0JCWZzX3Byb3QtJmd0O21pc3NfcnVsZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGZzX3Byb3QtJmd0O21pc3NfZ3JvdXApIHsKLQkJbWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoZnNfcHJvdC0mZ3Q7bWlzc19ncm91cCk7Ci0JCWZzX3Byb3QtJmd0O21pc3NfZ3JvdXAgPSBOVUxMOwotCX0KLQotCWlmIChmc19wcm90LSZndDtmdCkgewotCQltbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShmc19wcm90LSZndDtmdCk7Ci0JCWZzX3Byb3QtJmd0O2Z0ID0gTlVMTDsKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtkZWNyeXB0LSZndDtydWxlKTsKJiM0MzsJaWYgKGRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIpIHsKJiM0MzsJCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCBkZWNyeXB0LSZndDtyeF9tb2RpZnlfaGRyKTsKJiM0MzsJCWRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIgPSBOVUxMOwogCX0KJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtkZWNyeXB0LSZndDttaXNzX3J1bGUpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKCZhbXA7ZGVjcnlwdC0mZ3Q7bWlzc19ncm91cCk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KCZhbXA7ZGVjcnlwdC0mZ3Q7ZnQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydCkKQEAgLTMyNSw3MCAmIzQzOzQyNSw2NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydCkKIAlNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtJmd0O21hdGNoX3ZhbHVlLCBpcF9wcm90b2NvbCwgSVBQUk9UT19VRFApOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCi0JCQkJICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpCiYjNDM7c3RhdGljIGludAomIzQzO2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKJiM0MzsJCQkJICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQsCiYjNDM7CQkJCSAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KQogewotCXN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucyA9IG1seDVlX2ZzX2dldF9ucyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKIAl1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9OwotCWludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pOwogCXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHIgPSBOVUxMOwogCXN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307CiAJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307CiAJc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy0mZ3Q7bWRldjsKLQlzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwOwogCU1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiAJc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjOwotCXN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0OwotCXUzMiAqZmxvd19ncm91cF9pbjsKIAlpbnQgZXJyID0gMDsKIAotCWZsb3dfZ3JvdXBfaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7CiAJc3BlYyA9IGt2emFsbG9jX29iaigqc3BlYyk7Ci0JaWYgKCFmbG93X2dyb3VwX2luIHx8ICFzcGVjKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJaWYgKCFzcGVjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBDcmVhdGUgRlQgKi8KIAlmdF9hdHRyLm1heF9mdGUgPSAyOwotCWZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUw7Ci0JZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87CiYjNDM7CWZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUw7CiAJZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxOwogCWZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMTsKLQlmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCAmYW1wO2Z0X2F0dHIpOwotCWlmIChJU19FUlIoZnQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZnQpOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxuJiMzNDssIGVycik7CiYjNDM7CWZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7ZGVjcnlwdC0mZ3Q7ZnQpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgZnQgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQotCWZzX3Byb3QtJmd0O2Z0ID0gZnQ7CiAKIAkvKiBDcmVhdGUgbWlzc19ncm91cCAqLwotCU1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBzdGFydF9mbG93X2luZGV4LCBmdC0mZ3Q7bWF4X2Z0ZSAtIDEpOwotCU1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBlbmRfZmxvd19pbmRleCwgZnQtJmd0O21heF9mdGUgLSAxKTsKLQltaXNzX2dyb3VwID0gbWx4NV9jcmVhdGVfZmxvd19ncm91cChmdCwgZmxvd19ncm91cF9pbik7Ci0JaWYgKElTX0VSUihtaXNzX2dyb3VwKSkgewotCQllcnIgPSBQVFJfRVJSKG1pc3NfZ3JvdXApOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXG4mIzM0OywgZXJyKTsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGRlY3J5cHQtJmd0O2Z0LCAmYW1wO2RlY3J5cHQtJmd0O21pc3NfZ3JvdXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsCiYjNDM7CQkJICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZGVjcnlwdCBtaXNzX2dyb3VwIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgZXJyKTsKIAkJZ290byBvdXRfZXJyOwogCX0KLQlmc19wcm90LSZndDttaXNzX2dyb3VwID0gbWlzc19ncm91cDsKIAogCS8qIENyZWF0ZSBtaXNzIHJ1bGUgKi8KLQlydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtmc19wcm90LSZndDtkZWZhdWx0X2Rlc3QsIDEpOwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7CiYjNDM7CXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZWZhdWx0X2Rlc3QsCiYjNDM7CQkJCSAgIDEpOwogCWlmIChJU19FUlIocnVsZSkpIHsKIAkJZXJyID0gUFRSX0VSUihydWxlKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX3J1bGUgZXJyPSVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfcnVsZSBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiAJCWdvdG8gb3V0X2VycjsKIAl9Ci0JZnNfcHJvdC0mZ3Q7bWlzc19ydWxlID0gcnVsZTsKJiM0MzsJZGVjcnlwdC0mZ3Q7bWlzc19ydWxlID0gcnVsZTsKIAotCS8qIEFkZCBkZWZhdWx0IFJ4IHBzcCBydWxlICovCiYjNDM7CS8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovCiAJc2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpOwogCWZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQOwogCS8qIFNldCBiaXRbMzEsIDMwXSBQU1AgbWFya2VyICovCi0JLyogU2V0IGJpdFsyOS0yM10gcHNwX3N5bmRyb21lIGlzIHNldCBpbiBlcnJvciBGVCAqLwogI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpCiAJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpOwogCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTsKQEAgLTQwMywyNzUgJiM0Mzs0OTcsMTU5IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAkJbW9kaWZ5X2hkciA9IE5VTEw7CiAJCWdvdG8gb3V0X2VycjsKIAl9Ci0JZnNfcHJvdC0mZ3Q7cnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiYjNDM7CWRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyOwogCiAJZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHwKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFI7CiAJZmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiAJZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTsKLQlkZXN0LmZ0ID0gZnNfcHJvdC0mZ3Q7cnhfZXJyLmZ0OwotCXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZzX3Byb3QtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCAmYW1wO2Rlc3QsIDEpOwomIzQzOwlkZXN0LmZ0ID0gZnMtJmd0O2NoZWNrLmZ0OwomIzQzOwlydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKIAlpZiAoSVNfRVJSKHJ1bGUpKSB7CiAJCWVyciA9IFBUUl9FUlIocnVsZSk7Ci0JCW1seDVfY29yZV9lcnIobWRldiwKLQkJCSAgICAgICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxuJiMzNDssCi0JCQkgICAgICBlcnIsIGZsb3dfYWN0LmFjdGlvbik7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGRlY3J5cHQgcnVsZSwgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCi0JZnNfcHJvdC0mZ3Q7ZGVmX3J1bGUgPSBydWxlOwotCWdvdG8gb3V0OwomIzQzOwlkZWNyeXB0LSZndDtydWxlID0gcnVsZTsKJiM0MzsJZ290byBvdXRfc3BlYzsKIAogb3V0X2VycjoKLQlhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShmcywgZnNfcHJvdCk7Ci1vdXQ6Ci0Ja3ZmcmVlKGZsb3dfZ3JvdXBfaW4pOwomIzQzOwlhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KGZzLCBkZWNyeXB0KTsKJiM0MztvdXRfc3BlYzoKIAlrdmZyZWUoc3BlYyk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogewotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7Ci0KLQlhY2NlbF9wc3AgPSBmcy0mZ3Q7cnhfZnM7Ci0KLQkvKiBUaGUgbmV0ZGV2IHVucmVnIGFscmVhZHkgaGFwcGVuZWQsIHNvIGFsbCBvZmZsb2FkZWQgcnVsZSBhcmUgYWxyZWFkeSByZW1vdmVkICovCi0JZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W3R5cGVdOwotCi0JYWNjZWxfcHNwX2ZzX3J4X2ZzX2Rlc3Ryb3koZnMsIGZzX3Byb3QpOwotCi0JYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KGZzLCAmYW1wO2ZzX3Byb3QtJmd0O3J4X2Vycik7CiYjNDM7CXN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKJiM0MzsJaW50IGk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJLyogZGlzY29ubmVjdCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgJmFtcDtmcy0mZ3Q7ZGVjcnlwdFtpXSk7CiYjNDM7CX0KJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7Y2hlY2spOwomIzQzOwlhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveSgmYW1wO2ZzLSZndDtyeCk7CiB9CiAKLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKQomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGMgPSBtbHg1ZV9mc19nZXRfdHRjKGZzLSZndDtmcywgZmFsc2UpOwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7Ci0JaW50IGVycjsKLQotCWFjY2VsX3BzcCA9IGZzLSZndDtyeF9mczsKLQlmc19wcm90ID0gJmFtcDthY2NlbF9wc3AtJmd0O2ZzX3Byb3RbdHlwZV07CiYjNDM7CWludCBpLCBlcnI7CiAKLQlmc19wcm90LSZndDtkZWZhdWx0X2Rlc3QgPSBtbHg1X3R0Y19nZXRfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KHR5cGUpKTsKLQotCWVyciA9IGFjY2VsX3BzcF9mc19yeF9lcnJfY3JlYXRlX2Z0KGZzLCBmc19wcm90LCAmYW1wO2ZzX3Byb3QtJmd0O3J4X2Vycik7Ci0JaWYgKGVycikKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Z0X2NyZWF0ZShmcywgJmFtcDtmcy0mZ3Q7cngpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlJiMzNDspOwogCQlyZXR1cm4gZXJyOwomIzQzOwl9CiAKLQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTsKLQlpZiAoZXJyKQotCQlhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoZnMsICZhbXA7ZnNfcHJvdC0mZ3Q7cnhfZXJyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKQotewotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDsKLQlzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7Ci0Jc3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGM7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoIWZzIHx8ICFmcy0mZ3Q7cnhfZnMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKLQlhY2NlbF9wc3AgPSBmcy0mZ3Q7cnhfZnM7Ci0JZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W3R5cGVdOwotCW11dGV4X2xvY2soJmFtcDtmc19wcm90LSZndDtwcm90X211dGV4KTsKLQlpZiAoZnNfcHJvdC0mZ3Q7cmVmY250JiM0MzsmIzQzOykKLQkJZ290byBvdXQ7Ci0KLQkvKiBjcmVhdGUgRlQgKi8KLQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKGZzLCB0eXBlKTsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShmcywgJmFtcDtmcy0mZ3Q7Y2hlY2spOwogCWlmIChlcnIpIHsKLQkJZnNfcHJvdC0mZ3Q7cmVmY250LS07Ci0JCWdvdG8gb3V0OwomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O0ZhaWxlZCBjcmVhdGluZyBSWCBjaGVjayBzdGVlcmluZyB0YWJsZSYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX2Z0OwogCX0KIAotCS8qIGNvbm5lY3QgKi8KLQlkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwotCWRlc3QuZnQgPSBmc19wcm90LSZndDtmdDsKLQltbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSwgJmFtcDtkZXN0KTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmYW1wO2ZzX3Byb3QtJmd0O3Byb3RfbXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtJmd0O2ZzLCBmYWxzZSk7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90OwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDsKLQotCWFjY2VsX3BzcCA9IGZzLSZndDtyeF9mczsKLQlmc19wcm90ID0gJmFtcDthY2NlbF9wc3AtJmd0O2ZzX3Byb3RbdHlwZV07Ci0JbXV0ZXhfbG9jaygmYW1wO2ZzX3Byb3QtJmd0O3Byb3RfbXV0ZXgpOwotCWlmICgtLWZzX3Byb3QtJmd0O3JlZmNudCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBkaXNjb25uZWN0ICovCi0JbWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0OwomIzQzOwomIzQzOwkJZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKGZzLCAmYW1wO2ZzLSZndDtkZWNyeXB0W2ldLAomIzQzOwkJCQkJCQkmYW1wO2Rlc3QpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIGRlY3J5cHQgc3RlZXJpbmcgdGFibGUmIzM0Oyk7CiYjNDM7CQkJZ290byBlcnJfZGVjcnlwdF9mdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7CiYjNDM7CQlkZXN0LmZ0ID0gZnMtJmd0O2RlY3J5cHRbaV0uZnQ7CiYjNDM7CQltbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSwgJmFtcDtkZXN0KTsKJiM0MzsJfQogCi0JLyogcmVtb3ZlIEZUICovCi0JYWNjZWxfcHNwX2ZzX3J4X2Rlc3Ryb3koZnMsIHR5cGUpOwomIzQzOwlyZXR1cm4gMDsKIAotb3V0OgotCW11dGV4X3VubG9jaygmYW1wO2ZzX3Byb3QtJmd0O3Byb3RfbXV0ZXgpOwomIzQzO2Vycl9kZWNyeXB0X2Z0OgomIzQzOwl3aGlsZSAoLS1pICZndDs9IDApIHsKJiM0MzsJCW1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgJmFtcDtmcy0mZ3Q7ZGVjcnlwdFtpXSk7CiYjNDM7CX0KJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7Y2hlY2spOwomIzQzO2Vycl9mdDoKJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7cngpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIHsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwOwotCWVudW0gYWNjZWxfZnNfcHNwX3R5cGUgaTsKLQotCWlmICghZnMtJmd0O3J4X2ZzKQotCQlyZXR1cm47Ci0KLQlhY2NlbF9wc3AgPSBmcy0mZ3Q7cnhfZnM7Ci0JbWx4NV9mY19kZXN0cm95KGZzLSZndDttZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2JhZF9jb3VudGVyKTsKLQltbHg1X2ZjX2Rlc3Ryb3koZnMtJmd0O21kZXYsIGFjY2VsX3BzcC0mZ3Q7cnhfZXJyX2NvdW50ZXIpOwotCW1seDVfZmNfZGVzdHJveShmcy0mZ3Q7bWRldiwgYWNjZWxfcHNwLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcik7Ci0JbWx4NV9mY19kZXN0cm95KGZzLSZndDttZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykgewotCQlmc19wcm90ID0gJmFtcDthY2NlbF9wc3AtJmd0O2ZzX3Byb3RbaV07Ci0JCW11dGV4X2Rlc3Ryb3koJmFtcDtmc19wcm90LSZndDtwcm90X211dGV4KTsKLQkJV0FSTl9PTihmc19wcm90LSZndDtyZWZjbnQpOwotCX0KLQlrZnJlZShmcy0mZ3Q7cnhfZnMpOwotCWZzLSZndDtyeF9mcyA9IE5VTEw7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtJmd0O21kZXYsICZhbXA7ZnMtJmd0O3J4X2JhZF9jb3VudGVyKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy0mZ3Q7bWRldiwgJmFtcDtmcy0mZ3Q7cnhfZXJyX2NvdW50ZXIpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLSZndDttZGV2LCAmYW1wO2ZzLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcik7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtJmd0O21kZXYsICZhbXA7ZnMtJmd0O3J4X2NvdW50ZXIpOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19pbml0X3J4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpCiB7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90OwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLSZndDttZGV2OwotCXN0cnVjdCBtbHg1X2ZjICpmbG93X2NvdW50ZXI7Ci0JZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpOwogCWludCBlcnI7CiAKLQlhY2NlbF9wc3AgPSBremFsbG9jX29iaigqYWNjZWxfcHNwKTsKLQlpZiAoIWFjY2VsX3BzcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKLQkJZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W2ldOwotCQltdXRleF9pbml0KCZhbXA7ZnNfcHJvdC0mZ3Q7cHJvdF9tdXRleCk7Ci0JfQotCi0JZmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpOwotCWlmIChJU19FUlIoZmxvd19jb3VudGVyKSkgewomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgJmFtcDtmcy0mZ3Q7cnhfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmbG93IGNvdW50ZXIgZXJyPSVwZVxuJiMzNDssCi0JCQkgICAgICAgZmxvd19jb3VudGVyKTsKLQkJZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpOwomIzQzOwkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmbG93IGNvdW50ZXIgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZXJyKTsKIAkJZ290byBvdXRfZXJyOwogCX0KLQlhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7CiAKLQlmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7Ci0JaWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7CiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCAmYW1wO2ZzLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBhdXRoIGZhaWwgZmxvdyBjb3VudGVyIGVycj0lcGVcbiYjMzQ7LAotCQkJICAgICAgIGZsb3dfY291bnRlcik7Ci0JCWVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTsKLQkJZ290byBvdXRfY291bnRlcl9lcnI7CiYjNDM7CQkJICAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZXJyKTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKIAl9Ci0JYWNjZWxfcHNwLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlciA9IGZsb3dfY291bnRlcjsKIAotCWZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTsKLQlpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsICZhbXA7ZnMtJmd0O3J4X2Vycl9jb3VudGVyKTsKJiM0MzsJaWYgKGVycikgewogCQltbHg1X2NvcmVfd2FybihtZGV2LAotCQkJICAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGVycm9yIGZsb3cgY291bnRlciBlcnI9JXBlXG4mIzM0OywKLQkJCSAgICAgICBmbG93X2NvdW50ZXIpOwotCQllcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7Ci0JCWdvdG8gb3V0X2F1dGhfZmFpbF9jb3VudGVyX2VycjsKJiM0MzsJCQkgICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQotCWFjY2VsX3BzcC0mZ3Q7cnhfZXJyX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7CiAKLQlmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7Ci0JaWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7CiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCAmYW1wO2ZzLSZndDtyeF9iYWRfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lcGVcbiYjMzQ7LAotCQkJICAgICAgIGZsb3dfY291bnRlcik7Ci0JCWVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTsKLQkJZ290byBvdXRfZXJyX2NvdW50ZXJfZXJyOwomIzQzOwkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQotCWFjY2VsX3BzcC0mZ3Q7cnhfYmFkX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7Ci0KLQlmcy0mZ3Q7cnhfZnMgPSBhY2NlbF9wc3A7CiAKIAlyZXR1cm4gMDsKIAotb3V0X2Vycl9jb3VudGVyX2VycjoKLQltbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLSZndDtyeF9lcnJfY291bnRlcik7Ci0JYWNjZWxfcHNwLSZndDtyeF9lcnJfY291bnRlciA9IE5VTEw7Ci1vdXRfYXV0aF9mYWlsX2NvdW50ZXJfZXJyOgotCW1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2F1dGhfZmFpbF9jb3VudGVyKTsKLQlhY2NlbF9wc3AtJmd0O3J4X2F1dGhfZmFpbF9jb3VudGVyID0gTlVMTDsKLW91dF9jb3VudGVyX2VycjoKLQltbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLSZndDtyeF9jb3VudGVyKTsKLQlhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIgPSBOVUxMOwogb3V0X2VycjoKLQlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKLQkJZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W2ldOwotCQltdXRleF9kZXN0cm95KCZhbXA7ZnNfcHJvdC0mZ3Q7cHJvdF9tdXRleCk7Ci0JfQotCWtmcmVlKGFjY2VsX3BzcCk7Ci0JZnMtJmd0O3J4X2ZzID0gTlVMTDsKLQomIzQzOwlhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChmcyk7CiAJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIHsKLQlpbnQgaTsKLQogCWlmICghcHJpdi0mZ3Q7cHNwKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspCi0JCWFjY2VsX3BzcF9mc19yeF9mdF9wdXQocHJpdi0mZ3Q7cHNwLSZndDtmcywgaSk7Ci19Ci0KLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmczsKLQlpbnQgZXJyLCBpOwotCi0JaWYgKCFwcml2LSZndDtwc3ApCi0JCXJldHVybiAwOwotCi0JZnMgPSBwcml2LSZndDtwc3AtJmd0O2ZzOwotCWZvciAoaSA9IDA7IGkgJmx0OyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0X2VycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2VycjoKLQlpLS07Ci0Jd2hpbGUgKGkgJmd0Oz0gMCkgewotCQlhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KGZzLCBpKTsKLQkJLS1pOwotCX0KLQotCXJldHVybiBlcnI7CiYjNDM7CW5ldGRldl9sb2NrKHByaXYtJmd0O25ldGRldik7CiYjNDM7CWFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzOwluZXRkZXZfdW5sb2NrKHByaXYtJmd0O25ldGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpCiB7CiAJaW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKQEAgLTY4MSw3ICYjNDM7NjU5LDYgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogCXUzMiAqaW4sICptYywgKm91dGVyX2hlYWRlcnNfYzsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7Ci0Jc3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnM7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiAJc3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7CiAJaW50IGVyciA9IDA7CkBAIC03MDAsOCAmIzQzOzY3Nyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAlmdF9hdHRyLmxldmVsID0gTUxYNUVfUFNQX0xFVkVMOwogCWZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMTsKIAotCXR4X2ZzID0gZnMtJmd0O3R4X2ZzOwotCWZ0ID0gbWx4NV9jcmVhdGVfZmxvd190YWJsZSh0eF9mcy0mZ3Q7bnMsICZhbXA7ZnRfYXR0cik7CiYjNDM7CWZ0ID0gbWx4NV9jcmVhdGVfZmxvd190YWJsZSh0eC0mZ3Q7bnMsICZhbXA7ZnRfYXR0cik7CiAJaWYgKElTX0VSUihmdCkpIHsKIAkJZXJyID0gUFRSX0VSUihmdCk7CiAJCW1seDVfY29yZV9lcnIobWRldiwgJiMzNDtQU1A6IGZhaWwgdG8gYWRkIHBzcCB0eCBmbG93IHRhYmxlLCBlcnIgPSAlZFxuJiMzNDssIGVycik7CkBAIC03MjcsNyAmIzQzOzcwMyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19FTkNSWVBUIHwKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwogCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7Ci0JZGVzdC5jb3VudGVyID0gdHhfZnMtJmd0O3R4X2NvdW50ZXI7CiYjNDM7CWRlc3QuY291bnRlciA9IGZzLSZndDt0eF9jb3VudGVyOwogCXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCAmYW1wO2Rlc3QsIDEpOwogCWlmIChJU19FUlIocnVsZSkpIHsKIAkJZXJyID0gUFRSX0VSUihydWxlKTsKQEAgLTczNSw5ICYjNDM7NzExLDkgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogCQlnb3RvIGVycl9hZGRfZmxvd19ydWxlOwogCX0KIAotCXR4X2ZzLSZndDtmdCA9IGZ0OwotCXR4X2ZzLSZndDtmZyA9IGZnOwotCXR4X2ZzLSZndDtydWxlID0gcnVsZTsKJiM0MzsJdHgtJmd0O2Z0ID0gZnQ7CiYjNDM7CXR4LSZndDtmZyA9IGZnOwomIzQzOwl0eC0mZ3Q7cnVsZSA9IHJ1bGU7CiAJZ290byBvdXQ7CiAKIGVycl9hZGRfZmxvd19ydWxlOgpAQCAtNzUwLDg3ICYjNDM7NzI2LDM1IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcykKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZnRfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlICp0eCkKIHsKLQlpZiAoIXR4X2ZzLSZndDtmdCkKLQkJcmV0dXJuOwotCi0JbWx4NV9kZWxfZmxvd19ydWxlcyh0eF9mcy0mZ3Q7cnVsZSk7Ci0JbWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAodHhfZnMtJmd0O2ZnKTsKLQltbHg1X2Rlc3Ryb3lfZmxvd190YWJsZSh0eF9mcy0mZ3Q7ZnQpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZSgmYW1wO3R4LSZndDtydWxlKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cCgmYW1wO3R4LSZndDtmZyk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KCZhbXA7dHgtJmd0O2Z0KTsKIH0KIAotc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogewotCXN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtJmd0O3R4X2ZzOwotCWludCBlcnIgPSAwOwotCi0JbXV0ZXhfbG9jaygmYW1wO3R4X2ZzLSZndDttdXRleCk7Ci0JaWYgKHR4X2ZzLSZndDtyZWZjbnQmIzQzOyYjNDM7KQotCQlnb3RvIG91dDsKLQotCWVyciA9IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoZnMpOwotCWlmIChlcnIpCi0JCXR4X2ZzLSZndDtyZWZjbnQtLTsKLW91dDoKLQltdXRleF91bmxvY2soJmFtcDt0eF9mcy0mZ3Q7bXV0ZXgpOwotCXJldHVybiBlcnI7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtJmd0O21kZXYsICZhbXA7ZnMtJmd0O3R4X2NvdW50ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQotewotCXN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtJmd0O3R4X2ZzOwotCi0JbXV0ZXhfbG9jaygmYW1wO3R4X2ZzLSZndDttdXRleCk7Ci0JaWYgKC0tdHhfZnMtJmd0O3JlZmNudCkKLQkJZ290byBvdXQ7Ci0KLQlhY2NlbF9wc3BfZnNfdHhfZGVzdHJveSh0eF9mcyk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7dHhfZnMtJmd0O211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHgoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpCi17Ci0Jc3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBmcy0mZ3Q7dHhfZnM7Ci0KLQlpZiAoIXR4X2ZzKQotCQlyZXR1cm47Ci0KLQltbHg1X2ZjX2Rlc3Ryb3koZnMtJmd0O21kZXYsIHR4X2ZzLSZndDt0eF9jb3VudGVyKTsKLQltdXRleF9kZXN0cm95KCZhbXA7dHhfZnMtJmd0O211dGV4KTsKLQlXQVJOX09OKHR4X2ZzLSZndDtyZWZjbnQpOwotCWtmcmVlKHR4X2ZzKTsKLQlmcy0mZ3Q7dHhfZnMgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19pbml0X3R4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpCiB7CiAJc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy0mZ3Q7bWRldjsKLQlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnM7Ci0Jc3RydWN0IG1seDVfZmMgKmZsb3dfY291bnRlcjsKLQlzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mczsKJiM0MzsJaW50IGVycjsKIAotCW5zID0gbWx4NV9nZXRfZmxvd19uYW1lc3BhY2UobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpOwotCWlmICghbnMpCiYjNDM7CWZzLSZndDt0eC5ucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsCiYjNDM7CQkJCQkgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpOwomIzQzOwlpZiAoIWZzLSZndDt0eC5ucykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JdHhfZnMgPSBremFsbG9jX29iaigqdHhfZnMpOwotCWlmICghdHhfZnMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpOwotCWlmIChJU19FUlIoZmxvd19jb3VudGVyKSkgewomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgJmFtcDtmcy0mZ3Q7dHhfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVwZVxuJiMzNDssCi0JCQkgICAgICAgZmxvd19jb3VudGVyKTsKLQkJa2ZyZWUodHhfZnMpOwotCQlyZXR1cm4gUFRSX0VSUihmbG93X2NvdW50ZXIpOwomIzQzOwkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiAJfQotCXR4X2ZzLSZndDt0eF9jb3VudGVyID0gZmxvd19jb3VudGVyOwotCW11dGV4X2luaXQoJmFtcDt0eF9mcy0mZ3Q7bXV0ZXgpOwotCXR4X2ZzLSZndDtucyA9IG5zOwotCWZzLSZndDt0eF9mcyA9IHR4X2ZzOwogCXJldHVybiAwOwogfQogCkBAIC04MzgsMzIgJiM0Mzs3NjIsMjkgQEAgc3RhdGljIHZvaWQKIG1seDVlX2FjY2VsX3BzcF9mc19nZXRfc3RhdHNfZmlsbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gcHJpdi0mZ3Q7cHNwLSZndDtmcy0mZ3Q7dHhfZnM7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzID0gcHJpdi0mZ3Q7cHNwLSZndDtmczsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtJmd0O21kZXY7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwOwotCi0JYWNjZWxfcHNwID0gKHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKilwcml2LSZndDtwc3AtJmd0O2ZzLSZndDtyeF9mczsKIAotCWlmICh0eF9mcy0mZ3Q7dHhfY291bnRlcikKLQkJbWx4NV9mY19xdWVyeShtZGV2LCB0eF9mcy0mZ3Q7dHhfY291bnRlciwgJmFtcDtzdGF0cy0mZ3Q7cHNwX3R4X3BrdHMsCiYjNDM7CWlmIChmcy0mZ3Q7dHhfY291bnRlcikKJiM0MzsJCW1seDVfZmNfcXVlcnkobWRldiwgZnMtJmd0O3R4X2NvdW50ZXIsICZhbXA7c3RhdHMtJmd0O3BzcF90eF9wa3RzLAogCQkJICAgICAgJmFtcDtzdGF0cy0mZ3Q7cHNwX3R4X2J5dGVzKTsKIAotCWlmIChhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIpCi0JCW1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLSZndDtyeF9jb3VudGVyLCAmYW1wO3N0YXRzLSZndDtwc3BfcnhfcGt0cywKJiM0MzsJaWYgKGZzLSZndDtyeF9jb3VudGVyKQomIzQzOwkJbWx4NV9mY19xdWVyeShtZGV2LCBmcy0mZ3Q7cnhfY291bnRlciwgJmFtcDtzdGF0cy0mZ3Q7cHNwX3J4X3BrdHMsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfYnl0ZXMpOwogCi0JaWYgKGFjY2VsX3BzcC0mZ3Q7cnhfYXV0aF9mYWlsX2NvdW50ZXIpCi0JCW1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlciwKJiM0MzsJaWYgKGZzLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcikKJiM0MzsJCW1seDVfZmNfcXVlcnkobWRldiwgZnMtJmd0O3J4X2F1dGhfZmFpbF9jb3VudGVyLAogCQkJICAgICAgJmFtcDtzdGF0cy0mZ3Q7cHNwX3J4X3BrdHNfYXV0aF9mYWlsLAogCQkJICAgICAgJmFtcDtzdGF0cy0mZ3Q7cHNwX3J4X2J5dGVzX2F1dGhfZmFpbCk7CiAKLQlpZiAoYWNjZWxfcHNwLSZndDtyeF9lcnJfY291bnRlcikKLQkJbWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2Vycl9jb3VudGVyLAomIzQzOwlpZiAoZnMtJmd0O3J4X2Vycl9jb3VudGVyKQomIzQzOwkJbWx4NV9mY19xdWVyeShtZGV2LCBmcy0mZ3Q7cnhfZXJyX2NvdW50ZXIsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfcGt0c19mcmFtZV9lcnIsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfYnl0ZXNfZnJhbWVfZXJyKTsKIAotCWlmIChhY2NlbF9wc3AtJmd0O3J4X2JhZF9jb3VudGVyKQotCQltbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC0mZ3Q7cnhfYmFkX2NvdW50ZXIsCiYjNDM7CWlmIChmcy0mZ3Q7cnhfYmFkX2NvdW50ZXIpCiYjNDM7CQltbHg1X2ZjX3F1ZXJ5KG1kZXYsIGZzLSZndDtyeF9iYWRfY291bnRlciwKIAkJCSAgICAgICZhbXA7c3RhdHMtJmd0O3BzcF9yeF9wa3RzX2Ryb3AsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfYnl0ZXNfZHJvcCk7CiB9CkBAIC04NzMsMjEgJiM0Mzs3OTQsMTUgQEAgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAlpZiAoIXByaXYtJmd0O3BzcCkKIAkJcmV0dXJuOwogCi0JYWNjZWxfcHNwX2ZzX3R4X2Z0X3B1dChwcml2LSZndDtwc3AtJmd0O2ZzKTsKLX0KLQotaW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQotewotCWlmICghcHJpdi0mZ3Q7cHNwKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzOwluZXRkZXZfbG9jayhwcml2LSZndDtuZXRkZXYpOwomIzQzOwlhY2NlbF9wc3BfZnNfdHhfZnRfZGVzdHJveSgmYW1wO3ByaXYtJmd0O3BzcC0mZ3Q7ZnMtJmd0O3R4KTsKJiM0MzsJbmV0ZGV2X3VubG9jayhwcml2LSZndDtuZXRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV9hY2NlbF9wc3BfZnNfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIHsKLQlhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChmcyk7Ci0JYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHgoZnMpOwomIzQzOwlhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChmcyk7CiYjNDM7CWFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTsKIAlrZnJlZShmcyk7CiB9CiAKQEAgLTkwMSwyOSAmIzQzOzgxNiw2MyBAQCBzdGF0aWMgc3RydWN0IG1seDVlX3BzcF9mcyAqbWx4NWVfYWNjZWxfcHNwX2ZzX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJZnMtJmd0O21kZXYgPSBwcml2LSZndDttZGV2OwotCWVyciA9IGFjY2VsX3BzcF9mc19pbml0X3R4KGZzKTsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3R4X2luaXQoZnMpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3R4OwogCiAJZnMtJmd0O2ZzID0gcHJpdi0mZ3Q7ZnM7Ci0JZXJyID0gYWNjZWxfcHNwX2ZzX2luaXRfcngoZnMpOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfcnhfaW5pdChmcyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcng7CiAKIAlyZXR1cm4gZnM7CiAKIGVycl9yeDoKLQlhY2NlbF9wc3BfZnNfY2xlYW51cF90eChmcyk7CiYjNDM7CWFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTsKIGVycl90eDoKIAlrZnJlZShmcyk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShwcml2LSZndDtwc3AtJmd0O2ZzLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3R4X2Z0X2NyZWF0ZShwcml2LSZndDtwc3AtJmd0O2ZzLCAmYW1wO3ByaXYtJmd0O3BzcC0mZ3Q7ZnMtJmd0O3R4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ZhaWxlZCBjcmVhdGluZyBUWCBzdGVlcmluZyB0YWJsZSYjMzQ7KTsKJiM0MzsJCWFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzOwl9CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtwc3AtJmd0O2ZzLSZndDt0eCk7CiYjNDM7CWFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQKIG1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZiwKIAkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0JcmV0dXJuIDA7IC8qIFRPRE86IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGRvIHRoaW5ncyB0byB0aGUgZGV2aWNlICovCiYjNDM7CXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYocHNkLSZndDttYWluX25ldGRldik7CiYjNDM7CWJvb2wgcHNwX2VuYWJsZWQgPSBwc2QtJmd0O2NvbmZpZy52ZXJzaW9uczsKJiM0MzsJYm9vbCBlbmFibGVfcHNwID0gY29uZi0mZ3Q7dmVyc2lvbnM7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwluZXRkZXZfbG9jayhwcml2LSZndDtuZXRkZXYpOwomIzQzOwlpZiAoIXBzcF9lbmFibGVkICZhbXA7JmFtcDsgZW5hYmxlX3BzcCkKJiM0MzsJCWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGUocHJpdiwgZXh0YWNrKTsKJiM0MzsJZWxzZSBpZiAocHNwX2VuYWJsZWQgJmFtcDsmYW1wOyAhZW5hYmxlX3BzcCkKJiM0MzsJCWFjY2VsX3BzcF9mc19kZXN0cm95KHByaXYpOwomIzQzOwluZXRkZXZfdW5sb2NrKHByaXYtJmd0O25ldGRldik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEwNzIsMjEgJiM0MzsxMDIxLDIxIEBAIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi0mZ3Q7cHNwOwogCi0JaWYgKCFwc3AgfHwgIXBzcC0mZ3Q7cHNwKQomIzQzOwlpZiAoIXBzcCB8fCAhcHNwLSZndDtwc2QpCiAJCXJldHVybjsKIAotCXBzcF9kZXZfdW5yZWdpc3Rlcihwc3AtJmd0O3BzcCk7Ci0JcHNwLSZndDtwc3AgPSBOVUxMOwomIzQzOwlwc3BfZGV2X3VucmVnaXN0ZXIocHNwLSZndDtwc2QpOwomIzQzOwlwc3AtJmd0O3BzZCA9IE5VTEw7CiB9CiAKLXZvaWQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO2ludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi0mZ3Q7cHNwOwogCXN0cnVjdCBwc3BfZGV2ICpwc2Q7CiAKIAkvKiBGVyBDYXBzIG1pc3NpbmcgKi8KIAlpZiAoIXByaXYtJmd0O3BzcCkKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIDA7CiAKIAlwc3AtJmd0O2NhcHMuYXNzb2NfZHJ2X3NwYyA9IHNpemVvZih1MzIpOwogCXBzcC0mZ3Q7Y2Fwcy52ZXJzaW9ucyA9IDEgJmx0OyZsdDsgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyODsKQEAgLTEwOTgsOSAmIzQzOzEwNDcsMTEgQEAgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJaWYgKElTX0VSUihwc2QpKSB7CiAJCW1seDVfY29yZV9lcnIocHJpdi0mZ3Q7bWRldiwgJiMzNDtQU1AgZmFpbGVkIHRvIHJlZ2lzdGVyIGR1ZSB0byAlcGVcbiYjMzQ7LAogCQkJICAgICAgcHNkKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHNkKTsKIAl9Ci0JcHNwLSZndDtwc3AgPSBwc2Q7CiYjNDM7CXBzcC0mZ3Q7cHNkID0gcHNkOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oCmluZGV4IDZiNjJmZWYwZDlhNzM4Li4zZjQ0MWU3ZGQ1NWFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaApAQCAtMjMsNyAmIzQzOzIzLDcgQEAgc3RydWN0IG1seDVlX3BzcF9zdGF0cyB7CiB9OwogCiBzdHJ1Y3QgbWx4NWVfcHNwIHsKLQlzdHJ1Y3QgcHNwX2RldiAqcHNwOwomIzQzOwlzdHJ1Y3QgcHNwX2RldiAqcHNkOwogCXN0cnVjdCBwc3BfZGV2X2NhcHMgY2FwczsKIAlzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmczsKIAlhdG9taWNfdCB0eF9rZXlfY250OwpAQCAtNDMsMzMgJiM0Mzs0MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pc19wc3BfZGV2aWNlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KQogCXJldHVybiB0cnVlOwogfQogCi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7Ci1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7Ci12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiYjNDM7aW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQogc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYwppbmRleCBlZjdmNTMzODU0MGZkZi4uMzQ4ZmQ3YTk2MjYxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jCkBAIC0xNCwxMiAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvcHNwX3J4dHguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL3BzcC5oJiMzNDsKIAotZW51bSB7Ci0JTUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVELAotCU1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0FVVEhfRkFJTEVELAotCU1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0JBRF9UUkFJTEVSLAotfTsKLQogc3RhdGljIHZvaWQgbWx4NWVfcHNwX3NldF9zd3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUgKnBzcF9zdCwKIAkJCSAgICAgIHN0cnVjdCBtbHg1X3dxZV9ldGhfc2VnICplc2VnKQpAQCAtMTIyLDE2ICYjNDM7MTE2LDExIEBAIHN0YXRpYyBib29sIG1seDVlX3BzcF9zZXRfc3RhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiB7Ci0JdTMyIHBzcF9tZXRhX2RhdGEgPSBiZTMyX3RvX2NwdShjcWUtJmd0O2Z0X21ldGFkYXRhKTsKIAlzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTE2IGRldl9pZCA9IHByaXYtJmd0O3BzcC0mZ3Q7cHNwLSZndDtpZDsKJiM0MzsJdTE2IGRldl9pZCA9IHByaXYtJmd0O3BzcC0mZ3Q7cHNkLSZndDtpZDsKIAlib29sIHN0cmlwX2ljdiA9IHRydWU7CiAJdTggZ2VuZXJhdGlvbiA9IDA7CiAKLQkvKiBUQkQ6IHJlcG9ydCBlcnJvcnMgYXMgU1cgY291bnRlcnMgdG8gZXRodG9vbCwgYW55IGZ1cnRoZXIgaGFuZGxpbmcgPyAqLwotCWlmIChNTFg1X1BTUF9NRVRBREFUQV9TWU5EUk9NRShwc3BfbWV0YV9kYXRhKSAhPSBNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9ERUNSWVBURUQpCi0JCWdvdG8gZHJvcDsKLQogCWlmIChwc3BfZGV2X3Jjdihza2IsIGRldl9pZCwgZ2VuZXJhdGlvbiwgc3RyaXBfaWN2KSkKIAkJZ290byBkcm9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCmluZGV4IDcwMjg5YzkyMWJkNmIzLi4yYjA4MGMzOWNjMzdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmgKQEAgLTEwLDkgJiM0MzsxMCw4IEBACiAjaW5jbHVkZSAmIzM0O2VuLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtlbi90eHJ4LmgmIzM0OwogCi0vKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjktMjM6IFBTUCBzeW5kcm9tZSwgQml0MjItMDogUFNQIG9iaiBpZCAqLwomIzQzOy8qIEJpdDMwOiBQU1AgbWFya2VyLCBCaXQyMi0wOiBQU1Agb2JqIGlkICovCiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX01BUktFUihtZXRhZGF0YSkgICgoKChtZXRhZGF0YSkgJmd0OyZndDsgMzApICZhbXA7IDB4MykgPT0gMHgzKQotI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9TWU5EUk9NRShtZXRhZGF0YSkgKCgobWV0YWRhdGEpICZndDsmZ3Q7IDIzKSAmYW1wOyBHRU5NQVNLKDYsIDApKQogI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSAmYW1wOyBHRU5NQVNLKDIyLCAwKSkKIAogc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwppbmRleCA3NzVmMGM2ZTU1Yzk1NS4uMmNiNDhiMjRkNWVhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwpAQCAtNjE5MSw3ICYjNDM7NjE5MSw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfaW5pdF9uaWNfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiYjNDM7c3RhdGljIGludCBtbHg1ZV9uaWNfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LSZndDtuZXRkZXY7CiAJc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LSZndDttZGV2OwpAQCAtNjE5OSw3ICYjNDM7NjE5OSw5IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAKIAltbHg1ZV9mc19pbml0X2wyX2FkZHIocHJpdi0mZ3Q7ZnMsIG5ldGRldik7CiAJbWx4NWVfaXBzZWNfaW5pdChwcml2KTsKLQltbHg1ZV9wc3BfcmVnaXN0ZXIocHJpdik7CiYjNDM7CWVyciA9IG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2lwc2VjX2NsZWFudXA7CiAKIAllcnIgPSBtbHg1ZV9tYWNzZWNfaW5pdChwcml2KTsKIAlpZiAoZXJyKQpAQCAtNjIyMiw3ICYjNDM7NjIyNCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJbWx4NWVfcGNpZV9jb25nX2V2ZW50X2luaXQocHJpdik7CiAJbWx4NWVfaHZfdmhjYV9zdGF0c19jcmVhdGUocHJpdik7CiAJaWYgKG5ldGRldi0mZ3Q7cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAltbHg1ZV9kY2JubF9pbml0X2FwcChwcml2KTsKIAogCW1seDVlX25pY19zZXRfcnhfbW9kZShwcml2KTsKQEAgLTYyMzUsNiAmIzQzOzYyMzcsMTIgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9pcHNlY19jbGVhbnVwOgomIzQzOwltbHg1ZV9pcHNlY19jbGVhbnVwKHByaXYpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKQEAgLTY2MTYsMTMgJiM0Mzs2NjI0LDE4IEBAIGludCBtbHg1ZV9hdHRhY2hfbmV0ZGV2KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NsZWFudXBfdHg7CiAKLQlpZiAocHJvZmlsZS0mZ3Q7ZW5hYmxlKQotCQlwcm9maWxlLSZndDtlbmFibGUocHJpdik7CiYjNDM7CWlmIChwcm9maWxlLSZndDtlbmFibGUpIHsKJiM0MzsJCWVyciA9IHByb2ZpbGUtJmd0O2VuYWJsZShwcml2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfY2xlYW51cF9yeDsKJiM0MzsJfQogCiAJbWx4NWVfdXBkYXRlX2ZlYXR1cmVzKHByaXYtJmd0O25ldGRldik7CiAKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9jbGVhbnVwX3J4OgomIzQzOwlwcm9maWxlLSZndDtjbGVhbnVwX3J4KHByaXYpOwogZXJyX2NsZWFudXBfdHg6CiAJcHJvZmlsZS0mZ3Q7Y2xlYW51cF90eChwcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jCmluZGV4IGM4Yjc2ZDMwMWM5MmNmLi42MDMwNTFhYjFlYWE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYwpAQCAtMTI2Miw5ICYjNDM7MTI2MiwxMSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9jbGVhbnVwX3JlcF90eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAltbHg1ZV9yZXBfbmVpZ2hfY2xlYW51cChycHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIG1seDVlX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiYjNDM7c3RhdGljIGludCBtbHg1ZV9yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCW1seDVlX3NldF9uZXRkZXZfbXR1X2JvdW5kYXJpZXMocHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV9yZXBfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKQEAgLTEzMjIsNyAmIzQzOzEzMjQsNyBAQCBzdGF0aWMgaW50IHVwbGlua19yZXBfYXN5bmNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiYjNDM7c3RhdGljIGludCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi0mZ3Q7bWRldjsKQEAgLTEzNTcsNiAmIzQzOzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzkyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgTWVsbGFub3ggbWx4NSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXQgdHdlYWtzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBzdHVmZi4gSXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgcHNwLmNgLCBgcHNwLmhgLCBgcHNwX3J4dHguY2AsIGBlbl9tYWluLmNgLCBgZW5fcmVwLmNgLCBgZW4uaGAsIGFuZCBgZnMuaGAuIEJhc2ljYWxseSwgaXTigJlzIGFsdGVyaW5nIGhvdyBmbG93IHN0ZWVyaW5nIHJ1bGVzIGFyZSBtYWRlIGFuZCBoYW5kbGVkIHdoZW4gd2UmIzM5O3JlIG9mZmxvYWRpbmcgUFNQIHRhc2tzLiBJdCBhbHNvIGxvb2tzIGxpa2UgYSBjYWxsYmFjayBpbiB0aGUgYG1seDVlX3Byb2ZpbGVgIGlzIHJldHVybmluZyBhbiBgaW50YCBub3cgaW5zdGVhZCBvZiBgdm9pZGAuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpczogQ2FuIEkgZXZlbiAqdGVzdCogdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgbWx4NSBkcml2ZXIgKnJlcXVpcmVzKiBzcGVjaWZpYyBNZWxsYW5veCBoYXJkd2FyZSDigJMgQ29ubmVjdFgtNCwgNSwgNiwgb3IgNy4gU3l6a2FsbGVyLCB3aGljaCBpcyBteSBnby10byBmdXp6aW5nIHRvb2wsIGRvZXNuJiMzOTt0IGhhdmUgTWVsbGFub3ggaGFyZHdhcmUuIFNvLCBjYW4gUUVNVSBlbXVsYXRlIG1seDU/IEkga25vdyBRRU1VIGVtdWxhdGVzIHNldmVyYWwgTklDcywgbGlrZSBlMTAwMCwgcnRsODEzOSwgdmlydGlvLW5ldCwgdm14bmV0MywgYW5kIGlnYiwgYnV0IG5vdCB1c3VhbGx5IG1seDUgbmF0aXZlbHkuIEkgbWlnaHQgYmUgYWJsZSB0byBmaW5kIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCYjMzk7cyBub3Qgc3RhbmRhcmQuIFRoZXJlJiMzOTtzIG5vIHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiwgZWl0aGVyLCBzaW5jZSBpdCYjMzk7cyBhIGhhcmR3YXJlIGRyaXZlci4KClN5emthbGxlciBkb2VzIGhhdmUgY2xldmVyIGVtdWxhdGlvbiBtZWNoYW5pc21zIGZvciBvdGhlciBkZXZpY2VzIOKAkyBpdCBoYXMgYHN5el91c2JfY29ubmVjdGAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZrbXNgIGZvciBEUk0sIGFuZCBgdml2aWRgIGZvciBWNEwyLiBGb3IgZXRoZXJuZXQsIGl0IHVzZXMgYHR1bmAvYHRhcGAgb3IgYHZldGhgLiBCdXQgSSBkb27igJl0IHRoaW5rIHRoZXJlIGlzIGEgZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGVtdWxhdGluZyBQQ0llIGRldmljZXMgbGlrZSBtbHg1LgoKU28sIHJlYWxpc3RpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSB3YXkgdG8gdHJpZ2dlciB0aGlzIG1seDUgY29kZSB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiBJcyB0aGVyZSBzb21lIGtpbmQgb2YgbW9jayBkcml2ZXIgb3Igc2ltdWxhdGlvbiBsYXllcj8gSSYjMzk7bGwgcnVuIGEga2VybmVsIHNlYXJjaCBmb3IgJiMzNDttbHg1JiMzNDsgYW5kIHNlZSB3aGF0IGl0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVfY29yZV9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTIzMzggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTU4PXN0cnVjdCBtbHg1X2RtYV9wb29sIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy02MS1cdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6NjI6XHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNjMtXHRpbnQgbm9kZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz03OT1zdHJ1Y3QgbWx4NV9kbWFfcG9vbF9zdGF0cyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtODktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo5MDpzdGF0aWMgdm9pZCAqbWx4NV9kbWFfemFsbG9jX2NvaGVyZW50X25vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTkxLVx0XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0xMDk9c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9kZXN0cm95KHN0cnVjdCBtbHg1X2RtYV9wb29sICpwb29sKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjExNTpzdGF0aWMgc3RydWN0IG1seDVfZG1hX3Bvb2wgKm1seDVfZG1hX3Bvb2xfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0xMTYtXHRcdFx0XHRcdFx0ICBpbnQgbm9kZSwgdTggYmxvY2tfc2hpZnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9MTMzPW1seDVfZG1hX3Bvb2xfcGFnZV9hbGxvYyhzdHJ1Y3QgbWx4NV9kbWFfcG9vbCAqcG9vbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0xNjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzoxNjM6c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9wYWdlX2ZyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTE2NC1cdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NV9kbWFfcG9vbF9wYWdlICpwYWdlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTI4Mz1zdGF0aWMgc3RydWN0IG1seDVfZnJhZ19idWZfbm9kZV9wb29scyAqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzoyODQ6bWx4NV9mcmFnX2J1Zl9ub2RlX3Bvb2xzX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgbm9kZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTI4NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9MzA3PW1seDVfZnJhZ19idWZfZG1hX3Bvb2xzX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMDgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6MzA5Olx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbGUtXHUwMDNlcHJpdmF0ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTMxMC1cdGludCBub2RlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTMzNj1ERUZJTkVfU0hPV19BVFRSSUJVVEUobWx4NV9mcmFnX2J1Zl9kbWFfcG9vbHNfZGVidWdmcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzozMzg6dm9pZCBtbHg1X2ZyYWdfYnVmX3Bvb2xzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTMzOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6MzU5OmludCBtbHg1X2ZyYWdfYnVmX3Bvb2xzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTM2MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6Mzg4OmludCBtbHg1X2ZyYWdfYnVmX2FsbG9jX25vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHNpemUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zODktXHRcdFx0ICAgICBzdHJ1Y3QgbWx4NV9mcmFnX2J1ZiAqYnVmLCBpbnQgbm9kZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz00MjU9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9mcmFnX2J1Zl9hbGxvY19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjQyNzp2b2lkIG1seDVfZnJhZ19idWZfZnJlZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9mcmFnX2J1ZiAqYnVmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNDI4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz00NDU9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9mcmFnX2J1Zl9mcmVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQ0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjQ0NzpzdGF0aWMgc3RydWN0IG1seDVfZGJfcGdkaXIgKm1seDVfYWxsb2NfZGJfcGdkaXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQ0OC1cdFx0XHRcdFx0XHQgaW50IG5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9NDc2PXN0YXRpYyBpbnQgbWx4NV9hbGxvY19kYl9mcm9tX3BnZGlyKHN0cnVjdCBtbHg1X2RiX3BnZGlyICpwZ2Rpcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo1MDE6aW50IG1seDVfZGJfYWxsb2Nfbm9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9kYiAqZGIsIGludCBub2RlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNTAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz01Mjg9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9kYl9hbGxvY19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjUzMDp2b2lkIG1seDVfZGJfZnJlZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9kYiAqZGIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yODM9c3RhdGljIHZvaWQgcG9sbF90aW1lb3V0KHN0cnVjdCBtbHg1X2NtZF93b3JrX2VudCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI4NC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6Mjg1Olx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihlbnQtXHUwMDNlY21kLCBzdHJ1Y3QgbWx4NV9jb3JlX2RldiwgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yODYtXHR1NjQgY21kX3RvX21zID0gbWx4NV90b3V0X21zKGRldiwgQ01EKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MzMxPXN0YXRpYyB2b2lkIGR1bXBfYnVmKHZvaWQgKmJ1ZiwgaW50IHNpemUsIGludCBkYXRhX29ubHksIGludCBvZmZzZXQsIGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTM0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzozNDc6c3RhdGljIGludCBtbHg1X2ludGVybmFsX2Vycl9yZXRfdmFsdWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTM0OC1cdFx0XHRcdCAgICAgICB1MzIgKnN5bmQsIHU4ICpzdGF0dXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTc5Mz1zdGF0aWMgaW50IGNtZF9zdGF0dXNfdG9fZXJyKHU4IHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjgxNzp2b2lkIG1seDVfY21kX291dF9lcnIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSwgdTE2IG9wX21vZCwgdm9pZCAqb3V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgxOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTgyNz1FWFBPUlRfU1lNQk9MKG1seDVfY21kX291dF9lcnIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo4Mjk6c3RhdGljIHZvaWQgY21kX3N0YXR1c19wcmludChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgdm9pZCAqb3V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTg0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo4NDU6aW50IG1seDVfY21kX2NoZWNrKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBlcnIsIHZvaWQgKmluLCB2b2lkICpvdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODQ2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9ODcyPUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfY2hlY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTg3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo4NzQ6c3RhdGljIHZvaWQgZHVtcF9jb21tYW5kKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODc1LVx0XHRcdCBzdHJ1Y3QgbWx4NV9jbWRfd29ya19lbnQgKmVudCwgaW50IGlucHV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05MzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTMyOnN0YXRpYyB2b2lkIG1seDVfY21kX2NvbXBfaGFuZGxlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1NjQgdmVjLCBib29sIGZvcmNlZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTkzND1zdGF0aWMgdm9pZCBjYl90aW1lb3V0X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05MzktXHRcdFx0XHRcdFx0ICAgICBjYl90aW1lb3V0X3dvcmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk0MDpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoZW50LVx1MDAzZWNtZCwgc3RydWN0IG1seDVfY29yZV9kZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTQxLVx0XHRcdFx0XHRcdCBjbWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTYxOnN0YXRpYyB2b2lkIGZyZWVfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTYyOnN0YXRpYyB2b2lkIG1seDVfZnJlZV9jbWRfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTYzLVx0XHRcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTk2NT1zdGF0aWMgYm9vbCBvcGNvZGVfYWxsb3dlZChzdHJ1Y3QgbWx4NV9jbWQgKmNtZCwgdTE2IG9wY29kZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk3Mzpib29sIG1seDVfY21kX2lzX2Rvd24oc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NzQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz05ODA9c3RhdGljIHZvaWQgY21kX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk4NS1cdHN0cnVjdCBtbHg1X2NtZF9sYXlvdXQgKmxheTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5ODY6XHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk4Ny1cdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk5NDpcdGRldiA9IGNvbnRhaW5lcl9vZihjbWQsIHN0cnVjdCBtbHg1X2NvcmVfZGV2LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk5NS1cdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG1seDVfdG91dF9tcyhkZXYsIENNRCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xMTQwPWVudW0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjExNDQ6c3RhdGljIHZvaWQgd2FpdF9mdW5jX2hhbmRsZV9leGVjX3RpbWVvdXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTQ1LVx0XHRcdFx0XHQgIHN0cnVjdCBtbHg1X2NtZF93b3JrX2VudCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjExNjk6c3RhdGljIGludCB3YWl0X2Z1bmMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kX3dvcmtfZW50ICplbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE3MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTEyMTUtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTIxNjpzdGF0aWMgYm9vbCBtbHg1X2NtZF9hbGxfc3RhbGxlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTEyMTcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjU4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjEyNTk6c3RhdGljIGludCBtbHg1X2NtZF9pbnZva2Uoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kX21zZyAqaW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTI2MC1cdFx0XHQgICBzdHJ1Y3QgbWx4NV9jbWRfbXNnICpvdXQsIHZvaWQgKnVvdXQsIGludCB1b3V0X3NpemUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTEzMzc9c3RhdGljIHNzaXplX3QgZGJnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMzM5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxMzQwOlx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTEzNDEtXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFx1MDAyNmRldi1cdTAwM2VjbWQuZGJnO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNDA0PXN0YXRpYyBpbnQgbWx4NV9jb3B5X2Zyb21fbXNnKHZvaWQgKnRvLCBzdHJ1Y3QgbWx4NV9jbWRfbXNnICpmcm9tLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTQzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNDM3OnN0YXRpYyBzdHJ1Y3QgbWx4NV9jbWRfbWFpbGJveCAqYWxsb2NfY21kX2JveChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0MzgtXHRcdFx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE0NTg6c3RhdGljIHZvaWQgZnJlZV9jbWRfYm94KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTQ1OS1cdFx0XHQgc3RydWN0IG1seDVfY21kX21haWxib3ggKm1haWxib3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTQ2NTpzdGF0aWMgc3RydWN0IG1seDVfY21kX21zZyAqbWx4NV9hbGxvY19jbWRfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTQ2Ni1cdFx0XHRcdFx0ICAgICAgIGdmcF90IGZsYWdzLCBpbnQgc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNTEyOnN0YXRpYyB2b2lkIG1seDVfZnJlZV9jbWRfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUxMy1cdFx0XHQgICAgICBzdHJ1Y3QgbWx4NV9jbWRfbXNnICptc2cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTE1MjY9c3RhdGljIHNzaXplX3QgZGF0YV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUyOC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTUyOTpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTMwLVx0c3RydWN0IG1seDVfY21kX2RlYnVnICpkYmcgPSBcdTAwMjZkZXYtXHUwMDNlY21kLmRiZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU1MD1zdGF0aWMgc3NpemVfdCBkYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU1Mi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTU1MzpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTU0LVx0c3RydWN0IG1seDVfY21kX2RlYnVnICpkYmcgPSBcdTAwMjZkZXYtXHUwMDNlY21kLmRiZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU3MD1zdGF0aWMgc3NpemVfdCBvdXRsZW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTcyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNTczOlx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE1NzQtXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFx1MDAyNmRldi1cdTAwM2VjbWQuZGJnO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNTg1PXN0YXRpYyBzc2l6ZV90IG91dGxlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU4Ny17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTU4ODpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTg5LVx0c3RydWN0IG1seDVfY21kX2RlYnVnICpkYmcgPSBcdTAwMjZkZXYtXHUwMDNlY21kLmRiZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbGZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTYyODpzdGF0aWMgdm9pZCBzZXRfd3FuYW1lKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTYyOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTYzNjpzdGF0aWMgdm9pZCBjbGVhbl9kZWJ1Z19maWxlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE2NDY6c3RhdGljIHZvaWQgY3JlYXRlX2RlYnVnZnNfZmlsZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjQ3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjU5OnZvaWQgbWx4NV9jbWRfYWxsb3dlZF9vcGNvZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjYwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjc1OnN0YXRpYyB2b2lkIG1seDVfY21kX2NoYW5nZV9tb2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IG1vZGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY3Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTE2OTE9c3RhdGljIGludCBjbWRfY29tcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjkzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjk0Olx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjk1LVx0c3RydWN0IG1seDVfY21kICpjbWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2OTgtXHRjbWQgPSBtbHg1X25iX2NvZihuYiwgc3RydWN0IG1seDVfY21kLCBuYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY5OTpcdGRldiA9IGNvbnRhaW5lcl9vZihjbWQsIHN0cnVjdCBtbHg1X2NvcmVfZGV2LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MDAtXHRlcWUgPSBkYXRhO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzA4LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNzA5OnZvaWQgbWx4NV9jbWRfdXNlX2V2ZW50cyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MTY6dm9pZCBtbHg1X2NtZF91c2VfcG9sbGluZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MjI6c3RhdGljIHZvaWQgZnJlZV9tc2coc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kX21zZyAqbXNnKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MjMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MzU6c3RhdGljIHZvaWQgbWx4NV9jbWRfY29tcF9oYW5kbGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU2NCB2ZWMsIGJvb2wgZm9yY2VkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODM4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4Mzk6c3RhdGljIHZvaWQgbWx4NV9jbWRfdHJpZ2dlcl9jb21wbGV0aW9ucyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE4NDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4NzQ6dm9pZCBtbHg1X2NtZF9mbHVzaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE4NzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4OTc6c3RhdGljIHN0cnVjdCBtbHg1X2NtZF9tc2cgKmFsbG9jX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgaW5fc2l6ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODk4LVx0XHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xOTM1PXN0YXRpYyBpbnQgaXNfbWFuYWdlX3BhZ2VzKHZvaWQgKmluKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NDA6c3RhdGljIGJvb2wgbWx4NV9oYXNfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTQxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxOTQ1OnN0YXRpYyBib29sIG1seDVfY21kX2lzX3ByaXZpbGVnZWRfdWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0Ni1cdFx0XHRcdCAgICAgICB1MTYgdWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTU0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NTU6c3RhdGljIGludCBjbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTU2LVx0XHQgICAgaW50IG91dF9zaXplLCBtbHg1X2NtZF9jYmtfdCBjYWxsYmFjaywgdm9pZCAqY29udGV4dCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjAzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMDM2OnN0YXRpYyB2b2lkIG1seDVfY21kX2Vycl90cmFjZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjAzNy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjA0NjpzdGF0aWMgdm9pZCBjbWRfc3RhdHVzX2xvZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1OCBzdGF0dXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjA0Ny1cdFx0XHQgICB1MzIgc3luZHJvbWUsIGludCBlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNzEtLyogcHJlc2VydmUgLUVSRU1PVEVJTyBmb3Igb3V0Ym94LnN0YXR1cyAhPSBPSywgb3RoZXJ3aXNlIHJldHVybiBlcnIgYXMgaXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMDcyOnN0YXRpYyBpbnQgY21kX3N0YXR1c19lcnIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGVyciwgdTE2IG9wY29kZSwgdTE2IG9wX21vZCwgdm9pZCAqb3V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNzMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTA2LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxMDc6aW50IG1seDVfY21kX2RvKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSwgdm9pZCAqb3V0LCBpbnQgb3V0X3NpemUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjEwOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxMTU9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9kbyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxMjgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjEyOTppbnQgbWx4NV9jbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTMwLVx0XHQgIGludCBvdXRfc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjEzNj1FWFBPUlRfU1lNQk9MKG1seDVfY21kX2V4ZWMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTUxLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxNTI6aW50IG1seDVfY21kX2V4ZWNfcG9sbGluZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE1My1cdFx0XHQgIHZvaWQgKm91dCwgaW50IG91dF9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMTYyPUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfZXhlY19wb2xsaW5nKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxNjQ6dm9pZCBtbHg1X2NtZF9pbml0X2FzeW5jX2N0eChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxNjUtXHRcdFx0ICAgICBzdHJ1Y3QgbWx4NV9hc3luY19jdHggKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjE4OT1zdGF0aWMgdm9pZCBtbHg1X2NtZF9leGVjX2NiX2hhbmRsZXIoaW50IHN0YXR1cywgdm9pZCAqX3dvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxOTItXHRzdHJ1Y3QgbWx4NV9hc3luY19jdHggKmN0eDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMTkzOlx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTk0LVx0Ym9vbCB0aHJvdHRsZV9sb2NrZWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIyMTQ9aW50IG1seDVfY21kX2V4ZWNfY2Ioc3RydWN0IG1seDVfYXN5bmNfY3R4ICpjdHgsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjIxNy17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjIxODpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBjdHgtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIyMTktXHR1MTYgdWlkO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMjY4PUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfZXhlY19jYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjI2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMjcwOmludCBtbHg1X2NtZF9hbGxvd19vdGhlcl92aGNhX2FjY2VzcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIyNzEtXHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1X2NtZF9hbGxvd19vdGhlcl92aGNhX2FjY2Vzc19hdHRyICphdHRyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIyOTA6aW50IG1seDVfY21kX2FsaWFzX29ial9jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjkxLVx0XHRcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9hbGlhc19vYmpfY3JlYXRlX2F0dHIgKmFsaWFzX2F0dHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjMyNjppbnQgbWx4NV9jbWRfYWxpYXNfb2JqX2Rlc3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTMyIG9ial9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzI3LVx0XHRcdCAgICAgICB1MTYgb2JqX3R5cGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjMzOTpzdGF0aWMgdm9pZCBkZXN0cm95X21zZ19jYWNoZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzNDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMzU5PXN0YXRpYyB1bnNpZ25lZCBjbWRfY2FjaGVfZW50X3NpemVbTUxYNV9OVU1fQ09NTUFORF9DQUNIRVNdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIzNjc6c3RhdGljIHZvaWQgY3JlYXRlX21zZ19jYWNoZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzNjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIzOTM6c3RhdGljIGludCBhbGxvY19jbWRfcGFnZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jbWQgKmNtZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzk0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDIyOnN0YXRpYyB2b2lkIGZyZWVfY21kX3BhZ2Uoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kICpjbWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQyMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjQyODpzdGF0aWMgdTE2IGNtZGlmX3JldihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0Mjkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI0MzM6aW50IG1seDVfY21kX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDM0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQ1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDU0OnZvaWQgbWx4NV9jbWRfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0NTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI0NjI6aW50IG1seDVfY21kX2VuYWJsZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0NjMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NDg6dm9pZCBtbHg1X2NtZF9kaXNhYmxlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU0OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjU2MDp2b2lkIG1seDVfY21kX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1NjEtXHRcdFx0ZW51bSBtbHg1X2NtZGlmX3N0YXRlIGNtZGlmX3N0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NjY6aW50IG1seDVfY21kX2FkZF9wcml2aWxlZ2VkX3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdWlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1Njcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yNTcxPUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfYWRkX3ByaXZpbGVnZWRfdWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NzM6dm9pZCBtbHg1X2NtZF9yZW1vdmVfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHVpZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTc0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0xMDA9c3RhdGljIHZvaWQgbWx4NV9jb3JlX2NxX2R1bW15X2NiKHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLCBzdHJ1Y3QgbWx4NV9lcWUgKmVxZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xMDctLyogQ2FsbGVycyBtdXN0IHZlcmlmeSBvdXRib3ggc3RhdHVzIGluIGNhc2Ugb2YgZXJyICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxMDg6aW50IG1seDVfY3JlYXRlX2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMTA5LVx0XHQgICB1MzIgKmluLCBpbnQgaW5sZW4sIHUzMiAqb3V0LCBpbnQgb3V0bGVuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTE3OD1FWFBPUlRfU1lNQk9MKG1seDVfY3JlYXRlX2NxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xODAtLyogb3Vib3ggaXMgY2hlY2tlZCBhbmQgZXJyIHZhbCBpcyBub3JtYWxpemVkICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxODE6aW50IG1seDVfY29yZV9jcmVhdGVfY3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9jcSAqY3EsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xODItXHRcdFx0dTMyICppbiwgaW50IGlubGVuLCB1MzIgKm91dCwgaW50IG91dGxlbilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0xODg9RVhQT1JUX1NZTUJPTChtbHg1X2NvcmVfY3JlYXRlX2NxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTE4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjE5MDppbnQgbWx4NV9jb3JlX2Rlc3Ryb3lfY3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9jcSAqY3EpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xOTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTIxMz1FWFBPUlRfU1lNQk9MKG1seDVfY29yZV9kZXN0cm95X2NxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIxNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjIxNTppbnQgbWx4NV9jb3JlX3F1ZXJ5X2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjE2LVx0XHQgICAgICAgdTMyICpvdXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmM9MjI0PUVYUE9SVF9TWU1CT0wobWx4NV9jb3JlX3F1ZXJ5X2NxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjIyNjppbnQgbWx4NV9jb3JlX21vZGlmeV9jcShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jb3JlX2NxICpjcSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIyNy1cdFx0XHR1MzIgKmluLCBpbnQgaW5sZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmM9MjM1PUVYUE9SVF9TWU1CT0wobWx4NV9jb3JlX21vZGlmeV9jcSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoyMzc6aW50IG1seDVfY29yZV9tb2RpZnlfY3FfbW9kZXJhdGlvbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjM4LVx0XHRcdFx0ICAgc3RydWN0IG1seDVfY29yZV9jcSAqY3EsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz05Nj12b2lkIG1seDVfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjEwMTpzdHJ1Y3QgZGVudHJ5ICptbHg1X2RlYnVnZnNfZ2V0X2Rldl9yb290KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTEwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0xMDU9RVhQT1JUX1NZTUJPTChtbHg1X2RlYnVnZnNfZ2V0X2Rldl9yb290KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMDc6dm9pZCBtbHg1X3FwX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MTExPUVYUE9SVF9TWU1CT0wobWx4NV9xcF9kZWJ1Z2ZzX2luaXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjExMzp2b2lkIG1seDVfcXBfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0xMTc9RVhQT1JUX1NZTUJPTChtbHg1X3FwX2RlYnVnZnNfY2xlYW51cCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MTE5OnZvaWQgbWx4NV9lcV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTIwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTEyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MTI0OnZvaWQgbWx4NV9lcV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTI1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTIwMj1tbHg1X2NtZGlmX2FsbG9jX3N0YXRzKHN0cnVjdCB4YXJyYXkgKnN0YXRzX3hhLCBpbnQgb3Bjb2RlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyMTk6dm9pZCBtbHg1X2NtZGlmX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yMjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNTk6dm9pZCBtbHg1X2NtZGlmX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNzA6dm9pZCBtbHg1X2NxX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNzU6dm9pZCBtbHg1X2NxX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjc5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyODA6dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyOTQ6dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyOTk6dm9pZCBtbHg1X3BhZ2VzX2J5X2Z1bmNfdHlwZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzAwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTMyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MzIzOnZvaWQgbWx4NV9wYWdlc19ieV9mdW5jX3R5cGVfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTMyNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0zMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjMzNzpzdGF0aWMgdTY0IHFwX3JlYWRfZmllbGQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9xcCAqcXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTMzOC1cdFx0XHQgaW50IGluZGV4LCBpbnQgKmlzX3N0cilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6NDE3OnN0YXRpYyB1NjQgZXFfcmVhZF9maWVsZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9lcSAqZXEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTQxOC1cdFx0XHQgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNDU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo0NTc6c3RhdGljIHU2NCBjcV9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy00NTgtXHRcdFx0IGludCBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTUzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1Mzg6c3RhdGljIGludCBhZGRfcmVzX3RyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSBkYmdfcnNjX3R5cGUgdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTM5LVx0XHRcdHN0cnVjdCBkZW50cnkgKnJvb3QsIHN0cnVjdCBtbHg1X3JzY19kZWJ1ZyAqKmRiZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTU2Nj1zdGF0aWMgdm9pZCByZW1fcmVzX3RyZWUoc3RydWN0IG1seDVfcnNjX2RlYnVnICpkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1NzI6aW50IG1seDVfZGVidWdfcXBfYWRkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01NzMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9NTg3PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z19xcF9hZGQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjU4OTp2b2lkIG1seDVfZGVidWdfcXBfcmVtb3ZlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9NTk3PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z19xcF9yZW1vdmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjU5OTppbnQgbWx4NV9kZWJ1Z19lcV9hZGQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfZXEgKmVxKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4NTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYG1seDVfY29yZV9kZXZgIENvZGUgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gdGhlIG91dHB1dCBzaG93cyB0aGF0IGBtbHg1X2NvcmVfZGV2YCBpcyBzaWduaWZpY2FudGx5IHByZXNlbnQgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYCBkaXJlY3RvcnkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGNhbiBzeXprYWxsZXIgcG9zc2libHkgdHJpZ2dlciB0aGlzIGNvZGU/IEl0JiMzOTtzIGFsbCBhYm91dCBzeXN0ZW0gY2FsbHMgZm9yIHN5emthbGxlciwgcmlnaHQ/IFRoZSBpc3N1ZSBpcyBwcmV0dHkgb2J2aW91czogd2l0aG91dCB0aGUgTWVsbGFub3ggaGFyZHdhcmUsIHRoZSBkcml2ZXIgc2ltcGx5IHdvbiYjMzk7dCBwcm9iZS4gTm8gcHJvYmUsIG5vIGBtbHg1X2NvcmVfZGV2YCwgbm8gY29kZSBleGVjdXRpb24uCgpJcyB0aGVyZSBhbnkga2luZCBvZiBuZXRsaW5rIG1hZ2ljIHRoYXQgY291bGQgYnlwYXNzIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudD8gTm9wZSwgbWx4NSBpcyBhIFBDSSBkcml2ZXIuIEl0IG5lZWRzIHRoYXQgUENJIGRldmljZSB0byBnZXQgb2ZmIHRoZSBncm91bmQuIE5vIFBDSSBkZXZpY2UsIG5vIHByb2JlLCBubyBuZXRkZXYsIGRlYWQgZW5kLgoKV2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIHRvIGVtdWxhdGUgUENJIGRldmljZXMsIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGZvciBVU0IsIGJ1dCBubyBnZW5lcmljIFBDSSBlbXVsYXRvci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBEaWQgc3l6a2FsbGVyIGludHJvZHVjZSBzb21lIGNsZXZlciBQQ0kgZW11bGF0aW9uIHRocm91Z2ggYHZoY2lgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBOb3BlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjay4gSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGAuIE5vcGUsIG5vdCBpbiBzeXprYWxsZXIuCgpMZXQmIzM5O3MgY3V0IHRvIHRoZSBjaGFzZSBhbmQgZmluZCBvdXQgaWYgU3l6a2FsbGVyIGZ1enplZCBtbHg1LiBMb29rcyBsaWtlIGl0IGRvZXNuJiMzOTt0LCBiZWNhdXNlIGl0IG5lZWRzIHRoZSBoYXJkd2FyZS4KCkJ1dCB3YWl0ISBIb2xkIG9uIGEgc2Vjb25kLCB0aGUgcHJvbXB0IHNheXM6CgomIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7CgomIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClRoaXMgaXMgY3J1Y2lhbC4gVGhlIHByb21wdCBtYWtlcyBhIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVhY2hhYmxlIGFuZCB1bnJlYWNoYWJsZSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHJlYWNoYWJpbGl0eSBpbiBhIFFFTVUtbGlrZSBlbnZpcm9ubWVudC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBtbHg1LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDUuKmVtdWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MTM0Nz1zdHJ1Y3QgbWx4NV9pZmNfZGV2aWNlX2V2ZW50X2NhcF9iaXRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0xMzUyLVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MTM1MzpzdHJ1Y3QgbWx4NV9pZmNfdmlydGlvX2VtdWxhdGlvbl9jYXBfYml0cyB7XG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0xMzU0LVx0dTggICAgICAgICBkZXNjX3R1bm5lbF9vZmZsb2FkX3R5cGVbMHgxXTtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaD0zODUyPXVuaW9uIG1seDVfaWZjX2hjYV9jYXBfdW5pb25fYml0cyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzg2OS1cdHN0cnVjdCBtbHg1X2lmY19kZXZpY2VfbWVtX2NhcF9iaXRzIGRldmljZV9tZW1fY2FwO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6Mzg3MDpcdHN0cnVjdCBtbHg1X2lmY192aXJ0aW9fZW11bGF0aW9uX2NhcF9iaXRzIHZpcnRpb19lbXVsYXRpb25fY2FwO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzg3MS1cdHN0cnVjdCBtbHg1X2lmY190bHBfZGV2X2VtdV9jYXBhYmlsaXRpZXNfYml0cyB0bHBfZGV2X2VtdV9jYXBhYmlsaXRpZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgVmlydGlvIGFuZCBNTFg1IExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGdvaW5nIGRvd24gdGhlIHdyb25nIHBhdGggaGVyZS4gYHZpcnRpb19lbXVsYXRpb25fY2FwYCBpcyBzcGVjaWZpY2FsbHkgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aGluIHZpcnRpbywgbm90IGZvciBzaW11bGF0aW5nIG1seDUgaW4gYSBzb2Z0d2FyZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGlzdGluY3Rpb24uCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBob3cgY2FuIEkgYWN0dWFsbHkgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGBtbHg1ZV9wc3Bfc2V0X2NvbmZpZ2AgZnVuY3Rpb24/IEkga25vdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBhcyBhIGNhbGxiYWNrIHdpdGhpbiBgcHNwX2Rldl9jb25maWdgLiBTbywgYG1seDVlX3BzcF9zZXRfY29uZmlnYCBpcyBwYXJ0IG9mIGEgY2FsbGJhY2sgaW4gYHBzcF9kZXZfY29uZmlnYC4KCkJ1dCBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiB3aGF0IGV4YWN0bHkgaXMgdGhpcyBgcHNwX2RldmAgc3RydWN0dXJlIHRoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjaz8gVGltZSB0byBnbyBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHNvdXJjZSBjb2RlLiBJIHNob3VsZCBmaW5kIGl0IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcHNwLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBpbmNsdWRlIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9kZXZfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz04NjA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjg2MTptbHg1ZV9wc3Bfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtODYyLVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTIxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMjI6bnNpbV9wc3Bfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIzLVx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE0PXN0cnVjdCBwc3BoZHIge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTM5LS8qKlxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NDA6ICogc3RydWN0IHBzcF9kZXZfY29uZmlnIC0gUFNQIGRldmljZSBjb25maWd1cmF0aW9uXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC00MS0gKiBAdmVyc2lvbnM6IFBTUCB2ZXJzaW9ucyBlbmFibGVkIG9uIHRoZSBkZXZpY2VcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQyLSAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NDM6c3RydWN0IHBzcF9kZXZfY29uZmlnIHtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQ0LVx0dTMyIHZlcnNpb25zO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTg5PXN0cnVjdCBwc3BfZGV2IHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xMDQtXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoxMDU6XHRzdHJ1Y3QgcHNwX2Rldl9jb25maWcgY29uZmlnO1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTA2LVxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE5NT1zdHJ1Y3QgcHNwX2Rldl9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIwMC1cdCAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MjAxOlx0aW50ICgqc2V0X2NvbmZpZykoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9kZXZfY29uZmlnICpjb25mLFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjAyLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTM5OD1pbnQgcHNwX25sX2Rldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNDAwLVx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG5uZXQvcHNwL3BzcF9ubC5jOjQwMTpcdHN0cnVjdCBwc3BfZGV2X2NvbmZpZyBuZXdfY29uZmlnO1xubmV0L3BzcC9wc3BfbmwuYy00MDItXHRzdHJ1Y3Qgc2tfYnVmZiAqcnNwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTc4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBtbHg1IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgdG91Y2hlcyBgbmV0ZGV2c2ltYCwgc3BlY2lmaWNhbGx5IGBuc2ltX3BzcF9zZXRfY29uZmlnYC4gQnV0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYnVyaWVkIGRlZXAgaW4gdGhlIE1lbGxhbm94IGBtbHg1YCBkcml2ZXIsIGluIGBwc3AuY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4gZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6IHRoaXMgaXMgTWVsbGFub3ggaGFyZHdhcmUtZGVwZW5kZW50LiBTeXprYWxsZXImIzM5O3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGJlIGl0IEdDRSBvciBRRU1VLCBpc24mIzM5O3QgZ29pbmcgdG8gbWFnaWNhbGx5IGNvbmp1cmUgdXAgYSBNZWxsYW5veCBjYXJkLCByaWdodD8gSSBzdGFydCB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgY2xldmVyIFBDSSBkZXZpY2UgaW5qZWN0aW9uLCBvciBwZXJoYXBzIGEgdmlydHVhbCBwcm9iZSBtZWNoYW5pc20gZm9yIHRoZSBNZWxsYW5veCBkcml2ZXIuCgpMZXQgbWUgdGhpbmssIGRvZXMgYG5ldGRldnNpbWAgc29tZWhvdyB1c2UgYG1seDVgPyBObywgY29tcGxldGVseSBzZXBhcmF0ZSBkcml2ZXJzLiBUaGlzIG1lYW5zIHRob3NlIGBtbHg1YCBjaGFuZ2VzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHVucmVhY2hhYmxlIGluIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwcy4KCk5vdywgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZXZpZXcgdGhlIHByb3ZpZGVkIHByb21wdCYjMzk7cyBjcml0ZXJpYSBmb3IgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGRldGVybWluYXRpb24uIEl0IHNwZWNpZmllcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQW5kIHRoYXQgaXMgZXhhY3RseSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCByZXF1aXJlcyBhIE1lbGxhbm94IFBDSSBkZXZpY2UsIHdoaWNoLCBhcyBmYXIgYXMgSSBrbm93LCBpcyBub3QgZW11bGF0ZWQgd2l0aGluIHN5emthbGxlciYjMzk7cyBRRU1VIGVudmlyb25tZW50LiBUaGUgYG1seDVgIGRyaXZlciBpcyBub3QgcmVhY2hhYmxlIGFuZCBpdCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuCgpVbmxlc3MgdGhlcmUgaXMgc29tZSBvYnNjdXJlIHZpcnR1YWwgYnVzIHRoYXQgYWxsb3dzIHN5emthbGxlciB0byByZWFjaCBQQ0kgZGV2aWNlIGRyaXZlcnMuIFdhaXQgYSBtaW51dGUsIG5vLCBgbWx4NWAgaXMgYSBQQ0kgZGV2aWNlIGRyaXZlciwgdGhlcmUgaXMgbm8gd2F5IGFyb3VuZCB0aGF0LgoKT2ssIGxhc3QgY2hlY2sgLSBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBgbWx4NWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfLiptbHg1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5NzMKCQkJCQkJCW91dHB1dDogODkKCQkJCQkJCXRob3VnaHRzOiA0MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gJiMzNDtuby4mIzM0OyBJcyB0aGVyZSBldmVuIGEgcmVtb3RlIHBvc3NpYmlsaXR5IHRoaXMgY291bGQgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBObywgdGhlIGhhcmR3YXJlIGRyaXZlcnMgZm9yIFBDSSBkZXZpY2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgbGlrZSB0aGUgTWVsbGFub3ggZHJpdmVycywgYXJlIG5vdCByZWFsaXN0aWNhbGx5IHJlYWNoYWJsZSB3aXRob3V0IHByb3BlciBRRU1VIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbnMgaGlkZGVuIGluIGhlcmUuIE9rYXksIHRoZSBkaWZmIGlzIG9ubHkgdG91Y2hpbmcgZmlsZXMgd2l0aGluOgpgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaGAKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaGAKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmNgCgpZZXAsIGl0JiMzOTtzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9gIGRpcmVjdG9yeS4gU28sIGl0JiMzOTtzIHB1cmVseSBhIE1lbGxhbm94IGhhcmR3YXJlIGRyaXZlciBwYXRjaC4KCkkmIzM5O3ZlIGdvdCB0aGUgcmVzcG9uc2UuCmBXb3J0aEZ1enppbmc6IGZhbHNlYAoKVGhlIHJhdGlvbmFsZT8gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgTWVsbGFub3ggYG1seDVgIGhhcmR3YXJlIGRyaXZlciwgYW5kIGl0IGxvb2tzIHNwZWNpZmljYWxseSB0byB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZS4gQmVjYXVzZSB0aGlzIGRyaXZlciBmdW5kYW1lbnRhbGx5IHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQsIGFuZCBpdCYjMzk7cyBub3QgZW11bGF0ZWQgb3Igc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB0aGUgY29kZSBwYXRocyBzaW1wbHkgKndvbiYjMzk7dCogYmUgZXhlcmNpc2VkIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgaGFyZHdhcmUgZHJpdmVyIChzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIGZlYXR1cmUpLiBTaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGhhcmR3YXJlIGRyaXZlciAoc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBmZWF0dXJlKS4gU2luY2UgdGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIxOjQwOjU0LjU5MjIxMTA5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTI0MjE1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGhhcmR3YXJlIGRyaXZlciAoc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBmZWF0dXJlKS4gU2luY2UgdGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDA6NTQuNTkyMjIwMzI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU2NjY2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNzkyZGQwNTFiMDM1ZDE0YmZkYjU1YjhkYjY0NjIzZmM4NGI4YmI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjE6NDA6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxcbmluZGV4IDIyNzBlMmU1NTBkZDllLi4zY2M3MjgzYjYyMTVlMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oXFxuQEAgLTEwMTYsNyArMTAxNiw3IEBAIHN0cnVjdCBtbHg1ZV9wcm9maWxlIHtcXG4gXFx0dm9pZFxcdCgqY2xlYW51cF9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiBcXHRpbnRcXHQoKmluaXRfdHgpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gXFx0dm9pZFxcdCgqY2xlYW51cF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbi1cXHR2b2lkXFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4rXFx0aW50XFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gXFx0dm9pZFxcdCgqZGlzYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiBcXHRpbnRcXHQoKnVwZGF0ZV9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiBcXHR2b2lkXFx0KCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbmluZGV4IDA5MWI4MGE2NzE4OWRkLi40OTczZmI0NzNmZjAyMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oXFxuQEAgLTg4LDEzICs4OCwxOCBAQCBlbnVtIHtcXG4gI2lmZGVmIENPTkZJR19NTFg1X0VOX0FSRlNcXG4gXFx0TUxYNUVfQVJGU19GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXFxuICNlbmRpZlxcbi0jaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9JUFNFQykgfHwgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXFxuKyNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX0lQU0VDKVxcbiBcXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgKyAxLFxcbiBcXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfRVJSX0xFVkVMLFxcbiBcXHRNTFg1RV9BQ0NFTF9GU19QT0xfRlRfTEVWRUwsXFxuIFxcdE1MWDVFX0FDQ0VMX0ZTX1BPTF9NSVNTX0ZUX0xFVkVMLFxcbiBcXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfUk9DRV9MRVZFTCxcXG4gI2VuZGlmXFxuKyNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcXG4rXFx0TUxYNUVfQUNDRUxfRlNfUFNQX0ZUX0xFVkVMID0gTUxYNUVfSU5ORVJfVFRDX0ZUX0xFVkVMICsgMSxcXG4rXFx0TUxYNUVfQUNDRUxfRlNfUFNQX0VSUl9GVF9MRVZFTCxcXG4rXFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCBtbHg1ZV9mbG93X3N0ZWVyaW5nO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXFxuaW5kZXggYjUyNmIzODk4YzIyZTAuLjNmMjEyZTQ2ZmMyZjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcXG5AQCAtMjIwLDE4ICsyMjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfdHhfZmluaXNoKHN0cnVjdCBtbHg1ZV90eHFzcSAqc3EsXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRlcnIgPSBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhwcml2KTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRlcnIgPSBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHByaXYpO1xcbi1cXG4tb3V0Olxcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3J4KHByaXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG5AQCAtMjQyLDEyICsyMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4tXFx0aW50IGVycjtcXG4tXFxuLVxcdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHByaXYpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4gXFx0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF90eChwcml2KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXFxuaW5kZXggZDlhZGI5OTNlNjRkOTUuLjczYjIzMjM3OTI2M2FhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbkBAIC0yMSw1MSArMjEsNTIgQEAgZW51bSBhY2NlbF9wc3Bfc3luZHJvbWUge1xcbiBcXHRQU1BfQkFEX1RSQUlMRVIsXFxuIH07XFxuIFxcbi1zdHJ1Y3QgbWx4NWVfcHNwX3R4IHtcXG4rc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSB7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmZnO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4tXFx0c3RydWN0IG11dGV4IG11dGV4OyAvKiBQcm90ZWN0IFBTUCBUWCBzdGVlcmluZyAqL1xcbi1cXHR1MzIgcmVmY250O1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqdHhfY291bnRlcjtcXG4gfTtcXG4gXFxuLXN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHtcXG4rc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSB7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpkcm9wX2dyb3VwO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmF1dGhfZmFpbF9ydWxlO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZXJyX3J1bGU7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpiYWRfcnVsZTtcXG4tXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqY29weV9tb2RpZnlfaGRyO1xcbiB9O1xcbiBcXG4tc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90IHtcXG4rc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIHtcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7XFxuIFxcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKnJ4X21vZGlmeV9oZHI7XFxuLVxcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVmYXVsdF9kZXN0O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciByeF9lcnI7XFxuLVxcdHUzMiByZWZjbnQ7XFxuLVxcdHN0cnVjdCBtdXRleCBwcm90X211dGV4OyAvKiBwcm90ZWN0IEVTUDQvRVNQNiBwcm90b2NvbCAqL1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZGVmX3J1bGU7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xcbiB9O1xcbiBcXG4tc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCB7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCBmc19wcm90W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjtcXG4tXFx0c3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XFxuLVxcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcXG4rc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqdWRwX3J1bGVzW0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xcbiB9O1xcbiBcXG4gc3RydWN0IG1seDVlX3BzcF9mcyB7XFxuIFxcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcXG4tXFx0LyogUnggbWFuYWdlICovXFxuK1xcdHN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyO1xcbitcXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHR4O1xcbitcXG4rXFx0LyogUnggKi9cXG4gXFx0c3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmcgKmZzO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICpyeF9mcztcXG4rXFx0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XFxuK1xcdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcXG4rXFx0c3RydWN0IG1seDVfZmMgKnJ4X2Vycl9jb3VudGVyO1xcbitcXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XFxuK1xcbitcXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgZGVjcnlwdFtBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcXG4rXFx0c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSBjaGVjaztcXG4rXFx0c3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSByeDtcXG4gfTtcXG4gXFxuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXFxuQEAgLTc3LDQ0ICs3OCwyMDAgQEAgc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXFxuIFxcdHJldHVybiBNTFg1X1RUX0lQVjZfVURQO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2RlbF9ydWxlcyhzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyICpmdF9hdHRyLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKipmdClcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0KmZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsIGZ0X2F0dHIpO1xcbitcXHRpZiAoSVNfRVJSKCpmdCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUigqZnQpO1xcbitcXHRcXHQqZnQgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqdGFibGUpXFxuIHtcXG4tXFx0aWYgKHJ4X2Vyci1cXHUwMDNlYmFkX3J1bGUpIHtcXG4tXFx0XFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWJhZF9ydWxlKTtcXG4tXFx0XFx0cnhfZXJyLVxcdTAwM2ViYWRfcnVsZSA9IE5VTEw7XFxuK1xcdGlmICgqdGFibGUpIHtcXG4rXFx0XFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoKnRhYmxlKTtcXG4rXFx0XFx0KnRhYmxlID0gTlVMTDtcXG4gXFx0fVxcbit9XFxuIFxcbi1cXHRpZiAocnhfZXJyLVxcdTAwM2VlcnJfcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlZXJyX3J1bGUpO1xcbi1cXHRcXHRyeF9lcnItXFx1MDAzZWVycl9ydWxlID0gTlVMTDtcXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxcbit7XFxuK1xcdGlmICgqcnVsZSkge1xcbitcXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKCpydWxlKTtcXG4rXFx0XFx0KnJ1bGUgPSBOVUxMO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cClcXG4re1xcbitcXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcXG4rXFx0dTMyICppbiA9IGt2emFsbG9jKGlubGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbi1cXHRpZiAocnhfZXJyLVxcdTAwM2VhdXRoX2ZhaWxfcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xcbi1cXHRcXHRyeF9lcnItXFx1MDAzZWF1dGhfZmFpbF9ydWxlID0gTlVMTDtcXG4rXFx0aWYgKCFpbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRNTFg1X1NFVChjcmVhdGVfZmxvd19ncm91cF9pbiwgaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVxcdTAwM2VtYXhfZnRlIC0gMSk7XFxuK1xcdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBpbiwgZW5kX2Zsb3dfaW5kZXgsIGZ0LVxcdTAwM2VtYXhfZnRlIC0gMSk7XFxuK1xcdCpncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGluKTtcXG4rXFx0aWYgKElTX0VSUigqZ3JvdXApKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoKmdyb3VwKTtcXG4rXFx0XFx0Kmdyb3VwID0gTlVMTDtcXG4gXFx0fVxcbitcXHRrdmZyZWUoaW4pO1xcbiBcXG4tXFx0aWYgKHJ4X2Vyci1cXHUwMDNlcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlcnVsZSk7XFxuLVxcdFxcdHJ4X2Vyci1cXHUwMDNlcnVsZSA9IE5VTEw7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxcbit7XFxuK1xcdGlmICgqZ3JvdXApIHtcXG4rXFx0XFx0bWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoKmdyb3VwKTtcXG4rXFx0XFx0Kmdyb3VwID0gTlVMTDtcXG4gXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKVxcbit7XFxuK1xcdCpjb3VudGVyID0gbWx4NV9mY19jcmVhdGUoZGV2LCBmYWxzZSk7XFxuK1xcdGlmIChJU19FUlIoKmNvdW50ZXIpKSB7XFxuK1xcdFxcdGludCBlcnIgPSBQVFJfRVJSKCpjb3VudGVyKTtcXG4rXFxuK1xcdFxcdCpjb3VudGVyID0gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuLVxcdGlmIChyeF9lcnItXFx1MDAzZWNvcHlfbW9kaWZ5X2hkcikge1xcbi1cXHRcXHRtbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhmcy1cXHUwMDNlbWRldiwgcnhfZXJyLVxcdTAwM2Vjb3B5X21vZGlmeV9oZHIpO1xcbi1cXHRcXHRyeF9lcnItXFx1MDAzZWNvcHlfbW9kaWZ5X2hkciA9IE5VTEw7XFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtbHg1X2ZjICoqY291bnRlcilcXG4re1xcbitcXHRpZiAoKmNvdW50ZXIpIHtcXG4rXFx0XFx0bWx4NV9mY19kZXN0cm95KGRldiwgKmNvdW50ZXIpO1xcbitcXHRcXHQqY291bnRlciA9IE5VTEw7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlICpyeClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspXFxuK1xcdFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZyeC1cXHUwMDNldWRwX3J1bGVzW2ldKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNnJ4LVxcdTAwM2VtaXNzX3J1bGUpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZyeC1cXHUwMDNlbWlzc19ncm91cCk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFxcdTAwMjZyeC1cXHUwMDNlZnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpXFxuIHtcXG4tXFx0YWNjZWxfcHNwX2ZzX3J4X2Vycl9kZWxfcnVsZXMoZnMsIHJ4X2Vycik7XFxuK1xcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cXHUwMDNlZnMsIGZhbHNlKTtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdID0ge307XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XFxuK1xcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXFx1MDAzZW1kZXY7XFxuK1xcdE1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XFxuK1xcdGludCBpLCBlcnIgPSAwO1xcbitcXG4rXFx0c3BlYyA9IGt6YWxsb2Nfb2JqKCpzcGVjKTtcXG4rXFx0aWYgKCFzcGVjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgKyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTO1xcbitcXHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMO1xcbitcXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcXG4rXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcXHUwMDI2ZnRfYXR0ciwgXFx1MDAyNnJ4LVxcdTAwM2VmdCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAocnhfZXJyLVxcdTAwM2VmdCkge1xcbi1cXHRcXHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShyeF9lcnItXFx1MDAzZWZ0KTtcXG4tXFx0XFx0cnhfZXJyLVxcdTAwM2VmdCA9IE5VTEw7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChyeC1cXHUwMDNlZnQsIFxcdTAwMjZyeC1cXHUwMDNlbWlzc19ncm91cCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4rXFxuK1xcdC8qIEFkZCBtaXNzIHJ1bGUgKi9cXG4rXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4rXFx0XFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xcbitcXHRmbG93X2FjdC5mbGFncyA9IEZMT1dfQUNUX0lHTk9SRV9GTE9XX0xFVkVMO1xcbitcXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xcbitcXHRkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTtcXG4rXFx0ZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcXG4rXFx0ZGVzdFsxXS5jb3VudGVyID0gZnMtXFx1MDAzZXJ4X2NvdW50ZXI7XFxuK1xcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4LVxcdTAwM2VmdCwgTlVMTCwgXFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcXG4rXFx0aWYgKElTX0VSUihydWxlKSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggcnVsZSwgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcdH1cXG4rXFx0cngtXFx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XFxuK1xcbitcXHQvKiBBZGQgVURQIHY0L3Y2IHJ1bGVzICovXFxuK1xcdHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSA9IE1MWDVfTUFUQ0hfT1VURVJfSEVBREVSUztcXG4rXFx0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhLFxcbitcXHRcXHRcXHQgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uKTtcXG4rXFx0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhLFxcbitcXHRcXHRcXHQgaXBfcHJvdG9jb2wpO1xcbitcXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtXFx1MDAzZW1hdGNoX3ZhbHVlLCBpcF9wcm90b2NvbCxcXG4rXFx0XFx0IElQUFJPVE9fVURQKTtcXG4rXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4rXFx0XFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xcbitcXHRmbG93X2FjdC5mbGFncyA9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspIHtcXG4rXFx0XFx0aW50IHZlcnNpb24gPSBpID09IEFDQ0VMX0ZTX1BTUDQgPyA0IDogNjtcXG4rXFxuK1xcdFxcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsXFxuK1xcdFxcdFxcdCBvdXRlcl9oZWFkZXJzLmlwX3ZlcnNpb24sIHZlcnNpb24pO1xcbitcXHRcXHRkZXN0WzBdID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XFxuK1xcdFxcdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuK1xcdFxcdGRlc3RbMV0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9jb3VudGVyO1xcbitcXHRcXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgZGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgMik7XFxuK1xcdFxcdGlmIChJU19FUlIocnVsZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihydWxlKTtcXG4rXFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IFVEUCVkIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICB2ZXJzaW9uLCBlcnIpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cngtXFx1MDAzZXVkcF9ydWxlc1tpXSA9IHJ1bGU7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfc3BlYztcXG4rXFxuK291dF9lcnI6XFxuK1xcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTtcXG4rb3V0X3NwZWM6XFxuK1xcdGt2ZnJlZShzcGVjKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljXFxuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spXFxuK3tcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmNoZWNrLVxcdTAwM2ViYWRfcnVsZSk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZjaGVjay1cXHUwMDNlZXJyX3J1bGUpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcXHUwMDI2Y2hlY2stXFx1MDAzZWF1dGhfZmFpbF9ydWxlKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmNoZWNrLVxcdTAwM2VydWxlKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcXHUwMDI2Y2hlY2stXFx1MDAzZWRyb3BfZ3JvdXApO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcXHUwMDI2Y2hlY2stXFx1MDAzZWZ0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYyxcXG5AQCAtMTI5LDE1ICsyODYsMzUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYyxcXG4gXFx0TUxYNV9TRVQoZnRlX21hdGNoX3NldF9taXNjMiwgbWlzY19wYXJhbXNfMiwgcHNwX3N5bmRyb21lLCBzeW5kcm9tZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpXFxuIHtcXG4tXFx0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfFxcbitcXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcXG4rXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcXG4rXFx0ZGVzdC5jb3VudGVyID0gY291bnRlcjtcXG4rXFx0KnJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIFxcdTAwMjZkZXN0LCAxKTtcXG4rXFx0aWYgKElTX0VSUigqcnVsZSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUigqcnVsZSk7XFxuK1xcdFxcdCpydWxlID0gTlVMTDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWNcXG4raW50IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2NoZWNrX3RhYmxlICpjaGVjaylcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cXHUwMDNlbWRldjtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9O1xcbi1cXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZnRlO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XFxuIFxcdGludCBlcnIgPSAwO1xcbkBAIC0xNDYsMTc0ICszMjMsOTcgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbiBcXHRpZiAoIXNwZWMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0LyogQWN0aW9uIHRvIGNvcHkgNyBiaXQgcHNwX3N5bmRyb21lIHRvIHJlZ0JbMjM6MjldICovXFxuLVxcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xcbi1cXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX1BTUF9TWU5EUk9NRSk7XFxuLVxcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19vZmZzZXQsIDApO1xcbi1cXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDcpO1xcbi1cXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcXG4tXFx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMjMpO1xcbitcXHRmdF9hdHRyLm1heF9mdGUgPSA0O1xcbitcXHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XFxuK1xcdGZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMjtcXG4rXFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUw7XFxuK1xcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcXHUwMDI2ZnRfYXR0ciwgXFx1MDAyNmNoZWNrLVxcdTAwM2VmdCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2Vycihmcy1cXHUwMDNlbWRldixcXG4rXFx0XFx0XFx0ICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBmdCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0fVxcbiBcXG4tXFx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgMSwgYWN0aW9uKTtcXG4tXFx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGFsbG9jIHBzcCBjb3B5IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dF9zcGVjO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoY2hlY2stXFx1MDAzZWZ0LCBcXHUwMDI2Y2hlY2stXFx1MDAzZWRyb3BfZ3JvdXApO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG1seDVfY29yZV9lcnIoZnMtXFx1MDAzZW1kZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggY2hlY2sgZHJvcCBncm91cCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbiBcXG4gXFx0YWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9PSyk7XFxuIFxcdC8qIGNyZWF0ZSBmdGUgKi9cXG4tXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxcbi1cXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XFxuLVxcdFxcdFxcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xcbi1cXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4tXFx0ZGVzdFswXS50eXBlID0gZnNfcHJvdC1cXHUwMDNlZGVmYXVsdF9kZXN0LnR5cGU7XFxuLVxcdGRlc3RbMF0uZnQgPSBmc19wcm90LVxcdTAwM2VkZWZhdWx0X2Rlc3QuZnQ7XFxuLVxcdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3RbMV0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9mcy1cXHUwMDNlcnhfY291bnRlcjtcXG4tXFx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDIpO1xcbitcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XFxuK1xcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuK1xcdGRlc3QuZnQgPSBmcy1cXHUwMDNlcnguZnQ7XFxuK1xcdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoY2hlY2stXFx1MDAzZWZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIFxcdTAwMjZkZXN0LCAxKTtcXG4gXFx0aWYgKElTX0VSUihmdGUpKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIoZnRlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGVyciBjb3B5IHJ1bGUgZXJyPSVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIG9rIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0cnhfZXJyLVxcdTAwM2VydWxlID0gZnRlO1xcbitcXHRjaGVjay1cXHUwMDNlcnVsZSA9IGZ0ZTtcXG4gXFxuIFxcdC8qIGFkZCBhdXRoIGZhaWwgZHJvcCBydWxlICovXFxuIFxcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XFxuIFxcdGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfSUNWX0ZBSUwpO1xcbi1cXHQvKiBjcmVhdGUgZnRlICovXFxuLVxcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcXG4tXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XFxuLVxcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3RbMF0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9mcy1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXI7XFxuLVxcdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAxKTtcXG4tXFx0aWYgKElTX0VSUihmdGUpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZnRlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShjaGVjay1cXHUwMDNlZnQsIHNwZWMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGZzLVxcdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNoZWNrLVxcdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dF9kcm9wX3J1bGU7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRyeF9lcnItXFx1MDAzZWF1dGhfZmFpbF9ydWxlID0gZnRlO1xcbiBcXG4gXFx0LyogYWRkIGZyYW1pbmcgZHJvcCBydWxlICovXFxuIFxcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XFxuIFxcdGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfQkFEX1RSQUlMRVIpO1xcbi1cXHQvKiBjcmVhdGUgZnRlICovXFxuLVxcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcXG4tXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XFxuLVxcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3RbMF0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9mcy1cXHUwMDNlcnhfZXJyX2NvdW50ZXI7XFxuLVxcdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAxKTtcXG4tXFx0aWYgKElTX0VSUihmdGUpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZnRlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGZyYW1pbmcgZXJyIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVxcdTAwM2VmdCwgc3BlYywgZnMtXFx1MDAzZXJ4X2Vycl9jb3VudGVyLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y2hlY2stXFx1MDAzZWVycl9ydWxlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgZnJhbWluZyBkcm9wIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dF9kcm9wX2F1dGhfZmFpbF9ydWxlO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0cnhfZXJyLVxcdTAwM2VlcnJfcnVsZSA9IGZ0ZTtcXG4gXFxuIFxcdC8qIGFkZCBtaXNjLiBlcnJvcnMgZHJvcCBydWxlICovXFxuIFxcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XFxuLVxcdC8qIGNyZWF0ZSBmdGUgKi9cXG4tXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfFxcbi1cXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcXG4tXFx0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcXG4tXFx0ZGVzdFswXS5jb3VudGVyID0gZnMtXFx1MDAzZXJ4X2ZzLVxcdTAwM2VyeF9iYWRfY291bnRlcjtcXG4tXFx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xcbi1cXHRpZiAoSVNfRVJSKGZ0ZSkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihmdGUpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVxcdTAwM2VmdCwgc3BlYywgZnMtXFx1MDAzZXJ4X2JhZF9jb3VudGVyLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y2hlY2stXFx1MDAzZWJhZF9ydWxlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgIGVycik7XFxuLVxcdFxcdGdvdG8gb3V0X2Ryb3BfZXJyb3JfcnVsZTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuLVxcdHJ4X2Vyci1cXHUwMDNlYmFkX3J1bGUgPSBmdGU7XFxuLVxcbi1cXHRyeF9lcnItXFx1MDAzZWNvcHlfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XFxuIFxcbiBcXHRnb3RvIG91dF9zcGVjO1xcbiBcXG4tb3V0X2Ryb3BfZXJyb3JfcnVsZTpcXG4tXFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWVycl9ydWxlKTtcXG4tXFx0cnhfZXJyLVxcdTAwM2VlcnJfcnVsZSA9IE5VTEw7XFxuLW91dF9kcm9wX2F1dGhfZmFpbF9ydWxlOlxcbi1cXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xcbi1cXHRyeF9lcnItXFx1MDAzZWF1dGhfZmFpbF9ydWxlID0gTlVMTDtcXG4tb3V0X2Ryb3BfcnVsZTpcXG4tXFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZXJ1bGUpO1xcbi1cXHRyeF9lcnItXFx1MDAzZXJ1bGUgPSBOVUxMO1xcbi1vdXQ6XFxuLVxcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKG1kZXYsIG1vZGlmeV9oZHIpO1xcbitvdXRfZXJyOlxcbitcXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShjaGVjayk7XFxuIG91dF9zcGVjOlxcbiBcXHRrZnJlZShzcGVjKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXFxuK3N0YXRpYyB2b2lkXFxuK2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdClcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuLVxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XFxuLVxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcXG4tXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xcbi1cXHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0VSUl9MRVZFTDsgLy8gTUxYNUVfQUNDRUxfRlNfVENQX0ZUX0xFVkVMXFxuLVxcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbi1cXHRmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBcXHUwMDI2ZnRfYXR0cik7XFxuLVxcdGlmIChJU19FUlIoZnQpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZnQpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKGZzLVxcdTAwM2VtZGV2LCBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGlubGluZSBmdCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4tXFxuLVxcdHJ4X2Vyci1cXHUwMDNlZnQgPSBmdDtcXG4tXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShmcywgZnNfcHJvdCwgcnhfZXJyKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfZXJyOlxcbi1cXHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShmdCk7XFxuLVxcdHJ4X2Vyci1cXHUwMDNlZnQgPSBOVUxMO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdClcXG4te1xcbi1cXHRpZiAoZnNfcHJvdC1cXHUwMDNlZGVmX3J1bGUpIHtcXG4tXFx0XFx0bWx4NV9kZWxfZmxvd19ydWxlcyhmc19wcm90LVxcdTAwM2VkZWZfcnVsZSk7XFxuLVxcdFxcdGZzX3Byb3QtXFx1MDAzZWRlZl9ydWxlID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZzX3Byb3QtXFx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcXG4tXFx0XFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXFx1MDAzZW1kZXYsIGZzX3Byb3QtXFx1MDAzZXJ4X21vZGlmeV9oZHIpO1xcbi1cXHRcXHRmc19wcm90LVxcdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSk7XFxuLVxcdFxcdGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSA9IE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChmc19wcm90LVxcdTAwM2VtaXNzX2dyb3VwKSB7XFxuLVxcdFxcdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKGZzX3Byb3QtXFx1MDAzZW1pc3NfZ3JvdXApO1xcbi1cXHRcXHRmc19wcm90LVxcdTAwM2VtaXNzX2dyb3VwID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZzX3Byb3QtXFx1MDAzZWZ0KSB7XFxuLVxcdFxcdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZzX3Byb3QtXFx1MDAzZWZ0KTtcXG4tXFx0XFx0ZnNfcHJvdC1cXHUwMDNlZnQgPSBOVUxMO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlcnVsZSk7XFxuK1xcdGlmIChkZWNyeXB0LVxcdTAwM2VyeF9tb2RpZnlfaGRyKSB7XFxuK1xcdFxcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVxcdTAwM2VtZGV2LCBkZWNyeXB0LVxcdTAwM2VyeF9tb2RpZnlfaGRyKTtcXG4rXFx0XFx0ZGVjcnlwdC1cXHUwMDNlcnhfbW9kaWZ5X2hkciA9IE5VTEw7XFxuIFxcdH1cXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmRlY3J5cHQtXFx1MDAzZW1pc3NfcnVsZSk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXFx1MDAyNmRlY3J5cHQtXFx1MDAzZW1pc3NfZ3JvdXApO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlZnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcXG5AQCAtMzI1LDcwICs0MjUsNjQgQEAgc3RhdGljIHZvaWQgc2V0dXBfZnRlX3VkcF9wc3Aoc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLCB1MTYgdWRwX3BvcnQpXFxuIFxcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsIGlwX3Byb3RvY29sLCBJUFBST1RPX1VEUCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXFxuK3N0YXRpYyBpbnRcXG4rYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uICpkZWZhdWx0X2Rlc3QpXFxuIHtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVxcdTAwM2VmcywgZmFsc2UpO1xcbiBcXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xcbi1cXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcXG4gXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkciA9IE5VTEw7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xcbiBcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVxcdTAwM2VtZGV2O1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xcbiBcXHRNTFg1X0RFQ0xBUkVfRkxPV19BQ1QoZmxvd19hY3QpO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG4tXFx0dTMyICpmbG93X2dyb3VwX2luO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdGZsb3dfZ3JvdXBfaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7XFxuIFxcdHNwZWMgPSBrdnphbGxvY19vYmooKnNwZWMpO1xcbi1cXHRpZiAoIWZsb3dfZ3JvdXBfaW4gfHwgIXNwZWMpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4rXFx0aWYgKCFzcGVjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdC8qIENyZWF0ZSBGVCAqL1xcbiBcXHRmdF9hdHRyLm1heF9mdGUgPSAyO1xcbi1cXHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0xFVkVMO1xcbi1cXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcXG4rXFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTDtcXG4gXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xcbiBcXHRmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDE7XFxuLVxcdGZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsIFxcdTAwMjZmdF9hdHRyKTtcXG4tXFx0aWYgKElTX0VSUihmdCkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihmdCk7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBmdCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuK1xcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcXHUwMDI2ZnRfYXR0ciwgXFx1MDAyNmRlY3J5cHQtXFx1MDAzZWZ0KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZGVjcnlwdCBmdCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRmc19wcm90LVxcdTAwM2VmdCA9IGZ0O1xcbiBcXG4gXFx0LyogQ3JlYXRlIG1pc3NfZ3JvdXAgKi9cXG4tXFx0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGZsb3dfZ3JvdXBfaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVxcdTAwM2VtYXhfZnRlIC0gMSk7XFxuLVxcdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBlbmRfZmxvd19pbmRleCwgZnQtXFx1MDAzZW1heF9mdGUgLSAxKTtcXG4tXFx0bWlzc19ncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGZsb3dfZ3JvdXBfaW4pO1xcbi1cXHRpZiAoSVNfRVJSKG1pc3NfZ3JvdXApKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIobWlzc19ncm91cCk7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX2dyb3VwIGVycj0lZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGRlY3J5cHQtXFx1MDAzZWZ0LCBcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlbWlzc19ncm91cCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgbWlzc19ncm91cCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRmc19wcm90LVxcdTAwM2VtaXNzX2dyb3VwID0gbWlzc19ncm91cDtcXG4gXFxuIFxcdC8qIENyZWF0ZSBtaXNzIHJ1bGUgKi9cXG4tXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmZzX3Byb3QtXFx1MDAzZWRlZmF1bHRfZGVzdCwgMSk7XFxuK1xcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcXG4rXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjcnlwdC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgZGVmYXVsdF9kZXN0LFxcbitcXHRcXHRcXHRcXHQgICAxKTtcXG4gXFx0aWYgKElTX0VSUihydWxlKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggbWlzc19ydWxlIGVycj0lZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgbWlzc19ydWxlIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyKTtcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuLVxcdGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XFxuK1xcdGRlY3J5cHQtXFx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XFxuIFxcbi1cXHQvKiBBZGQgZGVmYXVsdCBSeCBwc3AgcnVsZSAqL1xcbitcXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xcbiBcXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XFxuIFxcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xcbiBcXHQvKiBTZXQgYml0WzMxLCAzMF0gUFNQIG1hcmtlciAqL1xcbi1cXHQvKiBTZXQgYml0WzI5LTIzXSBwc3Bfc3luZHJvbWUgaXMgc2V0IGluIGVycm9yIEZUICovXFxuICNkZWZpbmUgTUxYNUVfUFNQX01BUktFUl9CSVQgKEJJVCgzMCkgfCBCSVQoMzEpKVxcbiBcXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XFxuIFxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcXG5AQCAtNDAzLDI3NSArNDk3LDE1OSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuIFxcdFxcdG1vZGlmeV9oZHIgPSBOVUxMO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0ZnNfcHJvdC1cXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XFxuK1xcdGRlY3J5cHQtXFx1MDAzZXJ4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbiBcXG4gXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4gXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxcbiBcXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSO1xcbiBcXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4gXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4tXFx0ZGVzdC5mdCA9IGZzX3Byb3QtXFx1MDAzZXJ4X2Vyci5mdDtcXG4tXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnNfcHJvdC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmRlc3QsIDEpO1xcbitcXHRkZXN0LmZ0ID0gZnMtXFx1MDAzZWNoZWNrLmZ0O1xcbitcXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBcXHUwMDI2ZGVzdCwgMSk7XFxuIFxcdGlmIChJU19FUlIocnVsZSkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihydWxlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbi1cXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgZXJyLCBmbG93X2FjdC5hY3Rpb24pO1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggZGVjcnlwdCBydWxlLCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbiBcXG4tXFx0ZnNfcHJvdC1cXHUwMDNlZGVmX3J1bGUgPSBydWxlO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0ZGVjcnlwdC1cXHUwMDNlcnVsZSA9IHJ1bGU7XFxuK1xcdGdvdG8gb3V0X3NwZWM7XFxuIFxcbiBvdXRfZXJyOlxcbi1cXHRhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShmcywgZnNfcHJvdCk7XFxuLW91dDpcXG4tXFx0a3ZmcmVlKGZsb3dfZ3JvdXBfaW4pO1xcbitcXHRhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KGZzLCBkZWNyeXB0KTtcXG4rb3V0X3NwZWM6XFxuIFxcdGt2ZnJlZShzcGVjKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFxuLVxcdC8qIFRoZSBuZXRkZXYgdW5yZWcgYWxyZWFkeSBoYXBwZW5lZCwgc28gYWxsIG9mZmxvYWRlZCBydWxlIGFyZSBhbHJlYWR5IHJlbW92ZWQgKi9cXG4tXFx0ZnNfcHJvdCA9IFxcdTAwMjZhY2NlbF9wc3AtXFx1MDAzZWZzX3Byb3RbdHlwZV07XFxuLVxcbi1cXHRhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShmcywgZnNfcHJvdCk7XFxuLVxcbi1cXHRhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoZnMsIFxcdTAwMjZmc19wcm90LVxcdTAwM2VyeF9lcnIpO1xcbitcXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuK1xcdGludCBpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdC8qIGRpc2Nvbm5lY3QgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xcbitcXHRcXHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpKTtcXG4rXFx0XFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNyeXB0W2ldKTtcXG4rXFx0fVxcbitcXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcXHUwMDI2ZnMtXFx1MDAzZWNoZWNrKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXFx1MDAyNmZzLVxcdTAwM2VyeCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cXHUwMDNlZnMsIGZhbHNlKTtcXG4tXFx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRhY2NlbF9wc3AgPSBmcy1cXHUwMDNlcnhfZnM7XFxuLVxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W3R5cGVdO1xcbitcXHRpbnQgaSwgZXJyO1xcbiBcXG4tXFx0ZnNfcHJvdC1cXHUwMDNlZGVmYXVsdF9kZXN0ID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSk7XFxuLVxcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZXJyX2NyZWF0ZV9mdChmcywgZnNfcHJvdCwgXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXJ4X2Vycik7XFxuLVxcdGlmIChlcnIpXFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoZnMsIFxcdTAwMjZmcy1cXHUwMDNlcngpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCBjcmVhdGluZyBSWCBzdGVlcmluZyB0YWJsZVxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuIFxcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0YWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KGZzLCBcXHUwMDI2ZnNfcHJvdC1cXHUwMDNlcnhfZXJyKTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxcbi17XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFx0c3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGM7XFxuLVxcdGludCBlcnIgPSAwO1xcbi1cXG4tXFx0aWYgKCFmcyB8fCAhZnMtXFx1MDAzZXJ4X2ZzKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdHR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFx0ZnNfcHJvdCA9IFxcdTAwMjZhY2NlbF9wc3AtXFx1MDAzZWZzX3Byb3RbdHlwZV07XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXByb3RfbXV0ZXgpO1xcbi1cXHRpZiAoZnNfcHJvdC1cXHUwMDNlcmVmY250KyspXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0LyogY3JlYXRlIEZUICovXFxuLVxcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoZnMsIHR5cGUpO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKGZzLCBcXHUwMDI2ZnMtXFx1MDAzZWNoZWNrKTtcXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHRmc19wcm90LVxcdTAwM2VyZWZjbnQtLTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJGYWlsZWQgY3JlYXRpbmcgUlggY2hlY2sgc3RlZXJpbmcgdGFibGVcXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfZnQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGNvbm5lY3QgKi9cXG4tXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4tXFx0ZGVzdC5mdCA9IGZzX3Byb3QtXFx1MDAzZWZ0O1xcbi1cXHRtbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSwgXFx1MDAyNmRlc3QpO1xcbi1cXG4tb3V0Olxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXByb3RfbXV0ZXgpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXFxuLXtcXG4tXFx0c3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGMgPSBtbHg1ZV9mc19nZXRfdHRjKGZzLVxcdTAwM2VmcywgZmFsc2UpO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFx0ZnNfcHJvdCA9IFxcdTAwMjZhY2NlbF9wc3AtXFx1MDAzZWZzX3Byb3RbdHlwZV07XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXByb3RfbXV0ZXgpO1xcbi1cXHRpZiAoLS1mc19wcm90LVxcdTAwM2VyZWZjbnQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0LyogZGlzY29ubmVjdCAqL1xcbi1cXHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KHR5cGUpKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3Q7XFxuK1xcbitcXHRcXHRkZXN0ID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XFxuK1xcdFxcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNyeXB0W2ldLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZGVzdCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkZhaWxlZCBjcmVhdGluZyBSWCBkZWNyeXB0IHN0ZWVyaW5nIHRhYmxlXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2RlY3J5cHRfZnQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuK1xcdFxcdGRlc3QuZnQgPSBmcy1cXHUwMDNlZGVjcnlwdFtpXS5mdDtcXG4rXFx0XFx0bWx4NV90dGNfZndkX2Rlc3QodHRjLCBmc19wc3AydHQoaSksIFxcdTAwMjZkZXN0KTtcXG4rXFx0fVxcbiBcXG4tXFx0LyogcmVtb3ZlIEZUICovXFxuLVxcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KGZzLCB0eXBlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIFxcbi1vdXQ6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZnNfcHJvdC1cXHUwMDNlcHJvdF9tdXRleCk7XFxuK2Vycl9kZWNyeXB0X2Z0OlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0bWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XFxuK1xcdFxcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIFxcdTAwMjZmcy1cXHUwMDNlZGVjcnlwdFtpXSk7XFxuK1xcdH1cXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koXFx1MDAyNmZzLVxcdTAwM2VjaGVjayk7XFxuK2Vycl9mdDpcXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXFx1MDAyNmZzLVxcdTAwM2VyeCk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xcbi1cXG4tXFx0aWYgKCFmcy1cXHUwMDNlcnhfZnMpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2JhZF9jb3VudGVyKTtcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XFxuLVxcdFxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W2ldO1xcbi1cXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZmc19wcm90LVxcdTAwM2Vwcm90X211dGV4KTtcXG4tXFx0XFx0V0FSTl9PTihmc19wcm90LVxcdTAwM2VyZWZjbnQpO1xcbi1cXHR9XFxuLVxcdGtmcmVlKGZzLVxcdTAwM2VyeF9mcyk7XFxuLVxcdGZzLVxcdTAwM2VyeF9mcyA9IE5VTEw7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXFx1MDAzZW1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZnMtXFx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy1cXHUwMDNlbWRldiwgXFx1MDAyNmZzLVxcdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXFx1MDAzZW1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfY291bnRlcik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIHtcXG4tXFx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XFxuIFxcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXFx1MDAzZW1kZXY7XFxuLVxcdHN0cnVjdCBtbHg1X2ZjICpmbG93X2NvdW50ZXI7XFxuLVxcdGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgaTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGFjY2VsX3BzcCA9IGt6YWxsb2Nfb2JqKCphY2NlbF9wc3ApO1xcbi1cXHRpZiAoIWFjY2VsX3BzcClcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XFxuLVxcdFxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W2ldO1xcbi1cXHRcXHRtdXRleF9pbml0KFxcdTAwMjZmc19wcm90LVxcdTAwM2Vwcm90X211dGV4KTtcXG4tXFx0fVxcbi1cXG4tXFx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xcbi1cXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfY291bnRlcik7XFxuK1xcdGlmIChlcnIpIHtcXG4gXFx0XFx0bWx4NV9jb3JlX3dhcm4obWRldixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZmxvdyBjb3VudGVyIGVycj0lcGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBmbG93X2NvdW50ZXIpO1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7XFxuK1xcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZsb3cgY291bnRlciBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBlcnIpO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0YWNjZWxfcHNwLVxcdTAwM2VyeF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xcbiBcXG4tXFx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xcbi1cXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG1seDVfY29yZV93YXJuKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIGZsb3dfY291bnRlcik7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcXG4tXFx0XFx0Z290byBvdXRfY291bnRlcl9lcnI7XFxuK1xcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuLVxcdGFjY2VsX3BzcC1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XFxuIFxcbi1cXHRmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7XFxuLVxcdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXFx1MDAyNmZzLVxcdTAwM2VyeF9lcnJfY291bnRlcik7XFxuK1xcdGlmIChlcnIpIHtcXG4gXFx0XFx0bWx4NV9jb3JlX3dhcm4obWRldixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lcGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBmbG93X2NvdW50ZXIpO1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7XFxuLVxcdFxcdGdvdG8gb3V0X2F1dGhfZmFpbF9jb3VudGVyX2VycjtcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRhY2NlbF9wc3AtXFx1MDAzZXJ4X2Vycl9jb3VudGVyID0gZmxvd19jb3VudGVyO1xcbiBcXG4tXFx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xcbi1cXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG1seDVfY29yZV93YXJuKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGJhZCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIGZsb3dfY291bnRlcik7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcXG4tXFx0XFx0Z290byBvdXRfZXJyX2NvdW50ZXJfZXJyO1xcbitcXHRcXHRcXHQgICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRhY2NlbF9wc3AtXFx1MDAzZXJ4X2JhZF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xcbi1cXG4tXFx0ZnMtXFx1MDAzZXJ4X2ZzID0gYWNjZWxfcHNwO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1vdXRfZXJyX2NvdW50ZXJfZXJyOlxcbi1cXHRtbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLVxcdTAwM2VyeF9lcnJfY291bnRlcik7XFxuLVxcdGFjY2VsX3BzcC1cXHUwMDNlcnhfZXJyX2NvdW50ZXIgPSBOVUxMO1xcbi1vdXRfYXV0aF9mYWlsX2NvdW50ZXJfZXJyOlxcbi1cXHRtbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLVxcdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XFxuLVxcdGFjY2VsX3BzcC1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIgPSBOVUxMO1xcbi1vdXRfY291bnRlcl9lcnI6XFxuLVxcdG1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIpO1xcbi1cXHRhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIgPSBOVUxMO1xcbiBvdXRfZXJyOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XFxuLVxcdFxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W2ldO1xcbi1cXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZmc19wcm90LVxcdTAwM2Vwcm90X211dGV4KTtcXG4tXFx0fVxcbi1cXHRrZnJlZShhY2NlbF9wc3ApO1xcbi1cXHRmcy1cXHUwMDNlcnhfZnMgPSBOVUxMO1xcbi1cXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoZnMpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0aWYgKCFwcml2LVxcdTAwM2Vwc3ApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspXFxuLVxcdFxcdGFjY2VsX3BzcF9mc19yeF9mdF9wdXQocHJpdi1cXHUwMDNlcHNwLVxcdTAwM2VmcywgaSk7XFxuLX1cXG4tXFxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4te1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcztcXG4tXFx0aW50IGVyciwgaTtcXG4tXFxuLVxcdGlmICghcHJpdi1cXHUwMDNlcHNwKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdGZzID0gcHJpdi1cXHUwMDNlcHNwLVxcdTAwM2VmcztcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuLW91dF9lcnI6XFxuLVxcdGktLTtcXG4tXFx0d2hpbGUgKGkgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KGZzLCBpKTtcXG4tXFx0XFx0LS1pO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRuZXRkZXZfbG9jayhwcml2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzKTtcXG4rXFx0bmV0ZGV2X3VubG9jayhwcml2LVxcdTAwM2VuZXRkZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlICp0eClcXG4ge1xcbiBcXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcXG5AQCAtNjgxLDcgKzY1OSw2IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4gXFx0dTMyICppbiwgKm1jLCAqb3V0ZXJfaGVhZGVyc19jO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmZnO1xcbiBcXHRpbnQgZXJyID0gMDtcXG5AQCAtNzAwLDggKzY3Nyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4gXFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX1BTUF9MRVZFTDtcXG4gXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAxO1xcbiBcXG4tXFx0dHhfZnMgPSBmcy1cXHUwMDNldHhfZnM7XFxuLVxcdGZ0ID0gbWx4NV9jcmVhdGVfZmxvd190YWJsZSh0eF9mcy1cXHUwMDNlbnMsIFxcdTAwMjZmdF9hdHRyKTtcXG4rXFx0ZnQgPSBtbHg1X2NyZWF0ZV9mbG93X3RhYmxlKHR4LVxcdTAwM2VucywgXFx1MDAyNmZ0X2F0dHIpO1xcbiBcXHRpZiAoSVNfRVJSKGZ0KSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKGZ0KTtcXG4gXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiUFNQOiBmYWlsIHRvIGFkZCBwc3AgdHggZmxvdyB0YWJsZSwgZXJyID0gJWRcXFxcblxcXCIsIGVycik7XFxuQEAgLTcyNyw3ICs3MDMsNyBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIFxcdFxcdFxcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19FTkNSWVBUIHxcXG4gXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XFxuIFxcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3QuY291bnRlciA9IHR4X2ZzLVxcdTAwM2V0eF9jb3VudGVyO1xcbitcXHRkZXN0LmNvdW50ZXIgPSBmcy1cXHUwMDNldHhfY291bnRlcjtcXG4gXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmRlc3QsIDEpO1xcbiBcXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIocnVsZSk7XFxuQEAgLTczNSw5ICs3MTEsOSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIFxcdFxcdGdvdG8gZXJyX2FkZF9mbG93X3J1bGU7XFxuIFxcdH1cXG4gXFxuLVxcdHR4X2ZzLVxcdTAwM2VmdCA9IGZ0O1xcbi1cXHR0eF9mcy1cXHUwMDNlZmcgPSBmZztcXG4tXFx0dHhfZnMtXFx1MDAzZXJ1bGUgPSBydWxlO1xcbitcXHR0eC1cXHUwMDNlZnQgPSBmdDtcXG4rXFx0dHgtXFx1MDAzZWZnID0gZmc7XFxuK1xcdHR4LVxcdTAwM2VydWxlID0gcnVsZTtcXG4gXFx0Z290byBvdXQ7XFxuIFxcbiBlcnJfYWRkX2Zsb3dfcnVsZTpcXG5AQCAtNzUwLDg3ICs3MjYsMzUgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcylcXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXFxuIHtcXG4tXFx0aWYgKCF0eF9mcy1cXHUwMDNlZnQpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG1seDVfZGVsX2Zsb3dfcnVsZXModHhfZnMtXFx1MDAzZXJ1bGUpO1xcbi1cXHRtbHg1X2Rlc3Ryb3lfZmxvd19ncm91cCh0eF9mcy1cXHUwMDNlZmcpO1xcbi1cXHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZSh0eF9mcy1cXHUwMDNlZnQpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcXHUwMDI2dHgtXFx1MDAzZXJ1bGUpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZ0eC1cXHUwMDNlZmcpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcXHUwMDI2dHgtXFx1MDAzZWZ0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVxcdTAwM2V0eF9mcztcXG4tXFx0aW50IGVyciA9IDA7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRpZiAodHhfZnMtXFx1MDAzZXJlZmNudCsrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGVyciA9IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoZnMpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHR0eF9mcy1cXHUwMDNlcmVmY250LS07XFxuLW91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZnMtXFx1MDAzZXR4X2NvdW50ZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbi17XFxuLVxcdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtXFx1MDAzZXR4X2ZzO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2dHhfZnMtXFx1MDAzZW11dGV4KTtcXG4tXFx0aWYgKC0tdHhfZnMtXFx1MDAzZXJlZmNudClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRhY2NlbF9wc3BfZnNfdHhfZGVzdHJveSh0eF9mcyk7XFxuLW91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF90eChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4te1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVxcdTAwM2V0eF9mcztcXG4tXFxuLVxcdGlmICghdHhfZnMpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG1seDVfZmNfZGVzdHJveShmcy1cXHUwMDNlbWRldiwgdHhfZnMtXFx1MDAzZXR4X2NvdW50ZXIpO1xcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRXQVJOX09OKHR4X2ZzLVxcdTAwM2VyZWZjbnQpO1xcbi1cXHRrZnJlZSh0eF9mcyk7XFxuLVxcdGZzLVxcdTAwM2V0eF9mcyA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfdHgoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cXHUwMDNlbWRldjtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqZmxvd19jb3VudGVyO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcXG4rXFx0aW50IGVycjtcXG4gXFxuLVxcdG5zID0gbWx4NV9nZXRfZmxvd19uYW1lc3BhY2UobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpO1xcbi1cXHRpZiAoIW5zKVxcbitcXHRmcy1cXHUwMDNldHgubnMgPSBtbHg1X2dldF9mbG93X25hbWVzcGFjZShtZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpO1xcbitcXHRpZiAoIWZzLVxcdTAwM2V0eC5ucylcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0dHhfZnMgPSBremFsbG9jX29iaigqdHhfZnMpO1xcbi1cXHRpZiAoIXR4X2ZzKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcXG4tXFx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCBcXHUwMDI2ZnMtXFx1MDAzZXR4X2NvdW50ZXIpO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG1seDVfY29yZV93YXJuKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHR4IGZsb3cgY291bnRlciBlcnI9JXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgZmxvd19jb3VudGVyKTtcXG4tXFx0XFx0a2ZyZWUodHhfZnMpO1xcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xcbitcXHRcXHRcXHQgICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbi1cXHR0eF9mcy1cXHUwMDNldHhfY291bnRlciA9IGZsb3dfY291bnRlcjtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2dHhfZnMtXFx1MDAzZW11dGV4KTtcXG4tXFx0dHhfZnMtXFx1MDAzZW5zID0gbnM7XFxuLVxcdGZzLVxcdTAwM2V0eF9mcyA9IHR4X2ZzO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtODM4LDMyICs3NjIsMjkgQEAgc3RhdGljIHZvaWRcXG4gbWx4NWVfYWNjZWxfcHNwX2ZzX2dldF9zdGF0c19maWxsKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMgKnN0YXRzKVxcbiB7XFxuLVxcdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gcHJpdi1cXHUwMDNlcHNwLVxcdTAwM2Vmcy1cXHUwMDNldHhfZnM7XFxuK1xcdHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzID0gcHJpdi1cXHUwMDNlcHNwLVxcdTAwM2VmcztcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XFxuLVxcbi1cXHRhY2NlbF9wc3AgPSAoc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqKXByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMtXFx1MDAzZXJ4X2ZzO1xcbiBcXG4tXFx0aWYgKHR4X2ZzLVxcdTAwM2V0eF9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIHR4X2ZzLVxcdTAwM2V0eF9jb3VudGVyLCBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF90eF9wa3RzLFxcbitcXHRpZiAoZnMtXFx1MDAzZXR4X2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXR4X2NvdW50ZXIsIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3R4X3BrdHMsXFxuIFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3R4X2J5dGVzKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIpXFxuLVxcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLVxcdTAwM2VyeF9jb3VudGVyLCBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzLFxcbitcXHRpZiAoZnMtXFx1MDAzZXJ4X2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2NvdW50ZXIsIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3J4X3BrdHMsXFxuIFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3J4X2J5dGVzKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXFxuK1xcdGlmIChmcy1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyLFxcbiBcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzX2F1dGhfZmFpbCxcXG4gXFx0XFx0XFx0ICAgICAgXFx1MDAyNnN0YXRzLVxcdTAwM2Vwc3BfcnhfYnl0ZXNfYXV0aF9mYWlsKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2Vycl9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cXHUwMDNlcnhfZXJyX2NvdW50ZXIsXFxuK1xcdGlmIChmcy1cXHUwMDNlcnhfZXJyX2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2Vycl9jb3VudGVyLFxcbiBcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzX2ZyYW1lX2VycixcXG4gXFx0XFx0XFx0ICAgICAgXFx1MDAyNnN0YXRzLVxcdTAwM2Vwc3BfcnhfYnl0ZXNfZnJhbWVfZXJyKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2JhZF9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cXHUwMDNlcnhfYmFkX2NvdW50ZXIsXFxuK1xcdGlmIChmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2JhZF9jb3VudGVyLFxcbiBcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzX2Ryb3AsXFxuIFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3J4X2J5dGVzX2Ryb3ApO1xcbiB9XFxuQEAgLTg3MywyMSArNzk0LDE1IEBAIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdGlmICghcHJpdi1cXHUwMDNlcHNwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMpO1xcbi19XFxuLVxcbi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuLXtcXG4tXFx0aWYgKCFwcml2LVxcdTAwM2Vwc3ApXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIGFjY2VsX3BzcF9mc190eF9mdF9nZXQocHJpdi1cXHUwMDNlcHNwLVxcdTAwM2Vmcyk7XFxuK1xcdG5ldGRldl9sb2NrKHByaXYtXFx1MDAzZW5ldGRldik7XFxuK1xcdGFjY2VsX3BzcF9mc190eF9mdF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzLVxcdTAwM2V0eCk7XFxuK1xcdG5ldGRldl91bmxvY2socHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfYWNjZWxfcHNwX2ZzX2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIHtcXG4tXFx0YWNjZWxfcHNwX2ZzX2NsZWFudXBfcngoZnMpO1xcbi1cXHRhY2NlbF9wc3BfZnNfY2xlYW51cF90eChmcyk7XFxuK1xcdGFjY2VsX3BzcF9mc19yeF9jbGVhbnVwKGZzKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX3R4X2NsZWFudXAoZnMpO1xcbiBcXHRrZnJlZShmcyk7XFxuIH1cXG4gXFxuQEAgLTkwMSwyOSArODE2LDYzIEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NWVfcHNwX2ZzICptbHg1ZV9hY2NlbF9wc3BfZnNfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRmcy1cXHUwMDNlbWRldiA9IHByaXYtXFx1MDAzZW1kZXY7XFxuLVxcdGVyciA9IGFjY2VsX3BzcF9mc19pbml0X3R4KGZzKTtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3R4X2luaXQoZnMpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl90eDtcXG4gXFxuIFxcdGZzLVxcdTAwM2VmcyA9IHByaXYtXFx1MDAzZWZzO1xcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfaW5pdF9yeChmcyk7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9pbml0KGZzKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfcng7XFxuIFxcbiBcXHRyZXR1cm4gZnM7XFxuIFxcbiBlcnJfcng6XFxuLVxcdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX3R4X2NsZWFudXAoZnMpO1xcbiBlcnJfdHg6XFxuIFxcdGtmcmVlKGZzKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMsIGV4dGFjayk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfZnRfY3JlYXRlKHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMsIFxcdTAwMjZwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzLVxcdTAwM2V0eCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIGNyZWF0aW5nIFRYIHN0ZWVyaW5nIHRhYmxlXFxcIik7XFxuK1xcdFxcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMpO1xcbitcXHR9XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbit7XFxuK1xcdGFjY2VsX3BzcF9mc190eF9mdF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzLVxcdTAwM2V0eCk7XFxuK1xcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIG1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0cmV0dXJuIDA7IC8qIFRPRE86IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGRvIHRoaW5ncyB0byB0aGUgZGV2aWNlICovXFxuK1xcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYocHNkLVxcdTAwM2VtYWluX25ldGRldik7XFxuK1xcdGJvb2wgcHNwX2VuYWJsZWQgPSBwc2QtXFx1MDAzZWNvbmZpZy52ZXJzaW9ucztcXG4rXFx0Ym9vbCBlbmFibGVfcHNwID0gY29uZi1cXHUwMDNldmVyc2lvbnM7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0bmV0ZGV2X2xvY2socHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0aWYgKCFwc3BfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBlbmFibGVfcHNwKVxcbitcXHRcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlKHByaXYsIGV4dGFjayk7XFxuK1xcdGVsc2UgaWYgKHBzcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2ICFlbmFibGVfcHNwKVxcbitcXHRcXHRhY2NlbF9wc3BfZnNfZGVzdHJveShwcml2KTtcXG4rXFx0bmV0ZGV2X3VubG9jayhwcml2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuQEAgLTEwNzIsMjEgKzEwMjEsMjEgQEAgdm9pZCBtbHg1ZV9wc3BfdW5yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVxcdTAwM2Vwc3A7XFxuIFxcbi1cXHRpZiAoIXBzcCB8fCAhcHNwLVxcdTAwM2Vwc3ApXFxuK1xcdGlmICghcHNwIHx8ICFwc3AtXFx1MDAzZXBzZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHNwX2Rldl91bnJlZ2lzdGVyKHBzcC1cXHUwMDNlcHNwKTtcXG4tXFx0cHNwLVxcdTAwM2Vwc3AgPSBOVUxMO1xcbitcXHRwc3BfZGV2X3VucmVnaXN0ZXIocHNwLVxcdTAwM2Vwc2QpO1xcbitcXHRwc3AtXFx1MDAzZXBzZCA9IE5VTEw7XFxuIH1cXG4gXFxuLXZvaWQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtXFx1MDAzZXBzcDtcXG4gXFx0c3RydWN0IHBzcF9kZXYgKnBzZDtcXG4gXFxuIFxcdC8qIEZXIENhcHMgbWlzc2luZyAqL1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZXBzcClcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHBzcC1cXHUwMDNlY2Fwcy5hc3NvY19kcnZfc3BjID0gc2l6ZW9mKHUzMik7XFxuIFxcdHBzcC1cXHUwMDNlY2Fwcy52ZXJzaW9ucyA9IDEgXFx1MDAzY1xcdTAwM2MgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyODtcXG5AQCAtMTA5OCw5ICsxMDQ3LDExIEBAIHZvaWQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiBcXHRpZiAoSVNfRVJSKHBzZCkpIHtcXG4gXFx0XFx0bWx4NV9jb3JlX2Vycihwcml2LVxcdTAwM2VtZGV2LCBcXFwiUFNQIGZhaWxlZCB0byByZWdpc3RlciBkdWUgdG8gJXBlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBwc2QpO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBzZCk7XFxuIFxcdH1cXG4tXFx0cHNwLVxcdTAwM2Vwc3AgPSBwc2Q7XFxuK1xcdHBzcC1cXHUwMDNlcHNkID0gcHNkO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXFxuaW5kZXggNmI2MmZlZjBkOWE3MzguLjNmNDQxZTdkZDU1YWMwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMge1xcbiB9O1xcbiBcXG4gc3RydWN0IG1seDVlX3BzcCB7XFxuLVxcdHN0cnVjdCBwc3BfZGV2ICpwc3A7XFxuK1xcdHN0cnVjdCBwc3BfZGV2ICpwc2Q7XFxuIFxcdHN0cnVjdCBwc3BfZGV2X2NhcHMgY2FwcztcXG4gXFx0c3RydWN0IG1seDVlX3BzcF9mcyAqZnM7XFxuIFxcdGF0b21pY190IHR4X2tleV9jbnQ7XFxuQEAgLTQzLDMzICs0MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pc19wc3BfZGV2aWNlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4taW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbi12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuK2ludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuICNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbi17XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxcbi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4te1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cXG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxcbitzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xcbmluZGV4IGVmN2Y1MzM4NTQwZmRmLi4zNDhmZDdhOTYyNjE1YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXFxuQEAgLTE0LDEyICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcXCJlbl9hY2NlbC9wc3Bfcnh0eC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZW5fYWNjZWwvcHNwLmhcXFwiXFxuIFxcbi1lbnVtIHtcXG4tXFx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVELFxcbi1cXHRNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9BVVRIX0ZBSUxFRCxcXG4tXFx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfQkFEX1RSQUlMRVIsXFxuLX07XFxuLVxcbiBzdGF0aWMgdm9pZCBtbHg1ZV9wc3Bfc2V0X3N3cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlICpwc3Bfc3QsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X3dxZV9ldGhfc2VnICplc2VnKVxcbkBAIC0xMjIsMTYgKzExNiwxMSBAQCBzdGF0aWMgYm9vbCBtbHg1ZV9wc3Bfc2V0X3N0YXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbiB7XFxuLVxcdHUzMiBwc3BfbWV0YV9kYXRhID0gYmUzMl90b19jcHUoY3FlLVxcdTAwM2VmdF9tZXRhZGF0YSk7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0dTE2IGRldl9pZCA9IHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlcHNwLVxcdTAwM2VpZDtcXG4rXFx0dTE2IGRldl9pZCA9IHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlcHNkLVxcdTAwM2VpZDtcXG4gXFx0Ym9vbCBzdHJpcF9pY3YgPSB0cnVlO1xcbiBcXHR1OCBnZW5lcmF0aW9uID0gMDtcXG4gXFxuLVxcdC8qIFRCRDogcmVwb3J0IGVycm9ycyBhcyBTVyBjb3VudGVycyB0byBldGh0b29sLCBhbnkgZnVydGhlciBoYW5kbGluZyA/ICovXFxuLVxcdGlmIChNTFg1X1BTUF9NRVRBREFUQV9TWU5EUk9NRShwc3BfbWV0YV9kYXRhKSAhPSBNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9ERUNSWVBURUQpXFxuLVxcdFxcdGdvdG8gZHJvcDtcXG4tXFxuIFxcdGlmIChwc3BfZGV2X3Jjdihza2IsIGRldl9pZCwgZ2VuZXJhdGlvbiwgc3RyaXBfaWN2KSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxcbmluZGV4IDcwMjg5YzkyMWJkNmIzLi4yYjA4MGMzOWNjMzdlZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXFxuQEAgLTEwLDkgKzEwLDggQEBcXG4gI2luY2x1ZGUgXFxcImVuLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJlbi90eHJ4LmhcXFwiXFxuIFxcbi0vKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjktMjM6IFBTUCBzeW5kcm9tZSwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xcbisvKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX01BUktFUihtZXRhZGF0YSkgICgoKChtZXRhZGF0YSkgXFx1MDAzZVxcdTAwM2UgMzApIFxcdTAwMjYgMHgzKSA9PSAweDMpXFxuLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfU1lORFJPTUUobWV0YWRhdGEpICgoKG1ldGFkYXRhKSBcXHUwMDNlXFx1MDAzZSAyMykgXFx1MDAyNiBHRU5NQVNLKDYsIDApKVxcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFxcdTAwMjYgR0VOTUFTSygyMiwgMCkpXFxuIFxcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5pbmRleCA3NzVmMGM2ZTU1Yzk1NS4uMmNiNDhiMjRkNWVhYzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5AQCAtNjE5MSw3ICs2MTkxLDcgQEAgc3RhdGljIGludCBtbHg1ZV9pbml0X25pY190eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXFx1MDAzZW1kZXY7XFxuQEAgLTYxOTksNyArNjE5OSw5IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcbiBcXHRtbHg1ZV9mc19pbml0X2wyX2FkZHIocHJpdi1cXHUwMDNlZnMsIG5ldGRldik7XFxuIFxcdG1seDVlX2lwc2VjX2luaXQocHJpdik7XFxuLVxcdG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcXG4rXFx0ZXJyID0gbWx4NWVfcHNwX3JlZ2lzdGVyKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9pcHNlY19jbGVhbnVwO1xcbiBcXG4gXFx0ZXJyID0gbWx4NWVfbWFjc2VjX2luaXQocHJpdik7XFxuIFxcdGlmIChlcnIpXFxuQEAgLTYyMjIsNyArNjIyNCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdG1seDVlX3BjaWVfY29uZ19ldmVudF9pbml0KHByaXYpO1xcbiBcXHRtbHg1ZV9odl92aGNhX3N0YXRzX2NyZWF0ZShwcml2KTtcXG4gXFx0aWYgKG5ldGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHRtbHg1ZV9kY2JubF9pbml0X2FwcChwcml2KTtcXG4gXFxuIFxcdG1seDVlX25pY19zZXRfcnhfbW9kZShwcml2KTtcXG5AQCAtNjIzNSw2ICs2MjM3LDEyIEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcXG4gXFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfaXBzZWNfY2xlYW51cDpcXG4rXFx0bWx4NWVfaXBzZWNfY2xlYW51cChwcml2KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfbmljX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuQEAgLTY2MTYsMTMgKzY2MjQsMTggQEAgaW50IG1seDVlX2F0dGFjaF9uZXRkZXYoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2NsZWFudXBfdHg7XFxuIFxcbi1cXHRpZiAocHJvZmlsZS1cXHUwMDNlZW5hYmxlKVxcbi1cXHRcXHRwcm9maWxlLVxcdTAwM2VlbmFibGUocHJpdik7XFxuK1xcdGlmIChwcm9maWxlLVxcdTAwM2VlbmFibGUpIHtcXG4rXFx0XFx0ZXJyID0gcHJvZmlsZS1cXHUwMDNlZW5hYmxlKHByaXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycl9jbGVhbnVwX3J4O1xcbitcXHR9XFxuIFxcbiBcXHRtbHg1ZV91cGRhdGVfZmVhdHVyZXMocHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4rZXJyX2NsZWFudXBfcng6XFxuK1xcdHByb2ZpbGUtXFx1MDAzZWNsZWFudXBfcngocHJpdik7XFxuIGVycl9jbGVhbnVwX3R4OlxcbiBcXHRwcm9maWxlLVxcdTAwM2VjbGVhbnVwX3R4KHByaXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jXFxuaW5kZXggYzhiNzZkMzAxYzkyY2YuLjYwMzA1MWFiMWVhYTRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xcbkBAIC0xMjYyLDkgKzEyNjIsMTEgQEAgc3RhdGljIHZvaWQgbWx4NWVfY2xlYW51cF9yZXBfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdG1seDVlX3JlcF9uZWlnaF9jbGVhbnVwKHJwcml2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWx4NWVfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4rc3RhdGljIGludCBtbHg1ZV9yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuIFxcdG1seDVlX3NldF9uZXRkZXZfbXR1X2JvdW5kYXJpZXMocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuQEAgLTEzMjIsNyArMTMyNCw3IEBAIHN0YXRpYyBpbnQgdXBsaW5rX3JlcF9hc3luY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50XFxuIFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtXFx1MDAzZW5ldGRldjtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbkBAIC0xMzU3LDYgKzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbiBcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMTo0MDo1NS40NTEwMTI0NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjY1NDA1NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGhhcmR3YXJlIGRyaXZlciAoc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBmZWF0dXJlKS4gU2luY2UgdGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNzkyZGQwNTFiMDM1ZDE0YmZkYjU1YjhkYjY0NjIzZmM4NGI4YmI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMTo0MDo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhcbmluZGV4IDIyNzBlMmU1NTBkZDllLi4zY2M3MjgzYjYyMTVlMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxuQEAgLTEwMTYsNyArMTAxNiw3IEBAIHN0cnVjdCBtbHg1ZV9wcm9maWxlIHtcbiBcdHZvaWRcdCgqY2xlYW51cF9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0aW50XHQoKmluaXRfdHgpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqY2xlYW51cF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLVx0dm9pZFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbitcdGludFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqZGlzYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0aW50XHQoKnVwZGF0ZV9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0dm9pZFx0KCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oXG5pbmRleCAwOTFiODBhNjcxODlkZC4uNDk3M2ZiNDczZmYwMjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbkBAIC04OCwxMyArODgsMTggQEAgZW51bSB7XG4gI2lmZGVmIENPTkZJR19NTFg1X0VOX0FSRlNcbiBcdE1MWDVFX0FSRlNfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgKyAxLFxuICNlbmRpZlxuLSNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX0lQU0VDKSB8fCBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcbisjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9JUFNFQylcbiBcdE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXG4gXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfRVJSX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUE9MX0ZUX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUE9MX01JU1NfRlRfTEVWRUwsXG4gXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfUk9DRV9MRVZFTCxcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXG4rXHRNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgKyAxLFxuK1x0TUxYNUVfQUNDRUxfRlNfUFNQX0VSUl9GVF9MRVZFTCxcbitcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9SWF9GVF9MRVZFTCxcbisjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBtbHg1ZV9mbG93X3N0ZWVyaW5nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcbmluZGV4IGI1MjZiMzg5OGMyMmUwLi4zZjIxMmU0NmZjMmY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuQEAgLTIyMCwxOCArMjIwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XG4tXHRpZiAoZXJyKVxuLVx0XHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcbi1cbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF9yeChwcml2KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG5AQCAtMjQyLDEyICsyMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3R4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGludCBlcnI7XG4tXG4tXHRlcnIgPSBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhwcml2KTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbmluZGV4IGQ5YWRiOTkzZTY0ZDk1Li43M2IyMzIzNzkyNjNhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXG5AQCAtMjEsNTEgKzIxLDUyIEBAIGVudW0gYWNjZWxfcHNwX3N5bmRyb21lIHtcbiBcdFBTUF9CQURfVFJBSUxFUixcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9wc3BfdHgge1xuK3N0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpmZztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuLVx0c3RydWN0IG11dGV4IG11dGV4OyAvKiBQcm90ZWN0IFBTUCBUWCBzdGVlcmluZyAqL1xuLVx0dTMyIHJlZmNudDtcbi1cdHN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyO1xuIH07XG4gXG4tc3RydWN0IG1seDVlX3BzcF9yeF9lcnIge1xuK3N0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpkcm9wX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYXV0aF9mYWlsX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZXJyX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYmFkX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpjb3B5X21vZGlmeV9oZHI7XG4gfTtcbiBcbi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3Qge1xuK3N0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSB7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xuIFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqcnhfbW9kaWZ5X2hkcjtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVmYXVsdF9kZXN0O1xuLVx0c3RydWN0IG1seDVlX3BzcF9yeF9lcnIgcnhfZXJyO1xuLVx0dTMyIHJlZmNudDtcbi1cdHN0cnVjdCBtdXRleCBwcm90X211dGV4OyAvKiBwcm90ZWN0IEVTUDQvRVNQNiBwcm90b2NvbCAqL1xuLVx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmRlZl9ydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gfTtcbiBcbi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwIHtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCBmc19wcm90W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuLVx0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XG4rc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVkcF9ydWxlc1tBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcbiB9O1xuIFxuIHN0cnVjdCBtbHg1ZV9wc3BfZnMge1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXY7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbi1cdC8qIFJ4IG1hbmFnZSAqL1xuK1x0c3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHR4O1xuK1xuK1x0LyogUnggKi9cbiBcdHN0cnVjdCBtbHg1ZV9mbG93X3N0ZWVyaW5nICpmcztcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKnJ4X2ZzO1xuK1x0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XG4rXG4rXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgZGVjcnlwdFtBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcbitcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7XG4rXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHJ4O1xuIH07XG4gXG4gLyogUFNQIFJYIGZsb3cgc3RlZXJpbmcgKi9cbkBAIC03Nyw0NCArNzgsMjAwIEBAIHN0YXRpYyBlbnVtIG1seDVfdHJhZmZpY190eXBlcyBmc19wc3AydHQoZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpKVxuIFx0cmV0dXJuIE1MWDVfVFRfSVBWNl9VRFA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9lcnJfZGVsX3J1bGVzKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgKmZ0X2F0dHIsXG4rXHRcdFx0XHQgIHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKipmdClcbit7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0KmZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsIGZ0X2F0dHIpO1xuK1x0aWYgKElTX0VSUigqZnQpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoKmZ0KTtcbitcdFx0KmZ0ID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKip0YWJsZSlcbiB7XG4tXHRpZiAocnhfZXJyLVx1MDAzZWJhZF9ydWxlKSB7XG4tXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWJhZF9ydWxlKTtcbi1cdFx0cnhfZXJyLVx1MDAzZWJhZF9ydWxlID0gTlVMTDtcbitcdGlmICgqdGFibGUpIHtcbitcdFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoKnRhYmxlKTtcbitcdFx0KnRhYmxlID0gTlVMTDtcbiBcdH1cbit9XG4gXG4tXHRpZiAocnhfZXJyLVx1MDAzZWVycl9ydWxlKSB7XG4tXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWVycl9ydWxlKTtcbi1cdFx0cnhfZXJyLVx1MDAzZWVycl9ydWxlID0gTlVMTDtcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpXG4re1xuK1x0aWYgKCpydWxlKSB7XG4rXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMoKnJ1bGUpO1xuK1x0XHQqcnVsZSA9IE5VTEw7XG4gXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cClcbit7XG4rXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcbitcdHUzMiAqaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRpbnQgZXJyID0gMDtcbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuK1x0aWYgKCFpbilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRNTFg1X1NFVChjcmVhdGVfZmxvd19ncm91cF9pbiwgaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVx1MDAzZW1heF9mdGUgLSAxKTtcbitcdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBpbiwgZW5kX2Zsb3dfaW5kZXgsIGZ0LVx1MDAzZW1heF9mdGUgLSAxKTtcbitcdCpncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGluKTtcbitcdGlmIChJU19FUlIoKmdyb3VwKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKCpncm91cCk7XG4rXHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4rXHRrdmZyZWUoaW4pO1xuIFxuLVx0aWYgKHJ4X2Vyci1cdTAwM2VydWxlKSB7XG4tXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZXJ1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlcnVsZSA9IE5VTEw7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cClcbit7XG4rXHRpZiAoKmdyb3VwKSB7XG4rXHRcdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKCpncm91cCk7XG4rXHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKVxuK3tcbitcdCpjb3VudGVyID0gbWx4NV9mY19jcmVhdGUoZGV2LCBmYWxzZSk7XG4rXHRpZiAoSVNfRVJSKCpjb3VudGVyKSkge1xuK1x0XHRpbnQgZXJyID0gUFRSX0VSUigqY291bnRlcik7XG4rXG4rXHRcdCpjb3VudGVyID0gTlVMTDtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyKSB7XG4tXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIHJ4X2Vyci1cdTAwM2Vjb3B5X21vZGlmeV9oZHIpO1xuLVx0XHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gTlVMTDtcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbWx4NV9mYyAqKmNvdW50ZXIpXG4re1xuK1x0aWYgKCpjb3VudGVyKSB7XG4rXHRcdG1seDVfZmNfZGVzdHJveShkZXYsICpjb3VudGVyKTtcbitcdFx0KmNvdW50ZXIgPSBOVUxMO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspXG4rXHRcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNnJ4LVx1MDAzZXVkcF9ydWxlc1tpXSk7XG4rXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZyeC1cdTAwM2VtaXNzX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZyeC1cdTAwM2VtaXNzX2dyb3VwKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFx1MDAyNnJ4LVx1MDAzZWZ0KTtcbit9XG4rXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlICpyeClcbiB7XG4tXHRhY2NlbF9wc3BfZnNfcnhfZXJyX2RlbF9ydWxlcyhmcywgcnhfZXJyKTtcbitcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuK1x0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuK1x0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuK1x0TUxYNV9ERUNMQVJFX0ZMT1dfQUNUKGZsb3dfYWN0KTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuK1x0aW50IGksIGVyciA9IDA7XG4rXG4rXHRzcGVjID0ga3phbGxvY19vYmooKnNwZWMpO1xuK1x0aWYgKCFzcGVjKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgKyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTO1xuK1x0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9SWF9GVF9MRVZFTDtcbitcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuK1x0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9mdChmcywgXHUwMDI2ZnRfYXR0ciwgXHUwMDI2cngtXHUwMDNlZnQpO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4gXG4tXHRpZiAocnhfZXJyLVx1MDAzZWZ0KSB7XG4tXHRcdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKHJ4X2Vyci1cdTAwM2VmdCk7XG4tXHRcdHJ4X2Vyci1cdTAwM2VmdCA9IE5VTEw7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAocngtXHUwMDNlZnQsIFx1MDAyNnJ4LVx1MDAzZW1pc3NfZ3JvdXApO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgZXJyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuK1xuK1x0LyogQWRkIG1pc3MgcnVsZSAqL1xuK1x0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbitcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuK1x0Zmxvd19hY3QuZmxhZ3MgPSBGTE9XX0FDVF9JR05PUkVfRkxPV19MRVZFTDtcbitcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4rXHRkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTtcbitcdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4rXHRkZXN0WzFdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9jb3VudGVyO1xuK1x0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocngtXHUwMDNlZnQsIE5VTEwsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcbitcdGlmIChJU19FUlIocnVsZSkpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBydWxlLCBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4rXHRyeC1cdTAwM2VtaXNzX3J1bGUgPSBydWxlO1xuK1xuK1x0LyogQWRkIFVEUCB2NC92NiBydWxlcyAqL1xuK1x0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgPSBNTFg1X01BVENIX09VVEVSX0hFQURFUlM7XG4rXHRNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYSxcbitcdFx0XHQgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uKTtcbitcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3NldF9seXJfMl80LCBzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhLFxuK1x0XHRcdCBpcF9wcm90b2NvbCk7XG4rXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtXHUwMDNlbWF0Y2hfdmFsdWUsIGlwX3Byb3RvY29sLFxuK1x0XHQgSVBQUk9UT19VRFApO1xuK1x0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbitcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuK1x0Zmxvd19hY3QuZmxhZ3MgPSAwO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4rXHRcdGludCB2ZXJzaW9uID0gaSA9PSBBQ0NFTF9GU19QU1A0ID8gNCA6IDY7XG4rXG4rXHRcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbitcdFx0XHQgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uLCB2ZXJzaW9uKTtcbitcdFx0ZGVzdFswXSA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpO1xuK1x0XHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuK1x0XHRkZXN0WzFdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9jb3VudGVyO1xuK1x0XHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeC1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsXG4rXHRcdFx0XHRcdCAgIDIpO1xuK1x0XHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4rXHRcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbitcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4rXHRcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBVRFAlZCBydWxlIGVycj0lZFxcblwiLFxuK1x0XHRcdFx0ICAgICAgdmVyc2lvbiwgZXJyKTtcbitcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdH1cbitcdFx0cngtXHUwMDNldWRwX3J1bGVzW2ldID0gcnVsZTtcbitcdH1cbitcdGdvdG8gb3V0X3NwZWM7XG4rXG4rb3V0X2VycjpcbitcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTtcbitvdXRfc3BlYzpcbitcdGt2ZnJlZShzcGVjKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpY1xuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spXG4re1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlYmFkX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlZXJyX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlcnVsZSk7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmNoZWNrLVx1MDAzZWRyb3BfZ3JvdXApO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2Y2hlY2stXHUwMDNlZnQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLFxuQEAgLTEyOSwxNSArMjg2LDM1IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXG4gXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2MyLCBtaXNjX3BhcmFtc18yLCBwc3Bfc3luZHJvbWUsIHN5bmRyb21lKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4rc3RhdGljIGludCBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdCxcbitcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYyxcbitcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLFxuK1x0XHRcdFx0ICAgc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxuIHtcbi1cdHU4IGFjdGlvbltNTFg1X1VOX1NaX0JZVEVTKHNldF9hZGRfY29weV9hY3Rpb25faW5fYXV0byldID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbitcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbitcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4rXHRkZXN0LmNvdW50ZXIgPSBjb3VudGVyO1xuK1x0KnJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4rXHRpZiAoSVNfRVJSKCpydWxlKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKCpydWxlKTtcbitcdFx0KnJ1bGUgPSBOVUxMO1xuK1x0fVxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljXG4raW50IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spXG4re1xuK1x0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdO1xuIFx0c3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTtcbi1cdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZnRlO1xuIFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMTQ2LDE3NCArMzIzLDk3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdGlmICghc3BlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBBY3Rpb24gdG8gY29weSA3IGJpdCBwc3Bfc3luZHJvbWUgdG8gcmVnQlsyMzoyOV0gKi9cbi1cdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfU1lORFJPTUUpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDcpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3Rfb2Zmc2V0LCAyMyk7XG4rXHRmdF9hdHRyLm1heF9mdGUgPSA0O1xuK1x0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuK1x0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xuK1x0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUw7XG4rXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmNoZWNrLVx1MDAzZWZ0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2Vycihmcy1cdTAwM2VtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGNoZWNrIGZ0IGVycj0lZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4gXG4tXHRtb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLFxuLVx0XHRcdFx0XHQgICAgICAxLCBhY3Rpb24pO1xuLVx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4tXHRcdFx0ICAgICAgXCJmYWlsIHRvIGFsbG9jIHBzcCBjb3B5IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXFxuXCIsIGVycik7XG4tXHRcdGdvdG8gb3V0X3NwZWM7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoY2hlY2stXHUwMDNlZnQsIFx1MDAyNmNoZWNrLVx1MDAzZWRyb3BfZ3JvdXApO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsXG4rXHRcdFx0ICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggY2hlY2sgZHJvcCBncm91cCBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4gXG4gXHRhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3BlYywgUFNQX09LKTtcbiBcdC8qIGNyZWF0ZSBmdGUgKi9cbi1cdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbi1cdGRlc3RbMF0udHlwZSA9IGZzX3Byb3QtXHUwMDNlZGVmYXVsdF9kZXN0LnR5cGU7XG4tXHRkZXN0WzBdLmZ0ID0gZnNfcHJvdC1cdTAwM2VkZWZhdWx0X2Rlc3QuZnQ7XG4tXHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFsxXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfY291bnRlcjtcbi1cdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCwgMik7XG4rXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4rXHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuK1x0ZGVzdC5mdCA9IGZzLVx1MDAzZXJ4LmZ0O1xuK1x0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhjaGVjay1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuIFx0aWYgKElTX0VSUihmdGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBlcnIgY29weSBydWxlIGVycj0lZFxcblwiLCBlcnIpO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBvayBydWxlIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdHJ4X2Vyci1cdTAwM2VydWxlID0gZnRlO1xuK1x0Y2hlY2stXHUwMDNlcnVsZSA9IGZ0ZTtcbiBcbiBcdC8qIGFkZCBhdXRoIGZhaWwgZHJvcCBydWxlICovXG4gXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4tXHRtZW1zZXQoXHUwMDI2Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpO1xuIFx0YWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9JQ1ZfRkFJTCk7XG4tXHQvKiBjcmVhdGUgZnRlICovXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFswXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXI7XG4tXHRmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xuLVx0aWYgKElTX0VSUihmdGUpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBhdXRoIGZhaWwgZHJvcCBydWxlIGVycj0lZFxcblwiLFxuK1x0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoY2hlY2stXHUwMDNlZnQsIHNwZWMsXG4rXHRcdFx0XHQgICAgICBmcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWF1dGhfZmFpbF9ydWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXFxuXCIsXG4gXHRcdFx0ICAgICAgZXJyKTtcbi1cdFx0Z290byBvdXRfZHJvcF9ydWxlO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBmdGU7XG4gXG4gXHQvKiBhZGQgZnJhbWluZyBkcm9wIHJ1bGUgKi9cbiBcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcbi1cdG1lbXNldChcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XG4gXHRhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3BlYywgUFNQX0JBRF9UUkFJTEVSKTtcbi1cdC8qIGNyZWF0ZSBmdGUgKi9cbi1cdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbi1cdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0WzBdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9mcy1cdTAwM2VyeF9lcnJfY291bnRlcjtcbi1cdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCwgMSk7XG4tXHRpZiAoSVNfRVJSKGZ0ZSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihmdGUpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGZyYW1pbmcgZXJyIGRyb3AgcnVsZSBlcnI9JWRcXG5cIixcbitcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVx1MDAzZWZ0LCBzcGVjLCBmcy1cdTAwM2VyeF9lcnJfY291bnRlcixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWVycl9ydWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGZyYW1pbmcgZHJvcCBydWxlIGVycj0lZFxcblwiLFxuIFx0XHRcdCAgICAgIGVycik7XG4tXHRcdGdvdG8gb3V0X2Ryb3BfYXV0aF9mYWlsX3J1bGU7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdHJ4X2Vyci1cdTAwM2VlcnJfcnVsZSA9IGZ0ZTtcbiBcbiBcdC8qIGFkZCBtaXNjLiBlcnJvcnMgZHJvcCBydWxlICovXG4gXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4tXHRtZW1zZXQoXHUwMDI2Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpO1xuLVx0LyogY3JlYXRlIGZ0ZSAqL1xuLVx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuLVx0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbi1cdGRlc3RbMF0uY291bnRlciA9IGZzLVx1MDAzZXJ4X2ZzLVx1MDAzZXJ4X2JhZF9jb3VudGVyO1xuLVx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAxKTtcbi1cdGlmIChJU19FUlIoZnRlKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZ0ZSk7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJmYWlsIHRvIGFkZCBwc3AgcnggbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXG5cIixcbitcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVx1MDAzZWZ0LCBzcGVjLCBmcy1cdTAwM2VyeF9iYWRfY291bnRlcixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWJhZF9ydWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIG1pc2MuIGVyciBkcm9wIHJ1bGUgZXJyPSVkXFxuXCIsXG4gXHRcdFx0ICAgICAgZXJyKTtcbi1cdFx0Z290byBvdXRfZHJvcF9lcnJvcl9ydWxlO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlYmFkX3J1bGUgPSBmdGU7XG4tXG4tXHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcbiBcdGdvdG8gb3V0X3NwZWM7XG4gXG4tb3V0X2Ryb3BfZXJyb3JfcnVsZTpcbi1cdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWVycl9ydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VlcnJfcnVsZSA9IE5VTEw7XG4tb3V0X2Ryb3BfYXV0aF9mYWlsX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4tXHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuLW91dF9kcm9wX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VydWxlID0gTlVMTDtcbi1vdXQ6XG4tXHRtbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhtZGV2LCBtb2RpZnlfaGRyKTtcbitvdXRfZXJyOlxuK1x0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koY2hlY2spO1xuIG91dF9zcGVjOlxuIFx0a2ZyZWUoc3BlYyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9lcnJfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHQgc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90LFxuLVx0XHRcdFx0XHQgc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycilcbitzdGF0aWMgdm9pZFxuK2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQpXG4ge1xuLVx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuLVx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4tXHRpbnQgZXJyO1xuLVxuLVx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcbi1cdGZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMjtcbi1cdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfRVJSX0xFVkVMOyAvLyBNTFg1RV9BQ0NFTF9GU19UQ1BfRlRfTEVWRUxcbi1cdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuLVx0ZnQgPSBtbHg1X2NyZWF0ZV9hdXRvX2dyb3VwZWRfZmxvd190YWJsZShucywgXHUwMDI2ZnRfYXR0cik7XG4tXHRpZiAoSVNfRVJSKGZ0KSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZ0KTtcbi1cdFx0bWx4NV9jb3JlX2Vycihmcy1cdTAwM2VtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBpbmxpbmUgZnQgZXJyPSVkXFxuXCIsIGVycik7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4tXG4tXHRyeF9lcnItXHUwMDNlZnQgPSBmdDtcbi1cdGVyciA9IGFjY2VsX3BzcF9mc19yeF9lcnJfYWRkX3J1bGUoZnMsIGZzX3Byb3QsIHJ4X2Vycik7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dF9lcnI7XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1vdXRfZXJyOlxuLVx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoZnQpO1xuLVx0cnhfZXJyLVx1MDAzZWZ0ID0gTlVMTDtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdClcbi17XG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VkZWZfcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlZGVmX3J1bGUpO1xuLVx0XHRmc19wcm90LVx1MDAzZWRlZl9ydWxlID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbi1cdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZW1pc3NfcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlbWlzc19ydWxlKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VtaXNzX3J1bGUgPSBOVUxMO1xuLVx0fVxuLVxuLVx0aWYgKGZzX3Byb3QtXHUwMDNlbWlzc19ncm91cCkge1xuLVx0XHRtbHg1X2Rlc3Ryb3lfZmxvd19ncm91cChmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXApO1xuLVx0XHRmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXAgPSBOVUxMO1xuLVx0fVxuLVxuLVx0aWYgKGZzX3Byb3QtXHUwMDNlZnQpIHtcbi1cdFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoZnNfcHJvdC1cdTAwM2VmdCk7XG4tXHRcdGZzX3Byb3QtXHUwMDNlZnQgPSBOVUxMO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjcnlwdC1cdTAwM2VydWxlKTtcbitcdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbitcdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbitcdFx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbiBcdH1cbitcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ydWxlKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXHUwMDI2ZGVjcnlwdC1cdTAwM2VtaXNzX2dyb3VwKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFx1MDAyNmRlY3J5cHQtXHUwMDNlZnQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcbkBAIC0zMjUsNzAgKzQyNSw2NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcbiBcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgaXBfcHJvdG9jb2wsIElQUFJPVE9fVURQKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXG4rc3RhdGljIGludFxuK2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbitcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlICpkZWNyeXB0LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uICpkZWZhdWx0X2Rlc3QpXG4ge1xuLVx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4gXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xuLVx0aW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7XG4gXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyID0gTlVMTDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XG4gXHRNTFg1X0RFQ0xBUkVfRkxPV19BQ1QoZmxvd19hY3QpO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbi1cdHUzMiAqZmxvd19ncm91cF9pbjtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0Zmxvd19ncm91cF9pbiA9IGt2emFsbG9jKGlubGVuLCBHRlBfS0VSTkVMKTtcbiBcdHNwZWMgPSBrdnphbGxvY19vYmooKnNwZWMpO1xuLVx0aWYgKCFmbG93X2dyb3VwX2luIHx8ICFzcGVjKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuK1x0aWYgKCFzcGVjKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIENyZWF0ZSBGVCAqL1xuIFx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcbi1cdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUw7XG4tXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbitcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUw7XG4gXHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XG4gXHRmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDE7XG4tXHRmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBcdTAwMjZmdF9hdHRyKTtcbi1cdGlmIChJU19FUlIoZnQpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnQpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxcblwiLCBlcnIpO1xuK1x0ZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcdTAwMjZmdF9hdHRyLCBcdTAwMjZkZWNyeXB0LVx1MDAzZWZ0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IGZ0IGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlZnQgPSBmdDtcbiBcbiBcdC8qIENyZWF0ZSBtaXNzX2dyb3VwICovXG4tXHRNTFg1X1NFVChjcmVhdGVfZmxvd19ncm91cF9pbiwgZmxvd19ncm91cF9pbiwgc3RhcnRfZmxvd19pbmRleCwgZnQtXHUwMDNlbWF4X2Z0ZSAtIDEpO1xuLVx0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGZsb3dfZ3JvdXBfaW4sIGVuZF9mbG93X2luZGV4LCBmdC1cdTAwM2VtYXhfZnRlIC0gMSk7XG4tXHRtaXNzX2dyb3VwID0gbWx4NV9jcmVhdGVfZmxvd19ncm91cChmdCwgZmxvd19ncm91cF9pbik7XG4tXHRpZiAoSVNfRVJSKG1pc3NfZ3JvdXApKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIobWlzc19ncm91cCk7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggbWlzc19ncm91cCBlcnI9JWRcXG5cIiwgZXJyKTtcbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNyeXB0LVx1MDAzZWZ0LCBcdTAwMjZkZWNyeXB0LVx1MDAzZW1pc3NfZ3JvdXApO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4rXHRcdFx0ICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZGVjcnlwdCBtaXNzX2dyb3VwIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlbWlzc19ncm91cCA9IG1pc3NfZ3JvdXA7XG4gXG4gXHQvKiBDcmVhdGUgbWlzcyBydWxlICovXG4tXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmZzX3Byb3QtXHUwMDNlZGVmYXVsdF9kZXN0LCAxKTtcbitcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcbitcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZWZhdWx0X2Rlc3QsXG4rXHRcdFx0XHQgICAxKTtcbiBcdGlmIChJU19FUlIocnVsZSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX3J1bGUgZXJyPSVkXFxuXCIsIGVycik7XG4rXHRcdG1seDVfY29yZV9lcnIobWRldixcbitcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfcnVsZSBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRmc19wcm90LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4rXHRkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4gXG4tXHQvKiBBZGQgZGVmYXVsdCBSeCBwc3AgcnVsZSAqL1xuK1x0LyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi9cbiBcdHNldHVwX2Z0ZV91ZHBfcHNwKHNwZWMsIFBTUF9ERUZBVUxUX1VEUF9QT1JUKTtcbiBcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xuIFx0LyogU2V0IGJpdFszMSwgMzBdIFBTUCBtYXJrZXIgKi9cbi1cdC8qIFNldCBiaXRbMjktMjNdIHBzcF9zeW5kcm9tZSBpcyBzZXQgaW4gZXJyb3IgRlQgKi9cbiAjZGVmaW5lIE1MWDVFX1BTUF9NQVJLRVJfQklUIChCSVQoMzApIHwgQklUKDMxKSlcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcbkBAIC00MDMsMjc1ICs0OTcsMTU5IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdFx0bW9kaWZ5X2hkciA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXHRkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFxuIFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbiBcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUjtcbiBcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbi1cdGRlc3QuZnQgPSBmc19wcm90LVx1MDAzZXJ4X2Vyci5mdDtcbi1cdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZkZXN0LCAxKTtcbitcdGRlc3QuZnQgPSBmcy1cdTAwM2VjaGVjay5mdDtcbitcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZkZXN0LCAxKTtcbiBcdGlmIChJU19FUlIocnVsZSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuLVx0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxcblwiLFxuLVx0XHRcdCAgICAgIGVyciwgZmxvd19hY3QuYWN0aW9uKTtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBkZWNyeXB0IHJ1bGUsIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbiBcbi1cdGZzX3Byb3QtXHUwMDNlZGVmX3J1bGUgPSBydWxlO1xuLVx0Z290byBvdXQ7XG4rXHRkZWNyeXB0LVx1MDAzZXJ1bGUgPSBydWxlO1xuK1x0Z290byBvdXRfc3BlYztcbiBcbiBvdXRfZXJyOlxuLVx0YWNjZWxfcHNwX2ZzX3J4X2ZzX2Rlc3Ryb3koZnMsIGZzX3Byb3QpO1xuLW91dDpcbi1cdGt2ZnJlZShmbG93X2dyb3VwX2luKTtcbitcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIGRlY3J5cHQpO1xuK291dF9zcGVjOlxuIFx0a3ZmcmVlKHNwZWMpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcbi1cbi1cdGFjY2VsX3BzcCA9IGZzLVx1MDAzZXJ4X2ZzO1xuLVxuLVx0LyogVGhlIG5ldGRldiB1bnJlZyBhbHJlYWR5IGhhcHBlbmVkLCBzbyBhbGwgb2ZmbG9hZGVkIHJ1bGUgYXJlIGFscmVhZHkgcmVtb3ZlZCAqL1xuLVx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W3R5cGVdO1xuLVxuLVx0YWNjZWxfcHNwX2ZzX3J4X2ZzX2Rlc3Ryb3koZnMsIGZzX3Byb3QpO1xuLVxuLVx0YWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KGZzLCBcdTAwMjZmc19wcm90LVx1MDAzZXJ4X2Vycik7XG4rXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbitcdGludCBpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHQvKiBkaXNjb25uZWN0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspIHtcbitcdFx0bWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XG4rXHRcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0pO1xuK1x0fVxuK1x0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuK1x0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSlcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcbi1cdGludCBlcnI7XG4tXG4tXHRhY2NlbF9wc3AgPSBmcy1cdTAwM2VyeF9mcztcbi1cdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFt0eXBlXTtcbitcdGludCBpLCBlcnI7XG4gXG4tXHRmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQodHlwZSkpO1xuLVxuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Vycl9jcmVhdGVfZnQoZnMsIGZzX3Byb3QsIFx1MDAyNmZzX3Byb3QtXHUwMDNlcnhfZXJyKTtcbi1cdGlmIChlcnIpXG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VyeCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJGYWlsZWQgY3JlYXRpbmcgUlggc3RlZXJpbmcgdGFibGVcIik7XG4gXHRcdHJldHVybiBlcnI7XG4rXHR9XG4gXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTtcbi1cdGlmIChlcnIpXG4tXHRcdGFjY2VsX3BzcF9mc19yeF9lcnJfZGVzdHJveV9mdChmcywgXHUwMDI2ZnNfcHJvdC1cdTAwM2VyeF9lcnIpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXG4te1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0Yztcbi1cdGludCBlcnIgPSAwO1xuLVxuLVx0aWYgKCFmcyB8fCAhZnMtXHUwMDNlcnhfZnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0dHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRmc19wcm90ID0gXHUwMDI2YWNjZWxfcHNwLVx1MDAzZWZzX3Byb3RbdHlwZV07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VyZWZjbnQrKylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHQvKiBjcmVhdGUgRlQgKi9cbi1cdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoZnMsIHR5cGUpO1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShmcywgXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuIFx0aWYgKGVycikge1xuLVx0XHRmc19wcm90LVx1MDAzZXJlZmNudC0tO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkZhaWxlZCBjcmVhdGluZyBSWCBjaGVjayBzdGVlcmluZyB0YWJsZVwiKTtcbitcdFx0Z290byBlcnJfZnQ7XG4gXHR9XG4gXG4tXHQvKiBjb25uZWN0ICovXG4tXHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuLVx0ZGVzdC5mdCA9IGZzX3Byb3QtXHUwMDNlZnQ7XG4tXHRtbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSwgXHUwMDI2ZGVzdCk7XG4tXG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXG4te1xuLVx0c3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGMgPSBtbHg1ZV9mc19nZXRfdHRjKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXG4tXHRhY2NlbF9wc3AgPSBmcy1cdTAwM2VyeF9mcztcbi1cdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFt0eXBlXTtcbi1cdG11dGV4X2xvY2soXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbi1cdGlmICgtLWZzX3Byb3QtXHUwMDNlcmVmY250KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdC8qIGRpc2Nvbm5lY3QgKi9cbi1cdG1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQodHlwZSkpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4rXHRcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdDtcbitcbitcdFx0ZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpO1xuK1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0sXG4rXHRcdFx0XHRcdFx0XHRcdTAwMjZkZXN0KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkZhaWxlZCBjcmVhdGluZyBSWCBkZWNyeXB0IHN0ZWVyaW5nIHRhYmxlXCIpO1xuK1x0XHRcdGdvdG8gZXJyX2RlY3J5cHRfZnQ7XG4rXHRcdH1cbitcbitcdFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbitcdFx0ZGVzdC5mdCA9IGZzLVx1MDAzZWRlY3J5cHRbaV0uZnQ7XG4rXHRcdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpLCBcdTAwMjZkZXN0KTtcbitcdH1cbiBcbi1cdC8qIHJlbW92ZSBGVCAqL1xuLVx0YWNjZWxfcHNwX2ZzX3J4X2Rlc3Ryb3koZnMsIHR5cGUpO1xuK1x0cmV0dXJuIDA7XG4gXG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4rZXJyX2RlY3J5cHRfZnQ6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMCkge1xuK1x0XHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpKTtcbitcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4rXHR9XG4rXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4rZXJyX2Z0OlxuK1x0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xuLVxuLVx0aWYgKCFmcy1cdTAwM2VyeF9mcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyKTtcbi1cdG1seDVfZmNfZGVzdHJveShmcy1cdTAwM2VtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuLVx0bWx4NV9mY19kZXN0cm95KGZzLVx1MDAzZW1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4tXHRcdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFtpXTtcbi1cdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0XHRXQVJOX09OKGZzX3Byb3QtXHUwMDNlcmVmY250KTtcbi1cdH1cbi1cdGtmcmVlKGZzLVx1MDAzZXJ4X2ZzKTtcbi1cdGZzLVx1MDAzZXJ4X2ZzID0gTlVMTDtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy1cdTAwM2VtZGV2LCBcdTAwMjZmcy1cdTAwM2VyeF9lcnJfY291bnRlcik7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLVx1MDAzZW1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfY291bnRlcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfaW5pdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqZmxvd19jb3VudGVyO1xuLVx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xuIFx0aW50IGVycjtcbiBcbi1cdGFjY2VsX3BzcCA9IGt6YWxsb2Nfb2JqKCphY2NlbF9wc3ApO1xuLVx0aWYgKCFhY2NlbF9wc3ApXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4tXHRcdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFtpXTtcbi1cdFx0bXV0ZXhfaW5pdChcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0fVxuLVxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfY291bnRlcik7XG4rXHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZsb3cgY291bnRlciBlcnI9JXBlXFxuXCIsXG4tXHRcdFx0ICAgICAgIGZsb3dfY291bnRlcik7XG4tXHRcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcbitcdFx0XHQgICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZmxvdyBjb3VudGVyIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlciA9IGZsb3dfY291bnRlcjtcbiBcbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbitcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggYXV0aCBmYWlsIGZsb3cgY291bnRlciBlcnI9JXBlXFxuXCIsXG4tXHRcdFx0ICAgICAgIGZsb3dfY291bnRlcik7XG4tXHRcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcbi1cdFx0Z290byBvdXRfY291bnRlcl9lcnI7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlciA9IGZsb3dfY291bnRlcjtcbiBcbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcbitcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lcGVcXG5cIixcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9hdXRoX2ZhaWxfY291bnRlcl9lcnI7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGVycm9yIGZsb3cgY291bnRlciBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICAgZXJyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2Vycl9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuIFxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuK1x0aWYgKGVycikge1xuIFx0XHRtbHg1X2NvcmVfd2FybihtZGV2LFxuLVx0XHRcdCAgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lcGVcXG5cIixcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9lcnJfY291bnRlcl9lcnI7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGJhZCBmbG93IGNvdW50ZXIgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9iYWRfY291bnRlciA9IGZsb3dfY291bnRlcjtcbi1cbi1cdGZzLVx1MDAzZXJ4X2ZzID0gYWNjZWxfcHNwO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tb3V0X2Vycl9jb3VudGVyX2Vycjpcbi1cdG1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2Vycl9jb3VudGVyID0gTlVMTDtcbi1vdXRfYXV0aF9mYWlsX2NvdW50ZXJfZXJyOlxuLVx0bWx4NV9mY19kZXN0cm95KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIgPSBOVUxMO1xuLW91dF9jb3VudGVyX2Vycjpcbi1cdG1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlcik7XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlciA9IE5VTEw7XG4gb3V0X2Vycjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xuLVx0XHRmc19wcm90ID0gXHUwMDI2YWNjZWxfcHNwLVx1MDAzZWZzX3Byb3RbaV07XG4tXHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbi1cdH1cbi1cdGtmcmVlKGFjY2VsX3BzcCk7XG4tXHRmcy1cdTAwM2VyeF9mcyA9IE5VTEw7XG4tXG4rXHRhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChmcyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGludCBpO1xuLVxuIFx0aWYgKCFwcml2LVx1MDAzZXBzcClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKVxuLVx0XHRhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBpKTtcbi19XG4tXG4taW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLXtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzO1xuLVx0aW50IGVyciwgaTtcbi1cbi1cdGlmICghcHJpdi1cdTAwM2Vwc3ApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZnMgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcztcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xuLVx0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dF9lcnI7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1vdXRfZXJyOlxuLVx0aS0tO1xuLVx0d2hpbGUgKGkgXHUwMDNlPSAwKSB7XG4tXHRcdGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoZnMsIGkpO1xuLVx0XHQtLWk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuK1x0bmV0ZGV2X2xvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuK1x0YWNjZWxfcHNwX2ZzX3J4X2Rlc3Ryb3kocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMpO1xuK1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUgKnR4KVxuIHtcbiBcdGludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbkBAIC02ODEsNyArNjU5LDYgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0dTMyICppbiwgKm1jLCAqb3V0ZXJfaGVhZGVyc19jO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03MDAsOCArNjc3LDcgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX1BTUF9MRVZFTDtcbiBcdGZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMTtcbiBcbi1cdHR4X2ZzID0gZnMtXHUwMDNldHhfZnM7XG4tXHRmdCA9IG1seDVfY3JlYXRlX2Zsb3dfdGFibGUodHhfZnMtXHUwMDNlbnMsIFx1MDAyNmZ0X2F0dHIpO1xuK1x0ZnQgPSBtbHg1X2NyZWF0ZV9mbG93X3RhYmxlKHR4LVx1MDAzZW5zLCBcdTAwMjZmdF9hdHRyKTtcbiBcdGlmIChJU19FUlIoZnQpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZnQpO1xuIFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiUFNQOiBmYWlsIHRvIGFkZCBwc3AgdHggZmxvdyB0YWJsZSwgZXJyID0gJWRcXG5cIiwgZXJyKTtcbkBAIC03MjcsNyArNzAzLDcgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19FTkNSWVBUIHxcbiBcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbiBcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0LmNvdW50ZXIgPSB0eF9mcy1cdTAwM2V0eF9jb3VudGVyO1xuK1x0ZGVzdC5jb3VudGVyID0gZnMtXHUwMDNldHhfY291bnRlcjtcbiBcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4gXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG5AQCAtNzM1LDkgKzcxMSw5IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdFx0Z290byBlcnJfYWRkX2Zsb3dfcnVsZTtcbiBcdH1cbiBcbi1cdHR4X2ZzLVx1MDAzZWZ0ID0gZnQ7XG4tXHR0eF9mcy1cdTAwM2VmZyA9IGZnO1xuLVx0dHhfZnMtXHUwMDNlcnVsZSA9IHJ1bGU7XG4rXHR0eC1cdTAwM2VmdCA9IGZ0O1xuK1x0dHgtXHUwMDNlZmcgPSBmZztcbitcdHR4LVx1MDAzZXJ1bGUgPSBydWxlO1xuIFx0Z290byBvdXQ7XG4gXG4gZXJyX2FkZF9mbG93X3J1bGU6XG5AQCAtNzUwLDg3ICs3MjYsMzUgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMpXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXG4ge1xuLVx0aWYgKCF0eF9mcy1cdTAwM2VmdClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bWx4NV9kZWxfZmxvd19ydWxlcyh0eF9mcy1cdTAwM2VydWxlKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKHR4X2ZzLVx1MDAzZWZnKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKHR4X2ZzLVx1MDAzZWZ0KTtcbitcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNnR4LVx1MDAzZXJ1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZ0eC1cdTAwM2VmZyk7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZ0eC1cdTAwM2VmdCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVx0aW50IGVyciA9IDA7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdGlmICh0eF9mcy1cdTAwM2VyZWZjbnQrKylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKGZzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHR4X2ZzLVx1MDAzZXJlZmNudC0tO1xuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRyZXR1cm4gZXJyO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy1cdTAwM2VtZGV2LCBcdTAwMjZmcy1cdTAwM2V0eF9jb3VudGVyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X3B1dChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbi17XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRpZiAoLS10eF9mcy1cdTAwM2VyZWZjbnQpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0YWNjZWxfcHNwX2ZzX3R4X2Rlc3Ryb3kodHhfZnMpO1xuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuLXtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtXHUwMDNldHhfZnM7XG4tXG4tXHRpZiAoIXR4X2ZzKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgdHhfZnMtXHUwMDNldHhfY291bnRlcik7XG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdFdBUk5fT04odHhfZnMtXHUwMDNlcmVmY250KTtcbi1cdGtmcmVlKHR4X2ZzKTtcbi1cdGZzLVx1MDAzZXR4X2ZzID0gTlVMTDtcbi19XG4tXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfaW5pdF90eChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9pbml0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcbi1cdHN0cnVjdCBtbHg1X2ZjICpmbG93X2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbitcdGludCBlcnI7XG4gXG4tXHRucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfRUdSRVNTX0lQU0VDKTtcbi1cdGlmICghbnMpXG4rXHRmcy1cdTAwM2V0eC5ucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsXG4rXHRcdFx0XHRcdCAgICBNTFg1X0ZMT1dfTkFNRVNQQUNFX0VHUkVTU19JUFNFQyk7XG4rXHRpZiAoIWZzLVx1MDAzZXR4Lm5zKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR0eF9mcyA9IGt6YWxsb2Nfb2JqKCp0eF9mcyk7XG4tXHRpZiAoIXR4X2ZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXR4X2NvdW50ZXIpO1xuK1x0aWYgKGVycikge1xuIFx0XHRtbHg1X2NvcmVfd2FybihtZGV2LFxuLVx0XHRcdCAgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwiLFxuLVx0XHRcdCAgICAgICBmbG93X2NvdW50ZXIpO1xuLVx0XHRrZnJlZSh0eF9mcyk7XG4tXHRcdHJldHVybiBQVFJfRVJSKGZsb3dfY291bnRlcik7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHR4IGZsb3cgY291bnRlciBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICAgZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbiBcdH1cbi1cdHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XG4tXHRtdXRleF9pbml0KFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdHR4X2ZzLVx1MDAzZW5zID0gbnM7XG4tXHRmcy1cdTAwM2V0eF9mcyA9IHR4X2ZzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTgzOCwzMiArNzYyLDI5IEBAIHN0YXRpYyB2b2lkXG4gbWx4NWVfYWNjZWxfcHNwX2ZzX2dldF9zdGF0c19maWxsKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbWx4NWVfcHNwX3N0YXRzICpzdGF0cylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXR4X2ZzO1xuK1x0c3RydWN0IG1seDVlX3BzcF9mcyAqZnMgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2VmcztcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVxuLVx0YWNjZWxfcHNwID0gKHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKilwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcy1cdTAwM2VyeF9mcztcbiBcbi1cdGlmICh0eF9mcy1cdTAwM2V0eF9jb3VudGVyKVxuLVx0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIsIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF90eF9wa3RzLFxuK1x0aWYgKGZzLVx1MDAzZXR4X2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNldHhfY291bnRlciwgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3R4X3BrdHMsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3R4X2J5dGVzKTtcbiBcbi1cdGlmIChhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlciwgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHMsXG4rXHRpZiAoZnMtXHUwMDNlcnhfY291bnRlcilcbitcdFx0bWx4NV9mY19xdWVyeShtZGV2LCBmcy1cdTAwM2VyeF9jb3VudGVyLCBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfcGt0cyxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXMpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXG4rXHRpZiAoZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfYXV0aF9mYWlsLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9ieXRlc19hdXRoX2ZhaWwpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9lcnJfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIsXG4rXHRpZiAoZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfZnJhbWVfZXJyLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9ieXRlc19mcmFtZV9lcnIpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9iYWRfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4rXHRpZiAoZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfZHJvcCxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXNfZHJvcCk7XG4gfVxuQEAgLTg3MywyMSArNzk0LDE1IEBAIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbi19XG4tXG4taW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLXtcbi1cdGlmICghcHJpdi1cdTAwM2Vwc3ApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGFjY2VsX3BzcF9mc190eF9mdF9nZXQocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMpO1xuK1x0bmV0ZGV2X2xvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuK1x0YWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMtXHUwMDNldHgpO1xuK1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVlX2FjY2VsX3BzcF9mc19jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3J4KGZzKTtcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcbitcdGFjY2VsX3BzcF9mc19yeF9jbGVhbnVwKGZzKTtcbitcdGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTtcbiBcdGtmcmVlKGZzKTtcbiB9XG4gXG5AQCAtOTAxLDI5ICs4MTYsNjMgQEAgc3RhdGljIHN0cnVjdCBtbHg1ZV9wc3BfZnMgKm1seDVlX2FjY2VsX3BzcF9mc19pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdGZzLVx1MDAzZW1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfaW5pdF90eChmcyk7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfaW5pdChmcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl90eDtcbiBcbiBcdGZzLVx1MDAzZWZzID0gcHJpdi1cdTAwM2Vmcztcbi1cdGVyciA9IGFjY2VsX3BzcF9mc19pbml0X3J4KGZzKTtcbitcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9pbml0KGZzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3J4O1xuIFxuIFx0cmV0dXJuIGZzO1xuIFxuIGVycl9yeDpcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcbitcdGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTtcbiBlcnJfdHg6XG4gXHRrZnJlZShmcyk7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShwcml2LVx1MDAzZXBzcC1cdTAwM2VmcywgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfZnRfY3JlYXRlKHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBcdTAwMjZwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcy1cdTAwM2V0eCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJGYWlsZWQgY3JlYXRpbmcgVFggc3RlZXJpbmcgdGFibGVcIik7XG4rXHRcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbitcdH1cbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuK3tcbitcdGFjY2VsX3BzcF9mc190eF9mdF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXR4KTtcbitcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbit9XG4rXG4gc3RhdGljIGludFxuIG1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0cmV0dXJuIDA7IC8qIFRPRE86IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGRvIHRoaW5ncyB0byB0aGUgZGV2aWNlICovXG4rXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHBzZC1cdTAwM2VtYWluX25ldGRldik7XG4rXHRib29sIHBzcF9lbmFibGVkID0gcHNkLVx1MDAzZWNvbmZpZy52ZXJzaW9ucztcbitcdGJvb2wgZW5hYmxlX3BzcCA9IGNvbmYtXHUwMDNldmVyc2lvbnM7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdG5ldGRldl9sb2NrKHByaXYtXHUwMDNlbmV0ZGV2KTtcbitcdGlmICghcHNwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGVuYWJsZV9wc3ApXG4rXHRcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGUocHJpdiwgZXh0YWNrKTtcbitcdGVsc2UgaWYgKHBzcF9lbmFibGVkIFx1MDAyNlx1MDAyNiAhZW5hYmxlX3BzcClcbitcdFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3kocHJpdik7XG4rXHRuZXRkZXZfdW5sb2NrKHByaXYtXHUwMDNlbmV0ZGV2KTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbkBAIC0xMDcyLDIxICsxMDIxLDIxIEBAIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi1cdTAwM2Vwc3A7XG4gXG4tXHRpZiAoIXBzcCB8fCAhcHNwLVx1MDAzZXBzcClcbitcdGlmICghcHNwIHx8ICFwc3AtXHUwMDNlcHNkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwc3BfZGV2X3VucmVnaXN0ZXIocHNwLVx1MDAzZXBzcCk7XG4tXHRwc3AtXHUwMDNlcHNwID0gTlVMTDtcbitcdHBzcF9kZXZfdW5yZWdpc3Rlcihwc3AtXHUwMDNlcHNkKTtcbitcdHBzcC1cdTAwM2Vwc2QgPSBOVUxMO1xuIH1cbiBcbi12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbitpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtXHUwMDNlcHNwO1xuIFx0c3RydWN0IHBzcF9kZXYgKnBzZDtcbiBcbiBcdC8qIEZXIENhcHMgbWlzc2luZyAqL1xuIFx0aWYgKCFwcml2LVx1MDAzZXBzcClcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdHBzcC1cdTAwM2VjYXBzLmFzc29jX2Rydl9zcGMgPSBzaXplb2YodTMyKTtcbiBcdHBzcC1cdTAwM2VjYXBzLnZlcnNpb25zID0gMSBcdTAwM2NcdTAwM2MgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyODtcbkBAIC0xMDk4LDkgKzEwNDcsMTEgQEAgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoSVNfRVJSKHBzZCkpIHtcbiBcdFx0bWx4NV9jb3JlX2Vycihwcml2LVx1MDAzZW1kZXYsIFwiUFNQIGZhaWxlZCB0byByZWdpc3RlciBkdWUgdG8gJXBlXFxuXCIsXG4gXHRcdFx0ICAgICAgcHNkKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihwc2QpO1xuIFx0fVxuLVx0cHNwLVx1MDAzZXBzcCA9IHBzZDtcbitcdHBzcC1cdTAwM2Vwc2QgPSBwc2Q7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxuaW5kZXggNmI2MmZlZjBkOWE3MzguLjNmNDQxZTdkZDU1YWMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMge1xuIH07XG4gXG4gc3RydWN0IG1seDVlX3BzcCB7XG4tXHRzdHJ1Y3QgcHNwX2RldiAqcHNwO1xuK1x0c3RydWN0IHBzcF9kZXYgKnBzZDtcbiBcdHN0cnVjdCBwc3BfZGV2X2NhcHMgY2FwcztcbiBcdHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzO1xuIFx0YXRvbWljX3QgdHhfa2V5X2NudDtcbkBAIC00MywzMyArNDMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4tdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuK2ludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pc19wc3BfZGV2aWNlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuaW5kZXggZWY3ZjUzMzg1NDBmZGYuLjM0OGZkN2E5NjI2MTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXG5AQCAtMTQsMTIgKzE0LDYgQEBcbiAjaW5jbHVkZSBcImVuX2FjY2VsL3BzcF9yeHR4LmhcIlxuICNpbmNsdWRlIFwiZW5fYWNjZWwvcHNwLmhcIlxuIFxuLWVudW0ge1xuLVx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVELFxuLVx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfQVVUSF9GQUlMRUQsXG4tXHRNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9CQURfVFJBSUxFUixcbi19O1xuLVxuIHN0YXRpYyB2b2lkIG1seDVlX3BzcF9zZXRfc3dwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZSAqcHNwX3N0LFxuIFx0XHRcdCAgICAgIHN0cnVjdCBtbHg1X3dxZV9ldGhfc2VnICplc2VnKVxuQEAgLTEyMiwxNiArMTE2LDExIEBAIHN0YXRpYyBib29sIG1seDVlX3BzcF9zZXRfc3RhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4gYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuLVx0dTMyIHBzcF9tZXRhX2RhdGEgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpO1xuIFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0dTE2IGRldl9pZCA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZXBzcC1cdTAwM2VpZDtcbitcdHUxNiBkZXZfaWQgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vwc2QtXHUwMDNlaWQ7XG4gXHRib29sIHN0cmlwX2ljdiA9IHRydWU7XG4gXHR1OCBnZW5lcmF0aW9uID0gMDtcbiBcbi1cdC8qIFRCRDogcmVwb3J0IGVycm9ycyBhcyBTVyBjb3VudGVycyB0byBldGh0b29sLCBhbnkgZnVydGhlciBoYW5kbGluZyA/ICovXG4tXHRpZiAoTUxYNV9QU1BfTUVUQURBVEFfU1lORFJPTUUocHNwX21ldGFfZGF0YSkgIT0gTUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVEKVxuLVx0XHRnb3RvIGRyb3A7XG4tXG4gXHRpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIGdlbmVyYXRpb24sIHN0cmlwX2ljdikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG5pbmRleCA3MDI4OWM5MjFiZDZiMy4uMmIwODBjMzljYzM3ZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmhcbkBAIC0xMCw5ICsxMCw4IEBAXG4gI2luY2x1ZGUgXCJlbi5oXCJcbiAjaW5jbHVkZSBcImVuL3R4cnguaFwiXG4gXG4tLyogQml0MzA6IFBTUCBtYXJrZXIsIEJpdDI5LTIzOiBQU1Agc3luZHJvbWUsIEJpdDIyLTA6IFBTUCBvYmogaWQgKi9cbisvKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xuICNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcdTAwM2VcdTAwM2UgMzApIFx1MDAyNiAweDMpID09IDB4Mylcbi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX1NZTkRST01FKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDIzKSBcdTAwMjYgR0VOTUFTSyg2LCAwKSlcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFx1MDAyNiBHRU5NQVNLKDIyLCAwKSlcbiBcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuaW5kZXggNzc1ZjBjNmU1NWM5NTUuLjJjYjQ4YjI0ZDVlYWM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYxOTEsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfaW5pdF9uaWNfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbitzdGF0aWMgaW50IG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG5AQCAtNjE5OSw3ICs2MTk5LDkgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBcdG1seDVlX2ZzX2luaXRfbDJfYWRkcihwcml2LVx1MDAzZWZzLCBuZXRkZXYpO1xuIFx0bWx4NWVfaXBzZWNfaW5pdChwcml2KTtcbi1cdG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcbitcdGVyciA9IG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2lwc2VjX2NsZWFudXA7XG4gXG4gXHRlcnIgPSBtbHg1ZV9tYWNzZWNfaW5pdChwcml2KTtcbiBcdGlmIChlcnIpXG5AQCAtNjIyMiw3ICs2MjI0LDcgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG1seDVlX3BjaWVfY29uZ19ldmVudF9pbml0KHByaXYpO1xuIFx0bWx4NWVfaHZfdmhjYV9zdGF0c19jcmVhdGUocHJpdik7XG4gXHRpZiAobmV0ZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRClcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcdG1seDVlX2RjYm5sX2luaXRfYXBwKHByaXYpO1xuIFxuIFx0bWx4NWVfbmljX3NldF9yeF9tb2RlKHByaXYpO1xuQEAgLTYyMzUsNiArNjIzNywxMiBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9pcHNlY19jbGVhbnVwOlxuK1x0bWx4NWVfaXBzZWNfY2xlYW51cChwcml2KTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVlX25pY19kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuQEAgLTY2MTYsMTMgKzY2MjQsMTggQEAgaW50IG1seDVlX2F0dGFjaF9uZXRkZXYoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbnVwX3R4O1xuIFxuLVx0aWYgKHByb2ZpbGUtXHUwMDNlZW5hYmxlKVxuLVx0XHRwcm9maWxlLVx1MDAzZWVuYWJsZShwcml2KTtcbitcdGlmIChwcm9maWxlLVx1MDAzZWVuYWJsZSkge1xuK1x0XHRlcnIgPSBwcm9maWxlLVx1MDAzZWVuYWJsZShwcml2KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9jbGVhbnVwX3J4O1xuK1x0fVxuIFxuIFx0bWx4NWVfdXBkYXRlX2ZlYXR1cmVzKHByaXYtXHUwMDNlbmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuK2Vycl9jbGVhbnVwX3J4OlxuK1x0cHJvZmlsZS1cdTAwM2VjbGVhbnVwX3J4KHByaXYpO1xuIGVycl9jbGVhbnVwX3R4OlxuIFx0cHJvZmlsZS1cdTAwM2VjbGVhbnVwX3R4KHByaXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xuaW5kZXggYzhiNzZkMzAxYzkyY2YuLjYwMzA1MWFiMWVhYTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmNcbkBAIC0xMjYyLDkgKzEyNjIsMTEgQEAgc3RhdGljIHZvaWQgbWx4NWVfY2xlYW51cF9yZXBfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1ZV9yZXBfbmVpZ2hfY2xlYW51cChycHJpdik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBtbHg1ZV9yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdG1seDVlX3NldF9uZXRkZXZfbXR1X2JvdW5kYXJpZXMocHJpdik7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG5AQCAtMTMyMiw3ICsxMzI0LDcgQEAgc3RhdGljIGludCB1cGxpbmtfcmVwX2FzeW5jX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnRcbiBcdHJldHVybiBOT1RJRllfRE9ORTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbkBAIC0xMzU3LDYgKzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDA6NTUuNDUxMDE1NTAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4Nzc0MDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIE1lbGxhbm94IG1seDUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgbGlrZSBpdCB0d2Vha3MgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIHN0dWZmLiBJdCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBwc3AuY2AsIGBwc3AuaGAsIGBwc3Bfcnh0eC5jYCwgYGVuX21haW4uY2AsIGBlbl9yZXAuY2AsIGBlbi5oYCwgYW5kIGBmcy5oYC4gQmFzaWNhbGx5LCBpdOKAmXMgYWx0ZXJpbmcgaG93IGZsb3cgc3RlZXJpbmcgcnVsZXMgYXJlIG1hZGUgYW5kIGhhbmRsZWQgd2hlbiB3ZSdyZSBvZmZsb2FkaW5nIFBTUCB0YXNrcy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2FsbGJhY2sgaW4gdGhlIGBtbHg1ZV9wcm9maWxlYCBpcyByZXR1cm5pbmcgYW4gYGludGAgbm93IGluc3RlYWQgb2YgYHZvaWRgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpczogQ2FuIEkgZXZlbiAqdGVzdCogdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgbWx4NSBkcml2ZXIgKnJlcXVpcmVzKiBzcGVjaWZpYyBNZWxsYW5veCBoYXJkd2FyZSDigJMgQ29ubmVjdFgtNCwgNSwgNiwgb3IgNy4gU3l6a2FsbGVyLCB3aGljaCBpcyBteSBnby10byBmdXp6aW5nIHRvb2wsIGRvZXNuJ3QgaGF2ZSBNZWxsYW5veCBoYXJkd2FyZS4gU28sIGNhbiBRRU1VIGVtdWxhdGUgbWx4NT8gSSBrbm93IFFFTVUgZW11bGF0ZXMgc2V2ZXJhbCBOSUNzLCBsaWtlIGUxMDAwLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCB2bXhuZXQzLCBhbmQgaWdiLCBidXQgbm90IHVzdWFsbHkgbWx4NSBuYXRpdmVseS4gSSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgYSBjdXN0b20gY29uZmlndXJhdGlvbiwgYnV0IGl0J3Mgbm90IHN0YW5kYXJkLiBUaGVyZSdzIG5vIHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiwgZWl0aGVyLCBzaW5jZSBpdCdzIGEgaGFyZHdhcmUgZHJpdmVyLlxuXG5TeXprYWxsZXIgZG9lcyBoYXZlIGNsZXZlciBlbXVsYXRpb24gbWVjaGFuaXNtcyBmb3Igb3RoZXIgZGV2aWNlcyDigJMgaXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGB2a21zYCBmb3IgRFJNLCBhbmQgYHZpdmlkYCBmb3IgVjRMMi4gRm9yIGV0aGVybmV0LCBpdCB1c2VzIGB0dW5gL2B0YXBgIG9yIGB2ZXRoYC4gQnV0IEkgZG9u4oCZdCB0aGluayB0aGVyZSBpcyBhIGRpcmVjdCBlcXVpdmFsZW50IGZvciBlbXVsYXRpbmcgUENJZSBkZXZpY2VzIGxpa2UgbWx4NS5cblxuU28sIHJlYWxpc3RpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXAuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgd2F5IHRvIHRyaWdnZXIgdGhpcyBtbHg1IGNvZGUgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4gSXMgdGhlcmUgc29tZSBraW5kIG9mIG1vY2sgZHJpdmVyIG9yIHNpbXVsYXRpb24gbGF5ZXI/IEknbGwgcnVuIGEga2VybmVsIHNlYXJjaCBmb3IgXCJtbHg1XCIgYW5kIHNlZSB3aGF0IGl0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc5MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIxOjQxOjA0LjYzODc1OTM1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMTMzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NV9jb3JlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMzM4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz01OD1zdHJ1Y3QgbWx4NV9kbWFfcG9vbCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy02MS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo2MjpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTYzLVxcdGludCBub2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9Nzk9c3RydWN0IG1seDVfZG1hX3Bvb2xfc3RhdHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtODktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6OTA6c3RhdGljIHZvaWQgKm1seDVfZG1hX3phbGxvY19jb2hlcmVudF9ub2RlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtOTEtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0xMDk9c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9kZXN0cm95KHN0cnVjdCBtbHg1X2RtYV9wb29sICpwb29sKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjExNTpzdGF0aWMgc3RydWN0IG1seDVfZG1hX3Bvb2wgKm1seDVfZG1hX3Bvb2xfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMTE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IG5vZGUsIHU4IGJsb2NrX3NoaWZ0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9MTMzPW1seDVfZG1hX3Bvb2xfcGFnZV9hbGxvYyhzdHJ1Y3QgbWx4NV9kbWFfcG9vbCAqcG9vbClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTE2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzoxNjM6c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9wYWdlX2ZyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0xNjQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtbHg1X2RtYV9wb29sX3BhZ2UgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0yODM9c3RhdGljIHN0cnVjdCBtbHg1X2ZyYWdfYnVmX25vZGVfcG9vbHMgKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjI4NDptbHg1X2ZyYWdfYnVmX25vZGVfcG9vbHNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBub2RlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTI4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0zMDc9bWx4NV9mcmFnX2J1Zl9kbWFfcG9vbHNfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMDgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjMwOTpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMTAtXFx0aW50IG5vZGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0zMzY9REVGSU5FX1NIT1dfQVRUUklCVVRFKG1seDVfZnJhZ19idWZfZG1hX3Bvb2xzX2RlYnVnZnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTMzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzozMzg6dm9pZCBtbHg1X2ZyYWdfYnVmX3Bvb2xzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjM1OTppbnQgbWx4NV9mcmFnX2J1Zl9wb29sc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTM4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzozODg6aW50IG1seDVfZnJhZ19idWZfYWxsb2Nfbm9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgc2l6ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zODktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NV9mcmFnX2J1ZiAqYnVmLCBpbnQgbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTQyNT1FWFBPUlRfU1lNQk9MX0dQTChtbHg1X2ZyYWdfYnVmX2FsbG9jX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo0Mjc6dm9pZCBtbHg1X2ZyYWdfYnVmX2ZyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfZnJhZ19idWYgKmJ1ZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy00Mjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9NDQ1PUVYUE9SVF9TWU1CT0xfR1BMKG1seDVfZnJhZ19idWZfZnJlZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNDQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjQ0NzpzdGF0aWMgc3RydWN0IG1seDVfZGJfcGdkaXIgKm1seDVfYWxsb2NfZGJfcGdkaXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy00NDgtXFx0XFx0XFx0XFx0XFx0XFx0IGludCBub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9NDc2PXN0YXRpYyBpbnQgbWx4NV9hbGxvY19kYl9mcm9tX3BnZGlyKHN0cnVjdCBtbHg1X2RiX3BnZGlyICpwZ2RpcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTUwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo1MDE6aW50IG1seDVfZGJfYWxsb2Nfbm9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9kYiAqZGIsIGludCBub2RlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTUwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz01Mjg9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9kYl9hbGxvY19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6NTMwOnZvaWQgbWx4NV9kYl9mcmVlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2RiICpkYilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTI4Mz1zdGF0aWMgdm9pZCBwb2xsX3RpbWVvdXQoc3RydWN0IG1seDVfY21kX3dvcmtfZW50ICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI4NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI4NTpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGVudC1cXHUwMDNlY21kLCBzdHJ1Y3QgbWx4NV9jb3JlX2RldiwgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjg2LVxcdHU2NCBjbWRfdG9fbXMgPSBtbHg1X3RvdXRfbXMoZGV2LCBDTUQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTMzMT1zdGF0aWMgdm9pZCBkdW1wX2J1Zih2b2lkICpidWYsIGludCBzaXplLCBpbnQgZGF0YV9vbmx5LCBpbnQgb2Zmc2V0LCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTM0Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MzQ3OnN0YXRpYyBpbnQgbWx4NV9pbnRlcm5hbF9lcnJfcmV0X3ZhbHVlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBvcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMzQ4LVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKnN5bmQsIHU4ICpzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9NzkzPXN0YXRpYyBpbnQgY21kX3N0YXR1c190b19lcnIodTggc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6ODE3OnZvaWQgbWx4NV9jbWRfb3V0X2VycihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9ODI3PUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfb3V0X2Vycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6ODI5OnN0YXRpYyB2b2lkIGNtZF9zdGF0dXNfcHJpbnQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdm9pZCAqaW4sIHZvaWQgKm91dClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy04NDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjg0NTppbnQgbWx4NV9jbWRfY2hlY2soc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGVyciwgdm9pZCAqaW4sIHZvaWQgKm91dClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz04NzI9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9jaGVjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTg3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6ODc0OnN0YXRpYyB2b2lkIGR1bXBfY29tbWFuZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy04NzUtXFx0XFx0XFx0IHN0cnVjdCBtbHg1X2NtZF93b3JrX2VudCAqZW50LCBpbnQgaW5wdXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5MzI6c3RhdGljIHZvaWQgbWx4NV9jbWRfY29tcF9oYW5kbGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU2NCB2ZWMsIGJvb2wgZm9yY2VkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz05MzQ9c3RhdGljIHZvaWQgY2JfdGltZW91dF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjYl90aW1lb3V0X3dvcmspO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5NDA6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihlbnQtXFx1MDAzZWNtZCwgc3RydWN0IG1seDVfY29yZV9kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk0MS1cXHRcXHRcXHRcXHRcXHRcXHQgY21kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk2MTpzdGF0aWMgdm9pZCBmcmVlX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jbWRfbXNnICptc2cpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5NjI6c3RhdGljIHZvaWQgbWx4NV9mcmVlX2NtZF9tc2coc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTYzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9OTY1PXN0YXRpYyBib29sIG9wY29kZV9hbGxvd2VkKHN0cnVjdCBtbHg1X2NtZCAqY21kLCB1MTYgb3Bjb2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTczOmJvb2wgbWx4NV9jbWRfaXNfZG93bihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTk4MD1zdGF0aWMgdm9pZCBjbWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05ODUtXFx0c3RydWN0IG1seDVfY21kX2xheW91dCAqbGF5O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5ODY6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTg3LVxcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk5NDpcXHRkZXYgPSBjb250YWluZXJfb2YoY21kLCBzdHJ1Y3QgbWx4NV9jb3JlX2RldiwgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTk1LVxcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG1seDVfdG91dF9tcyhkZXYsIENNRCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTExNDA9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTE0NDpzdGF0aWMgdm9pZCB3YWl0X2Z1bmNfaGFuZGxlX2V4ZWNfdGltZW91dChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTQ1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1seDVfY21kX3dvcmtfZW50ICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTE2OTpzdGF0aWMgaW50IHdhaXRfZnVuYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jbWRfd29ya19lbnQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTIxNS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTIxNjpzdGF0aWMgYm9vbCBtbHg1X2NtZF9hbGxfc3RhbGxlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjU4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxMjU5OnN0YXRpYyBpbnQgbWx4NV9jbWRfaW52b2tlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZF9tc2cgKmluLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjYwLVxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm91dCwgdm9pZCAqdW91dCwgaW50IHVvdXRfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xMzM3PXN0YXRpYyBzc2l6ZV90IGRiZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMzM5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTM0MDpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMzQxLVxcdHN0cnVjdCBtbHg1X2NtZF9kZWJ1ZyAqZGJnID0gXFx1MDAyNmRldi1cXHUwMDNlY21kLmRiZztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNDA0PXN0YXRpYyBpbnQgbWx4NV9jb3B5X2Zyb21fbXNnKHZvaWQgKnRvLCBzdHJ1Y3QgbWx4NV9jbWRfbXNnICpmcm9tLCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNDM3OnN0YXRpYyBzdHJ1Y3QgbWx4NV9jbWRfbWFpbGJveCAqYWxsb2NfY21kX2JveChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDM4LVxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE0NTg6c3RhdGljIHZvaWQgZnJlZV9jbWRfYm94KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NTktXFx0XFx0XFx0IHN0cnVjdCBtbHg1X2NtZF9tYWlsYm94ICptYWlsYm94KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE0NjU6c3RhdGljIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1seDVfYWxsb2NfY21kX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDY2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBmbGFncywgaW50IHNpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTUxMjpzdGF0aWMgdm9pZCBtbHg1X2ZyZWVfY21kX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNTI2PXN0YXRpYyBzc2l6ZV90IGRhdGFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUyOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE1Mjk6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUzMC1cXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFxcdTAwMjZkZXYtXFx1MDAzZWNtZC5kYmc7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU1MD1zdGF0aWMgc3NpemVfdCBkYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTUyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTU1MzpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTU0LVxcdHN0cnVjdCBtbHg1X2NtZF9kZWJ1ZyAqZGJnID0gXFx1MDAyNmRldi1cXHUwMDNlY21kLmRiZztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNTcwPXN0YXRpYyBzc2l6ZV90IG91dGxlbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU3Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE1NzM6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU3NC1cXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFxcdTAwMjZkZXYtXFx1MDAzZWNtZC5kYmc7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU4NT1zdGF0aWMgc3NpemVfdCBvdXRsZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU4Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE1ODg6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU4OS1cXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFxcdTAwMjZkZXYtXFx1MDAzZWNtZC5kYmc7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbGZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTYyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTYyODpzdGF0aWMgdm9pZCBzZXRfd3FuYW1lKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE2MzY6c3RhdGljIHZvaWQgY2xlYW5fZGVidWdfZmlsZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTYzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY0NjpzdGF0aWMgdm9pZCBjcmVhdGVfZGVidWdmc19maWxlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjU5OnZvaWQgbWx4NV9jbWRfYWxsb3dlZF9vcGNvZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY3NTpzdGF0aWMgdm9pZCBtbHg1X2NtZF9jaGFuZ2VfbW9kKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBtb2RlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNjkxPXN0YXRpYyBpbnQgY21kX2NvbXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjkzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY5NDpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjk1LVxcdHN0cnVjdCBtbHg1X2NtZCAqY21kO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2OTgtXFx0Y21kID0gbWx4NV9uYl9jb2YobmIsIHN0cnVjdCBtbHg1X2NtZCwgbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjk5OlxcdGRldiA9IGNvbnRhaW5lcl9vZihjbWQsIHN0cnVjdCBtbHg1X2NvcmVfZGV2LCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzAwLVxcdGVxZSA9IGRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTcwOC19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MDk6dm9pZCBtbHg1X2NtZF91c2VfZXZlbnRzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MTY6dm9pZCBtbHg1X2NtZF91c2VfcG9sbGluZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNzIyOnN0YXRpYyB2b2lkIGZyZWVfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTcyMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTczNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTczNTpzdGF0aWMgdm9pZCBtbHg1X2NtZF9jb21wX2hhbmRsZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTY0IHZlYywgYm9vbCBmb3JjZWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE4MzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4Mzk6c3RhdGljIHZvaWQgbWx4NV9jbWRfdHJpZ2dlcl9jb21wbGV0aW9ucyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxODc0OnZvaWQgbWx4NV9jbWRfZmx1c2goc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTg3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTg5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTg5NzpzdGF0aWMgc3RydWN0IG1seDVfY21kX21zZyAqYWxsb2NfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBpbl9zaXplLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODk4LVxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xOTM1PXN0YXRpYyBpbnQgaXNfbWFuYWdlX3BhZ2VzKHZvaWQgKmluKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE5MzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NDA6c3RhdGljIGJvb2wgbWx4NV9oYXNfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTk0NTpzdGF0aWMgYm9vbCBtbHg1X2NtZF9pc19wcml2aWxlZ2VkX3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTQ2LVxcdFxcdFxcdFxcdCAgICAgICB1MTYgdWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE5NTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NTU6c3RhdGljIGludCBjbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk1Ni1cXHRcXHQgICAgaW50IG91dF9zaXplLCBtbHg1X2NtZF9jYmtfdCBjYWxsYmFjaywgdm9pZCAqY29udGV4dCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMDM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMDM2OnN0YXRpYyB2b2lkIG1seDVfY21kX2Vycl90cmFjZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwMzcte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIwNDY6c3RhdGljIHZvaWQgY21kX3N0YXR1c19sb2coc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSwgdTggc3RhdHVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMDQ3LVxcdFxcdFxcdCAgIHUzMiBzeW5kcm9tZSwgaW50IGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMDcxLS8qIHByZXNlcnZlIC1FUkVNT1RFSU8gZm9yIG91dGJveC5zdGF0dXMgIT0gT0ssIG90aGVyd2lzZSByZXR1cm4gZXJyIGFzIGlzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIwNzI6c3RhdGljIGludCBjbWRfc3RhdHVzX2VycihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgZXJyLCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxMDYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxMDc6aW50IG1seDVfY21kX2RvKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSwgdm9pZCAqb3V0LCBpbnQgb3V0X3NpemUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxMTU9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9kbyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjEyOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjEyOTppbnQgbWx4NV9jbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjEzMC1cXHRcXHQgIGludCBvdXRfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMTM2PUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfZXhlYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE1MS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjE1MjppbnQgbWx4NV9jbWRfZXhlY19wb2xsaW5nKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE1My1cXHRcXHRcXHQgIHZvaWQgKm91dCwgaW50IG91dF9zaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxNjI9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9leGVjX3BvbGxpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMTY0OnZvaWQgbWx4NV9jbWRfaW5pdF9hc3luY19jdHgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE2NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtbHg1X2FzeW5jX2N0eCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxODk9c3RhdGljIHZvaWQgbWx4NV9jbWRfZXhlY19jYl9oYW5kbGVyKGludCBzdGF0dXMsIHZvaWQgKl93b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxOTItXFx0c3RydWN0IG1seDVfYXN5bmNfY3R4ICpjdHg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxOTM6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE5NC1cXHRib29sIHRocm90dGxlX2xvY2tlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMjE0PWludCBtbHg1X2NtZF9leGVjX2NiKHN0cnVjdCBtbHg1X2FzeW5jX2N0eCAqY3R4LCB2b2lkICppbiwgaW50IGluX3NpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjIxNy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIyMTg6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjE5LVxcdHUxNiB1aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjI2OD1FWFBPUlRfU1lNQk9MKG1seDVfY21kX2V4ZWNfY2IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMjcwOmludCBtbHg1X2NtZF9hbGxvd19vdGhlcl92aGNhX2FjY2VzcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjcxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1seDVfY21kX2FsbG93X290aGVyX3ZoY2FfYWNjZXNzX2F0dHIgKmF0dHIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjI4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjI5MDppbnQgbWx4NV9jbWRfYWxpYXNfb2JqX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjkxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9hbGlhc19vYmpfY3JlYXRlX2F0dHIgKmFsaWFzX2F0dHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjMyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjMyNjppbnQgbWx4NV9jbWRfYWxpYXNfb2JqX2Rlc3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTMyIG9ial9pZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjMyNy1cXHRcXHRcXHQgICAgICAgdTE2IG9ial90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIzMzk6c3RhdGljIHZvaWQgZGVzdHJveV9tc2dfY2FjaGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjM0MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjM1OT1zdGF0aWMgdW5zaWduZWQgY21kX2NhY2hlX2VudF9zaXplW01MWDVfTlVNX0NPTU1BTkRfQ0FDSEVTXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMzY3OnN0YXRpYyB2b2lkIGNyZWF0ZV9tc2dfY2FjaGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjM2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjM5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjM5MzpzdGF0aWMgaW50IGFsbG9jX2NtZF9wYWdlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZCAqY21kKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDIyOnN0YXRpYyB2b2lkIGZyZWVfY21kX3BhZ2Uoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kICpjbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0MjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI0Mjg6c3RhdGljIHUxNiBjbWRpZl9yZXYoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQyOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjQzMzppbnQgbWx4NV9jbWRfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDU0OnZvaWQgbWx4NV9jbWRfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDYyOmludCBtbHg1X2NtZF9lbmFibGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjU0ODp2b2lkIG1seDVfY21kX2Rpc2FibGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjU2MDp2b2lkIG1seDVfY21kX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTYxLVxcdFxcdFxcdGVudW0gbWx4NV9jbWRpZl9zdGF0ZSBjbWRpZl9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNTY2OmludCBtbHg1X2NtZF9hZGRfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHVpZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjU3MT1FWFBPUlRfU1lNQk9MKG1seDVfY21kX2FkZF9wcml2aWxlZ2VkX3VpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NzM6dm9pZCBtbHg1X2NtZF9yZW1vdmVfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHVpZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0xMDA9c3RhdGljIHZvaWQgbWx4NV9jb3JlX2NxX2R1bW15X2NiKHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLCBzdHJ1Y3QgbWx4NV9lcWUgKmVxZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTEwNy0vKiBDYWxsZXJzIG11c3QgdmVyaWZ5IG91dGJveCBzdGF0dXMgaW4gY2FzZSBvZiBlcnIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxMDg6aW50IG1seDVfY3JlYXRlX2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTEwOS1cXHRcXHQgICB1MzIgKmluLCBpbnQgaW5sZW4sIHUzMiAqb3V0LCBpbnQgb3V0bGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmM9MTc4PUVYUE9SVF9TWU1CT0wobWx4NV9jcmVhdGVfY3EpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMTgwLS8qIG91Ym94IGlzIGNoZWNrZWQgYW5kIGVyciB2YWwgaXMgbm9ybWFsaXplZCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjE4MTppbnQgbWx4NV9jb3JlX2NyZWF0ZV9jcShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jb3JlX2NxICpjcSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xODItXFx0XFx0XFx0dTMyICppbiwgaW50IGlubGVuLCB1MzIgKm91dCwgaW50IG91dGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTE4OD1FWFBPUlRfU1lNQk9MKG1seDVfY29yZV9jcmVhdGVfY3EpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTE4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxOTA6aW50IG1seDVfY29yZV9kZXN0cm95X2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTE5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0yMTM9RVhQT1JUX1NZTUJPTChtbHg1X2NvcmVfZGVzdHJveV9jcSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjIxNTppbnQgbWx4NV9jb3JlX3F1ZXJ5X2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIxNi1cXHRcXHQgICAgICAgdTMyICpvdXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0yMjQ9RVhQT1JUX1NZTUJPTChtbHg1X2NvcmVfcXVlcnlfY3EpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoyMjY6aW50IG1seDVfY29yZV9tb2RpZnlfY3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9jcSAqY3EsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjI3LVxcdFxcdFxcdHUzMiAqaW4sIGludCBpbmxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTIzNT1FWFBPUlRfU1lNQk9MKG1seDVfY29yZV9tb2RpZnlfY3EpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoyMzc6aW50IG1seDVfY29yZV9tb2RpZnlfY3FfbW9kZXJhdGlvbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIzOC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9jb3JlX2NxICpjcSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9OTY9dm9pZCBtbHg1X3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMDE6c3RydWN0IGRlbnRyeSAqbWx4NV9kZWJ1Z2ZzX2dldF9kZXZfcm9vdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MTA1PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z2ZzX2dldF9kZXZfcm9vdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMDc6dm9pZCBtbHg1X3FwX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MTExPUVYUE9SVF9TWU1CT0wobWx4NV9xcF9kZWJ1Z2ZzX2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MTEzOnZvaWQgbWx4NV9xcF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTExNz1FWFBPUlRfU1lNQk9MKG1seDVfcXBfZGVidWdmc19jbGVhbnVwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjExOTp2b2lkIG1seDVfZXFfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMjQ6dm9pZCBtbHg1X2VxX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MjAyPW1seDVfY21kaWZfYWxsb2Nfc3RhdHMoc3RydWN0IHhhcnJheSAqc3RhdHNfeGEsIGludCBvcGNvZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTIxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjIxOTp2b2lkIG1seDVfY21kaWZfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNTk6dm9pZCBtbHg1X2NtZGlmX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MjcwOnZvaWQgbWx4NV9jcV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI3MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI3NTp2b2lkIG1seDVfY3FfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyODA6dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6Mjk0OnZvaWQgbWx4NV9wYWdlc19kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI5OTp2b2lkIG1seDVfcGFnZXNfYnlfZnVuY190eXBlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MzIzOnZvaWQgbWx4NV9wYWdlc19ieV9mdW5jX3R5cGVfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0zMjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0zMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzozMzc6c3RhdGljIHU2NCBxcF9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzM4LVxcdFxcdFxcdCBpbnQgaW5kZXgsIGludCAqaXNfc3RyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy00MTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo0MTc6c3RhdGljIHU2NCBlcV9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2VxICplcSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTQxOC1cXHRcXHRcXHQgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy00NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo0NTc6c3RhdGljIHU2NCBjcV9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNDU4LVxcdFxcdFxcdCBpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTUzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1Mzg6c3RhdGljIGludCBhZGRfcmVzX3RyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSBkYmdfcnNjX3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTUzOS1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgbWx4NV9yc2NfZGVidWcgKipkYmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTU2Nj1zdGF0aWMgdm9pZCByZW1fcmVzX3RyZWUoc3RydWN0IG1seDVfcnNjX2RlYnVnICpkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01NzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1NzI6aW50IG1seDVfZGVidWdfcXBfYWRkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9NTg3PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z19xcF9hZGQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6NTg5OnZvaWQgbWx4NV9kZWJ1Z19xcF9yZW1vdmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9xcCAqcXApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz01OTc9RVhQT1JUX1NZTUJPTChtbHg1X2RlYnVnX3FwX3JlbW92ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1OTk6aW50IG1seDVfZGVidWdfZXFfYWRkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2VxICplcSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MDQuODc5ODg2OTk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc3NTkwODI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgbWx4NV9jb3JlX2RldmAgQ29kZSB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIHRoZSBvdXRwdXQgc2hvd3MgdGhhdCBgbWx4NV9jb3JlX2RldmAgaXMgc2lnbmlmaWNhbnRseSBwcmVzZW50IGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBjYW4gc3l6a2FsbGVyIHBvc3NpYmx5IHRyaWdnZXIgdGhpcyBjb2RlPyBJdCdzIGFsbCBhYm91dCBzeXN0ZW0gY2FsbHMgZm9yIHN5emthbGxlciwgcmlnaHQ/IFRoZSBpc3N1ZSBpcyBwcmV0dHkgb2J2aW91czogd2l0aG91dCB0aGUgTWVsbGFub3ggaGFyZHdhcmUsIHRoZSBkcml2ZXIgc2ltcGx5IHdvbid0IHByb2JlLiBObyBwcm9iZSwgbm8gYG1seDVfY29yZV9kZXZgLCBubyBjb2RlIGV4ZWN1dGlvbi5cblxuSXMgdGhlcmUgYW55IGtpbmQgb2YgbmV0bGluayBtYWdpYyB0aGF0IGNvdWxkIGJ5cGFzcyB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQ/IE5vcGUsIG1seDUgaXMgYSBQQ0kgZHJpdmVyLiBJdCBuZWVkcyB0aGF0IFBDSSBkZXZpY2UgdG8gZ2V0IG9mZiB0aGUgZ3JvdW5kLiBObyBQQ0kgZGV2aWNlLCBubyBwcm9iZSwgbm8gbmV0ZGV2LCBkZWFkIGVuZC5cblxuV2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgdG8gZW11bGF0ZSBQQ0kgZGV2aWNlcywgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYD8gTm8sIHRoYXQncyBub3QgcmlnaHQuIEl0IGhhcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLCBidXQgbm8gZ2VuZXJpYyBQQ0kgZW11bGF0b3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBEaWQgc3l6a2FsbGVyIGludHJvZHVjZSBzb21lIGNsZXZlciBQQ0kgZW11bGF0aW9uIHRocm91Z2ggYHZoY2lgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBOb3BlLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIEkgdGhvdWdodCBJIHJlbWVtYmVyZWQgc2VlaW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgLiBOb3BlLCBub3QgaW4gc3l6a2FsbGVyLlxuXG5MZXQncyBjdXQgdG8gdGhlIGNoYXNlIGFuZCBmaW5kIG91dCBpZiBTeXprYWxsZXIgZnV6emVkIG1seDUuIExvb2tzIGxpa2UgaXQgZG9lc24ndCwgYmVjYXVzZSBpdCBuZWVkcyB0aGUgaGFyZHdhcmUuXG5cbkJ1dCB3YWl0ISBIb2xkIG9uIGEgc2Vjb25kLCB0aGUgcHJvbXB0IHNheXM6XG5cblwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCJcblxuXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cblRoaXMgaXMgY3J1Y2lhbC4gVGhlIHByb21wdCBtYWtlcyBhIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVhY2hhYmxlIGFuZCB1bnJlYWNoYWJsZSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHJlYWNoYWJpbGl0eSBpbiBhIFFFTVUtbGlrZSBlbnZpcm9ubWVudC5cblxuTm93LCBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGZvciBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgbWx4NS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MTIuNjU1Nzk5MDMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxODU0MzU5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NS4qZW11bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MTM0Nz1zdHJ1Y3QgbWx4NV9pZmNfZGV2aWNlX2V2ZW50X2NhcF9iaXRzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oLTEzNTItXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MTM1MzpzdHJ1Y3QgbWx4NV9pZmNfdmlydGlvX2VtdWxhdGlvbl9jYXBfYml0cyB7XFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMTM1NC1cXHR1OCAgICAgICAgIGRlc2NfdHVubmVsX29mZmxvYWRfdHlwZVsweDFdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9Mzg1Mj11bmlvbiBtbHg1X2lmY19oY2FfY2FwX3VuaW9uX2JpdHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzg2OS1cXHRzdHJ1Y3QgbWx4NV9pZmNfZGV2aWNlX21lbV9jYXBfYml0cyBkZXZpY2VfbWVtX2NhcDtcXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaDozODcwOlxcdHN0cnVjdCBtbHg1X2lmY192aXJ0aW9fZW11bGF0aW9uX2NhcF9iaXRzIHZpcnRpb19lbXVsYXRpb25fY2FwO1xcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oLTM4NzEtXFx0c3RydWN0IG1seDVfaWZjX3RscF9kZXZfZW11X2NhcGFiaWxpdGllc19iaXRzIHRscF9kZXZfZW11X2NhcGFiaWxpdGllcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MTkuODQxMjQzMTM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxMzU2MjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBWaXJ0aW8gYW5kIE1MWDUgTGFuZHNjYXBlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGdvaW5nIGRvd24gdGhlIHdyb25nIHBhdGggaGVyZS4gYHZpcnRpb19lbXVsYXRpb25fY2FwYCBpcyBzcGVjaWZpY2FsbHkgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aGluIHZpcnRpbywgbm90IGZvciBzaW11bGF0aW5nIG1seDUgaW4gYSBzb2Z0d2FyZSBjb250ZXh0LiBUaGF0J3MgYSBjcml0aWNhbCBkaXN0aW5jdGlvbi5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpczogaG93IGNhbiBJIGFjdHVhbGx5IGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBgbWx4NWVfcHNwX3NldF9jb25maWdgIGZ1bmN0aW9uPyBJIGtub3cgaXQncyBiZWluZyBjYWxsZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQsIGl0J3MgY2FsbGVkIGFzIGEgY2FsbGJhY2sgd2l0aGluIGBwc3BfZGV2X2NvbmZpZ2AuIFNvLCBgbWx4NWVfcHNwX3NldF9jb25maWdgIGlzIHBhcnQgb2YgYSBjYWxsYmFjayBpbiBgcHNwX2Rldl9jb25maWdgLlxuXG5CdXQgSSdtIG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiB3aGF0IGV4YWN0bHkgaXMgdGhpcyBgcHNwX2RldmAgc3RydWN0dXJlIHRoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjaz8gVGltZSB0byBnbyBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHNvdXJjZSBjb2RlLiBJIHNob3VsZCBmaW5kIGl0IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcHNwLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB3aXRoaW4gdGhlIGtlcm5lbCdzIGluY2x1ZGUgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIxOjQxOjI2LjI1NDgwODQzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE1ODI0NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9kZXZfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM9ODYwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6ODYxOm1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtODYyLVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEyMT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjEyMjpuc2ltX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIzLVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD0xND1zdHJ1Y3QgcHNwaGRyIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTM5LS8qKlxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjQwOiAqIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAtIFBTUCBkZXZpY2UgY29uZmlndXJhdGlvblxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQxLSAqIEB2ZXJzaW9uczogUFNQIHZlcnNpb25zIGVuYWJsZWQgb24gdGhlIGRldmljZVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQyLSAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjQzOnN0cnVjdCBwc3BfZGV2X2NvbmZpZyB7XFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNDQtXFx0dTMyIHZlcnNpb25zO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9ODk9c3RydWN0IHBzcF9kZXYge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTA0LVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjEwNTpcXHRzdHJ1Y3QgcHNwX2Rldl9jb25maWcgY29uZmlnO1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEwNi1cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE5NT1zdHJ1Y3QgcHNwX2Rldl9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjAwLVxcdCAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIwMTpcXHRpbnQgKCpzZXRfY29uZmlnKShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjAyLVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9Mzk4PWludCBwc3BfbmxfZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTQwMC1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxubmV0L3BzcC9wc3BfbmwuYzo0MDE6XFx0c3RydWN0IHBzcF9kZXZfY29uZmlnIG5ld19jb25maWc7XFxubmV0L3BzcC9wc3BfbmwuYy00MDItXFx0c3RydWN0IHNrX2J1ZmYgKnJzcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MzEuNzcwNjQwOTQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxNzk3ODQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogbWx4NSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCB0b3VjaGVzIGBuZXRkZXZzaW1gLCBzcGVjaWZpY2FsbHkgYG5zaW1fcHNwX3NldF9jb25maWdgLiBCdXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBidXJpZWQgZGVlcCBpbiB0aGUgTWVsbGFub3ggYG1seDVgIGRyaXZlciwgaW4gYHBzcC5jYC4gSW1tZWRpYXRlbHksIG15IGV4cGVydCBicmFpbiBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogdGhpcyBpcyBNZWxsYW5veCBoYXJkd2FyZS1kZXBlbmRlbnQuIFN5emthbGxlcidzIHN0YW5kYXJkIGVudmlyb25tZW50LCBiZSBpdCBHQ0Ugb3IgUUVNVSwgaXNuJ3QgZ29pbmcgdG8gbWFnaWNhbGx5IGNvbmp1cmUgdXAgYSBNZWxsYW5veCBjYXJkLCByaWdodD8gSSBzdGFydCB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlJ3Mgc29tZSBjbGV2ZXIgUENJIGRldmljZSBpbmplY3Rpb24sIG9yIHBlcmhhcHMgYSB2aXJ0dWFsIHByb2JlIG1lY2hhbmlzbSBmb3IgdGhlIE1lbGxhbm94IGRyaXZlci5cblxuTGV0IG1lIHRoaW5rLCBkb2VzIGBuZXRkZXZzaW1gIHNvbWVob3cgdXNlIGBtbHg1YD8gTm8sIGNvbXBsZXRlbHkgc2VwYXJhdGUgZHJpdmVycy4gVGhpcyBtZWFucyB0aG9zZSBgbWx4NWAgY2hhbmdlcyBhcmUgYWxtb3N0IGNlcnRhaW5seSB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIHN5emthbGxlciBzZXR1cHMuXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IHJldmlldyB0aGUgcHJvdmlkZWQgcHJvbXB0J3MgY3JpdGVyaWEgZm9yIGEgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBkZXRlcm1pbmF0aW9uLiBJdCBzcGVjaWZpZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFuZCB0aGF0IGlzIGV4YWN0bHkgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBwYXRjaCBpbmNsdWRlcyBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHRoYXQgcmVxdWlyZXMgYSBNZWxsYW5veCBQQ0kgZGV2aWNlLCB3aGljaCwgYXMgZmFyIGFzIEkga25vdywgaXMgbm90IGVtdWxhdGVkIHdpdGhpbiBzeXprYWxsZXIncyBRRU1VIGVudmlyb25tZW50LiBUaGUgYG1seDVgIGRyaXZlciBpcyBub3QgcmVhY2hhYmxlIGFuZCBpdCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuXG5cblVubGVzcyB0aGVyZSBpcyBzb21lIG9ic2N1cmUgdmlydHVhbCBidXMgdGhhdCBhbGxvd3Mgc3l6a2FsbGVyIHRvIHJlYWNoIFBDSSBkZXZpY2UgZHJpdmVycy4gV2FpdCBhIG1pbnV0ZSwgbm8sIGBtbHg1YCBpcyBhIFBDSSBkZXZpY2UgZHJpdmVyLCB0aGVyZSBpcyBubyB3YXkgYXJvdW5kIHRoYXQuXG5cbk9rLCBsYXN0IGNoZWNrIC0gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBgbWx4NWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNzgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MzguOTg4NjIzMzQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTU0NDYyOTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfLiptbHg1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6NDUuOTQzMDk5MTYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NzMyNzE5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYSBmaXJtIFwibm8uXCIgSXMgdGhlcmUgZXZlbiBhIHJlbW90ZSBwb3NzaWJpbGl0eSB0aGlzIGNvdWxkIGJlIGZ1enplZCBlZmZlY3RpdmVseT8gTm8sIHRoZSBoYXJkd2FyZSBkcml2ZXJzIGZvciBQQ0kgZGV2aWNlcywgcGFydGljdWxhcmx5IHRob3NlIGxpa2UgdGhlIE1lbGxhbm94IGRyaXZlcnMsIGFyZSBub3QgcmVhbGlzdGljYWxseSByZWFjaGFibGUgd2l0aG91dCBwcm9wZXIgUUVNVSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgY29yZSBrZXJuZWwgbW9kaWZpY2F0aW9ucyBoaWRkZW4gaW4gaGVyZS4gT2theSwgdGhlIGRpZmYgaXMgb25seSB0b3VjaGluZyBmaWxlcyB3aXRoaW46XG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaGBcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY2BcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaGBcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY2BcblxuWWVwLCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9gIGRpcmVjdG9yeS4gU28sIGl0J3MgcHVyZWx5IGEgTWVsbGFub3ggaGFyZHdhcmUgZHJpdmVyIHBhdGNoLlxuXG5JJ3ZlIGdvdCB0aGUgcmVzcG9uc2UuXG5gV29ydGhGdXp6aW5nOiBmYWxzZWBcblxuVGhlIHJhdGlvbmFsZT8gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgTWVsbGFub3ggYG1seDVgIGhhcmR3YXJlIGRyaXZlciwgYW5kIGl0IGxvb2tzIHNwZWNpZmljYWxseSB0byB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZS4gQmVjYXVzZSB0aGlzIGRyaXZlciBmdW5kYW1lbnRhbGx5IHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQsIGFuZCBpdCdzIG5vdCBlbXVsYXRlZCBvciBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHRoZSBjb2RlIHBhdGhzIHNpbXBseSAqd29uJ3QqIGJlIGV4ZXJjaXNlZCBkdXJpbmcgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NzMsIk91dHB1dFRva2VucyI6ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6NTMuNzE2Mzc1OTU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBoYXJkd2FyZSBkcml2ZXIgKHNwZWNpZmljYWxseSB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZSkuIFNpbmNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgaGFyZHdhcmUgZHJpdmVyIChzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIGZlYXR1cmUpLiBTaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow55w6j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 21:16:24 +0000 UTC FinishedAt: 2026-07-07 21:41:55 +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+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgaGFyZHdhcmUgZHJpdmVyIChzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIGZlYXR1cmUpLiBTaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTc5MmRkMDUxYjAzNWQxNGJmZGI1NWI4ZGI2NDYyM2ZjODRiOGJiOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDcgMjE6NDA6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxuaW5kZXggMjI3MGUyZTU1MGRkOWUuLjNjYzcyODNiNjIxNWUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oXG5AQCAtMTAxNiw3ICYjNDM7MTAxNiw3IEBAIHN0cnVjdCBtbHg1ZV9wcm9maWxlIHtcbiBcdHZvaWRcdCgqY2xlYW51cF9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0aW50XHQoKmluaXRfdHgpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqY2xlYW51cF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLVx0dm9pZFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiYjNDM7XHRpbnRcdCgqZW5hYmxlKShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gXHR2b2lkXHQoKmRpc2FibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdGludFx0KCp1cGRhdGVfcngpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqdXBkYXRlX3N0YXRzKShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuaW5kZXggMDkxYjgwYTY3MTg5ZGQuLjQ5NzNmYjQ3M2ZmMDIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oXG5AQCAtODgsMTMgJiM0Mzs4OCwxOCBAQCBlbnVtIHtcbiAjaWZkZWYgQ09ORklHX01MWDVfRU5fQVJGU1xuIFx0TUxYNUVfQVJGU19GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCAmIzQzOyAxLFxuICNlbmRpZlxuLSNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX0lQU0VDKSB8fCBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcbiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01MWDVfRU5fSVBTRUMpXG4gXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgJiM0MzsgMSxcbiBcdE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9FUlJfTEVWRUwsXG4gXHRNTFg1RV9BQ0NFTF9GU19QT0xfRlRfTEVWRUwsXG4gXHRNTFg1RV9BQ0NFTF9GU19QT0xfTUlTU19GVF9MRVZFTCxcbiBcdE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9ST0NFX0xFVkVMLFxuICNlbmRpZlxuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXG4mIzQzO1x0TUxYNUVfQUNDRUxfRlNfUFNQX0ZUX0xFVkVMID0gTUxYNUVfSU5ORVJfVFRDX0ZUX0xFVkVMICYjNDM7IDEsXG4mIzQzO1x0TUxYNUVfQUNDRUxfRlNfUFNQX0VSUl9GVF9MRVZFTCxcbiYjNDM7XHRNTFg1RV9BQ0NFTF9GU19QU1BfUlhfRlRfTEVWRUwsXG4mIzQzOyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmc7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuaW5kZXggYjUyNmIzODk4YzIyZTAuLjNmMjEyZTQ2ZmMyZjllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG5AQCAtMjIwLDE4ICYjNDM7MjIwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XG4tXHRpZiAoZXJyKVxuLVx0XHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcbi1cbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuQEAgLTI0MiwxMiAmIzQzOzIzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbiBcdHJldHVybiBtbHg1ZV9rdGxzX2luaXRfdHgocHJpdik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuaW5kZXggZDlhZGI5OTNlNjRkOTUuLjczYjIzMjM3OTI2M2FhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbkBAIC0yMSw1MSAmIzQzOzIxLDUyIEBAIGVudW0gYWNjZWxfcHNwX3N5bmRyb21lIHtcbiBcdFBTUF9CQURfVFJBSUxFUixcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9wc3BfdHgge1xuJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbi1cdHN0cnVjdCBtdXRleCBtdXRleDsgLyogUHJvdGVjdCBQU1AgVFggc3RlZXJpbmcgKi9cbi1cdHUzMiByZWZjbnQ7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqdHhfY291bnRlcjtcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHtcbiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSB7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpkcm9wX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYXV0aF9mYWlsX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZXJyX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYmFkX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpjb3B5X21vZGlmeV9oZHI7XG4gfTtcbiBcbi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3Qge1xuJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKm1pc3NfcnVsZTtcbiBcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKnJ4X21vZGlmeV9oZHI7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlZmF1bHRfZGVzdDtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHJ4X2Vycjtcbi1cdHUzMiByZWZjbnQ7XG4tXHRzdHJ1Y3QgbXV0ZXggcHJvdF9tdXRleDsgLyogcHJvdGVjdCBFU1A0L0VTUDYgcHJvdG9jb2wgKi9cbi1cdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpkZWZfcnVsZTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3Age1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90IGZzX3Byb3RbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcbiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19ncm91cCAqbWlzc19ncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1ZHBfcnVsZXNbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107XG4gfTtcbiBcbiBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2O1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnM7XG4tXHQvKiBSeCBtYW5hZ2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mYyAqdHhfY291bnRlcjtcbiYjNDM7XHRzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHR4O1xuJiM0MztcbiYjNDM7XHQvKiBSeCAqL1xuIFx0c3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmcgKmZzO1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqcnhfZnM7XG4mIzQzO1x0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XG4mIzQzO1x0c3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyO1xuJiM0MztcdHN0cnVjdCBtbHg1X2ZjICpyeF9lcnJfY291bnRlcjtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSBkZWNyeXB0W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuJiM0MztcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7XG4mIzQzO1x0c3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSByeDtcbiB9O1xuIFxuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXG5AQCAtNzcsNDQgJiM0Mzs3OCwyMDAgQEAgc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXG4gXHRyZXR1cm4gTUxYNV9UVF9JUFY2X1VEUDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZWxfcnVsZXMoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycilcbiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyICpmdF9hdHRyLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd190YWJsZSAqKmZ0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdCpmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBmdF9hdHRyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKCpmdCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoKmZ0KTtcbiYjNDM7XHRcdCpmdCA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqdGFibGUpXG4ge1xuLVx0aWYgKHJ4X2Vyci1cdTAwM2ViYWRfcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2ViYWRfcnVsZSk7XG4tXHRcdHJ4X2Vyci1cdTAwM2ViYWRfcnVsZSA9IE5VTEw7XG4mIzQzO1x0aWYgKCp0YWJsZSkge1xuJiM0MztcdFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoKnRhYmxlKTtcbiYjNDM7XHRcdCp0YWJsZSA9IE5VTEw7XG4gXHR9XG4mIzQzO31cbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlZXJyX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlZXJyX3J1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlZXJyX3J1bGUgPSBOVUxMO1xuJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoKnJ1bGUpIHtcbiYjNDM7XHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMoKnJ1bGUpO1xuJiM0MztcdFx0KnJ1bGUgPSBOVUxMO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdCxcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7XG4mIzQzO1x0dTMyICppbiA9IGt2emFsbG9jKGlubGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuJiM0MztcdGlmICghaW4pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGluLCBzdGFydF9mbG93X2luZGV4LCBmdC1cdTAwM2VtYXhfZnRlIC0gMSk7XG4mIzQzO1x0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGluLCBlbmRfZmxvd19pbmRleCwgZnQtXHUwMDNlbWF4X2Z0ZSAtIDEpO1xuJiM0MztcdCpncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGluKTtcbiYjNDM7XHRpZiAoSVNfRVJSKCpncm91cCkpIHtcbiYjNDM7XHRcdGVyciA9IFBUUl9FUlIoKmdyb3VwKTtcbiYjNDM7XHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4mIzQzO1x0a3ZmcmVlKGluKTtcbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VydWxlKTtcbi1cdFx0cnhfZXJyLVx1MDAzZXJ1bGUgPSBOVUxMO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCpncm91cCkge1xuJiM0MztcdFx0bWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoKmdyb3VwKTtcbiYjNDM7XHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtbHg1X2ZjICoqY291bnRlcilcbiYjNDM7e1xuJiM0MztcdCpjb3VudGVyID0gbWx4NV9mY19jcmVhdGUoZGV2LCBmYWxzZSk7XG4mIzQzO1x0aWYgKElTX0VSUigqY291bnRlcikpIHtcbiYjNDM7XHRcdGludCBlcnIgPSBQVFJfRVJSKCpjb3VudGVyKTtcbiYjNDM7XG4mIzQzO1x0XHQqY291bnRlciA9IE5VTEw7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyKSB7XG4tXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIHJ4X2Vyci1cdTAwM2Vjb3B5X21vZGlmeV9oZHIpO1xuLVx0XHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gTlVMTDtcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBtbHg1X2ZjICoqY291bnRlcilcbiYjNDM7e1xuJiM0MztcdGlmICgqY291bnRlcikge1xuJiM0MztcdFx0bWx4NV9mY19kZXN0cm95KGRldiwgKmNvdW50ZXIpO1xuJiM0MztcdFx0KmNvdW50ZXIgPSBOVUxMO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfcnhfdGFibGUgKnJ4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2cngtXHUwMDNldWRwX3J1bGVzW2ldKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZyeC1cdTAwM2VtaXNzX3J1bGUpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXHUwMDI2cngtXHUwMDNlbWlzc19ncm91cCk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2cngtXHUwMDNlZnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlICpyeClcbiB7XG4tXHRhY2NlbF9wc3BfZnNfcnhfZXJyX2RlbF9ydWxlcyhmcywgcnhfZXJyKTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3RbMl0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbiYjNDM7XHRNTFg1X0RFQ0xBUkVfRkxPV19BQ1QoZmxvd19hY3QpO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYztcbiYjNDM7XHRpbnQgaSwgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0c3BlYyA9IGt6YWxsb2Nfb2JqKCpzcGVjKTtcbiYjNDM7XHRpZiAoIXNwZWMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZnRfYXR0ci5tYXhfZnRlID0gMSAmIzQzOyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTO1xuJiM0MztcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfUlhfRlRfTEVWRUw7XG4mIzQzO1x0ZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87XG4mIzQzO1x0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNnJ4LVx1MDAzZWZ0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmdCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0fVxuIFxuLVx0aWYgKHJ4X2Vyci1cdTAwM2VmdCkge1xuLVx0XHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShyeF9lcnItXHUwMDNlZnQpO1xuLVx0XHRyeF9lcnItXHUwMDNlZnQgPSBOVUxMO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChyeC1cdTAwM2VmdCwgXHUwMDI2cngtXHUwMDNlbWlzc19ncm91cCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggbWlzc19ncm91cCBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4mIzQzO1xuJiM0MztcdC8qIEFkZCBtaXNzIHJ1bGUgKi9cbiYjNDM7XHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfFxuJiM0MztcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuJiM0MztcdGZsb3dfYWN0LmZsYWdzID0gRkxPV19BQ1RfSUdOT1JFX0ZMT1dfTEVWRUw7XG4mIzQzO1x0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbiYjNDM7XHRkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTtcbiYjNDM7XHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuJiM0MztcdGRlc3RbMV0uY291bnRlciA9IGZzLVx1MDAzZXJ4X2NvdW50ZXI7XG4mIzQzO1x0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocngtXHUwMDNlZnQsIE5VTEwsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggcnVsZSwgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuJiM0MztcdH1cbiYjNDM7XHRyeC1cdTAwM2VtaXNzX3J1bGUgPSBydWxlO1xuJiM0MztcbiYjNDM7XHQvKiBBZGQgVURQIHY0L3Y2IHJ1bGVzICovXG4mIzQzO1x0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgPSBNTFg1X01BVENIX09VVEVSX0hFQURFUlM7XG4mIzQzO1x0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXHUwMDNlbWF0Y2hfY3JpdGVyaWEsXG4mIzQzO1x0XHRcdCBvdXRlcl9oZWFkZXJzLmlwX3ZlcnNpb24pO1xuJiM0MztcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3NldF9seXJfMl80LCBzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhLFxuJiM0MztcdFx0XHQgaXBfcHJvdG9jb2wpO1xuJiM0MztcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgaXBfcHJvdG9jb2wsXG4mIzQzO1x0XHQgSVBQUk9UT19VRFApO1xuJiM0MztcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4mIzQzO1x0XHRNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4mIzQzO1x0Zmxvd19hY3QuZmxhZ3MgPSAwO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgdmVyc2lvbiA9IGkgPT0gQUNDRUxfRlNfUFNQNCA/IDQgOiA2O1xuJiM0MztcbiYjNDM7XHRcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbiYjNDM7XHRcdFx0IG91dGVyX2hlYWRlcnMuaXBfdmVyc2lvbiwgdmVyc2lvbik7XG4mIzQzO1x0XHRkZXN0WzBdID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XG4mIzQzO1x0XHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuJiM0MztcdFx0ZGVzdFsxXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfY291bnRlcjtcbiYjNDM7XHRcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4LVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCxcbiYjNDM7XHRcdFx0XHRcdCAgIDIpO1xuJiM0MztcdFx0aWYgKElTX0VSUihydWxlKSkge1xuJiM0MztcdFx0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuJiM0MztcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IFVEUCVkIHJ1bGUgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgIHZlcnNpb24sIGVycik7XG4mIzQzO1x0XHRcdGdvdG8gb3V0X2VycjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJ4LVx1MDAzZXVkcF9ydWxlc1tpXSA9IHJ1bGU7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gb3V0X3NwZWM7XG4mIzQzO1xuJiM0MztvdXRfZXJyOlxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTtcbiYjNDM7b3V0X3NwZWM6XG4mIzQzO1x0a3ZmcmVlKHNwZWMpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpY1xuJiM0Mzt2b2lkIGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgKmNoZWNrKVxuJiM0Mzt7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlYmFkX3J1bGUpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmNoZWNrLVx1MDAzZWVycl9ydWxlKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZjaGVjay1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlcnVsZSk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZjaGVjay1cdTAwM2Vkcm9wX2dyb3VwKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZjaGVjay1cdTAwM2VmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXG5AQCAtMTI5LDE1ICYjNDM7Mjg2LDM1IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXG4gXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2MyLCBtaXNjX3BhcmFtc18yLCBwc3Bfc3luZHJvbWUsIHN5bmRyb21lKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICoqcnVsZSlcbiB7XG4tXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbiYjNDM7XHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4mIzQzO1x0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbiYjNDM7XHRkZXN0LmNvdW50ZXIgPSBjb3VudGVyO1xuJiM0MztcdCpydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuJiM0MztcdGlmIChJU19FUlIoKnJ1bGUpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKCpydWxlKTtcbiYjNDM7XHRcdCpydWxlID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljXG4mIzQzO2ludCBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2NoZWNrX3RhYmxlICpjaGVjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4mIzQzO1x0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3RbMl07XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9O1xuLVx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkcjtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpmdGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC0xNDYsMTc0ICYjNDM7MzIzLDk3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdGlmICghc3BlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBBY3Rpb24gdG8gY29weSA3IGJpdCBwc3Bfc3luZHJvbWUgdG8gcmVnQlsyMzoyOV0gKi9cbi1cdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfU1lORFJPTUUpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDcpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3Rfb2Zmc2V0LCAyMyk7XG4mIzQzO1x0ZnRfYXR0ci5tYXhfZnRlID0gNDtcbiYjNDM7XHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XG4mIzQzO1x0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xuJiM0MztcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMO1xuJiM0MztcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmNoZWNrLVx1MDAzZWZ0KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBmdCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4mIzQzO1x0fVxuIFxuLVx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcbi1cdFx0XHRcdFx0ICAgICAgMSwgYWN0aW9uKTtcbi1cdGlmIChJU19FUlIobW9kaWZ5X2hkcikpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuLVx0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gYWxsb2MgcHNwIGNvcHkgbW9kaWZ5X2hlYWRlcl9pZCBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGdvdG8gb3V0X3NwZWM7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGNoZWNrLVx1MDAzZWZ0LCBcdTAwMjZjaGVjay1cdTAwM2Vkcm9wX2dyb3VwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBkcm9wIGdyb3VwIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbiBcbiBcdGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfT0spO1xuIFx0LyogY3JlYXRlIGZ0ZSAqL1xuLVx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbi1cdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuLVx0ZGVzdFswXS50eXBlID0gZnNfcHJvdC1cdTAwM2VkZWZhdWx0X2Rlc3QudHlwZTtcbi1cdGRlc3RbMF0uZnQgPSBmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdC5mdDtcbi1cdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0WzFdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9mcy1cdTAwM2VyeF9jb3VudGVyO1xuLVx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcbiYjNDM7XHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4mIzQzO1x0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbiYjNDM7XHRkZXN0LmZ0ID0gZnMtXHUwMDNlcnguZnQ7XG4mIzQzO1x0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhjaGVjay1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuIFx0aWYgKElTX0VSUihmdGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggZXJyIGNvcHkgcnVsZSBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgb2sgcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlcnVsZSA9IGZ0ZTtcbiYjNDM7XHRjaGVjay1cdTAwM2VydWxlID0gZnRlO1xuIFxuIFx0LyogYWRkIGF1dGggZmFpbCBkcm9wIHJ1bGUgKi9cbiBcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcbi1cdG1lbXNldChcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XG4gXHRhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3BlYywgUFNQX0lDVl9GQUlMKTtcbi1cdC8qIGNyZWF0ZSBmdGUgKi9cbi1cdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbi1cdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0WzBdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9mcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcjtcbi1cdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCwgMSk7XG4tXHRpZiAoSVNfRVJSKGZ0ZSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihmdGUpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBhdXRoIGZhaWwgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShjaGVjay1cdTAwM2VmdCwgc3BlYyxcbiYjNDM7XHRcdFx0XHQgICAgICBmcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZjaGVjay1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuJiM0MztcdFx0XHQgICAgICBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgYXV0aCBmYWlsIGRyb3AgcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgICAgZXJyKTtcbi1cdFx0Z290byBvdXRfZHJvcF9ydWxlO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0cnhfZXJyLVx1MDAzZWF1dGhfZmFpbF9ydWxlID0gZnRlO1xuIFxuIFx0LyogYWRkIGZyYW1pbmcgZHJvcCBydWxlICovXG4gXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4tXHRtZW1zZXQoXHUwMDI2Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpO1xuIFx0YWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9CQURfVFJBSUxFUik7XG4tXHQvKiBjcmVhdGUgZnRlICovXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFswXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXI7XG4tXHRmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xuLVx0aWYgKElTX0VSUihmdGUpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggZnJhbWluZyBlcnIgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShjaGVjay1cdTAwM2VmdCwgc3BlYywgZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIsXG4mIzQzO1x0XHRcdFx0ICAgICAgXHUwMDI2Y2hlY2stXHUwMDNlZXJyX3J1bGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIobWRldixcbiYjNDM7XHRcdFx0ICAgICAgXCYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGZyYW1pbmcgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBlcnIpO1xuLVx0XHRnb3RvIG91dF9kcm9wX2F1dGhfZmFpbF9ydWxlO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0cnhfZXJyLVx1MDAzZWVycl9ydWxlID0gZnRlO1xuIFxuIFx0LyogYWRkIG1pc2MuIGVycm9ycyBkcm9wIHJ1bGUgKi9cbiBcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcbi1cdG1lbXNldChcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XG4tXHQvKiBjcmVhdGUgZnRlICovXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFswXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXI7XG4tXHRmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xuLVx0aWYgKElTX0VSUihmdGUpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoY2hlY2stXHUwMDNlZnQsIHNwZWMsIGZzLVx1MDAzZXJ4X2JhZF9jb3VudGVyLFxuJiM0MztcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWJhZF9ydWxlKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBtaXNjLiBlcnIgZHJvcCBydWxlIGVycj0lZFxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBlcnIpO1xuLVx0XHRnb3RvIG91dF9kcm9wX2Vycm9yX3J1bGU7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlYmFkX3J1bGUgPSBmdGU7XG4tXG4tXHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcbiBcdGdvdG8gb3V0X3NwZWM7XG4gXG4tb3V0X2Ryb3BfZXJyb3JfcnVsZTpcbi1cdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWVycl9ydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VlcnJfcnVsZSA9IE5VTEw7XG4tb3V0X2Ryb3BfYXV0aF9mYWlsX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4tXHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuLW91dF9kcm9wX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VydWxlID0gTlVMTDtcbi1vdXQ6XG4tXHRtbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhtZGV2LCBtb2RpZnlfaGRyKTtcbiYjNDM7b3V0X2VycjpcbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShjaGVjayk7XG4gb3V0X3NwZWM6XG4gXHRrZnJlZShzcGVjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QsXG4tXHRcdFx0XHRcdCBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MzthY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdClcbiB7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbi1cdGludCBlcnI7XG4tXG4tXHRmdF9hdHRyLm1heF9mdGUgPSAyO1xuLVx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xuLVx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9FUlJfTEVWRUw7IC8vIE1MWDVFX0FDQ0VMX0ZTX1RDUF9GVF9MRVZFTFxuLVx0ZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87XG4tXHRmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBcdTAwMjZmdF9hdHRyKTtcbi1cdGlmIChJU19FUlIoZnQpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnQpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBpbmxpbmUgZnQgZXJyPSVkXFxuXCYjMzQ7LCBlcnIpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuLVx0cnhfZXJyLVx1MDAzZWZ0ID0gZnQ7XG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKGZzLCBmc19wcm90LCByeF9lcnIpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXRfZXJyO1xuLVxuLVx0cmV0dXJuIDA7XG4tXG4tb3V0X2Vycjpcbi1cdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZ0KTtcbi1cdHJ4X2Vyci1cdTAwM2VmdCA9IE5VTEw7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXG4te1xuLVx0aWYgKGZzX3Byb3QtXHUwMDNlZGVmX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhmc19wcm90LVx1MDAzZWRlZl9ydWxlKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VkZWZfcnVsZSA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyKSB7XG4tXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIGZzX3Byb3QtXHUwMDNlcnhfbW9kaWZ5X2hkcik7XG4tXHRcdGZzX3Byb3QtXHUwMDNlcnhfbW9kaWZ5X2hkciA9IE5VTEw7XG4tXHR9XG4tXG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VtaXNzX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhmc19wcm90LVx1MDAzZW1pc3NfcnVsZSk7XG4tXHRcdGZzX3Byb3QtXHUwMDNlbWlzc19ydWxlID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXApIHtcbi1cdFx0bWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoZnNfcHJvdC1cdTAwM2VtaXNzX2dyb3VwKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VtaXNzX2dyb3VwID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZWZ0KSB7XG4tXHRcdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZzX3Byb3QtXHUwMDNlZnQpO1xuLVx0XHRmc19wcm90LVx1MDAzZWZ0ID0gTlVMTDtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZkZWNyeXB0LVx1MDAzZXJ1bGUpO1xuJiM0MztcdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbiYjNDM7XHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIGRlY3J5cHQtXHUwMDNlcnhfbW9kaWZ5X2hkcik7XG4mIzQzO1x0XHRkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIgPSBOVUxMO1xuIFx0fVxuJiM0MztcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ydWxlKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ncm91cCk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2ZGVjcnlwdC1cdTAwM2VmdCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHNldHVwX2Z0ZV91ZHBfcHNwKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYywgdTE2IHVkcF9wb3J0KVxuQEAgLTMyNSw3MCAmIzQzOzQyNSw2NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcbiBcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgaXBfcHJvdG9jb2wsIElQUFJPVE9fVURQKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlICpkZWNyeXB0LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KVxuIHtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucyA9IG1seDVlX2ZzX2dldF9ucyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuIFx0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcbi1cdGludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pO1xuIFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkciA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuIFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xuIFx0TUxYNV9ERUNMQVJFX0ZMT1dfQUNUKGZsb3dfYWN0KTtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuIFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuLVx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4tXHR1MzIgKmZsb3dfZ3JvdXBfaW47XG4gXHRpbnQgZXJyID0gMDtcbiBcbi1cdGZsb3dfZ3JvdXBfaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7XG4gXHRzcGVjID0ga3Z6YWxsb2Nfb2JqKCpzcGVjKTtcbi1cdGlmICghZmxvd19ncm91cF9pbiB8fCAhc3BlYykge1xuLVx0XHRlcnIgPSAtRU5PTUVNO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiYjNDM7XHRpZiAoIXNwZWMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIENyZWF0ZSBGVCAqL1xuIFx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcbi1cdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUw7XG4tXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbiYjNDM7XHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX0ZUX0xFVkVMO1xuIFx0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuIFx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAxO1xuLVx0ZnQgPSBtbHg1X2NyZWF0ZV9hdXRvX2dyb3VwZWRfZmxvd190YWJsZShucywgXHUwMDI2ZnRfYXR0cik7XG4tXHRpZiAoSVNfRVJSKGZ0KSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZ0KTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZnQgZXJyPSVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmRlY3J5cHQtXHUwMDNlZnQpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgZnQgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRmc19wcm90LVx1MDAzZWZ0ID0gZnQ7XG4gXG4gXHQvKiBDcmVhdGUgbWlzc19ncm91cCAqL1xuLVx0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGZsb3dfZ3JvdXBfaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVx1MDAzZW1heF9mdGUgLSAxKTtcbi1cdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBlbmRfZmxvd19pbmRleCwgZnQtXHUwMDNlbWF4X2Z0ZSAtIDEpO1xuLVx0bWlzc19ncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGZsb3dfZ3JvdXBfaW4pO1xuLVx0aWYgKElTX0VSUihtaXNzX2dyb3VwKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG1pc3NfZ3JvdXApO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX2dyb3VwIGVycj0lZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoZGVjcnlwdC1cdTAwM2VmdCwgXHUwMDI2ZGVjcnlwdC1cdTAwM2VtaXNzX2dyb3VwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfZ3JvdXAgZXJyPSVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXAgPSBtaXNzX2dyb3VwO1xuIFxuIFx0LyogQ3JlYXRlIG1pc3MgcnVsZSAqL1xuLVx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdCwgMSk7XG4mIzQzO1x0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUO1xuJiM0MztcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZWZhdWx0X2Rlc3QsXG4mIzQzO1x0XHRcdFx0ICAgMSk7XG4gXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfcnVsZSBlcnI9JWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4mIzQzO1x0XHRcdCAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfcnVsZSBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlbWlzc19ydWxlID0gcnVsZTtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4gXG4tXHQvKiBBZGQgZGVmYXVsdCBSeCBwc3AgcnVsZSAqL1xuJiM0MztcdC8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovXG4gXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XG4gXHRmbG93X2FjdC5jcnlwdG8udHlwZSA9IE1MWDVfRkxPV19DT05URVhUX0VOQ1JZUFRfREVDUllQVF9UWVBFX1BTUDtcbiBcdC8qIFNldCBiaXRbMzEsIDMwXSBQU1AgbWFya2VyICovXG4tXHQvKiBTZXQgYml0WzI5LTIzXSBwc3Bfc3luZHJvbWUgaXMgc2V0IGluIGVycm9yIEZUICovXG4gI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpXG4gXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XG4gXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG5AQCAtNDAzLDI3NSAmIzQzOzQ5NywxNTkgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuIFx0XHRtb2RpZnlfaGRyID0gTlVMTDtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0ZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFxuIFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbiBcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUjtcbiBcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbi1cdGRlc3QuZnQgPSBmc19wcm90LVx1MDAzZXJ4X2Vyci5mdDtcbi1cdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZkZXN0LCAxKTtcbiYjNDM7XHRkZXN0LmZ0ID0gZnMtXHUwMDNlY2hlY2suZnQ7XG4mIzQzO1x0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjcnlwdC1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuIFx0aWYgKElTX0VSUihydWxlKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4tXHRcdFx0ICAgICAgXCYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICBlcnIsIGZsb3dfYWN0LmFjdGlvbik7XG4mIzQzO1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBkZWNyeXB0IHJ1bGUsIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgZXJyKTtcbiBcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuIFxuLVx0ZnNfcHJvdC1cdTAwM2VkZWZfcnVsZSA9IHJ1bGU7XG4tXHRnb3RvIG91dDtcbiYjNDM7XHRkZWNyeXB0LVx1MDAzZXJ1bGUgPSBydWxlO1xuJiM0MztcdGdvdG8gb3V0X3NwZWM7XG4gXG4gb3V0X2Vycjpcbi1cdGFjY2VsX3BzcF9mc19yeF9mc19kZXN0cm95KGZzLCBmc19wcm90KTtcbi1vdXQ6XG4tXHRrdmZyZWUoZmxvd19ncm91cF9pbik7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgZGVjcnlwdCk7XG4mIzQzO291dF9zcGVjOlxuIFx0a3ZmcmVlKHNwZWMpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxuJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXG4tXHRhY2NlbF9wc3AgPSBmcy1cdTAwM2VyeF9mcztcbi1cbi1cdC8qIFRoZSBuZXRkZXYgdW5yZWcgYWxyZWFkeSBoYXBwZW5lZCwgc28gYWxsIG9mZmxvYWRlZCBydWxlIGFyZSBhbHJlYWR5IHJlbW92ZWQgKi9cbi1cdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFt0eXBlXTtcbi1cbi1cdGFjY2VsX3BzcF9mc19yeF9mc19kZXN0cm95KGZzLCBmc19wcm90KTtcbi1cbi1cdGFjY2VsX3BzcF9mc19yeF9lcnJfZGVzdHJveV9mdChmcywgXHUwMDI2ZnNfcHJvdC1cdTAwM2VyeF9lcnIpO1xuJiM0MztcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuJiM0MztcdGludCBpO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0LyogZGlzY29ubmVjdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpKTtcbiYjNDM7XHRcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0pO1xuJiM0MztcdH1cbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSlcbiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVx0aW50IGVycjtcbi1cbi1cdGFjY2VsX3BzcCA9IGZzLVx1MDAzZXJ4X2ZzO1xuLVx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W3R5cGVdO1xuJiM0MztcdGludCBpLCBlcnI7XG4gXG4tXHRmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQodHlwZSkpO1xuLVxuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Vycl9jcmVhdGVfZnQoZnMsIGZzX3Byb3QsIFx1MDAyNmZzX3Byb3QtXHUwMDNlcnhfZXJyKTtcbi1cdGlmIChlcnIpXG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Z0X2NyZWF0ZShmcywgXHUwMDI2ZnMtXHUwMDNlcngpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4gXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTtcbi1cdGlmIChlcnIpXG4tXHRcdGFjY2VsX3BzcF9mc19yeF9lcnJfZGVzdHJveV9mdChmcywgXHUwMDI2ZnNfcHJvdC1cdTAwM2VyeF9lcnIpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXG4te1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0Yztcbi1cdGludCBlcnIgPSAwO1xuLVxuLVx0aWYgKCFmcyB8fCAhZnMtXHUwMDNlcnhfZnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0dHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRmc19wcm90ID0gXHUwMDI2YWNjZWxfcHNwLVx1MDAzZWZzX3Byb3RbdHlwZV07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VyZWZjbnQmIzQzOyYjNDM7KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdC8qIGNyZWF0ZSBGVCAqL1xuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShmcywgdHlwZSk7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShmcywgXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuIFx0aWYgKGVycikge1xuLVx0XHRmc19wcm90LVx1MDAzZXJlZmNudC0tO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O0ZhaWxlZCBjcmVhdGluZyBSWCBjaGVjayBzdGVlcmluZyB0YWJsZVwmIzM0Oyk7XG4mIzQzO1x0XHRnb3RvIGVycl9mdDtcbiBcdH1cbiBcbi1cdC8qIGNvbm5lY3QgKi9cbi1cdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4tXHRkZXN0LmZ0ID0gZnNfcHJvdC1cdTAwM2VmdDtcbi1cdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KHR5cGUpLCBcdTAwMjZkZXN0KTtcbi1cbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSlcbi17XG4tXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcbi1cbi1cdGFjY2VsX3BzcCA9IGZzLVx1MDAzZXJ4X2ZzO1xuLVx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W3R5cGVdO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0aWYgKC0tZnNfcHJvdC1cdTAwM2VyZWZjbnQpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0LyogZGlzY29ubmVjdCAqL1xuLVx0bWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdDtcbiYjNDM7XG4mIzQzO1x0XHRkZXN0ID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XG4mIzQzO1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0sXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHUwMDI2ZGVzdCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIGRlY3J5cHQgc3RlZXJpbmcgdGFibGVcJiMzNDspO1xuJiM0MztcdFx0XHRnb3RvIGVycl9kZWNyeXB0X2Z0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4mIzQzO1x0XHRkZXN0LmZ0ID0gZnMtXHUwMDNlZGVjcnlwdFtpXS5mdDtcbiYjNDM7XHRcdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpLCBcdTAwMjZkZXN0KTtcbiYjNDM7XHR9XG4gXG4tXHQvKiByZW1vdmUgRlQgKi9cbi1cdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KGZzLCB0eXBlKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiBcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbiYjNDM7ZXJyX2RlY3J5cHRfZnQ6XG4mIzQzO1x0d2hpbGUgKC0taSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdG1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpO1xuJiM0MztcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4mIzQzO1x0fVxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZWNoZWNrKTtcbiYjNDM7ZXJyX2Z0OlxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KFx1MDAyNmZzLVx1MDAzZXJ4KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xuLVxuLVx0aWYgKCFmcy1cdTAwM2VyeF9mcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyKTtcbi1cdG1seDVfZmNfZGVzdHJveShmcy1cdTAwM2VtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuLVx0bWx4NV9mY19kZXN0cm95KGZzLVx1MDAzZW1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W2ldO1xuLVx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRcdFdBUk5fT04oZnNfcHJvdC1cdTAwM2VyZWZjbnQpO1xuLVx0fVxuLVx0a2ZyZWUoZnMtXHUwMDNlcnhfZnMpO1xuLVx0ZnMtXHUwMDNlcnhfZnMgPSBOVUxMO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfY291bnRlcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVfZmMgKmZsb3dfY291bnRlcjtcbi1cdGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgaTtcbiBcdGludCBlcnI7XG4gXG4tXHRhY2NlbF9wc3AgPSBremFsbG9jX29iaigqYWNjZWxfcHNwKTtcbi1cdGlmICghYWNjZWxfcHNwKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFtpXTtcbi1cdFx0bXV0ZXhfaW5pdChcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0fVxuLVxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2NvdW50ZXIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZsb3cgY291bnRlciBlcnI9JXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgICAgICBmbG93X2NvdW50ZXIpO1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZmxvdyBjb3VudGVyIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuIFxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBhdXRoIGZhaWwgZmxvdyBjb3VudGVyIGVycj0lcGVcXG5cJiMzNDssXG4tXHRcdFx0ICAgICAgIGZsb3dfY291bnRlcik7XG4tXHRcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcbi1cdFx0Z290byBvdXRfY291bnRlcl9lcnI7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggYXV0aCBmYWlsIGZsb3cgY291bnRlciBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBlcnIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuIFxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4mIzQzO1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBlcnJvciBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9hdXRoX2ZhaWxfY291bnRlcl9lcnI7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIGVycik7XG4mIzQzO1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XG4gXG4tXHRmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7XG4tXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcbiYjNDM7XHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuJiM0MztcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGJhZCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9lcnJfY291bnRlcl9lcnI7XG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggYmFkIGZsb3cgY291bnRlciBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBlcnIpO1xuJiM0MztcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuLVxuLVx0ZnMtXHUwMDNlcnhfZnMgPSBhY2NlbF9wc3A7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1vdXRfZXJyX2NvdW50ZXJfZXJyOlxuLVx0bWx4NV9mY19kZXN0cm95KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9lcnJfY291bnRlcik7XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIgPSBOVUxMO1xuLW91dF9hdXRoX2ZhaWxfY291bnRlcl9lcnI6XG4tXHRtbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlciA9IE5VTEw7XG4tb3V0X2NvdW50ZXJfZXJyOlxuLVx0bWx4NV9mY19kZXN0cm95KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9jb3VudGVyKTtcbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9jb3VudGVyID0gTlVMTDtcbiBvdXRfZXJyOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W2ldO1xuLVx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHR9XG4tXHRrZnJlZShhY2NlbF9wc3ApO1xuLVx0ZnMtXHUwMDNlcnhfZnMgPSBOVUxMO1xuLVxuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9jbGVhbnVwKGZzKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X3B1dChwcml2LVx1MDAzZXBzcC1cdTAwM2VmcywgaSk7XG4tfVxuLVxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcztcbi1cdGludCBlcnIsIGk7XG4tXG4tXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGZzID0gcHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnM7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dF9lcnI7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1vdXRfZXJyOlxuLVx0aS0tO1xuLVx0d2hpbGUgKGkgXHUwMDNlPSAwKSB7XG4tXHRcdGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoZnMsIGkpO1xuLVx0XHQtLWk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdG5ldGRldl9sb2NrKHByaXYtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcyk7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXG4ge1xuIFx0aW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuQEAgLTY4MSw3ICYjNDM7NjU5LDYgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0dTMyICppbiwgKm1jLCAqb3V0ZXJfaGVhZGVyc19jO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03MDAsOCAmIzQzOzY3Nyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9QU1BfTEVWRUw7XG4gXHRmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDE7XG4gXG4tXHR0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVx0ZnQgPSBtbHg1X2NyZWF0ZV9mbG93X3RhYmxlKHR4X2ZzLVx1MDAzZW5zLCBcdTAwMjZmdF9hdHRyKTtcbiYjNDM7XHRmdCA9IG1seDVfY3JlYXRlX2Zsb3dfdGFibGUodHgtXHUwMDNlbnMsIFx1MDAyNmZ0X2F0dHIpO1xuIFx0aWYgKElTX0VSUihmdCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihmdCk7XG4gXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCYjMzQ7UFNQOiBmYWlsIHRvIGFkZCBwc3AgdHggZmxvdyB0YWJsZSwgZXJyID0gJWRcXG5cJiMzNDssIGVycik7XG5AQCAtNzI3LDcgJiM0Mzs3MDMsNyBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0VOQ1JZUFQgfFxuIFx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuIFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbi1cdGRlc3QuY291bnRlciA9IHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXI7XG4mIzQzO1x0ZGVzdC5jb3VudGVyID0gZnMtXHUwMDNldHhfY291bnRlcjtcbiBcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4gXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG5AQCAtNzM1LDkgJiM0Mzs3MTEsOSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4gXHRcdGdvdG8gZXJyX2FkZF9mbG93X3J1bGU7XG4gXHR9XG4gXG4tXHR0eF9mcy1cdTAwM2VmdCA9IGZ0O1xuLVx0dHhfZnMtXHUwMDNlZmcgPSBmZztcbi1cdHR4X2ZzLVx1MDAzZXJ1bGUgPSBydWxlO1xuJiM0MztcdHR4LVx1MDAzZWZ0ID0gZnQ7XG4mIzQzO1x0dHgtXHUwMDNlZmcgPSBmZztcbiYjNDM7XHR0eC1cdTAwM2VydWxlID0gcnVsZTtcbiBcdGdvdG8gb3V0O1xuIFxuIGVycl9hZGRfZmxvd19ydWxlOlxuQEAgLTc1MCw4NyAmIzQzOzcyNiwzNSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcylcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXG4ge1xuLVx0aWYgKCF0eF9mcy1cdTAwM2VmdClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bWx4NV9kZWxfZmxvd19ydWxlcyh0eF9mcy1cdTAwM2VydWxlKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKHR4X2ZzLVx1MDAzZWZnKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKHR4X2ZzLVx1MDAzZWZ0KTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZ0eC1cdTAwM2VydWxlKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNnR4LVx1MDAzZWZnKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZ0eC1cdTAwM2VmdCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBmcy1cdTAwM2V0eF9mcztcbi1cdGludCBlcnIgPSAwO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRpZiAodHhfZnMtXHUwMDNlcmVmY250JiM0MzsmIzQzOylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKGZzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHR4X2ZzLVx1MDAzZXJlZmNudC0tO1xuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNldHhfY291bnRlcik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc190eF9mdF9wdXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4te1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBmcy1cdTAwM2V0eF9mcztcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2dHhfZnMtXHUwMDNlbXV0ZXgpO1xuLVx0aWYgKC0tdHhfZnMtXHUwMDNlcmVmY250KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGFjY2VsX3BzcF9mc190eF9kZXN0cm95KHR4X2ZzKTtcbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2dHhfZnMtXHUwMDNlbXV0ZXgpO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF90eChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbi17XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVxuLVx0aWYgKCF0eF9mcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bWx4NV9mY19kZXN0cm95KGZzLVx1MDAzZW1kZXYsIHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIpO1xuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRXQVJOX09OKHR4X2ZzLVx1MDAzZXJlZmNudCk7XG4tXHRrZnJlZSh0eF9mcyk7XG4tXHRmcy1cdTAwM2V0eF9mcyA9IE5VTEw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfdHgoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xuLVx0c3RydWN0IG1seDVfZmMgKmZsb3dfY291bnRlcjtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzO1xuJiM0MztcdGludCBlcnI7XG4gXG4tXHRucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfRUdSRVNTX0lQU0VDKTtcbi1cdGlmICghbnMpXG4mIzQzO1x0ZnMtXHUwMDNldHgubnMgPSBtbHg1X2dldF9mbG93X25hbWVzcGFjZShtZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgIE1MWDVfRkxPV19OQU1FU1BBQ0VfRUdSRVNTX0lQU0VDKTtcbiYjNDM7XHRpZiAoIWZzLVx1MDAzZXR4Lm5zKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR0eF9mcyA9IGt6YWxsb2Nfb2JqKCp0eF9mcyk7XG4tXHRpZiAoIXR4X2ZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCBcdTAwMjZmcy1cdTAwM2V0eF9jb3VudGVyKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0a2ZyZWUodHhfZnMpO1xuLVx0XHRyZXR1cm4gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHR4IGZsb3cgY291bnRlciBlcnI9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICAgICBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdH1cbi1cdHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XG4tXHRtdXRleF9pbml0KFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdHR4X2ZzLVx1MDAzZW5zID0gbnM7XG4tXHRmcy1cdTAwM2V0eF9mcyA9IHR4X2ZzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTgzOCwzMiAmIzQzOzc2MiwyOSBAQCBzdGF0aWMgdm9pZFxuIG1seDVlX2FjY2VsX3BzcF9mc19nZXRfc3RhdHNfZmlsbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9zdGF0cyAqc3RhdHMpXG4ge1xuLVx0c3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcy1cdTAwM2V0eF9mcztcbiYjNDM7XHRzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzO1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXG4tXHRhY2NlbF9wc3AgPSAoc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqKXByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXJ4X2ZzO1xuIFxuLVx0aWYgKHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIpXG4tXHRcdG1seDVfZmNfcXVlcnkobWRldiwgdHhfZnMtXHUwMDNldHhfY291bnRlciwgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3R4X3BrdHMsXG4mIzQzO1x0aWYgKGZzLVx1MDAzZXR4X2NvdW50ZXIpXG4mIzQzO1x0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGZzLVx1MDAzZXR4X2NvdW50ZXIsIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF90eF9wa3RzLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF90eF9ieXRlcyk7XG4gXG4tXHRpZiAoYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIpXG4tXHRcdG1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIsIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9wa3RzLFxuJiM0MztcdGlmIChmcy1cdTAwM2VyeF9jb3VudGVyKVxuJiM0MztcdFx0bWx4NV9mY19xdWVyeShtZGV2LCBmcy1cdTAwM2VyeF9jb3VudGVyLCBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfcGt0cyxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXMpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXG4mIzQzO1x0aWYgKGZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKVxuJiM0MztcdFx0bWx4NV9mY19xdWVyeShtZGV2LCBmcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfcGt0c19hdXRoX2ZhaWwsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X2J5dGVzX2F1dGhfZmFpbCk7XG4gXG4tXHRpZiAoYWNjZWxfcHNwLVx1MDAzZXJ4X2Vycl9jb3VudGVyKVxuLVx0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9lcnJfY291bnRlcixcbiYjNDM7XHRpZiAoZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIpXG4mIzQzO1x0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGZzLVx1MDAzZXJ4X2Vycl9jb3VudGVyLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9wa3RzX2ZyYW1lX2VycixcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXNfZnJhbWVfZXJyKTtcbiBcbi1cdGlmIChhY2NlbF9wc3AtXHUwMDNlcnhfYmFkX2NvdW50ZXIpXG4tXHRcdG1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyLFxuJiM0MztcdGlmIChmcy1cdTAwM2VyeF9iYWRfY291bnRlcilcbiYjNDM7XHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfZHJvcCxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXNfZHJvcCk7XG4gfVxuQEAgLTg3MywyMSAmIzQzOzc5NCwxNSBAQCB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0aWYgKCFwcml2LVx1MDAzZXBzcClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0YWNjZWxfcHNwX2ZzX3R4X2Z0X3B1dChwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcyk7XG4tfVxuLVxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbiYjNDM7XHRuZXRkZXZfbG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMtXHUwMDNldHgpO1xuJiM0MztcdG5ldGRldl91bmxvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1ZV9hY2NlbF9wc3BfZnNfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChmcyk7XG4tXHRhY2NlbF9wc3BfZnNfY2xlYW51cF90eChmcyk7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoZnMpO1xuJiM0MztcdGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTtcbiBcdGtmcmVlKGZzKTtcbiB9XG4gXG5AQCAtOTAxLDI5ICYjNDM7ODE2LDYzIEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NWVfcHNwX2ZzICptbHg1ZV9hY2NlbF9wc3BfZnNfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4gXHRmcy1cdTAwM2VtZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX2luaXRfdHgoZnMpO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc190eF9pbml0KGZzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3R4O1xuIFxuIFx0ZnMtXHUwMDNlZnMgPSBwcml2LVx1MDAzZWZzO1xuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX2luaXRfcngoZnMpO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9pbml0KGZzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3J4O1xuIFxuIFx0cmV0dXJuIGZzO1xuIFxuIGVycl9yeDpcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcbiYjNDM7XHRhY2NlbF9wc3BfZnNfdHhfY2xlYW51cChmcyk7XG4gZXJyX3R4OlxuIFx0a2ZyZWUoZnMpO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIGV4dGFjayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFjY2VsX3BzcF9mc190eF9mdF9jcmVhdGUocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMsIFx1MDAyNnByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXR4KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ZhaWxlZCBjcmVhdGluZyBUWCBzdGVlcmluZyB0YWJsZVwmIzM0Oyk7XG4mIzQzO1x0XHRhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcyk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0YWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMtXHUwMDNldHgpO1xuJiM0MztcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50XG4gbWx4NWVfcHNwX3NldF9jb25maWcoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9kZXZfY29uZmlnICpjb25mLFxuIFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRyZXR1cm4gMDsgLyogVE9ETzogdGhpcyBzaG91bGQgYWN0dWFsbHkgZG8gdGhpbmdzIHRvIHRoZSBkZXZpY2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHBzZC1cdTAwM2VtYWluX25ldGRldik7XG4mIzQzO1x0Ym9vbCBwc3BfZW5hYmxlZCA9IHBzZC1cdTAwM2Vjb25maWcudmVyc2lvbnM7XG4mIzQzO1x0Ym9vbCBlbmFibGVfcHNwID0gY29uZi1cdTAwM2V2ZXJzaW9ucztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2xvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdGlmICghcHNwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGVuYWJsZV9wc3ApXG4mIzQzO1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlKHByaXYsIGV4dGFjayk7XG4mIzQzO1x0ZWxzZSBpZiAocHNwX2VuYWJsZWQgXHUwMDI2XHUwMDI2ICFlbmFibGVfcHNwKVxuJiM0MztcdFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3kocHJpdik7XG4mIzQzO1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludFxuQEAgLTEwNzIsMjEgJiM0MzsxMDIxLDIxIEBAIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi1cdTAwM2Vwc3A7XG4gXG4tXHRpZiAoIXBzcCB8fCAhcHNwLVx1MDAzZXBzcClcbiYjNDM7XHRpZiAoIXBzcCB8fCAhcHNwLVx1MDAzZXBzZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0cHNwX2Rldl91bnJlZ2lzdGVyKHBzcC1cdTAwM2Vwc3ApO1xuLVx0cHNwLVx1MDAzZXBzcCA9IE5VTEw7XG4mIzQzO1x0cHNwX2Rldl91bnJlZ2lzdGVyKHBzcC1cdTAwM2Vwc2QpO1xuJiM0MztcdHBzcC1cdTAwM2Vwc2QgPSBOVUxMO1xuIH1cbiBcbi12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiYjNDM7aW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVx1MDAzZXBzcDtcbiBcdHN0cnVjdCBwc3BfZGV2ICpwc2Q7XG4gXG4gXHQvKiBGVyBDYXBzIG1pc3NpbmcgKi9cbiBcdGlmICghcHJpdi1cdTAwM2Vwc3ApXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0cHNwLVx1MDAzZWNhcHMuYXNzb2NfZHJ2X3NwYyA9IHNpemVvZih1MzIpO1xuIFx0cHNwLVx1MDAzZWNhcHMudmVyc2lvbnMgPSAxIFx1MDAzY1x1MDAzYyBQU1BfVkVSU0lPTl9IRFIwX0FFU19HQ01fMTI4O1xuQEAgLTEwOTgsOSAmIzQzOzEwNDcsMTEgQEAgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoSVNfRVJSKHBzZCkpIHtcbiBcdFx0bWx4NV9jb3JlX2Vycihwcml2LVx1MDAzZW1kZXYsIFwmIzM0O1BTUCBmYWlsZWQgdG8gcmVnaXN0ZXIgZHVlIHRvICVwZVxcblwmIzM0OyxcbiBcdFx0XHQgICAgICBwc2QpO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwc2QpO1xuIFx0fVxuLVx0cHNwLVx1MDAzZXBzcCA9IHBzZDtcbiYjNDM7XHRwc3AtXHUwMDNlcHNkID0gcHNkO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxuaW5kZXggNmI2MmZlZjBkOWE3MzguLjNmNDQxZTdkZDU1YWMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC0yMyw3ICYjNDM7MjMsNyBAQCBzdHJ1Y3QgbWx4NWVfcHNwX3N0YXRzIHtcbiB9O1xuIFxuIHN0cnVjdCBtbHg1ZV9wc3Age1xuLVx0c3RydWN0IHBzcF9kZXYgKnBzcDtcbiYjNDM7XHRzdHJ1Y3QgcHNwX2RldiAqcHNkO1xuIFx0c3RydWN0IHBzcF9kZXZfY2FwcyBjYXBzO1xuIFx0c3RydWN0IG1seDVlX3BzcF9mcyAqZnM7XG4gXHRhdG9taWNfdCB0eF9rZXlfY250O1xuQEAgLTQzLDMzICYjNDM7NDMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4tdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBpbnQgbWx4NWVfcHNwX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBpbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4tc3RhdGljIGlubGluZSBpbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXG5pbmRleCBlZjdmNTMzODU0MGZkZi4uMzQ4ZmQ3YTk2MjYxNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbkBAIC0xNCwxMiAmIzQzOzE0LDYgQEBcbiAjaW5jbHVkZSBcJiMzNDtlbl9hY2NlbC9wc3Bfcnh0eC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW5fYWNjZWwvcHNwLmhcJiMzNDtcbiBcbi1lbnVtIHtcbi1cdE1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0RFQ1JZUFRFRCxcbi1cdE1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0FVVEhfRkFJTEVELFxuLVx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfQkFEX1RSQUlMRVIsXG4tfTtcbi1cbiBzdGF0aWMgdm9pZCBtbHg1ZV9wc3Bfc2V0X3N3cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUgKnBzcF9zdCxcbiBcdFx0XHQgICAgICBzdHJ1Y3QgbWx4NV93cWVfZXRoX3NlZyAqZXNlZylcbkBAIC0xMjIsMTYgJiM0MzsxMTYsMTEgQEAgc3RhdGljIGJvb2wgbWx4NWVfcHNwX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdixcbiBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgc3RydWN0IG1seDVfY3FlNjQgKmNxZSlcbiB7XG4tXHR1MzIgcHNwX21ldGFfZGF0YSA9IGJlMzJfdG9fY3B1KGNxZS1cdTAwM2VmdF9tZXRhZGF0YSk7XG4gXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHR1MTYgZGV2X2lkID0gcHJpdi1cdTAwM2Vwc3AtXHUwMDNlcHNwLVx1MDAzZWlkO1xuJiM0MztcdHUxNiBkZXZfaWQgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vwc2QtXHUwMDNlaWQ7XG4gXHRib29sIHN0cmlwX2ljdiA9IHRydWU7XG4gXHR1OCBnZW5lcmF0aW9uID0gMDtcbiBcbi1cdC8qIFRCRDogcmVwb3J0IGVycm9ycyBhcyBTVyBjb3VudGVycyB0byBldGh0b29sLCBhbnkgZnVydGhlciBoYW5kbGluZyA/ICovXG4tXHRpZiAoTUxYNV9QU1BfTUVUQURBVEFfU1lORFJPTUUocHNwX21ldGFfZGF0YSkgIT0gTUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVEKVxuLVx0XHRnb3RvIGRyb3A7XG4tXG4gXHRpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIGdlbmVyYXRpb24sIHN0cmlwX2ljdikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG5pbmRleCA3MDI4OWM5MjFiZDZiMy4uMmIwODBjMzljYzM3ZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmhcbkBAIC0xMCw5ICYjNDM7MTAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2VuLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtlbi90eHJ4LmhcJiMzNDtcbiBcbi0vKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjktMjM6IFBTUCBzeW5kcm9tZSwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xuJiM0MzsvKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xuICNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcdTAwM2VcdTAwM2UgMzApIFx1MDAyNiAweDMpID09IDB4Mylcbi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX1NZTkRST01FKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDIzKSBcdTAwMjYgR0VOTUFTSyg2LCAwKSlcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFx1MDAyNiBHRU5NQVNLKDIyLCAwKSlcbiBcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuaW5kZXggNzc1ZjBjNmU1NWM5NTUuLjJjYjQ4YjI0ZDVlYWM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYxOTEsNyAmIzQzOzYxOTEsNyBAQCBzdGF0aWMgaW50IG1seDVlX2luaXRfbmljX3R4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4mIzQzO3N0YXRpYyBpbnQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbkBAIC02MTk5LDcgJiM0Mzs2MTk5LDkgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBcdG1seDVlX2ZzX2luaXRfbDJfYWRkcihwcml2LVx1MDAzZWZzLCBuZXRkZXYpO1xuIFx0bWx4NWVfaXBzZWNfaW5pdChwcml2KTtcbi1cdG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XHRlcnIgPSBtbHg1ZV9wc3BfcmVnaXN0ZXIocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0X2lwc2VjX2NsZWFudXA7XG4gXG4gXHRlcnIgPSBtbHg1ZV9tYWNzZWNfaW5pdChwcml2KTtcbiBcdGlmIChlcnIpXG5AQCAtNjIyMiw3ICYjNDM7NjIyNCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1ZV9wY2llX2NvbmdfZXZlbnRfaW5pdChwcml2KTtcbiBcdG1seDVlX2h2X3ZoY2Ffc3RhdHNfY3JlYXRlKHByaXYpO1xuIFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0bWx4NWVfZGNibmxfaW5pdF9hcHAocHJpdik7XG4gXG4gXHRtbHg1ZV9uaWNfc2V0X3J4X21vZGUocHJpdik7XG5AQCAtNjIzNSw2ICYjNDM7NjIzNywxMiBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztvdXRfaXBzZWNfY2xlYW51cDpcbiYjNDM7XHRtbHg1ZV9pcHNlY19jbGVhbnVwKHByaXYpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVlX25pY19kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuQEAgLTY2MTYsMTMgJiM0Mzs2NjI0LDE4IEBAIGludCBtbHg1ZV9hdHRhY2hfbmV0ZGV2KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfY2xlYW51cF90eDtcbiBcbi1cdGlmIChwcm9maWxlLVx1MDAzZWVuYWJsZSlcbi1cdFx0cHJvZmlsZS1cdTAwM2VlbmFibGUocHJpdik7XG4mIzQzO1x0aWYgKHByb2ZpbGUtXHUwMDNlZW5hYmxlKSB7XG4mIzQzO1x0XHRlcnIgPSBwcm9maWxlLVx1MDAzZWVuYWJsZShwcml2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gZXJyX2NsZWFudXBfcng7XG4mIzQzO1x0fVxuIFxuIFx0bWx4NWVfdXBkYXRlX2ZlYXR1cmVzKHByaXYtXHUwMDNlbmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfY2xlYW51cF9yeDpcbiYjNDM7XHRwcm9maWxlLVx1MDAzZWNsZWFudXBfcngocHJpdik7XG4gZXJyX2NsZWFudXBfdHg6XG4gXHRwcm9maWxlLVx1MDAzZWNsZWFudXBfdHgocHJpdik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jXG5pbmRleCBjOGI3NmQzMDFjOTJjZi4uNjAzMDUxYWIxZWFhNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xuQEAgLTEyNjIsOSAmIzQzOzEyNjIsMTEgQEAgc3RhdGljIHZvaWQgbWx4NWVfY2xlYW51cF9yZXBfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1ZV9yZXBfbmVpZ2hfY2xlYW51cChycHJpdik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4mIzQzO3N0YXRpYyBpbnQgbWx4NWVfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRtbHg1ZV9zZXRfbmV0ZGV2X210dV9ib3VuZGFyaWVzKHByaXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG5AQCAtMTMyMiw3ICYjNDM7MTMyNCw3IEBAIHN0YXRpYyBpbnQgdXBsaW5rX3JlcF9hc3luY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50XG4gXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3VwbGlua19yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuJiM0MztzdGF0aWMgaW50IG1seDVlX3VwbGlua19yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LVx1MDAzZW5ldGRldjtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuQEAgLTEzNTcsNiAmIzQzOzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBoYXJkd2FyZSBkcml2ZXIgKHNwZWNpZmljYWxseSB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZSkuIFNpbmNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU3OTJkZDA1MWIwMzVkMTRiZmRiNTViOGRiNjQ2MjNmYzg0YjhiYjgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCA3IDIxOjQwOjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaAppbmRleCAyMjcwZTJlNTUwZGQ5ZS4uM2NjNzI4M2I2MjE1ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oCkBAIC0xMDE2LDcgJiM0MzsxMDE2LDcgQEAgc3RydWN0IG1seDVlX3Byb2ZpbGUgewogCXZvaWQJKCpjbGVhbnVwX3J4KShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiAJaW50CSgqaW5pdF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogCXZvaWQJKCpjbGVhbnVwX3R4KShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7Ci0Jdm9pZAkoKmVuYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwomIzQzOwlpbnQJKCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIAl2b2lkCSgqZGlzYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogCWludAkoKnVwZGF0ZV9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogCXZvaWQJKCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmgKaW5kZXggMDkxYjgwYTY3MTg5ZGQuLjQ5NzNmYjQ3M2ZmMDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaApAQCAtODgsMTMgJiM0Mzs4OCwxOCBAQCBlbnVtIHsKICNpZmRlZiBDT05GSUdfTUxYNV9FTl9BUkZTCiAJTUxYNUVfQVJGU19GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCAmIzQzOyAxLAogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9JUFNFQykgfHwgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApCiYjNDM7I2lmIGRlZmluZWQoQ09ORklHX01MWDVfRU5fSVBTRUMpCiAJTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0xFVkVMID0gTUxYNUVfSU5ORVJfVFRDX0ZUX0xFVkVMICYjNDM7IDEsCiAJTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0VSUl9MRVZFTCwKIAlNTFg1RV9BQ0NFTF9GU19QT0xfRlRfTEVWRUwsCiAJTUxYNUVfQUNDRUxfRlNfUE9MX01JU1NfRlRfTEVWRUwsCiAJTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX1JPQ0VfTEVWRUwsCiAjZW5kaWYKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApCiYjNDM7CU1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCAmIzQzOyAxLAomIzQzOwlNTFg1RV9BQ0NFTF9GU19QU1BfRVJSX0ZUX0xFVkVMLAomIzQzOwlNTFg1RV9BQ0NFTF9GU19QU1BfUlhfRlRfTEVWRUwsCiYjNDM7I2VuZGlmCiB9OwogCiBzdHJ1Y3QgbWx4NWVfZmxvd19zdGVlcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmgKaW5kZXggYjUyNmIzODk4YzIyZTAuLjNmMjEyZTQ2ZmMyZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaApAQCAtMjIwLDE4ICYjNDM7MjIwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLAogCiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewotCWludCBlcnI7Ci0KLQllcnIgPSBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhwcml2KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IG1seDVlX2t0bHNfaW5pdF9yeChwcml2KTsKLQlpZiAoZXJyKQotCQltbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTsKLQotb3V0OgotCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9hY2NlbF9jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQpAQCAtMjQyLDEyICYjNDM7MjMxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAKIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHByaXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAlyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMKaW5kZXggZDlhZGI5OTNlNjRkOTUuLjczYjIzMjM3OTI2M2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jCkBAIC0yMSw1MSAmIzQzOzIxLDUyIEBAIGVudW0gYWNjZWxfcHNwX3N5bmRyb21lIHsKIAlQU1BfQkFEX1RSQUlMRVIsCiB9OwogCi1zdHJ1Y3QgbWx4NWVfcHNwX3R4IHsKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHsKIAlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnM7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiAJc3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7Ci0Jc3RydWN0IG11dGV4IG11dGV4OyAvKiBQcm90ZWN0IFBTUCBUWCBzdGVlcmluZyAqLwotCXUzMiByZWZjbnQ7Ci0Jc3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7CiB9OwogCi1zdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciB7CiYjNDM7c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSB7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmRyb3BfZ3JvdXA7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmF1dGhfZmFpbF9ydWxlOwogCXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICplcnJfcnVsZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYmFkX3J1bGU7Ci0Jc3RydWN0IG1seDVfbW9kaWZ5X2hkciAqY29weV9tb2RpZnlfaGRyOwogfTsKIAotc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90IHsKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgewogCXN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0OwogCXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKm1pc3NfcnVsZTsKIAlzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpyeF9tb2RpZnlfaGRyOwotCXN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVmYXVsdF9kZXN0OwotCXN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHJ4X2VycjsKLQl1MzIgcmVmY250OwotCXN0cnVjdCBtdXRleCBwcm90X211dGV4OyAvKiBwcm90ZWN0IEVTUDQvRVNQNiBwcm90b2NvbCAqLwotCXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpkZWZfcnVsZTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiB9OwogCi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwIHsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgZnNfcHJvdFtBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTsKLQlzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjsKLQlzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7Ci0Jc3RydWN0IG1seDVfZmMgKnJ4X2Vycl9jb3VudGVyOwotCXN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjsKJiM0MztzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHsKJiM0MzsJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICp1ZHBfcnVsZXNbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107CiB9OwogCiBzdHJ1Y3QgbWx4NWVfcHNwX2ZzIHsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldjsKLQlzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mczsKLQkvKiBSeCBtYW5hZ2UgKi8KJiM0MzsJc3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUgdHg7CiYjNDM7CiYjNDM7CS8qIFJ4ICovCiAJc3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmcgKmZzOwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKnJ4X2ZzOwomIzQzOwlzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjsKJiM0MzsJc3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyOwomIzQzOwlzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7CiYjNDM7CXN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjsKJiM0MzsKJiM0MzsJc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIGRlY3J5cHRbQUNDRUxfRlNfUFNQX05VTV9UWVBFU107CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfcnhfdGFibGUgcng7CiB9OwogCiAvKiBQU1AgUlggZmxvdyBzdGVlcmluZyAqLwpAQCAtNzcsNDQgJiM0Mzs3OCwyMDAgQEAgc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpCiAJcmV0dXJuIE1MWDVfVFRfSVBWNl9VRFA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9lcnJfZGVsX3J1bGVzKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAotCQkJCQkgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpCiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAomIzQzOwkJCQkgIHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciAqZnRfYXR0ciwKJiM0MzsJCQkJICBzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqZnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtJmd0O2ZzLCBmYWxzZSk7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwkqZnQgPSBtbHg1X2NyZWF0ZV9hdXRvX2dyb3VwZWRfZmxvd190YWJsZShucywgZnRfYXR0cik7CiYjNDM7CWlmIChJU19FUlIoKmZ0KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUigqZnQpOwomIzQzOwkJKmZ0ID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqdGFibGUpCiB7Ci0JaWYgKHJ4X2Vyci0mZ3Q7YmFkX3J1bGUpIHsKLQkJbWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItJmd0O2JhZF9ydWxlKTsKLQkJcnhfZXJyLSZndDtiYWRfcnVsZSA9IE5VTEw7CiYjNDM7CWlmICgqdGFibGUpIHsKJiM0MzsJCW1seDVfZGVzdHJveV9mbG93X3RhYmxlKCp0YWJsZSk7CiYjNDM7CQkqdGFibGUgPSBOVUxMOwogCX0KJiM0Mzt9CiAKLQlpZiAocnhfZXJyLSZndDtlcnJfcnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7ZXJyX3J1bGUpOwotCQlyeF9lcnItJmd0O2Vycl9ydWxlID0gTlVMTDsKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpCiYjNDM7ewomIzQzOwlpZiAoKnJ1bGUpIHsKJiM0MzsJCW1seDVfZGVsX2Zsb3dfcnVsZXMoKnJ1bGUpOwomIzQzOwkJKnJ1bGUgPSBOVUxMOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQsCiYjNDM7CQkJCQkgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cCkKJiM0Mzt7CiYjNDM7CWludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pOwomIzQzOwl1MzIgKmluID0ga3Z6YWxsb2MoaW5sZW4sIEdGUF9LRVJORUwpOwomIzQzOwlpbnQgZXJyID0gMDsKIAotCWlmIChyeF9lcnItJmd0O2F1dGhfZmFpbF9ydWxlKSB7Ci0JCW1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLSZndDthdXRoX2ZhaWxfcnVsZSk7Ci0JCXJ4X2Vyci0mZ3Q7YXV0aF9mYWlsX3J1bGUgPSBOVUxMOwomIzQzOwlpZiAoIWluKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CU1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBpbiwgc3RhcnRfZmxvd19pbmRleCwgZnQtJmd0O21heF9mdGUgLSAxKTsKJiM0MzsJTUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGluLCBlbmRfZmxvd19pbmRleCwgZnQtJmd0O21heF9mdGUgLSAxKTsKJiM0MzsJKmdyb3VwID0gbWx4NV9jcmVhdGVfZmxvd19ncm91cChmdCwgaW4pOwomIzQzOwlpZiAoSVNfRVJSKCpncm91cCkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoKmdyb3VwKTsKJiM0MzsJCSpncm91cCA9IE5VTEw7CiAJfQomIzQzOwlrdmZyZWUoaW4pOwogCi0JaWYgKHJ4X2Vyci0mZ3Q7cnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7cnVsZSk7Ci0JCXJ4X2Vyci0mZ3Q7cnVsZSA9IE5VTEw7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKQomIzQzO3sKJiM0MzsJaWYgKCpncm91cCkgewomIzQzOwkJbWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoKmdyb3VwKTsKJiM0MzsJCSpncm91cCA9IE5VTEw7CiAJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKQomIzQzO3sKJiM0MzsJKmNvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShkZXYsIGZhbHNlKTsKJiM0MzsJaWYgKElTX0VSUigqY291bnRlcikpIHsKJiM0MzsJCWludCBlcnIgPSBQVFJfRVJSKCpjb3VudGVyKTsKJiM0MzsKJiM0MzsJCSpjb3VudGVyID0gTlVMTDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogCi0JaWYgKHJ4X2Vyci0mZ3Q7Y29weV9tb2RpZnlfaGRyKSB7Ci0JCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCByeF9lcnItJmd0O2NvcHlfbW9kaWZ5X2hkcik7Ci0JCXJ4X2Vyci0mZ3Q7Y29weV9tb2RpZnlfaGRyID0gTlVMTDsKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsCiYjNDM7CQkJCQkgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKQomIzQzO3sKJiM0MzsJaWYgKCpjb3VudGVyKSB7CiYjNDM7CQltbHg1X2ZjX2Rlc3Ryb3koZGV2LCAqY291bnRlcik7CiYjNDM7CQkqY291bnRlciA9IE5VTEw7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCi0JCQkJCSAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpCiYjNDM7c3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkmIzQzOyYjNDM7KQomIzQzOwkJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtyeC0mZ3Q7dWRwX3J1bGVzW2ldKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtyeC0mZ3Q7bWlzc19ydWxlKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cCgmYW1wO3J4LSZndDttaXNzX2dyb3VwKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoJmFtcDtyeC0mZ3Q7ZnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpCiB7Ci0JYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZWxfcnVsZXMoZnMsIHJ4X2Vycik7CiYjNDM7CXN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtJmd0O21kZXY7CiYjNDM7CU1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlOwomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiYjNDM7CWludCBpLCBlcnIgPSAwOwomIzQzOwomIzQzOwlzcGVjID0ga3phbGxvY19vYmooKnNwZWMpOwomIzQzOwlpZiAoIXNwZWMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZnRfYXR0ci5tYXhfZnRlID0gMSAmIzQzOyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOwomIzQzOwlmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMOwomIzQzOwlmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTzsKJiM0MzsJZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7cngtJmd0O2Z0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmdCBlcnI9JWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwomIzQzOwl9CiAKLQlpZiAocnhfZXJyLSZndDtmdCkgewotCQltbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShyeF9lcnItJmd0O2Z0KTsKLQkJcnhfZXJyLSZndDtmdCA9IE5VTEw7CiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChyeC0mZ3Q7ZnQsICZhbXA7cngtJmd0O21pc3NfZ3JvdXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwogCX0KJiM0MzsKJiM0MzsJLyogQWRkIG1pc3MgcnVsZSAqLwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1QgfAomIzQzOwkJTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwomIzQzOwlmbG93X2FjdC5mbGFncyA9IEZMT1dfQUNUX0lHTk9SRV9GTE9XX0xFVkVMOwomIzQzOwlkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwomIzQzOwlkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTsKJiM0MzsJZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKJiM0MzsJZGVzdFsxXS5jb3VudGVyID0gZnMtJmd0O3J4X2NvdW50ZXI7CiYjNDM7CXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4LSZndDtmdCwgTlVMTCwgJmFtcDtmbG93X2FjdCwgZGVzdCwgMik7CiYjNDM7CWlmIChJU19FUlIocnVsZSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIocnVsZSk7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IHJ1bGUsIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgZXJyKTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKJiM0MzsJfQomIzQzOwlyeC0mZ3Q7bWlzc19ydWxlID0gcnVsZTsKJiM0MzsKJiM0MzsJLyogQWRkIFVEUCB2NC92NiBydWxlcyAqLwomIzQzOwlzcGVjLSZndDttYXRjaF9jcml0ZXJpYV9lbmFibGUgPSBNTFg1X01BVENIX09VVEVSX0hFQURFUlM7CiYjNDM7CU1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3BhcmFtLCBzcGVjLSZndDttYXRjaF9jcml0ZXJpYSwKJiM0MzsJCQkgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uKTsKJiM0MzsJTUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtJmd0O21hdGNoX2NyaXRlcmlhLAomIzQzOwkJCSBpcF9wcm90b2NvbCk7CiYjNDM7CU1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy0mZ3Q7bWF0Y2hfdmFsdWUsIGlwX3Byb3RvY29sLAomIzQzOwkJIElQUFJPVE9fVURQKTsKJiM0MzsJZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKJiM0MzsJCU1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDsKJiM0MzsJZmxvd19hY3QuZmxhZ3MgPSAwOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWludCB2ZXJzaW9uID0gaSA9PSBBQ0NFTF9GU19QU1A0ID8gNCA6IDY7CiYjNDM7CiYjNDM7CQlNTFg1X1NFVChmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtJmd0O21hdGNoX3ZhbHVlLAomIzQzOwkJCSBvdXRlcl9oZWFkZXJzLmlwX3ZlcnNpb24sIHZlcnNpb24pOwomIzQzOwkJZGVzdFswXSA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKJiM0MzsJCWRlc3RbMV0uY291bnRlciA9IGZzLSZndDtyeF9jb3VudGVyOwomIzQzOwkJcnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocngtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZXN0LAomIzQzOwkJCQkJICAgMik7CiYjNDM7CQlpZiAoSVNfRVJSKHJ1bGUpKSB7CiYjNDM7CQkJZXJyID0gUFRSX0VSUihydWxlKTsKJiM0MzsJCQltbHg1X2NvcmVfZXJyKG1kZXYsCiYjNDM7CQkJCSAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IFVEUCVkIHJ1bGUgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkJICAgICAgdmVyc2lvbiwgZXJyKTsKJiM0MzsJCQlnb3RvIG91dF9lcnI7CiYjNDM7CQl9CiYjNDM7CQlyeC0mZ3Q7dWRwX3J1bGVzW2ldID0gcnVsZTsKJiM0MzsJfQomIzQzOwlnb3RvIG91dF9zcGVjOwomIzQzOwomIzQzO291dF9lcnI6CiYjNDM7CWFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTsKJiM0MztvdXRfc3BlYzoKJiM0MzsJa3ZmcmVlKHNwZWMpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMKJiM0Mzt2b2lkIGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgKmNoZWNrKQomIzQzO3sKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtjaGVjay0mZ3Q7YmFkX3J1bGUpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZSgmYW1wO2NoZWNrLSZndDtlcnJfcnVsZSk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKCZhbXA7Y2hlY2stJmd0O2F1dGhfZmFpbF9ydWxlKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtjaGVjay0mZ3Q7cnVsZSk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoJmFtcDtjaGVjay0mZ3Q7ZHJvcF9ncm91cCk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KCZhbXA7Y2hlY2stJmd0O2Z0KTsKIH0KIAogc3RhdGljIHZvaWQgYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYywKQEAgLTEyOSwxNSAmIzQzOzI4NiwzNSBAQCBzdGF0aWMgdm9pZCBhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLAogCU1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbWlzYzIsIG1pc2NfcGFyYW1zXzIsIHBzcF9zeW5kcm9tZSwgc3luZHJvbWUpOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9lcnJfYWRkX3J1bGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCi0JCQkJCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdCwKLQkJCQkJc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycikKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LAomIzQzOwkJCQkgICBzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsCiYjNDM7CQkJCSAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLAomIzQzOwkJCQkgICBzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpCiB7Ci0JdTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTsKJiM0MzsJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307CiYjNDM7CXN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8CiYjNDM7CQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7CiYjNDM7CWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7CiYjNDM7CWRlc3QuY291bnRlciA9IGNvdW50ZXI7CiYjNDM7CSpydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKJiM0MzsJaWYgKElTX0VSUigqcnVsZSkpIHsKJiM0MzsJCWVyciA9IFBUUl9FUlIoKnJ1bGUpOwomIzQzOwkJKnJ1bGUgPSBOVUxMOwomIzQzOwl9CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYwomIzQzO2ludCBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAomIzQzOwkJCQkgICAgc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9OwomIzQzOwlzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLSZndDttZGV2OwotCXN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdFsyXTsKIAlzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9OwotCXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmZ0ZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7CiAJaW50IGVyciA9IDA7CkBAIC0xNDYsMTc0ICYjNDM7MzIzLDk3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogQWN0aW9uIHRvIGNvcHkgNyBiaXQgcHNwX3N5bmRyb21lIHRvIHJlZ0JbMjM6MjldICovCi0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfQ09QWSk7Ci0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfU1lORFJPTUUpOwotCU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19vZmZzZXQsIDApOwotCU1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGxlbmd0aCwgNyk7Ci0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7Ci0JTUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMjMpOwomIzQzOwlmdF9hdHRyLm1heF9mdGUgPSA0OwomIzQzOwlmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7CiYjNDM7CWZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMjsKJiM0MzsJZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUw7CiYjNDM7CWZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7Y2hlY2stJmd0O2Z0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2Vycihmcy0mZ3Q7bWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBmdCBlcnI9JWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwomIzQzOwl9CiAKLQltb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLAotCQkJCQkgICAgICAxLCBhY3Rpb24pOwotCWlmIChJU19FUlIobW9kaWZ5X2hkcikpIHsKLQkJZXJyID0gUFRSX0VSUihtb2RpZnlfaGRyKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LAotCQkJICAgICAgJiMzNDtmYWlsIHRvIGFsbG9jIHBzcCBjb3B5IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXG4mIzM0OywgZXJyKTsKLQkJZ290byBvdXRfc3BlYzsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGNoZWNrLSZndDtmdCwgJmFtcDtjaGVjay0mZ3Q7ZHJvcF9ncm91cCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1seDVfY29yZV9lcnIoZnMtJmd0O21kZXYsCiYjNDM7CQkJICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggY2hlY2sgZHJvcCBncm91cCBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQogCiAJYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9PSyk7CiAJLyogY3JlYXRlIGZ0ZSAqLwotCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwotCWZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyOwotCWRlc3RbMF0udHlwZSA9IGZzX3Byb3QtJmd0O2RlZmF1bHRfZGVzdC50eXBlOwotCWRlc3RbMF0uZnQgPSBmc19wcm90LSZndDtkZWZhdWx0X2Rlc3QuZnQ7Ci0JZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKLQlkZXN0WzFdLmNvdW50ZXIgPSBmcy0mZ3Q7cnhfZnMtJmd0O3J4X2NvdW50ZXI7Ci0JZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZXN0LCAyKTsKJiM0MzsJZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUOwomIzQzOwlkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwomIzQzOwlkZXN0LmZ0ID0gZnMtJmd0O3J4LmZ0OwomIzQzOwlmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGNoZWNrLSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKIAlpZiAoSVNfRVJSKGZ0ZSkpIHsKIAkJZXJyID0gUFRSX0VSUihmdGUpOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGVyciBjb3B5IHJ1bGUgZXJyPSVkXG4mIzM0OywgZXJyKTsKLQkJZ290byBvdXQ7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIG9rIHJ1bGUgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwomIzQzOwkJZ290byBvdXRfZXJyOwogCX0KLQlyeF9lcnItJmd0O3J1bGUgPSBmdGU7CiYjNDM7CWNoZWNrLSZndDtydWxlID0gZnRlOwogCiAJLyogYWRkIGF1dGggZmFpbCBkcm9wIHJ1bGUgKi8KIAltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7Ci0JbWVtc2V0KCZhbXA7Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpOwogCWFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfSUNWX0ZBSUwpOwotCS8qIGNyZWF0ZSBmdGUgKi8KLQlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8Ci0JCQkgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDsKLQlkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSOwotCWRlc3RbMF0uY291bnRlciA9IGZzLSZndDtyeF9mcy0mZ3Q7cnhfYXV0aF9mYWlsX2NvdW50ZXI7Ci0JZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZXN0LCAxKTsKLQlpZiAoSVNfRVJSKGZ0ZSkpIHsKLQkJZXJyID0gUFRSX0VSUihmdGUpOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXG4mIzM0OywKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoY2hlY2stJmd0O2Z0LCBzcGVjLAomIzQzOwkJCQkgICAgICBmcy0mZ3Q7cnhfYXV0aF9mYWlsX2NvdW50ZXIsCiYjNDM7CQkJCSAgICAgICZhbXA7Y2hlY2stJmd0O2F1dGhfZmFpbF9ydWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbWx4NV9jb3JlX2VycihtZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXG4mIzM0OywKIAkJCSAgICAgIGVycik7Ci0JCWdvdG8gb3V0X2Ryb3BfcnVsZTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKIAl9Ci0JcnhfZXJyLSZndDthdXRoX2ZhaWxfcnVsZSA9IGZ0ZTsKIAogCS8qIGFkZCBmcmFtaW5nIGRyb3AgcnVsZSAqLwogCW1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTsKLQltZW1zZXQoJmFtcDtmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7CiAJYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9CQURfVFJBSUxFUik7Ci0JLyogY3JlYXRlIGZ0ZSAqLwotCWZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHwKLQkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwotCWRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7Ci0JZGVzdFswXS5jb3VudGVyID0gZnMtJmd0O3J4X2ZzLSZndDtyeF9lcnJfY291bnRlcjsKLQlmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7ZnQsIHNwZWMsICZhbXA7Zmxvd19hY3QsIGRlc3QsIDEpOwotCWlmIChJU19FUlIoZnRlKSkgewotCQllcnIgPSBQVFJfRVJSKGZ0ZSk7Ci0JCW1seDVfY29yZV9lcnIobWRldiwgJiMzNDtmYWlsIHRvIGFkZCBwc3AgcnggZnJhbWluZyBlcnIgZHJvcCBydWxlIGVycj0lZFxuJiMzNDssCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLSZndDtmdCwgc3BlYywgZnMtJmd0O3J4X2Vycl9jb3VudGVyLAomIzQzOwkJCQkgICAgICAmYW1wO2NoZWNrLSZndDtlcnJfcnVsZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBmcmFtaW5nIGRyb3AgcnVsZSBlcnI9JWRcbiYjMzQ7LAogCQkJICAgICAgZXJyKTsKLQkJZ290byBvdXRfZHJvcF9hdXRoX2ZhaWxfcnVsZTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKIAl9Ci0JcnhfZXJyLSZndDtlcnJfcnVsZSA9IGZ0ZTsKIAogCS8qIGFkZCBtaXNjLiBlcnJvcnMgZHJvcCBydWxlICovCiAJbWVtc2V0KHNwZWMsIDAsIHNpemVvZigqc3BlYykpOwotCW1lbXNldCgmYW1wO2Zsb3dfYWN0LCAwLCBzaXplb2YoZmxvd19hY3QpKTsKLQkvKiBjcmVhdGUgZnRlICovCi0JZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfAotCQkJICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7Ci0JZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjsKLQlkZXN0WzBdLmNvdW50ZXIgPSBmcy0mZ3Q7cnhfZnMtJmd0O3J4X2JhZF9jb3VudGVyOwotCWZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgZGVzdCwgMSk7Ci0JaWYgKElTX0VSUihmdGUpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZnRlKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBtaXNjLiBlcnIgZHJvcCBydWxlIGVycj0lZFxuJiMzNDssCiYjNDM7CWVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLSZndDtmdCwgc3BlYywgZnMtJmd0O3J4X2JhZF9jb3VudGVyLAomIzQzOwkJCQkgICAgICAmYW1wO2NoZWNrLSZndDtiYWRfcnVsZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBtaXNjLiBlcnIgZHJvcCBydWxlIGVycj0lZFxuJiMzNDssCiAJCQkgICAgICBlcnIpOwotCQlnb3RvIG91dF9kcm9wX2Vycm9yX3J1bGU7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQotCXJ4X2Vyci0mZ3Q7YmFkX3J1bGUgPSBmdGU7Ci0KLQlyeF9lcnItJmd0O2NvcHlfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiAKIAlnb3RvIG91dF9zcGVjOwogCi1vdXRfZHJvcF9lcnJvcl9ydWxlOgotCW1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLSZndDtlcnJfcnVsZSk7Ci0JcnhfZXJyLSZndDtlcnJfcnVsZSA9IE5VTEw7Ci1vdXRfZHJvcF9hdXRoX2ZhaWxfcnVsZToKLQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7YXV0aF9mYWlsX3J1bGUpOwotCXJ4X2Vyci0mZ3Q7YXV0aF9mYWlsX3J1bGUgPSBOVUxMOwotb3V0X2Ryb3BfcnVsZToKLQltbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci0mZ3Q7cnVsZSk7Ci0JcnhfZXJyLSZndDtydWxlID0gTlVMTDsKLW91dDoKLQltbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhtZGV2LCBtb2RpZnlfaGRyKTsKJiM0MztvdXRfZXJyOgomIzQzOwlhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShjaGVjayk7CiBvdXRfc3BlYzoKIAlrZnJlZShzcGVjKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9lcnJfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLAotCQkJCQkgc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90LAotCQkJCQkgc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycikKJiM0MztzdGF0aWMgdm9pZAomIzQzO2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdCkKIHsKLQlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtJmd0O2ZzLCBmYWxzZSk7Ci0Jc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKLQlzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDsKLQlpbnQgZXJyOwotCi0JZnRfYXR0ci5tYXhfZnRlID0gMjsKLQlmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDI7Ci0JZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9FUlJfTEVWRUw7IC8vIE1MWDVFX0FDQ0VMX0ZTX1RDUF9GVF9MRVZFTAotCWZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPOwotCWZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsICZhbXA7ZnRfYXR0cik7Ci0JaWYgKElTX0VSUihmdCkpIHsKLQkJZXJyID0gUFRSX0VSUihmdCk7Ci0JCW1seDVfY29yZV9lcnIoZnMtJmd0O21kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGlubGluZSBmdCBlcnI9JWRcbiYjMzQ7LCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCXJ4X2Vyci0mZ3Q7ZnQgPSBmdDsKLQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKGZzLCBmc19wcm90LCByeF9lcnIpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2VycjsKLQotCXJldHVybiAwOwotCi1vdXRfZXJyOgotCW1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZ0KTsKLQlyeF9lcnItJmd0O2Z0ID0gTlVMTDsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKLQkJCQkgICAgICAgc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90KQotewotCWlmIChmc19wcm90LSZndDtkZWZfcnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtJmd0O2RlZl9ydWxlKTsKLQkJZnNfcHJvdC0mZ3Q7ZGVmX3J1bGUgPSBOVUxMOwotCX0KLQotCWlmIChmc19wcm90LSZndDtyeF9tb2RpZnlfaGRyKSB7Ci0JCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCBmc19wcm90LSZndDtyeF9tb2RpZnlfaGRyKTsKLQkJZnNfcHJvdC0mZ3Q7cnhfbW9kaWZ5X2hkciA9IE5VTEw7Ci0JfQotCi0JaWYgKGZzX3Byb3QtJmd0O21pc3NfcnVsZSkgewotCQltbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtJmd0O21pc3NfcnVsZSk7Ci0JCWZzX3Byb3QtJmd0O21pc3NfcnVsZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGZzX3Byb3QtJmd0O21pc3NfZ3JvdXApIHsKLQkJbWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoZnNfcHJvdC0mZ3Q7bWlzc19ncm91cCk7Ci0JCWZzX3Byb3QtJmd0O21pc3NfZ3JvdXAgPSBOVUxMOwotCX0KLQotCWlmIChmc19wcm90LSZndDtmdCkgewotCQltbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShmc19wcm90LSZndDtmdCk7Ci0JCWZzX3Byb3QtJmd0O2Z0ID0gTlVMTDsKJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtkZWNyeXB0LSZndDtydWxlKTsKJiM0MzsJaWYgKGRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIpIHsKJiM0MzsJCW1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLSZndDttZGV2LCBkZWNyeXB0LSZndDtyeF9tb2RpZnlfaGRyKTsKJiM0MzsJCWRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIgPSBOVUxMOwogCX0KJiM0MzsJYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoJmFtcDtkZWNyeXB0LSZndDttaXNzX3J1bGUpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKCZhbXA7ZGVjcnlwdC0mZ3Q7bWlzc19ncm91cCk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KCZhbXA7ZGVjcnlwdC0mZ3Q7ZnQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydCkKQEAgLTMyNSw3MCAmIzQzOzQyNSw2NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydCkKIAlNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtJmd0O21hdGNoX3ZhbHVlLCBpcF9wcm90b2NvbCwgSVBQUk9UT19VRFApOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCi0JCQkJICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpCiYjNDM7c3RhdGljIGludAomIzQzO2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKJiM0MzsJCQkJICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQsCiYjNDM7CQkJCSAgc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiAqZGVmYXVsdF9kZXN0KQogewotCXN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucyA9IG1seDVlX2ZzX2dldF9ucyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKIAl1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9OwotCWludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pOwogCXN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHIgPSBOVUxMOwogCXN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307CiAJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307CiAJc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy0mZ3Q7bWRldjsKLQlzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwOwogCU1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7CiAJc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7CiAJc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjOwotCXN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0OwotCXUzMiAqZmxvd19ncm91cF9pbjsKIAlpbnQgZXJyID0gMDsKIAotCWZsb3dfZ3JvdXBfaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7CiAJc3BlYyA9IGt2emFsbG9jX29iaigqc3BlYyk7Ci0JaWYgKCFmbG93X2dyb3VwX2luIHx8ICFzcGVjKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJaWYgKCFzcGVjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBDcmVhdGUgRlQgKi8KIAlmdF9hdHRyLm1heF9mdGUgPSAyOwotCWZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUw7Ci0JZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87CiYjNDM7CWZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUw7CiAJZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxOwogCWZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMTsKLQlmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCAmYW1wO2Z0X2F0dHIpOwotCWlmIChJU19FUlIoZnQpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZnQpOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxuJiMzNDssIGVycik7CiYjNDM7CWZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCAmYW1wO2Z0X2F0dHIsICZhbXA7ZGVjcnlwdC0mZ3Q7ZnQpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgZnQgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQotCWZzX3Byb3QtJmd0O2Z0ID0gZnQ7CiAKIAkvKiBDcmVhdGUgbWlzc19ncm91cCAqLwotCU1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBzdGFydF9mbG93X2luZGV4LCBmdC0mZ3Q7bWF4X2Z0ZSAtIDEpOwotCU1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBlbmRfZmxvd19pbmRleCwgZnQtJmd0O21heF9mdGUgLSAxKTsKLQltaXNzX2dyb3VwID0gbWx4NV9jcmVhdGVfZmxvd19ncm91cChmdCwgZmxvd19ncm91cF9pbik7Ci0JaWYgKElTX0VSUihtaXNzX2dyb3VwKSkgewotCQllcnIgPSBQVFJfRVJSKG1pc3NfZ3JvdXApOwotCQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXG4mIzM0OywgZXJyKTsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGRlY3J5cHQtJmd0O2Z0LCAmYW1wO2RlY3J5cHQtJmd0O21pc3NfZ3JvdXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsCiYjNDM7CQkJICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZGVjcnlwdCBtaXNzX2dyb3VwIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgZXJyKTsKIAkJZ290byBvdXRfZXJyOwogCX0KLQlmc19wcm90LSZndDttaXNzX2dyb3VwID0gbWlzc19ncm91cDsKIAogCS8qIENyZWF0ZSBtaXNzIHJ1bGUgKi8KLQlydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtmc19wcm90LSZndDtkZWZhdWx0X2Rlc3QsIDEpOwomIzQzOwlmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7CiYjNDM7CXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCBkZWZhdWx0X2Rlc3QsCiYjNDM7CQkJCSAgIDEpOwogCWlmIChJU19FUlIocnVsZSkpIHsKIAkJZXJyID0gUFRSX0VSUihydWxlKTsKLQkJbWx4NV9jb3JlX2VycihtZGV2LCAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX3J1bGUgZXJyPSVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCW1seDVfY29yZV9lcnIobWRldiwKJiM0MzsJCQkgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfcnVsZSBlcnI9JWRcbiYjMzQ7LAomIzQzOwkJCSAgICAgIGVycik7CiAJCWdvdG8gb3V0X2VycjsKIAl9Ci0JZnNfcHJvdC0mZ3Q7bWlzc19ydWxlID0gcnVsZTsKJiM0MzsJZGVjcnlwdC0mZ3Q7bWlzc19ydWxlID0gcnVsZTsKIAotCS8qIEFkZCBkZWZhdWx0IFJ4IHBzcCBydWxlICovCiYjNDM7CS8qIEFkZCBQU1AgUlggZGVjcnlwdCBydWxlICovCiAJc2V0dXBfZnRlX3VkcF9wc3Aoc3BlYywgUFNQX0RFRkFVTFRfVURQX1BPUlQpOwogCWZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQOwogCS8qIFNldCBiaXRbMzEsIDMwXSBQU1AgbWFya2VyICovCi0JLyogU2V0IGJpdFsyOS0yM10gcHNwX3N5bmRyb21lIGlzIHNldCBpbiBlcnJvciBGVCAqLwogI2RlZmluZSBNTFg1RV9QU1BfTUFSS0VSX0JJVCAoQklUKDMwKSB8IEJJVCgzMSkpCiAJTUxYNV9TRVQoc2V0X2FjdGlvbl9pbiwgYWN0aW9uLCBhY3Rpb25fdHlwZSwgTUxYNV9BQ1RJT05fVFlQRV9TRVQpOwogCU1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTsKQEAgLTQwMywyNzUgJiM0Mzs0OTcsMTU5IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKIAkJbW9kaWZ5X2hkciA9IE5VTEw7CiAJCWdvdG8gb3V0X2VycjsKIAl9Ci0JZnNfcHJvdC0mZ3Q7cnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiYjNDM7CWRlY3J5cHQtJmd0O3J4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyOwogCiAJZmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHwKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19ERUNSWVBUIHwKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFI7CiAJZmxvd19hY3QubW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7CiAJZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTsKLQlkZXN0LmZ0ID0gZnNfcHJvdC0mZ3Q7cnhfZXJyLmZ0OwotCXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZzX3Byb3QtJmd0O2Z0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCAmYW1wO2Rlc3QsIDEpOwomIzQzOwlkZXN0LmZ0ID0gZnMtJmd0O2NoZWNrLmZ0OwomIzQzOwlydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LSZndDtmdCwgc3BlYywgJmFtcDtmbG93X2FjdCwgJmFtcDtkZXN0LCAxKTsKIAlpZiAoSVNfRVJSKHJ1bGUpKSB7CiAJCWVyciA9IFBUUl9FUlIocnVsZSk7Ci0JCW1seDVfY29yZV9lcnIobWRldiwKLQkJCSAgICAgICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxuJiMzNDssCi0JCQkgICAgICBlcnIsIGZsb3dfYWN0LmFjdGlvbik7CiYjNDM7CQltbHg1X2NvcmVfZXJyKG1kZXYsICYjMzQ7ZmFpbCB0byBhZGQgcHNwIHJ4IGRlY3J5cHQgcnVsZSwgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICBlcnIpOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCi0JZnNfcHJvdC0mZ3Q7ZGVmX3J1bGUgPSBydWxlOwotCWdvdG8gb3V0OwomIzQzOwlkZWNyeXB0LSZndDtydWxlID0gcnVsZTsKJiM0MzsJZ290byBvdXRfc3BlYzsKIAogb3V0X2VycjoKLQlhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShmcywgZnNfcHJvdCk7Ci1vdXQ6Ci0Ja3ZmcmVlKGZsb3dfZ3JvdXBfaW4pOwomIzQzOwlhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KGZzLCBkZWNyeXB0KTsKJiM0MztvdXRfc3BlYzoKIAlrdmZyZWUoc3BlYyk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKQomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogewotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7Ci0KLQlhY2NlbF9wc3AgPSBmcy0mZ3Q7cnhfZnM7Ci0KLQkvKiBUaGUgbmV0ZGV2IHVucmVnIGFscmVhZHkgaGFwcGVuZWQsIHNvIGFsbCBvZmZsb2FkZWQgcnVsZSBhcmUgYWxyZWFkeSByZW1vdmVkICovCi0JZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W3R5cGVdOwotCi0JYWNjZWxfcHNwX2ZzX3J4X2ZzX2Rlc3Ryb3koZnMsIGZzX3Byb3QpOwotCi0JYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KGZzLCAmYW1wO2ZzX3Byb3QtJmd0O3J4X2Vycik7CiYjNDM7CXN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKJiM0MzsJaW50IGk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJLyogZGlzY29ubmVjdCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgJmFtcDtmcy0mZ3Q7ZGVjcnlwdFtpXSk7CiYjNDM7CX0KJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7Y2hlY2spOwomIzQzOwlhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveSgmYW1wO2ZzLSZndDtyeCk7CiB9CiAKLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKQomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywKJiM0MzsJCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJc3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGMgPSBtbHg1ZV9mc19nZXRfdHRjKGZzLSZndDtmcywgZmFsc2UpOwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7Ci0JaW50IGVycjsKLQotCWFjY2VsX3BzcCA9IGZzLSZndDtyeF9mczsKLQlmc19wcm90ID0gJmFtcDthY2NlbF9wc3AtJmd0O2ZzX3Byb3RbdHlwZV07CiYjNDM7CWludCBpLCBlcnI7CiAKLQlmc19wcm90LSZndDtkZWZhdWx0X2Rlc3QgPSBtbHg1X3R0Y19nZXRfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KHR5cGUpKTsKLQotCWVyciA9IGFjY2VsX3BzcF9mc19yeF9lcnJfY3JlYXRlX2Z0KGZzLCBmc19wcm90LCAmYW1wO2ZzX3Byb3QtJmd0O3J4X2Vycik7Ci0JaWYgKGVycikKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Z0X2NyZWF0ZShmcywgJmFtcDtmcy0mZ3Q7cngpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIHN0ZWVyaW5nIHRhYmxlJiMzNDspOwogCQlyZXR1cm4gZXJyOwomIzQzOwl9CiAKLQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTsKLQlpZiAoZXJyKQotCQlhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoZnMsICZhbXA7ZnNfcHJvdC0mZ3Q7cnhfZXJyKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKQotewotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDsKLQlzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7Ci0Jc3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGM7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoIWZzIHx8ICFmcy0mZ3Q7cnhfZnMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy0mZ3Q7ZnMsIGZhbHNlKTsKLQlhY2NlbF9wc3AgPSBmcy0mZ3Q7cnhfZnM7Ci0JZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W3R5cGVdOwotCW11dGV4X2xvY2soJmFtcDtmc19wcm90LSZndDtwcm90X211dGV4KTsKLQlpZiAoZnNfcHJvdC0mZ3Q7cmVmY250JiM0MzsmIzQzOykKLQkJZ290byBvdXQ7Ci0KLQkvKiBjcmVhdGUgRlQgKi8KLQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKGZzLCB0eXBlKTsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShmcywgJmFtcDtmcy0mZ3Q7Y2hlY2spOwogCWlmIChlcnIpIHsKLQkJZnNfcHJvdC0mZ3Q7cmVmY250LS07Ci0JCWdvdG8gb3V0OwomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O0ZhaWxlZCBjcmVhdGluZyBSWCBjaGVjayBzdGVlcmluZyB0YWJsZSYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX2Z0OwogCX0KIAotCS8qIGNvbm5lY3QgKi8KLQlkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFOwotCWRlc3QuZnQgPSBmc19wcm90LSZndDtmdDsKLQltbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSwgJmFtcDtkZXN0KTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmYW1wO2ZzX3Byb3QtJmd0O3Byb3RfbXV0ZXgpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtJmd0O2ZzLCBmYWxzZSk7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90OwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDsKLQotCWFjY2VsX3BzcCA9IGZzLSZndDtyeF9mczsKLQlmc19wcm90ID0gJmFtcDthY2NlbF9wc3AtJmd0O2ZzX3Byb3RbdHlwZV07Ci0JbXV0ZXhfbG9jaygmYW1wO2ZzX3Byb3QtJmd0O3Byb3RfbXV0ZXgpOwotCWlmICgtLWZzX3Byb3QtJmd0O3JlZmNudCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBkaXNjb25uZWN0ICovCi0JbWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0OwomIzQzOwomIzQzOwkJZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKGZzLCAmYW1wO2ZzLSZndDtkZWNyeXB0W2ldLAomIzQzOwkJCQkJCQkmYW1wO2Rlc3QpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7RmFpbGVkIGNyZWF0aW5nIFJYIGRlY3J5cHQgc3RlZXJpbmcgdGFibGUmIzM0Oyk7CiYjNDM7CQkJZ290byBlcnJfZGVjcnlwdF9mdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7CiYjNDM7CQlkZXN0LmZ0ID0gZnMtJmd0O2RlY3J5cHRbaV0uZnQ7CiYjNDM7CQltbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSwgJmFtcDtkZXN0KTsKJiM0MzsJfQogCi0JLyogcmVtb3ZlIEZUICovCi0JYWNjZWxfcHNwX2ZzX3J4X2Rlc3Ryb3koZnMsIHR5cGUpOwomIzQzOwlyZXR1cm4gMDsKIAotb3V0OgotCW11dGV4X3VubG9jaygmYW1wO2ZzX3Byb3QtJmd0O3Byb3RfbXV0ZXgpOwomIzQzO2Vycl9kZWNyeXB0X2Z0OgomIzQzOwl3aGlsZSAoLS1pICZndDs9IDApIHsKJiM0MzsJCW1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpOwomIzQzOwkJYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgJmFtcDtmcy0mZ3Q7ZGVjcnlwdFtpXSk7CiYjNDM7CX0KJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7Y2hlY2spOwomIzQzO2Vycl9mdDoKJiM0MzsJYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koJmFtcDtmcy0mZ3Q7cngpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIHsKLQlzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwOwotCWVudW0gYWNjZWxfZnNfcHNwX3R5cGUgaTsKLQotCWlmICghZnMtJmd0O3J4X2ZzKQotCQlyZXR1cm47Ci0KLQlhY2NlbF9wc3AgPSBmcy0mZ3Q7cnhfZnM7Ci0JbWx4NV9mY19kZXN0cm95KGZzLSZndDttZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2JhZF9jb3VudGVyKTsKLQltbHg1X2ZjX2Rlc3Ryb3koZnMtJmd0O21kZXYsIGFjY2VsX3BzcC0mZ3Q7cnhfZXJyX2NvdW50ZXIpOwotCW1seDVfZmNfZGVzdHJveShmcy0mZ3Q7bWRldiwgYWNjZWxfcHNwLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcik7Ci0JbWx4NV9mY19kZXN0cm95KGZzLSZndDttZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIpOwotCWZvciAoaSA9IDA7IGkgJmx0OyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykgewotCQlmc19wcm90ID0gJmFtcDthY2NlbF9wc3AtJmd0O2ZzX3Byb3RbaV07Ci0JCW11dGV4X2Rlc3Ryb3koJmFtcDtmc19wcm90LSZndDtwcm90X211dGV4KTsKLQkJV0FSTl9PTihmc19wcm90LSZndDtyZWZjbnQpOwotCX0KLQlrZnJlZShmcy0mZ3Q7cnhfZnMpOwotCWZzLSZndDtyeF9mcyA9IE5VTEw7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtJmd0O21kZXYsICZhbXA7ZnMtJmd0O3J4X2JhZF9jb3VudGVyKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy0mZ3Q7bWRldiwgJmFtcDtmcy0mZ3Q7cnhfZXJyX2NvdW50ZXIpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLSZndDttZGV2LCAmYW1wO2ZzLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcik7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtJmd0O21kZXYsICZhbXA7ZnMtJmd0O3J4X2NvdW50ZXIpOwogfQogCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19pbml0X3J4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpCiB7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90OwotCXN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLSZndDttZGV2OwotCXN0cnVjdCBtbHg1X2ZjICpmbG93X2NvdW50ZXI7Ci0JZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpOwogCWludCBlcnI7CiAKLQlhY2NlbF9wc3AgPSBremFsbG9jX29iaigqYWNjZWxfcHNwKTsKLQlpZiAoIWFjY2VsX3BzcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKLQkJZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W2ldOwotCQltdXRleF9pbml0KCZhbXA7ZnNfcHJvdC0mZ3Q7cHJvdF9tdXRleCk7Ci0JfQotCi0JZmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpOwotCWlmIChJU19FUlIoZmxvd19jb3VudGVyKSkgewomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgJmFtcDtmcy0mZ3Q7cnhfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmbG93IGNvdW50ZXIgZXJyPSVwZVxuJiMzNDssCi0JCQkgICAgICAgZmxvd19jb3VudGVyKTsKLQkJZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpOwomIzQzOwkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBmbG93IGNvdW50ZXIgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZXJyKTsKIAkJZ290byBvdXRfZXJyOwogCX0KLQlhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7CiAKLQlmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7Ci0JaWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7CiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCAmYW1wO2ZzLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBhdXRoIGZhaWwgZmxvdyBjb3VudGVyIGVycj0lcGVcbiYjMzQ7LAotCQkJICAgICAgIGZsb3dfY291bnRlcik7Ci0JCWVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTsKLQkJZ290byBvdXRfY291bnRlcl9lcnI7CiYjNDM7CQkJICAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZXJyKTsKJiM0MzsJCWdvdG8gb3V0X2VycjsKIAl9Ci0JYWNjZWxfcHNwLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlciA9IGZsb3dfY291bnRlcjsKIAotCWZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTsKLQlpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsICZhbXA7ZnMtJmd0O3J4X2Vycl9jb3VudGVyKTsKJiM0MzsJaWYgKGVycikgewogCQltbHg1X2NvcmVfd2FybihtZGV2LAotCQkJICAgICAgICYjMzQ7ZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGVycm9yIGZsb3cgY291bnRlciBlcnI9JXBlXG4mIzM0OywKLQkJCSAgICAgICBmbG93X2NvdW50ZXIpOwotCQllcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7Ci0JCWdvdG8gb3V0X2F1dGhfZmFpbF9jb3VudGVyX2VycjsKJiM0MzsJCQkgICAgICAgJiMzNDtmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQotCWFjY2VsX3BzcC0mZ3Q7cnhfZXJyX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7CiAKLQlmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7Ci0JaWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7CiYjNDM7CWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCAmYW1wO2ZzLSZndDtyeF9iYWRfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lcGVcbiYjMzQ7LAotCQkJICAgICAgIGZsb3dfY291bnRlcik7Ci0JCWVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTsKLQkJZ290byBvdXRfZXJyX2NvdW50ZXJfZXJyOwomIzQzOwkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lZFxuJiMzNDssCiYjNDM7CQkJICAgICAgIGVycik7CiYjNDM7CQlnb3RvIG91dF9lcnI7CiAJfQotCWFjY2VsX3BzcC0mZ3Q7cnhfYmFkX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7Ci0KLQlmcy0mZ3Q7cnhfZnMgPSBhY2NlbF9wc3A7CiAKIAlyZXR1cm4gMDsKIAotb3V0X2Vycl9jb3VudGVyX2VycjoKLQltbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLSZndDtyeF9lcnJfY291bnRlcik7Ci0JYWNjZWxfcHNwLSZndDtyeF9lcnJfY291bnRlciA9IE5VTEw7Ci1vdXRfYXV0aF9mYWlsX2NvdW50ZXJfZXJyOgotCW1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2F1dGhfZmFpbF9jb3VudGVyKTsKLQlhY2NlbF9wc3AtJmd0O3J4X2F1dGhfZmFpbF9jb3VudGVyID0gTlVMTDsKLW91dF9jb3VudGVyX2VycjoKLQltbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLSZndDtyeF9jb3VudGVyKTsKLQlhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIgPSBOVUxMOwogb3V0X2VycjoKLQlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspIHsKLQkJZnNfcHJvdCA9ICZhbXA7YWNjZWxfcHNwLSZndDtmc19wcm90W2ldOwotCQltdXRleF9kZXN0cm95KCZhbXA7ZnNfcHJvdC0mZ3Q7cHJvdF9tdXRleCk7Ci0JfQotCWtmcmVlKGFjY2VsX3BzcCk7Ci0JZnMtJmd0O3J4X2ZzID0gTlVMTDsKLQomIzQzOwlhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChmcyk7CiAJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIHsKLQlpbnQgaTsKLQogCWlmICghcHJpdi0mZ3Q7cHNwKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSYjNDM7JiM0MzspCi0JCWFjY2VsX3BzcF9mc19yeF9mdF9wdXQocHJpdi0mZ3Q7cHNwLSZndDtmcywgaSk7Ci19Ci0KLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmczsKLQlpbnQgZXJyLCBpOwotCi0JaWYgKCFwcml2LSZndDtwc3ApCi0JCXJldHVybiAwOwotCi0JZnMgPSBwcml2LSZndDtwc3AtJmd0O2ZzOwotCWZvciAoaSA9IDA7IGkgJmx0OyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpJiM0MzsmIzQzOykgewotCQllcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0X2VycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2VycjoKLQlpLS07Ci0Jd2hpbGUgKGkgJmd0Oz0gMCkgewotCQlhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KGZzLCBpKTsKLQkJLS1pOwotCX0KLQotCXJldHVybiBlcnI7CiYjNDM7CW5ldGRldl9sb2NrKHByaXYtJmd0O25ldGRldik7CiYjNDM7CWFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzOwluZXRkZXZfdW5sb2NrKHByaXYtJmd0O25ldGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKJiM0MztzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsCiYjNDM7CQkJCSAgICAgc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpCiB7CiAJaW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTsKQEAgLTY4MSw3ICYjNDM7NjU5LDYgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogCXUzMiAqaW4sICptYywgKm91dGVyX2hlYWRlcnNfYzsKIAlzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTsKIAlzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7Ci0Jc3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnM7CiAJc3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7CiAJc3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7CiAJaW50IGVyciA9IDA7CkBAIC03MDAsOCAmIzQzOzY3Nyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAlmdF9hdHRyLmxldmVsID0gTUxYNUVfUFNQX0xFVkVMOwogCWZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMTsKIAotCXR4X2ZzID0gZnMtJmd0O3R4X2ZzOwotCWZ0ID0gbWx4NV9jcmVhdGVfZmxvd190YWJsZSh0eF9mcy0mZ3Q7bnMsICZhbXA7ZnRfYXR0cik7CiYjNDM7CWZ0ID0gbWx4NV9jcmVhdGVfZmxvd190YWJsZSh0eC0mZ3Q7bnMsICZhbXA7ZnRfYXR0cik7CiAJaWYgKElTX0VSUihmdCkpIHsKIAkJZXJyID0gUFRSX0VSUihmdCk7CiAJCW1seDVfY29yZV9lcnIobWRldiwgJiMzNDtQU1A6IGZhaWwgdG8gYWRkIHBzcCB0eCBmbG93IHRhYmxlLCBlcnIgPSAlZFxuJiMzNDssIGVycik7CkBAIC03MjcsNyAmIzQzOzcwMyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19FTkNSWVBUIHwKIAkJCSAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UOwogCWRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7Ci0JZGVzdC5jb3VudGVyID0gdHhfZnMtJmd0O3R4X2NvdW50ZXI7CiYjNDM7CWRlc3QuY291bnRlciA9IGZzLSZndDt0eF9jb3VudGVyOwogCXJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCAmYW1wO2Zsb3dfYWN0LCAmYW1wO2Rlc3QsIDEpOwogCWlmIChJU19FUlIocnVsZSkpIHsKIAkJZXJyID0gUFRSX0VSUihydWxlKTsKQEAgLTczNSw5ICYjNDM7NzExLDkgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogCQlnb3RvIGVycl9hZGRfZmxvd19ydWxlOwogCX0KIAotCXR4X2ZzLSZndDtmdCA9IGZ0OwotCXR4X2ZzLSZndDtmZyA9IGZnOwotCXR4X2ZzLSZndDtydWxlID0gcnVsZTsKJiM0MzsJdHgtJmd0O2Z0ID0gZnQ7CiYjNDM7CXR4LSZndDtmZyA9IGZnOwomIzQzOwl0eC0mZ3Q7cnVsZSA9IHJ1bGU7CiAJZ290byBvdXQ7CiAKIGVycl9hZGRfZmxvd19ydWxlOgpAQCAtNzUwLDg3ICYjNDM7NzI2LDM1IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcykKJiM0MztzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZnRfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlICp0eCkKIHsKLQlpZiAoIXR4X2ZzLSZndDtmdCkKLQkJcmV0dXJuOwotCi0JbWx4NV9kZWxfZmxvd19ydWxlcyh0eF9mcy0mZ3Q7cnVsZSk7Ci0JbWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAodHhfZnMtJmd0O2ZnKTsKLQltbHg1X2Rlc3Ryb3lfZmxvd190YWJsZSh0eF9mcy0mZ3Q7ZnQpOwomIzQzOwlhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZSgmYW1wO3R4LSZndDtydWxlKTsKJiM0MzsJYWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cCgmYW1wO3R4LSZndDtmZyk7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KCZhbXA7dHgtJmd0O2Z0KTsKIH0KIAotc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQogewotCXN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtJmd0O3R4X2ZzOwotCWludCBlcnIgPSAwOwotCi0JbXV0ZXhfbG9jaygmYW1wO3R4X2ZzLSZndDttdXRleCk7Ci0JaWYgKHR4X2ZzLSZndDtyZWZjbnQmIzQzOyYjNDM7KQotCQlnb3RvIG91dDsKLQotCWVyciA9IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoZnMpOwotCWlmIChlcnIpCi0JCXR4X2ZzLSZndDtyZWZjbnQtLTsKLW91dDoKLQltdXRleF91bmxvY2soJmFtcDt0eF9mcy0mZ3Q7bXV0ZXgpOwotCXJldHVybiBlcnI7CiYjNDM7CWFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtJmd0O21kZXYsICZhbXA7ZnMtJmd0O3R4X2NvdW50ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQotewotCXN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtJmd0O3R4X2ZzOwotCi0JbXV0ZXhfbG9jaygmYW1wO3R4X2ZzLSZndDttdXRleCk7Ci0JaWYgKC0tdHhfZnMtJmd0O3JlZmNudCkKLQkJZ290byBvdXQ7Ci0KLQlhY2NlbF9wc3BfZnNfdHhfZGVzdHJveSh0eF9mcyk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7dHhfZnMtJmd0O211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHgoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpCi17Ci0Jc3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMgPSBmcy0mZ3Q7dHhfZnM7Ci0KLQlpZiAoIXR4X2ZzKQotCQlyZXR1cm47Ci0KLQltbHg1X2ZjX2Rlc3Ryb3koZnMtJmd0O21kZXYsIHR4X2ZzLSZndDt0eF9jb3VudGVyKTsKLQltdXRleF9kZXN0cm95KCZhbXA7dHhfZnMtJmd0O211dGV4KTsKLQlXQVJOX09OKHR4X2ZzLSZndDtyZWZjbnQpOwotCWtmcmVlKHR4X2ZzKTsKLQlmcy0mZ3Q7dHhfZnMgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19pbml0X3R4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKQomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpCiB7CiAJc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy0mZ3Q7bWRldjsKLQlzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnM7Ci0Jc3RydWN0IG1seDVfZmMgKmZsb3dfY291bnRlcjsKLQlzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mczsKJiM0MzsJaW50IGVycjsKIAotCW5zID0gbWx4NV9nZXRfZmxvd19uYW1lc3BhY2UobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpOwotCWlmICghbnMpCiYjNDM7CWZzLSZndDt0eC5ucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsCiYjNDM7CQkJCQkgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpOwomIzQzOwlpZiAoIWZzLSZndDt0eC5ucykKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JdHhfZnMgPSBremFsbG9jX29iaigqdHhfZnMpOwotCWlmICghdHhfZnMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpOwotCWlmIChJU19FUlIoZmxvd19jb3VudGVyKSkgewomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgJmFtcDtmcy0mZ3Q7dHhfY291bnRlcik7CiYjNDM7CWlmIChlcnIpIHsKIAkJbWx4NV9jb3JlX3dhcm4obWRldiwKLQkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVwZVxuJiMzNDssCi0JCQkgICAgICAgZmxvd19jb3VudGVyKTsKLQkJa2ZyZWUodHhfZnMpOwotCQlyZXR1cm4gUFRSX0VSUihmbG93X2NvdW50ZXIpOwomIzQzOwkJCSAgICAgICAmIzM0O2ZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVkXG4mIzM0OywKJiM0MzsJCQkgICAgICAgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiAJfQotCXR4X2ZzLSZndDt0eF9jb3VudGVyID0gZmxvd19jb3VudGVyOwotCW11dGV4X2luaXQoJmFtcDt0eF9mcy0mZ3Q7bXV0ZXgpOwotCXR4X2ZzLSZndDtucyA9IG5zOwotCWZzLSZndDt0eF9mcyA9IHR4X2ZzOwogCXJldHVybiAwOwogfQogCkBAIC04MzgsMzIgJiM0Mzs3NjIsMjkgQEAgc3RhdGljIHZvaWQKIG1seDVlX2FjY2VsX3BzcF9mc19nZXRfc3RhdHNfZmlsbChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gcHJpdi0mZ3Q7cHNwLSZndDtmcy0mZ3Q7dHhfZnM7CiYjNDM7CXN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzID0gcHJpdi0mZ3Q7cHNwLSZndDtmczsKIAlzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtJmd0O21kZXY7Ci0Jc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwOwotCi0JYWNjZWxfcHNwID0gKHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKilwcml2LSZndDtwc3AtJmd0O2ZzLSZndDtyeF9mczsKIAotCWlmICh0eF9mcy0mZ3Q7dHhfY291bnRlcikKLQkJbWx4NV9mY19xdWVyeShtZGV2LCB0eF9mcy0mZ3Q7dHhfY291bnRlciwgJmFtcDtzdGF0cy0mZ3Q7cHNwX3R4X3BrdHMsCiYjNDM7CWlmIChmcy0mZ3Q7dHhfY291bnRlcikKJiM0MzsJCW1seDVfZmNfcXVlcnkobWRldiwgZnMtJmd0O3R4X2NvdW50ZXIsICZhbXA7c3RhdHMtJmd0O3BzcF90eF9wa3RzLAogCQkJICAgICAgJmFtcDtzdGF0cy0mZ3Q7cHNwX3R4X2J5dGVzKTsKIAotCWlmIChhY2NlbF9wc3AtJmd0O3J4X2NvdW50ZXIpCi0JCW1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLSZndDtyeF9jb3VudGVyLCAmYW1wO3N0YXRzLSZndDtwc3BfcnhfcGt0cywKJiM0MzsJaWYgKGZzLSZndDtyeF9jb3VudGVyKQomIzQzOwkJbWx4NV9mY19xdWVyeShtZGV2LCBmcy0mZ3Q7cnhfY291bnRlciwgJmFtcDtzdGF0cy0mZ3Q7cHNwX3J4X3BrdHMsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfYnl0ZXMpOwogCi0JaWYgKGFjY2VsX3BzcC0mZ3Q7cnhfYXV0aF9mYWlsX2NvdW50ZXIpCi0JCW1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlciwKJiM0MzsJaWYgKGZzLSZndDtyeF9hdXRoX2ZhaWxfY291bnRlcikKJiM0MzsJCW1seDVfZmNfcXVlcnkobWRldiwgZnMtJmd0O3J4X2F1dGhfZmFpbF9jb3VudGVyLAogCQkJICAgICAgJmFtcDtzdGF0cy0mZ3Q7cHNwX3J4X3BrdHNfYXV0aF9mYWlsLAogCQkJICAgICAgJmFtcDtzdGF0cy0mZ3Q7cHNwX3J4X2J5dGVzX2F1dGhfZmFpbCk7CiAKLQlpZiAoYWNjZWxfcHNwLSZndDtyeF9lcnJfY291bnRlcikKLQkJbWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtJmd0O3J4X2Vycl9jb3VudGVyLAomIzQzOwlpZiAoZnMtJmd0O3J4X2Vycl9jb3VudGVyKQomIzQzOwkJbWx4NV9mY19xdWVyeShtZGV2LCBmcy0mZ3Q7cnhfZXJyX2NvdW50ZXIsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfcGt0c19mcmFtZV9lcnIsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfYnl0ZXNfZnJhbWVfZXJyKTsKIAotCWlmIChhY2NlbF9wc3AtJmd0O3J4X2JhZF9jb3VudGVyKQotCQltbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC0mZ3Q7cnhfYmFkX2NvdW50ZXIsCiYjNDM7CWlmIChmcy0mZ3Q7cnhfYmFkX2NvdW50ZXIpCiYjNDM7CQltbHg1X2ZjX3F1ZXJ5KG1kZXYsIGZzLSZndDtyeF9iYWRfY291bnRlciwKIAkJCSAgICAgICZhbXA7c3RhdHMtJmd0O3BzcF9yeF9wa3RzX2Ryb3AsCiAJCQkgICAgICAmYW1wO3N0YXRzLSZndDtwc3BfcnhfYnl0ZXNfZHJvcCk7CiB9CkBAIC04NzMsMjEgJiM0Mzs3OTQsMTUgQEAgdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAlpZiAoIXByaXYtJmd0O3BzcCkKIAkJcmV0dXJuOwogCi0JYWNjZWxfcHNwX2ZzX3R4X2Z0X3B1dChwcml2LSZndDtwc3AtJmd0O2ZzKTsKLX0KLQotaW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQotewotCWlmICghcHJpdi0mZ3Q7cHNwKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzOwluZXRkZXZfbG9jayhwcml2LSZndDtuZXRkZXYpOwomIzQzOwlhY2NlbF9wc3BfZnNfdHhfZnRfZGVzdHJveSgmYW1wO3ByaXYtJmd0O3BzcC0mZ3Q7ZnMtJmd0O3R4KTsKJiM0MzsJbmV0ZGV2X3VubG9jayhwcml2LSZndDtuZXRkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV9hY2NlbF9wc3BfZnNfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcykKIHsKLQlhY2NlbF9wc3BfZnNfY2xlYW51cF9yeChmcyk7Ci0JYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHgoZnMpOwomIzQzOwlhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChmcyk7CiYjNDM7CWFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTsKIAlrZnJlZShmcyk7CiB9CiAKQEAgLTkwMSwyOSAmIzQzOzgxNiw2MyBAQCBzdGF0aWMgc3RydWN0IG1seDVlX3BzcF9mcyAqbWx4NWVfYWNjZWxfcHNwX2ZzX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJZnMtJmd0O21kZXYgPSBwcml2LSZndDttZGV2OwotCWVyciA9IGFjY2VsX3BzcF9mc19pbml0X3R4KGZzKTsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3R4X2luaXQoZnMpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3R4OwogCiAJZnMtJmd0O2ZzID0gcHJpdi0mZ3Q7ZnM7Ci0JZXJyID0gYWNjZWxfcHNwX2ZzX2luaXRfcngoZnMpOwomIzQzOwllcnIgPSBhY2NlbF9wc3BfZnNfcnhfaW5pdChmcyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcng7CiAKIAlyZXR1cm4gZnM7CiAKIGVycl9yeDoKLQlhY2NlbF9wc3BfZnNfY2xlYW51cF90eChmcyk7CiYjNDM7CWFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTsKIGVycl90eDoKIAlrZnJlZShmcyk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShwcml2LSZndDtwc3AtJmd0O2ZzLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gYWNjZWxfcHNwX2ZzX3R4X2Z0X2NyZWF0ZShwcml2LSZndDtwc3AtJmd0O2ZzLCAmYW1wO3ByaXYtJmd0O3BzcC0mZ3Q7ZnMtJmd0O3R4KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ZhaWxlZCBjcmVhdGluZyBUWCBzdGVlcmluZyB0YWJsZSYjMzQ7KTsKJiM0MzsJCWFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzOwl9CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtwc3AtJmd0O2ZzLSZndDt0eCk7CiYjNDM7CWFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtJmd0O3BzcC0mZ3Q7ZnMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQKIG1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZiwKIAkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0JcmV0dXJuIDA7IC8qIFRPRE86IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGRvIHRoaW5ncyB0byB0aGUgZGV2aWNlICovCiYjNDM7CXN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYocHNkLSZndDttYWluX25ldGRldik7CiYjNDM7CWJvb2wgcHNwX2VuYWJsZWQgPSBwc2QtJmd0O2NvbmZpZy52ZXJzaW9uczsKJiM0MzsJYm9vbCBlbmFibGVfcHNwID0gY29uZi0mZ3Q7dmVyc2lvbnM7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwluZXRkZXZfbG9jayhwcml2LSZndDtuZXRkZXYpOwomIzQzOwlpZiAoIXBzcF9lbmFibGVkICZhbXA7JmFtcDsgZW5hYmxlX3BzcCkKJiM0MzsJCWVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGUocHJpdiwgZXh0YWNrKTsKJiM0MzsJZWxzZSBpZiAocHNwX2VuYWJsZWQgJmFtcDsmYW1wOyAhZW5hYmxlX3BzcCkKJiM0MzsJCWFjY2VsX3BzcF9mc19kZXN0cm95KHByaXYpOwomIzQzOwluZXRkZXZfdW5sb2NrKHByaXYtJmd0O25ldGRldik7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEwNzIsMjEgJiM0MzsxMDIxLDIxIEBAIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi0mZ3Q7cHNwOwogCi0JaWYgKCFwc3AgfHwgIXBzcC0mZ3Q7cHNwKQomIzQzOwlpZiAoIXBzcCB8fCAhcHNwLSZndDtwc2QpCiAJCXJldHVybjsKIAotCXBzcF9kZXZfdW5yZWdpc3Rlcihwc3AtJmd0O3BzcCk7Ci0JcHNwLSZndDtwc3AgPSBOVUxMOwomIzQzOwlwc3BfZGV2X3VucmVnaXN0ZXIocHNwLSZndDtwc2QpOwomIzQzOwlwc3AtJmd0O3BzZCA9IE5VTEw7CiB9CiAKLXZvaWQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQomIzQzO2ludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi0mZ3Q7cHNwOwogCXN0cnVjdCBwc3BfZGV2ICpwc2Q7CiAKIAkvKiBGVyBDYXBzIG1pc3NpbmcgKi8KIAlpZiAoIXByaXYtJmd0O3BzcCkKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIDA7CiAKIAlwc3AtJmd0O2NhcHMuYXNzb2NfZHJ2X3NwYyA9IHNpemVvZih1MzIpOwogCXBzcC0mZ3Q7Y2Fwcy52ZXJzaW9ucyA9IDEgJmx0OyZsdDsgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyODsKQEAgLTEwOTgsOSAmIzQzOzEwNDcsMTEgQEAgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJaWYgKElTX0VSUihwc2QpKSB7CiAJCW1seDVfY29yZV9lcnIocHJpdi0mZ3Q7bWRldiwgJiMzNDtQU1AgZmFpbGVkIHRvIHJlZ2lzdGVyIGR1ZSB0byAlcGVcbiYjMzQ7LAogCQkJICAgICAgcHNkKTsKLQkJcmV0dXJuOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocHNkKTsKIAl9Ci0JcHNwLSZndDtwc3AgPSBwc2Q7CiYjNDM7CXBzcC0mZ3Q7cHNkID0gcHNkOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oCmluZGV4IDZiNjJmZWYwZDlhNzM4Li4zZjQ0MWU3ZGQ1NWFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaApAQCAtMjMsNyAmIzQzOzIzLDcgQEAgc3RydWN0IG1seDVlX3BzcF9zdGF0cyB7CiB9OwogCiBzdHJ1Y3QgbWx4NWVfcHNwIHsKLQlzdHJ1Y3QgcHNwX2RldiAqcHNwOwomIzQzOwlzdHJ1Y3QgcHNwX2RldiAqcHNkOwogCXN0cnVjdCBwc3BfZGV2X2NhcHMgY2FwczsKIAlzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmczsKIAlhdG9taWNfdCB0eF9rZXlfY250OwpAQCAtNDMsMzMgJiM0Mzs0MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pc19wc3BfZGV2aWNlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KQogCXJldHVybiB0cnVlOwogfQogCi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7Ci1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpOwogdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7Ci12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiYjNDM7aW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7CiB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQogc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldikKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfcHNwX2NsZWFudXAoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguYwppbmRleCBlZjdmNTMzODU0MGZkZi4uMzQ4ZmQ3YTk2MjYxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jCkBAIC0xNCwxMiAmIzQzOzE0LDYgQEAKICNpbmNsdWRlICYjMzQ7ZW5fYWNjZWwvcHNwX3J4dHguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuX2FjY2VsL3BzcC5oJiMzNDsKIAotZW51bSB7Ci0JTUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVELAotCU1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0FVVEhfRkFJTEVELAotCU1MWDVFX1BTUF9PRkZMT0FEX1JYX1NZTkRST01FX0JBRF9UUkFJTEVSLAotfTsKLQogc3RhdGljIHZvaWQgbWx4NWVfcHNwX3NldF9zd3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF90eF9wc3Bfc3RhdGUgKnBzcF9zdCwKIAkJCSAgICAgIHN0cnVjdCBtbHg1X3dxZV9ldGhfc2VnICplc2VnKQpAQCAtMTIyLDE2ICYjNDM7MTE2LDExIEBAIHN0YXRpYyBib29sIG1seDVlX3BzcF9zZXRfc3RhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsCiBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpCiB7Ci0JdTMyIHBzcF9tZXRhX2RhdGEgPSBiZTMyX3RvX2NwdShjcWUtJmd0O2Z0X21ldGFkYXRhKTsKIAlzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdTE2IGRldl9pZCA9IHByaXYtJmd0O3BzcC0mZ3Q7cHNwLSZndDtpZDsKJiM0MzsJdTE2IGRldl9pZCA9IHByaXYtJmd0O3BzcC0mZ3Q7cHNkLSZndDtpZDsKIAlib29sIHN0cmlwX2ljdiA9IHRydWU7CiAJdTggZ2VuZXJhdGlvbiA9IDA7CiAKLQkvKiBUQkQ6IHJlcG9ydCBlcnJvcnMgYXMgU1cgY291bnRlcnMgdG8gZXRodG9vbCwgYW55IGZ1cnRoZXIgaGFuZGxpbmcgPyAqLwotCWlmIChNTFg1X1BTUF9NRVRBREFUQV9TWU5EUk9NRShwc3BfbWV0YV9kYXRhKSAhPSBNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9ERUNSWVBURUQpCi0JCWdvdG8gZHJvcDsKLQogCWlmIChwc3BfZGV2X3Jjdihza2IsIGRldl9pZCwgZ2VuZXJhdGlvbiwgc3RyaXBfaWN2KSkKIAkJZ290byBkcm9wOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oCmluZGV4IDcwMjg5YzkyMWJkNmIzLi4yYjA4MGMzOWNjMzdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmgKQEAgLTEwLDkgJiM0MzsxMCw4IEBACiAjaW5jbHVkZSAmIzM0O2VuLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtlbi90eHJ4LmgmIzM0OwogCi0vKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjktMjM6IFBTUCBzeW5kcm9tZSwgQml0MjItMDogUFNQIG9iaiBpZCAqLwomIzQzOy8qIEJpdDMwOiBQU1AgbWFya2VyLCBCaXQyMi0wOiBQU1Agb2JqIGlkICovCiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX01BUktFUihtZXRhZGF0YSkgICgoKChtZXRhZGF0YSkgJmd0OyZndDsgMzApICZhbXA7IDB4MykgPT0gMHgzKQotI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9TWU5EUk9NRShtZXRhZGF0YSkgKCgobWV0YWRhdGEpICZndDsmZ3Q7IDIzKSAmYW1wOyBHRU5NQVNLKDYsIDApKQogI2RlZmluZSBNTFg1X1BTUF9NRVRBREFUQV9IQU5ETEUobWV0YWRhdGEpICAoKG1ldGFkYXRhKSAmYW1wOyBHRU5NQVNLKDIyLCAwKSkKIAogc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwppbmRleCA3NzVmMGM2ZTU1Yzk1NS4uMmNiNDhiMjRkNWVhYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYwpAQCAtNjE5MSw3ICYjNDM7NjE5MSw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfaW5pdF9uaWNfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiYjNDM7c3RhdGljIGludCBtbHg1ZV9uaWNfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwcml2LSZndDtuZXRkZXY7CiAJc3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LSZndDttZGV2OwpAQCAtNjE5OSw3ICYjNDM7NjE5OSw5IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAKIAltbHg1ZV9mc19pbml0X2wyX2FkZHIocHJpdi0mZ3Q7ZnMsIG5ldGRldik7CiAJbWx4NWVfaXBzZWNfaW5pdChwcml2KTsKLQltbHg1ZV9wc3BfcmVnaXN0ZXIocHJpdik7CiYjNDM7CWVyciA9IG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gb3V0X2lwc2VjX2NsZWFudXA7CiAKIAllcnIgPSBtbHg1ZV9tYWNzZWNfaW5pdChwcml2KTsKIAlpZiAoZXJyKQpAQCAtNjIyMiw3ICYjNDM7NjIyNCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiAJbWx4NWVfcGNpZV9jb25nX2V2ZW50X2luaXQocHJpdik7CiAJbWx4NWVfaHZfdmhjYV9zdGF0c19jcmVhdGUocHJpdik7CiAJaWYgKG5ldGRldi0mZ3Q7cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKQotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gMDsKIAltbHg1ZV9kY2JubF9pbml0X2FwcChwcml2KTsKIAogCW1seDVlX25pY19zZXRfcnhfbW9kZShwcml2KTsKQEAgLTYyMzUsNiAmIzQzOzYyMzcsMTIgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9pcHNlY19jbGVhbnVwOgomIzQzOwltbHg1ZV9pcHNlY19jbGVhbnVwKHByaXYpOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKQEAgLTY2MTYsMTMgJiM0Mzs2NjI0LDE4IEBAIGludCBtbHg1ZV9hdHRhY2hfbmV0ZGV2KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NsZWFudXBfdHg7CiAKLQlpZiAocHJvZmlsZS0mZ3Q7ZW5hYmxlKQotCQlwcm9maWxlLSZndDtlbmFibGUocHJpdik7CiYjNDM7CWlmIChwcm9maWxlLSZndDtlbmFibGUpIHsKJiM0MzsJCWVyciA9IHByb2ZpbGUtJmd0O2VuYWJsZShwcml2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBlcnJfY2xlYW51cF9yeDsKJiM0MzsJfQogCiAJbWx4NWVfdXBkYXRlX2ZlYXR1cmVzKHByaXYtJmd0O25ldGRldik7CiAKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9jbGVhbnVwX3J4OgomIzQzOwlwcm9maWxlLSZndDtjbGVhbnVwX3J4KHByaXYpOwogZXJyX2NsZWFudXBfdHg6CiAJcHJvZmlsZS0mZ3Q7Y2xlYW51cF90eChwcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jCmluZGV4IGM4Yjc2ZDMwMWM5MmNmLi42MDMwNTFhYjFlYWE0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYwpAQCAtMTI2Miw5ICYjNDM7MTI2MiwxMSBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9jbGVhbnVwX3JlcF90eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAltbHg1ZV9yZXBfbmVpZ2hfY2xlYW51cChycHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIG1seDVlX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiYjNDM7c3RhdGljIGludCBtbHg1ZV9yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQogewogCW1seDVlX3NldF9uZXRkZXZfbXR1X2JvdW5kYXJpZXMocHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV9yZXBfZGlzYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKQEAgLTEzMjIsNyAmIzQzOzEzMjQsNyBAQCBzdGF0aWMgaW50IHVwbGlua19yZXBfYXN5bmNfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBldmVudAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCiYjNDM7c3RhdGljIGludCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi0mZ3Q7bmV0ZGV2OwogCXN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi0mZ3Q7bWRldjsKQEAgLTEzNTcsNiAmIzQzOzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikKIAluZXRkZXZfdW5sb2NrKG5ldGRldik7CiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzkyCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGEgTWVsbGFub3ggbWx4NSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIHNlZW1zIGxpa2UgaXQgdHdlYWtzIHRoZSBNZWxsYW5veCBtbHg1IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBzdHVmZi4gSXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzOiBgcHNwLmNgLCBgcHNwLmhgLCBgcHNwX3J4dHguY2AsIGBlbl9tYWluLmNgLCBgZW5fcmVwLmNgLCBgZW4uaGAsIGFuZCBgZnMuaGAuIEJhc2ljYWxseSwgaXTigJlzIGFsdGVyaW5nIGhvdyBmbG93IHN0ZWVyaW5nIHJ1bGVzIGFyZSBtYWRlIGFuZCBoYW5kbGVkIHdoZW4gd2UmIzM5O3JlIG9mZmxvYWRpbmcgUFNQIHRhc2tzLiBJdCBhbHNvIGxvb2tzIGxpa2UgYSBjYWxsYmFjayBpbiB0aGUgYG1seDVlX3Byb2ZpbGVgIGlzIHJldHVybmluZyBhbiBgaW50YCBub3cgaW5zdGVhZCBvZiBgdm9pZGAuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpczogQ2FuIEkgZXZlbiAqdGVzdCogdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgbWx4NSBkcml2ZXIgKnJlcXVpcmVzKiBzcGVjaWZpYyBNZWxsYW5veCBoYXJkd2FyZSDigJMgQ29ubmVjdFgtNCwgNSwgNiwgb3IgNy4gU3l6a2FsbGVyLCB3aGljaCBpcyBteSBnby10byBmdXp6aW5nIHRvb2wsIGRvZXNuJiMzOTt0IGhhdmUgTWVsbGFub3ggaGFyZHdhcmUuIFNvLCBjYW4gUUVNVSBlbXVsYXRlIG1seDU/IEkga25vdyBRRU1VIGVtdWxhdGVzIHNldmVyYWwgTklDcywgbGlrZSBlMTAwMCwgcnRsODEzOSwgdmlydGlvLW5ldCwgdm14bmV0MywgYW5kIGlnYiwgYnV0IG5vdCB1c3VhbGx5IG1seDUgbmF0aXZlbHkuIEkgbWlnaHQgYmUgYWJsZSB0byBmaW5kIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCYjMzk7cyBub3Qgc3RhbmRhcmQuIFRoZXJlJiMzOTtzIG5vIHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiwgZWl0aGVyLCBzaW5jZSBpdCYjMzk7cyBhIGhhcmR3YXJlIGRyaXZlci4KClN5emthbGxlciBkb2VzIGhhdmUgY2xldmVyIGVtdWxhdGlvbiBtZWNoYW5pc21zIGZvciBvdGhlciBkZXZpY2VzIOKAkyBpdCBoYXMgYHN5el91c2JfY29ubmVjdGAgZm9yIFVTQiwgYG1hYzgwMjExX2h3c2ltYCBmb3Igd2lmaSwgYHZrbXNgIGZvciBEUk0sIGFuZCBgdml2aWRgIGZvciBWNEwyLiBGb3IgZXRoZXJuZXQsIGl0IHVzZXMgYHR1bmAvYHRhcGAgb3IgYHZldGhgLiBCdXQgSSBkb27igJl0IHRoaW5rIHRoZXJlIGlzIGEgZGlyZWN0IGVxdWl2YWxlbnQgZm9yIGVtdWxhdGluZyBQQ0llIGRldmljZXMgbGlrZSBtbHg1LgoKU28sIHJlYWxpc3RpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSB3YXkgdG8gdHJpZ2dlciB0aGlzIG1seDUgY29kZSB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiBJcyB0aGVyZSBzb21lIGtpbmQgb2YgbW9jayBkcml2ZXIgb3Igc2ltdWxhdGlvbiBsYXllcj8gSSYjMzk7bGwgcnVuIGEga2VybmVsIHNlYXJjaCBmb3IgJiMzNDttbHg1JiMzNDsgYW5kIHNlZSB3aGF0IGl0IHR1cm5zIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDVfY29yZV9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTIzMzggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTU4PXN0cnVjdCBtbHg1X2RtYV9wb29sIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy02MS1cdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6NjI6XHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNjMtXHRpbnQgbm9kZTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz03OT1zdHJ1Y3QgbWx4NV9kbWFfcG9vbF9zdGF0cyB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtODktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo5MDpzdGF0aWMgdm9pZCAqbWx4NV9kbWFfemFsbG9jX2NvaGVyZW50X25vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTkxLVx0XHRcdFx0XHQgICBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0xMDk9c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9kZXN0cm95KHN0cnVjdCBtbHg1X2RtYV9wb29sICpwb29sKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTExNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjExNTpzdGF0aWMgc3RydWN0IG1seDVfZG1hX3Bvb2wgKm1seDVfZG1hX3Bvb2xfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0xMTYtXHRcdFx0XHRcdFx0ICBpbnQgbm9kZSwgdTggYmxvY2tfc2hpZnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9MTMzPW1seDVfZG1hX3Bvb2xfcGFnZV9hbGxvYyhzdHJ1Y3QgbWx4NV9kbWFfcG9vbCAqcG9vbClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0xNjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzoxNjM6c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9wYWdlX2ZyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTE2NC1cdFx0XHRcdCAgICBzdHJ1Y3QgbWx4NV9kbWFfcG9vbF9wYWdlICpwYWdlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTI4Mz1zdGF0aWMgc3RydWN0IG1seDVfZnJhZ19idWZfbm9kZV9wb29scyAqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzoyODQ6bWx4NV9mcmFnX2J1Zl9ub2RlX3Bvb2xzX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgbm9kZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTI4NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9MzA3PW1seDVfZnJhZ19idWZfZG1hX3Bvb2xzX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMDgte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6MzA5Olx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbGUtXHUwMDNlcHJpdmF0ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTMxMC1cdGludCBub2RlO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTMzNj1ERUZJTkVfU0hPV19BVFRSSUJVVEUobWx4NV9mcmFnX2J1Zl9kbWFfcG9vbHNfZGVidWdmcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzozMzg6dm9pZCBtbHg1X2ZyYWdfYnVmX3Bvb2xzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTMzOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6MzU5OmludCBtbHg1X2ZyYWdfYnVmX3Bvb2xzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTM2MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzg3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6Mzg4OmludCBtbHg1X2ZyYWdfYnVmX2FsbG9jX25vZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IHNpemUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zODktXHRcdFx0ICAgICBzdHJ1Y3QgbWx4NV9mcmFnX2J1ZiAqYnVmLCBpbnQgbm9kZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz00MjU9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9mcmFnX2J1Zl9hbGxvY19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQyNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjQyNzp2b2lkIG1seDVfZnJhZ19idWZfZnJlZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9mcmFnX2J1ZiAqYnVmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNDI4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz00NDU9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9mcmFnX2J1Zl9mcmVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQ0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjQ0NzpzdGF0aWMgc3RydWN0IG1seDVfZGJfcGdkaXIgKm1seDVfYWxsb2NfZGJfcGdkaXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQ0OC1cdFx0XHRcdFx0XHQgaW50IG5vZGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9NDc2PXN0YXRpYyBpbnQgbWx4NV9hbGxvY19kYl9mcm9tX3BnZGlyKHN0cnVjdCBtbHg1X2RiX3BnZGlyICpwZ2Rpcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo1MDE6aW50IG1seDVfZGJfYWxsb2Nfbm9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9kYiAqZGIsIGludCBub2RlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNTAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz01Mjg9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9kYl9hbGxvY19ub2RlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTUyOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjUzMDp2b2lkIG1seDVfZGJfZnJlZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9kYiAqZGIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yODM9c3RhdGljIHZvaWQgcG9sbF90aW1lb3V0KHN0cnVjdCBtbHg1X2NtZF93b3JrX2VudCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI4NC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6Mjg1Olx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihlbnQtXHUwMDNlY21kLCBzdHJ1Y3QgbWx4NV9jb3JlX2RldiwgY21kKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yODYtXHR1NjQgY21kX3RvX21zID0gbWx4NV90b3V0X21zKGRldiwgQ01EKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MzMxPXN0YXRpYyB2b2lkIGR1bXBfYnVmKHZvaWQgKmJ1ZiwgaW50IHNpemUsIGludCBkYXRhX29ubHksIGludCBvZmZzZXQsIGludCBpZHgpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTM0Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzozNDc6c3RhdGljIGludCBtbHg1X2ludGVybmFsX2Vycl9yZXRfdmFsdWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTM0OC1cdFx0XHRcdCAgICAgICB1MzIgKnN5bmQsIHU4ICpzdGF0dXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTc5Mz1zdGF0aWMgaW50IGNtZF9zdGF0dXNfdG9fZXJyKHU4IHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODE2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjgxNzp2b2lkIG1seDVfY21kX291dF9lcnIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSwgdTE2IG9wX21vZCwgdm9pZCAqb3V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgxOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTgyNz1FWFBPUlRfU1lNQk9MKG1seDVfY21kX291dF9lcnIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo4Mjk6c3RhdGljIHZvaWQgY21kX3N0YXR1c19wcmludChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgdm9pZCAqb3V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTg0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo4NDU6aW50IG1seDVfY21kX2NoZWNrKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBlcnIsIHZvaWQgKmluLCB2b2lkICpvdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODQ2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9ODcyPUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfY2hlY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTg3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo4NzQ6c3RhdGljIHZvaWQgZHVtcF9jb21tYW5kKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODc1LVx0XHRcdCBzdHJ1Y3QgbWx4NV9jbWRfd29ya19lbnQgKmVudCwgaW50IGlucHV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05MzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTMyOnN0YXRpYyB2b2lkIG1seDVfY21kX2NvbXBfaGFuZGxlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1NjQgdmVjLCBib29sIGZvcmNlZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTMzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTkzND1zdGF0aWMgdm9pZCBjYl90aW1lb3V0X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05MzktXHRcdFx0XHRcdFx0ICAgICBjYl90aW1lb3V0X3dvcmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk0MDpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoZW50LVx1MDAzZWNtZCwgc3RydWN0IG1seDVfY29yZV9kZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTQxLVx0XHRcdFx0XHRcdCBjbWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NjAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTYxOnN0YXRpYyB2b2lkIGZyZWVfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTYyOnN0YXRpYyB2b2lkIG1seDVfZnJlZV9jbWRfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTYzLVx0XHRcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTk2NT1zdGF0aWMgYm9vbCBvcGNvZGVfYWxsb3dlZChzdHJ1Y3QgbWx4NV9jbWQgKmNtZCwgdTE2IG9wY29kZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk3Mzpib29sIG1seDVfY21kX2lzX2Rvd24oc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NzQte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz05ODA9c3RhdGljIHZvaWQgY21kX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk4NS1cdHN0cnVjdCBtbHg1X2NtZF9sYXlvdXQgKmxheTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5ODY6XHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk4Ny1cdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk5NDpcdGRldiA9IGNvbnRhaW5lcl9vZihjbWQsIHN0cnVjdCBtbHg1X2NvcmVfZGV2LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk5NS1cdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG1seDVfdG91dF9tcyhkZXYsIENNRCkpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xMTQwPWVudW0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjExNDQ6c3RhdGljIHZvaWQgd2FpdF9mdW5jX2hhbmRsZV9leGVjX3RpbWVvdXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTQ1LVx0XHRcdFx0XHQgIHN0cnVjdCBtbHg1X2NtZF93b3JrX2VudCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTY4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjExNjk6c3RhdGljIGludCB3YWl0X2Z1bmMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kX3dvcmtfZW50ICplbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE3MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTEyMTUtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTIxNjpzdGF0aWMgYm9vbCBtbHg1X2NtZF9hbGxfc3RhbGxlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTEyMTcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjU4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjEyNTk6c3RhdGljIGludCBtbHg1X2NtZF9pbnZva2Uoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kX21zZyAqaW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTI2MC1cdFx0XHQgICBzdHJ1Y3QgbWx4NV9jbWRfbXNnICpvdXQsIHZvaWQgKnVvdXQsIGludCB1b3V0X3NpemUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTEzMzc9c3RhdGljIHNzaXplX3QgZGJnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMzM5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxMzQwOlx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTEzNDEtXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFx1MDAyNmRldi1cdTAwM2VjbWQuZGJnO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNDA0PXN0YXRpYyBpbnQgbWx4NV9jb3B5X2Zyb21fbXNnKHZvaWQgKnRvLCBzdHJ1Y3QgbWx4NV9jbWRfbXNnICpmcm9tLCBpbnQgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTQzNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNDM3OnN0YXRpYyBzdHJ1Y3QgbWx4NV9jbWRfbWFpbGJveCAqYWxsb2NfY21kX2JveChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0MzgtXHRcdFx0XHRcdCAgICAgIGdmcF90IGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE0NTg6c3RhdGljIHZvaWQgZnJlZV9jbWRfYm94KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTQ1OS1cdFx0XHQgc3RydWN0IG1seDVfY21kX21haWxib3ggKm1haWxib3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTQ2NTpzdGF0aWMgc3RydWN0IG1seDVfY21kX21zZyAqbWx4NV9hbGxvY19jbWRfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTQ2Ni1cdFx0XHRcdFx0ICAgICAgIGdmcF90IGZsYWdzLCBpbnQgc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUxMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNTEyOnN0YXRpYyB2b2lkIG1seDVfZnJlZV9jbWRfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUxMy1cdFx0XHQgICAgICBzdHJ1Y3QgbWx4NV9jbWRfbXNnICptc2cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTE1MjY9c3RhdGljIHNzaXplX3QgZGF0YV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUyOC17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTUyOTpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTMwLVx0c3RydWN0IG1seDVfY21kX2RlYnVnICpkYmcgPSBcdTAwMjZkZXYtXHUwMDNlY21kLmRiZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU1MD1zdGF0aWMgc3NpemVfdCBkYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU1Mi17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTU1MzpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTU0LVx0c3RydWN0IG1seDVfY21kX2RlYnVnICpkYmcgPSBcdTAwMjZkZXYtXHUwMDNlY21kLmRiZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU3MD1zdGF0aWMgc3NpemVfdCBvdXRsZW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTcyLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNTczOlx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE1NzQtXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFx1MDAyNmRldi1cdTAwM2VjbWQuZGJnO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNTg1PXN0YXRpYyBzc2l6ZV90IG91dGxlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU4Ny17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTU4ODpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTg5LVx0c3RydWN0IG1seDVfY21kX2RlYnVnICpkYmcgPSBcdTAwMjZkZXYtXHUwMDNlY21kLmRiZztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbGZvcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTYyODpzdGF0aWMgdm9pZCBzZXRfd3FuYW1lKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTYyOS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTYzNjpzdGF0aWMgdm9pZCBjbGVhbl9kZWJ1Z19maWxlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjQ1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE2NDY6c3RhdGljIHZvaWQgY3JlYXRlX2RlYnVnZnNfZmlsZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjQ3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY1OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjU5OnZvaWQgbWx4NV9jbWRfYWxsb3dlZF9vcGNvZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjYwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjc1OnN0YXRpYyB2b2lkIG1seDVfY21kX2NoYW5nZV9tb2Qoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IG1vZGUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY3Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTE2OTE9c3RhdGljIGludCBjbWRfY29tcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjkzLXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjk0Olx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjk1LVx0c3RydWN0IG1seDVfY21kICpjbWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2OTgtXHRjbWQgPSBtbHg1X25iX2NvZihuYiwgc3RydWN0IG1seDVfY21kLCBuYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY5OTpcdGRldiA9IGNvbnRhaW5lcl9vZihjbWQsIHN0cnVjdCBtbHg1X2NvcmVfZGV2LCBjbWQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MDAtXHRlcWUgPSBkYXRhO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzA4LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNzA5OnZvaWQgbWx4NV9jbWRfdXNlX2V2ZW50cyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MTY6dm9pZCBtbHg1X2NtZF91c2VfcG9sbGluZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MjI6c3RhdGljIHZvaWQgZnJlZV9tc2coc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kX21zZyAqbXNnKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MjMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MzU6c3RhdGljIHZvaWQgbWx4NV9jbWRfY29tcF9oYW5kbGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU2NCB2ZWMsIGJvb2wgZm9yY2VkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODM4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4Mzk6c3RhdGljIHZvaWQgbWx4NV9jbWRfdHJpZ2dlcl9jb21wbGV0aW9ucyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE4NDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4NzQ6dm9pZCBtbHg1X2NtZF9mbHVzaChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE4NzUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODk2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4OTc6c3RhdGljIHN0cnVjdCBtbHg1X2NtZF9tc2cgKmFsbG9jX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgaW5fc2l6ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODk4LVx0XHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xOTM1PXN0YXRpYyBpbnQgaXNfbWFuYWdlX3BhZ2VzKHZvaWQgKmluKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTM5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NDA6c3RhdGljIGJvb2wgbWx4NV9oYXNfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTQxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxOTQ1OnN0YXRpYyBib29sIG1seDVfY21kX2lzX3ByaXZpbGVnZWRfdWlkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0Ni1cdFx0XHRcdCAgICAgICB1MTYgdWlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTU0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NTU6c3RhdGljIGludCBjbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTU2LVx0XHQgICAgaW50IG91dF9zaXplLCBtbHg1X2NtZF9jYmtfdCBjYWxsYmFjaywgdm9pZCAqY29udGV4dCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjAzNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMDM2OnN0YXRpYyB2b2lkIG1seDVfY21kX2Vycl90cmFjZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjAzNy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNDUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjA0NjpzdGF0aWMgdm9pZCBjbWRfc3RhdHVzX2xvZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1OCBzdGF0dXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjA0Ny1cdFx0XHQgICB1MzIgc3luZHJvbWUsIGludCBlcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNzEtLyogcHJlc2VydmUgLUVSRU1PVEVJTyBmb3Igb3V0Ym94LnN0YXR1cyAhPSBPSywgb3RoZXJ3aXNlIHJldHVybiBlcnIgYXMgaXMgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMDcyOnN0YXRpYyBpbnQgY21kX3N0YXR1c19lcnIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGVyciwgdTE2IG9wY29kZSwgdTE2IG9wX21vZCwgdm9pZCAqb3V0KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNzMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTA2LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxMDc6aW50IG1seDVfY21kX2RvKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSwgdm9pZCAqb3V0LCBpbnQgb3V0X3NpemUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjEwOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxMTU9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9kbyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxMjgtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjEyOTppbnQgbWx4NV9jbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTMwLVx0XHQgIGludCBvdXRfc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjEzNj1FWFBPUlRfU1lNQk9MKG1seDVfY21kX2V4ZWMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTUxLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxNTI6aW50IG1seDVfY21kX2V4ZWNfcG9sbGluZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE1My1cdFx0XHQgIHZvaWQgKm91dCwgaW50IG91dF9zaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMTYyPUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfZXhlY19wb2xsaW5nKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxNjQ6dm9pZCBtbHg1X2NtZF9pbml0X2FzeW5jX2N0eChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxNjUtXHRcdFx0ICAgICBzdHJ1Y3QgbWx4NV9hc3luY19jdHggKmN0eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjE4OT1zdGF0aWMgdm9pZCBtbHg1X2NtZF9leGVjX2NiX2hhbmRsZXIoaW50IHN0YXR1cywgdm9pZCAqX3dvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxOTItXHRzdHJ1Y3QgbWx4NV9hc3luY19jdHggKmN0eDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMTkzOlx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTk0LVx0Ym9vbCB0aHJvdHRsZV9sb2NrZWQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIyMTQ9aW50IG1seDVfY21kX2V4ZWNfY2Ioc3RydWN0IG1seDVfYXN5bmNfY3R4ICpjdHgsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjIxNy17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjIxODpcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYgPSBjdHgtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIyMTktXHR1MTYgdWlkO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMjY4PUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfZXhlY19jYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjI2OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMjcwOmludCBtbHg1X2NtZF9hbGxvd19vdGhlcl92aGNhX2FjY2VzcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIyNzEtXHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1X2NtZF9hbGxvd19vdGhlcl92aGNhX2FjY2Vzc19hdHRyICphdHRyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjg5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIyOTA6aW50IG1seDVfY21kX2FsaWFzX29ial9jcmVhdGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjkxLVx0XHRcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9hbGlhc19vYmpfY3JlYXRlX2F0dHIgKmFsaWFzX2F0dHIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjMyNjppbnQgbWx4NV9jbWRfYWxpYXNfb2JqX2Rlc3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTMyIG9ial9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzI3LVx0XHRcdCAgICAgICB1MTYgb2JqX3R5cGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjMzOTpzdGF0aWMgdm9pZCBkZXN0cm95X21zZ19jYWNoZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzNDAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMzU5PXN0YXRpYyB1bnNpZ25lZCBjbWRfY2FjaGVfZW50X3NpemVbTUxYNV9OVU1fQ09NTUFORF9DQUNIRVNdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzY2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIzNjc6c3RhdGljIHZvaWQgY3JlYXRlX21zZ19jYWNoZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzNjgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzkyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIzOTM6c3RhdGljIGludCBhbGxvY19jbWRfcGFnZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jbWQgKmNtZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzk0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQyMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDIyOnN0YXRpYyB2b2lkIGZyZWVfY21kX3BhZ2Uoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kICpjbWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQyMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0MjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjQyODpzdGF0aWMgdTE2IGNtZGlmX3JldihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0Mjkte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDMyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI0MzM6aW50IG1seDVfY21kX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDM0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQ1My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDU0OnZvaWQgbWx4NV9jbWRfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0NTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI0NjI6aW50IG1seDVfY21kX2VuYWJsZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0NjMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTQ3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NDg6dm9pZCBtbHg1X2NtZF9kaXNhYmxlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU0OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1NTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjU2MDp2b2lkIG1seDVfY21kX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1NjEtXHRcdFx0ZW51bSBtbHg1X2NtZGlmX3N0YXRlIGNtZGlmX3N0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NjY6aW50IG1seDVfY21kX2FkZF9wcml2aWxlZ2VkX3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgdWlkKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1Njcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yNTcxPUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfYWRkX3ByaXZpbGVnZWRfdWlkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NzM6dm9pZCBtbHg1X2NtZF9yZW1vdmVfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHVpZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTc0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0xMDA9c3RhdGljIHZvaWQgbWx4NV9jb3JlX2NxX2R1bW15X2NiKHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLCBzdHJ1Y3QgbWx4NV9lcWUgKmVxZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xMDctLyogQ2FsbGVycyBtdXN0IHZlcmlmeSBvdXRib3ggc3RhdHVzIGluIGNhc2Ugb2YgZXJyICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxMDg6aW50IG1seDVfY3JlYXRlX2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMTA5LVx0XHQgICB1MzIgKmluLCBpbnQgaW5sZW4sIHUzMiAqb3V0LCBpbnQgb3V0bGVuKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTE3OD1FWFBPUlRfU1lNQk9MKG1seDVfY3JlYXRlX2NxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xODAtLyogb3Vib3ggaXMgY2hlY2tlZCBhbmQgZXJyIHZhbCBpcyBub3JtYWxpemVkICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxODE6aW50IG1seDVfY29yZV9jcmVhdGVfY3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9jcSAqY3EsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xODItXHRcdFx0dTMyICppbiwgaW50IGlubGVuLCB1MzIgKm91dCwgaW50IG91dGxlbilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0xODg9RVhQT1JUX1NZTUJPTChtbHg1X2NvcmVfY3JlYXRlX2NxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTE4OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjE5MDppbnQgbWx4NV9jb3JlX2Rlc3Ryb3lfY3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9jcSAqY3EpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xOTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTIxMz1FWFBPUlRfU1lNQk9MKG1seDVfY29yZV9kZXN0cm95X2NxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIxNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjIxNTppbnQgbWx4NV9jb3JlX3F1ZXJ5X2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjE2LVx0XHQgICAgICAgdTMyICpvdXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmM9MjI0PUVYUE9SVF9TWU1CT0wobWx4NV9jb3JlX3F1ZXJ5X2NxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjIyNjppbnQgbWx4NV9jb3JlX21vZGlmeV9jcShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jb3JlX2NxICpjcSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIyNy1cdFx0XHR1MzIgKmluLCBpbnQgaW5sZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmM9MjM1PUVYUE9SVF9TWU1CT0wobWx4NV9jb3JlX21vZGlmeV9jcSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0yMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoyMzc6aW50IG1seDVfY29yZV9tb2RpZnlfY3FfbW9kZXJhdGlvbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjM4LVx0XHRcdFx0ICAgc3RydWN0IG1seDVfY29yZV9jcSAqY3EsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz05Nj12b2lkIG1seDVfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjEwMTpzdHJ1Y3QgZGVudHJ5ICptbHg1X2RlYnVnZnNfZ2V0X2Rldl9yb290KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTEwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0xMDU9RVhQT1JUX1NZTUJPTChtbHg1X2RlYnVnZnNfZ2V0X2Rldl9yb290KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMDc6dm9pZCBtbHg1X3FwX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MTExPUVYUE9SVF9TWU1CT0wobWx4NV9xcF9kZWJ1Z2ZzX2luaXQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjExMzp2b2lkIG1seDVfcXBfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0xMTc9RVhQT1JUX1NZTUJPTChtbHg1X3FwX2RlYnVnZnNfY2xlYW51cCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MTE5OnZvaWQgbWx4NV9lcV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTIwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTEyMy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MTI0OnZvaWQgbWx4NV9lcV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTI1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTIwMj1tbHg1X2NtZGlmX2FsbG9jX3N0YXRzKHN0cnVjdCB4YXJyYXkgKnN0YXRzX3hhLCBpbnQgb3Bjb2RlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyMTk6dm9pZCBtbHg1X2NtZGlmX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yMjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNTk6dm9pZCBtbHg1X2NtZGlmX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNzA6dm9pZCBtbHg1X2NxX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNzU6dm9pZCBtbHg1X2NxX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjc5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyODA6dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yODEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjkzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyOTQ6dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjk4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyOTk6dm9pZCBtbHg1X3BhZ2VzX2J5X2Z1bmNfdHlwZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzAwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTMyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MzIzOnZvaWQgbWx4NV9wYWdlc19ieV9mdW5jX3R5cGVfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTMyNC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0zMzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjMzNzpzdGF0aWMgdTY0IHFwX3JlYWRfZmllbGQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9xcCAqcXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTMzOC1cdFx0XHQgaW50IGluZGV4LCBpbnQgKmlzX3N0cilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6NDE3OnN0YXRpYyB1NjQgZXFfcmVhZF9maWVsZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9lcSAqZXEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTQxOC1cdFx0XHQgaW50IGluZGV4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNDU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo0NTc6c3RhdGljIHU2NCBjcV9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy00NTgtXHRcdFx0IGludCBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTUzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTM3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1Mzg6c3RhdGljIGludCBhZGRfcmVzX3RyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSBkYmdfcnNjX3R5cGUgdHlwZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTM5LVx0XHRcdHN0cnVjdCBkZW50cnkgKnJvb3QsIHN0cnVjdCBtbHg1X3JzY19kZWJ1ZyAqKmRiZyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTU2Nj1zdGF0aWMgdm9pZCByZW1fcmVzX3RyZWUoc3RydWN0IG1seDVfcnNjX2RlYnVnICpkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTcxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1NzI6aW50IG1seDVfZGVidWdfcXBfYWRkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01NzMte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9NTg3PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z19xcF9hZGQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01ODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjU4OTp2b2lkIG1seDVfZGVidWdfcXBfcmVtb3ZlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9NTk3PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z19xcF9yZW1vdmUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjU5OTppbnQgbWx4NV9kZWJ1Z19lcV9hZGQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfZXEgKmVxKVxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk4NTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYG1seDVfY29yZV9kZXZgIENvZGUgd2l0aCBTeXprYWxsZXIqKgoKT2theSwgc28gdGhlIG91dHB1dCBzaG93cyB0aGF0IGBtbHg1X2NvcmVfZGV2YCBpcyBzaWduaWZpY2FudGx5IHByZXNlbnQgaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYCBkaXJlY3RvcnkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaG93IGNhbiBzeXprYWxsZXIgcG9zc2libHkgdHJpZ2dlciB0aGlzIGNvZGU/IEl0JiMzOTtzIGFsbCBhYm91dCBzeXN0ZW0gY2FsbHMgZm9yIHN5emthbGxlciwgcmlnaHQ/IFRoZSBpc3N1ZSBpcyBwcmV0dHkgb2J2aW91czogd2l0aG91dCB0aGUgTWVsbGFub3ggaGFyZHdhcmUsIHRoZSBkcml2ZXIgc2ltcGx5IHdvbiYjMzk7dCBwcm9iZS4gTm8gcHJvYmUsIG5vIGBtbHg1X2NvcmVfZGV2YCwgbm8gY29kZSBleGVjdXRpb24uCgpJcyB0aGVyZSBhbnkga2luZCBvZiBuZXRsaW5rIG1hZ2ljIHRoYXQgY291bGQgYnlwYXNzIHRoZSBoYXJkd2FyZSByZXF1aXJlbWVudD8gTm9wZSwgbWx4NSBpcyBhIFBDSSBkcml2ZXIuIEl0IG5lZWRzIHRoYXQgUENJIGRldmljZSB0byBnZXQgb2ZmIHRoZSBncm91bmQuIE5vIFBDSSBkZXZpY2UsIG5vIHByb2JlLCBubyBuZXRkZXYsIGRlYWQgZW5kLgoKV2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZXRoaW5nIHRvIGVtdWxhdGUgUENJIGRldmljZXMsIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGA/IE5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGZvciBVU0IsIGJ1dCBubyBnZW5lcmljIFBDSSBlbXVsYXRvci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBEaWQgc3l6a2FsbGVyIGludHJvZHVjZSBzb21lIGNsZXZlciBQQ0kgZW11bGF0aW9uIHRocm91Z2ggYHZoY2lgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBOb3BlLgoKT2theSwgbGV0JiMzOTtzIHN0ZXAgYmFjay4gSSB0aG91Z2h0IEkgcmVtZW1iZXJlZCBzZWVpbmcgc29tZXRoaW5nIGxpa2UgYHN5el9wY2lfZGV2aWNlX2FkZGAuIE5vcGUsIG5vdCBpbiBzeXprYWxsZXIuCgpMZXQmIzM5O3MgY3V0IHRvIHRoZSBjaGFzZSBhbmQgZmluZCBvdXQgaWYgU3l6a2FsbGVyIGZ1enplZCBtbHg1LiBMb29rcyBsaWtlIGl0IGRvZXNuJiMzOTt0LCBiZWNhdXNlIGl0IG5lZWRzIHRoZSBoYXJkd2FyZS4KCkJ1dCB3YWl0ISBIb2xkIG9uIGEgc2Vjb25kLCB0aGUgcHJvbXB0IHNheXM6CgomIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7CgomIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsKClRoaXMgaXMgY3J1Y2lhbC4gVGhlIHByb21wdCBtYWtlcyBhIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVhY2hhYmxlIGFuZCB1bnJlYWNoYWJsZSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHJlYWNoYWJpbGl0eSBpbiBhIFFFTVUtbGlrZSBlbnZpcm9ubWVudC4KCk5vdywgSSYjMzk7bSBnb2luZyB0byBkb3VibGUgY2hlY2sgZm9yIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBtbHg1LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21seDUuKmVtdWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MTM0Nz1zdHJ1Y3QgbWx4NV9pZmNfZGV2aWNlX2V2ZW50X2NhcF9iaXRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0xMzUyLVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MTM1MzpzdHJ1Y3QgbWx4NV9pZmNfdmlydGlvX2VtdWxhdGlvbl9jYXBfYml0cyB7XG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0xMzU0LVx0dTggICAgICAgICBkZXNjX3R1bm5lbF9vZmZsb2FkX3R5cGVbMHgxXTtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaD0zODUyPXVuaW9uIG1seDVfaWZjX2hjYV9jYXBfdW5pb25fYml0cyB7XG4tLVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzg2OS1cdHN0cnVjdCBtbHg1X2lmY19kZXZpY2VfbWVtX2NhcF9iaXRzIGRldmljZV9tZW1fY2FwO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6Mzg3MDpcdHN0cnVjdCBtbHg1X2lmY192aXJ0aW9fZW11bGF0aW9uX2NhcF9iaXRzIHZpcnRpb19lbXVsYXRpb25fY2FwO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzg3MS1cdHN0cnVjdCBtbHg1X2lmY190bHBfZGV2X2VtdV9jYXBhYmlsaXRpZXNfYml0cyB0bHBfZGV2X2VtdV9jYXBhYmlsaXRpZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExMDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmF2aWdhdGluZyB0aGUgVmlydGlvIGFuZCBNTFg1IExhbmRzY2FwZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGdvaW5nIGRvd24gdGhlIHdyb25nIHBhdGggaGVyZS4gYHZpcnRpb19lbXVsYXRpb25fY2FwYCBpcyBzcGVjaWZpY2FsbHkgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aGluIHZpcnRpbywgbm90IGZvciBzaW11bGF0aW5nIG1seDUgaW4gYSBzb2Z0d2FyZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGlzdGluY3Rpb24uCgpOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBob3cgY2FuIEkgYWN0dWFsbHkgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhlIGBtbHg1ZV9wc3Bfc2V0X2NvbmZpZ2AgZnVuY3Rpb24/IEkga25vdyBpdCYjMzk7cyBiZWluZyBjYWxsZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGNhbGxlZCBhcyBhIGNhbGxiYWNrIHdpdGhpbiBgcHNwX2Rldl9jb25maWdgLiBTbywgYG1seDVlX3BzcF9zZXRfY29uZmlnYCBpcyBwYXJ0IG9mIGEgY2FsbGJhY2sgaW4gYHBzcF9kZXZfY29uZmlnYC4KCkJ1dCBJJiMzOTttIG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiB3aGF0IGV4YWN0bHkgaXMgdGhpcyBgcHNwX2RldmAgc3RydWN0dXJlIHRoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjaz8gVGltZSB0byBnbyBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHNvdXJjZSBjb2RlLiBJIHNob3VsZCBmaW5kIGl0IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcHNwLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBpbmNsdWRlIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBwcm9jZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BzcF9kZXZfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuYz04NjA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jOjg2MTptbHg1ZV9wc3Bfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtODYyLVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmM9MTIxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9wc3AuYzoxMjI6bnNpbV9wc3Bfc2V0X2NvbmZpZyhzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIzLVx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE0PXN0cnVjdCBwc3BoZHIge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTM5LS8qKlxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NDA6ICogc3RydWN0IHBzcF9kZXZfY29uZmlnIC0gUFNQIGRldmljZSBjb25maWd1cmF0aW9uXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC00MS0gKiBAdmVyc2lvbnM6IFBTUCB2ZXJzaW9ucyBlbmFibGVkIG9uIHRoZSBkZXZpY2VcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQyLSAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6NDM6c3RydWN0IHBzcF9kZXZfY29uZmlnIHtcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQ0LVx0dTMyIHZlcnNpb25zO1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTg5PXN0cnVjdCBwc3BfZGV2IHtcbi0tXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaC0xMDQtXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaDoxMDU6XHRzdHJ1Y3QgcHNwX2Rldl9jb25maWcgY29uZmlnO1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTA2LVxuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE5NT1zdHJ1Y3QgcHNwX2Rldl9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTIwMC1cdCAqL1xuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg6MjAxOlx0aW50ICgqc2V0X2NvbmZpZykoc3RydWN0IHBzcF9kZXYgKnBzZCwgc3RydWN0IHBzcF9kZXZfY29uZmlnICpjb25mLFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjAyLVx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi0tXG5uZXQvcHNwL3BzcF9ubC5jPTM5OD1pbnQgcHNwX25sX2Rldl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9wc3AvcHNwX25sLmMtNDAwLVx0c3RydWN0IHBzcF9kZXYgKnBzZCA9IGluZm8tXHUwMDNldXNlcl9wdHJbMF07XG5uZXQvcHNwL3BzcF9ubC5jOjQwMTpcdHN0cnVjdCBwc3BfZGV2X2NvbmZpZyBuZXdfY29uZmlnO1xubmV0L3BzcC9wc3BfbmwuYy00MDItXHRzdHJ1Y3Qgc2tfYnVmZiAqcnNwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIxOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTc4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBtbHg1IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgdG91Y2hlcyBgbmV0ZGV2c2ltYCwgc3BlY2lmaWNhbGx5IGBuc2ltX3BzcF9zZXRfY29uZmlnYC4gQnV0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYnVyaWVkIGRlZXAgaW4gdGhlIE1lbGxhbm94IGBtbHg1YCBkcml2ZXIsIGluIGBwc3AuY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4gZmxhZ3MgYSBwb3RlbnRpYWwgaXNzdWU6IHRoaXMgaXMgTWVsbGFub3ggaGFyZHdhcmUtZGVwZW5kZW50LiBTeXprYWxsZXImIzM5O3Mgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGJlIGl0IEdDRSBvciBRRU1VLCBpc24mIzM5O3QgZ29pbmcgdG8gbWFnaWNhbGx5IGNvbmp1cmUgdXAgYSBNZWxsYW5veCBjYXJkLCByaWdodD8gSSBzdGFydCB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlJiMzOTtzIHNvbWUgY2xldmVyIFBDSSBkZXZpY2UgaW5qZWN0aW9uLCBvciBwZXJoYXBzIGEgdmlydHVhbCBwcm9iZSBtZWNoYW5pc20gZm9yIHRoZSBNZWxsYW5veCBkcml2ZXIuCgpMZXQgbWUgdGhpbmssIGRvZXMgYG5ldGRldnNpbWAgc29tZWhvdyB1c2UgYG1seDVgPyBObywgY29tcGxldGVseSBzZXBhcmF0ZSBkcml2ZXJzLiBUaGlzIG1lYW5zIHRob3NlIGBtbHg1YCBjaGFuZ2VzIGFyZSBhbG1vc3QgY2VydGFpbmx5IHVucmVhY2hhYmxlIGluIHR5cGljYWwgc3l6a2FsbGVyIHNldHVwcy4KCk5vdywgbGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZXZpZXcgdGhlIHByb3ZpZGVkIHByb21wdCYjMzk7cyBjcml0ZXJpYSBmb3IgYSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGRldGVybWluYXRpb24uIEl0IHNwZWNpZmllcyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQW5kIHRoYXQgaXMgZXhhY3RseSB3aGF0IHdlIGhhdmUgaGVyZS4gVGhlIHBhdGNoIGluY2x1ZGVzIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCByZXF1aXJlcyBhIE1lbGxhbm94IFBDSSBkZXZpY2UsIHdoaWNoLCBhcyBmYXIgYXMgSSBrbm93LCBpcyBub3QgZW11bGF0ZWQgd2l0aGluIHN5emthbGxlciYjMzk7cyBRRU1VIGVudmlyb25tZW50LiBUaGUgYG1seDVgIGRyaXZlciBpcyBub3QgcmVhY2hhYmxlIGFuZCBpdCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuCgpVbmxlc3MgdGhlcmUgaXMgc29tZSBvYnNjdXJlIHZpcnR1YWwgYnVzIHRoYXQgYWxsb3dzIHN5emthbGxlciB0byByZWFjaCBQQ0kgZGV2aWNlIGRyaXZlcnMuIFdhaXQgYSBtaW51dGUsIG5vLCBgbWx4NWAgaXMgYSBQQ0kgZGV2aWNlIGRyaXZlciwgdGhlcmUgaXMgbm8gd2F5IGFyb3VuZCB0aGF0LgoKT2ssIGxhc3QgY2hlY2sgLSBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBgbWx4NWAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfLiptbHg1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjE6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI5NzMKCQkJCQkJCW91dHB1dDogODkKCQkJCQkJCXRob3VnaHRzOiA0MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBhIGZpcm0gJiMzNDtuby4mIzM0OyBJcyB0aGVyZSBldmVuIGEgcmVtb3RlIHBvc3NpYmlsaXR5IHRoaXMgY291bGQgYmUgZnV6emVkIGVmZmVjdGl2ZWx5PyBObywgdGhlIGhhcmR3YXJlIGRyaXZlcnMgZm9yIFBDSSBkZXZpY2VzLCBwYXJ0aWN1bGFybHkgdGhvc2UgbGlrZSB0aGUgTWVsbGFub3ggZHJpdmVycywgYXJlIG5vdCByZWFsaXN0aWNhbGx5IHJlYWNoYWJsZSB3aXRob3V0IHByb3BlciBRRU1VIGVtdWxhdGlvbi4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc25lYWt5IGNvcmUga2VybmVsIG1vZGlmaWNhdGlvbnMgaGlkZGVuIGluIGhlcmUuIE9rYXksIHRoZSBkaWZmIGlzIG9ubHkgdG91Y2hpbmcgZmlsZXMgd2l0aGluOgpgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaGAKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oYApgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaGAKYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNgCmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmNgCgpZZXAsIGl0JiMzOTtzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9gIGRpcmVjdG9yeS4gU28sIGl0JiMzOTtzIHB1cmVseSBhIE1lbGxhbm94IGhhcmR3YXJlIGRyaXZlciBwYXRjaC4KCkkmIzM5O3ZlIGdvdCB0aGUgcmVzcG9uc2UuCmBXb3J0aEZ1enppbmc6IGZhbHNlYAoKVGhlIHJhdGlvbmFsZT8gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgTWVsbGFub3ggYG1seDVgIGhhcmR3YXJlIGRyaXZlciwgYW5kIGl0IGxvb2tzIHNwZWNpZmljYWxseSB0byB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZS4gQmVjYXVzZSB0aGlzIGRyaXZlciBmdW5kYW1lbnRhbGx5IHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQsIGFuZCBpdCYjMzk7cyBub3QgZW11bGF0ZWQgb3Igc2ltdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLCB0aGUgY29kZSBwYXRocyBzaW1wbHkgKndvbiYjMzk7dCogYmUgZXhlcmNpc2VkIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMTo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgaGFyZHdhcmUgZHJpdmVyIChzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIGZlYXR1cmUpLiBTaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGhhcmR3YXJlIGRyaXZlciAoc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBmZWF0dXJlKS4gU2luY2UgdGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIxOjQwOjU0LjU5MjIxMTA5N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTI0MjE1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGhhcmR3YXJlIGRyaXZlciAoc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBmZWF0dXJlKS4gU2luY2UgdGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDA6NTQuNTkyMjIwMzI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU2NjY2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlNzkyZGQwNTFiMDM1ZDE0YmZkYjU1YjhkYjY0NjIzZmM4NGI4YmI4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjE6NDA6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxcbmluZGV4IDIyNzBlMmU1NTBkZDllLi4zY2M3MjgzYjYyMTVlMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oXFxuQEAgLTEwMTYsNyArMTAxNiw3IEBAIHN0cnVjdCBtbHg1ZV9wcm9maWxlIHtcXG4gXFx0dm9pZFxcdCgqY2xlYW51cF9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiBcXHRpbnRcXHQoKmluaXRfdHgpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gXFx0dm9pZFxcdCgqY2xlYW51cF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbi1cXHR2b2lkXFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4rXFx0aW50XFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gXFx0dm9pZFxcdCgqZGlzYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiBcXHRpbnRcXHQoKnVwZGF0ZV9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiBcXHR2b2lkXFx0KCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbmluZGV4IDA5MWI4MGE2NzE4OWRkLi40OTczZmI0NzNmZjAyMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oXFxuQEAgLTg4LDEzICs4OCwxOCBAQCBlbnVtIHtcXG4gI2lmZGVmIENPTkZJR19NTFg1X0VOX0FSRlNcXG4gXFx0TUxYNUVfQVJGU19GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXFxuICNlbmRpZlxcbi0jaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9JUFNFQykgfHwgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXFxuKyNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX0lQU0VDKVxcbiBcXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgKyAxLFxcbiBcXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfRVJSX0xFVkVMLFxcbiBcXHRNTFg1RV9BQ0NFTF9GU19QT0xfRlRfTEVWRUwsXFxuIFxcdE1MWDVFX0FDQ0VMX0ZTX1BPTF9NSVNTX0ZUX0xFVkVMLFxcbiBcXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfUk9DRV9MRVZFTCxcXG4gI2VuZGlmXFxuKyNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcXG4rXFx0TUxYNUVfQUNDRUxfRlNfUFNQX0ZUX0xFVkVMID0gTUxYNUVfSU5ORVJfVFRDX0ZUX0xFVkVMICsgMSxcXG4rXFx0TUxYNUVfQUNDRUxfRlNfUFNQX0VSUl9GVF9MRVZFTCxcXG4rXFx0TUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMLFxcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCBtbHg1ZV9mbG93X3N0ZWVyaW5nO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXFxuaW5kZXggYjUyNmIzODk4YzIyZTAuLjNmMjEyZTQ2ZmMyZjllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcXG5AQCAtMjIwLDE4ICsyMjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfdHhfZmluaXNoKHN0cnVjdCBtbHg1ZV90eHFzcSAqc3EsXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3J4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRlcnIgPSBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhwcml2KTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRlcnIgPSBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHByaXYpO1xcbi1cXG4tb3V0Olxcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3J4KHByaXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG5AQCAtMjQyLDEyICsyMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4tXFx0aW50IGVycjtcXG4tXFxuLVxcdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHByaXYpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4gXFx0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF90eChwcml2KTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXFxuaW5kZXggZDlhZGI5OTNlNjRkOTUuLjczYjIzMjM3OTI2M2FhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xcbkBAIC0yMSw1MSArMjEsNTIgQEAgZW51bSBhY2NlbF9wc3Bfc3luZHJvbWUge1xcbiBcXHRQU1BfQkFEX1RSQUlMRVIsXFxuIH07XFxuIFxcbi1zdHJ1Y3QgbWx4NWVfcHNwX3R4IHtcXG4rc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSB7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmZnO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4tXFx0c3RydWN0IG11dGV4IG11dGV4OyAvKiBQcm90ZWN0IFBTUCBUWCBzdGVlcmluZyAqL1xcbi1cXHR1MzIgcmVmY250O1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqdHhfY291bnRlcjtcXG4gfTtcXG4gXFxuLXN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyIHtcXG4rc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSB7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpkcm9wX2dyb3VwO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmF1dGhfZmFpbF9ydWxlO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZXJyX3J1bGU7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpiYWRfcnVsZTtcXG4tXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqY29weV9tb2RpZnlfaGRyO1xcbiB9O1xcbiBcXG4tc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90IHtcXG4rc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlIHtcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICptaXNzX3J1bGU7XFxuIFxcdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKnJ4X21vZGlmeV9oZHI7XFxuLVxcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVmYXVsdF9kZXN0O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciByeF9lcnI7XFxuLVxcdHUzMiByZWZjbnQ7XFxuLVxcdHN0cnVjdCBtdXRleCBwcm90X211dGV4OyAvKiBwcm90ZWN0IEVTUDQvRVNQNiBwcm90b2NvbCAqL1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZGVmX3J1bGU7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xcbiB9O1xcbiBcXG4tc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCB7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCBmc19wcm90W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfY291bnRlcjtcXG4tXFx0c3RydWN0IG1seDVfZmMgKnJ4X2F1dGhfZmFpbF9jb3VudGVyO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XFxuLVxcdHN0cnVjdCBtbHg1X2ZjICpyeF9iYWRfY291bnRlcjtcXG4rc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqdWRwX3J1bGVzW0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xcbiB9O1xcbiBcXG4gc3RydWN0IG1seDVlX3BzcF9mcyB7XFxuIFxcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcXG4tXFx0LyogUnggbWFuYWdlICovXFxuK1xcdHN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyO1xcbitcXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHR4O1xcbitcXG4rXFx0LyogUnggKi9cXG4gXFx0c3RydWN0IG1seDVlX2Zsb3dfc3RlZXJpbmcgKmZzO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICpyeF9mcztcXG4rXFx0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XFxuK1xcdHN0cnVjdCBtbHg1X2ZjICpyeF9hdXRoX2ZhaWxfY291bnRlcjtcXG4rXFx0c3RydWN0IG1seDVfZmMgKnJ4X2Vycl9jb3VudGVyO1xcbitcXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XFxuK1xcbitcXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgZGVjcnlwdFtBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcXG4rXFx0c3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSBjaGVjaztcXG4rXFx0c3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSByeDtcXG4gfTtcXG4gXFxuIC8qIFBTUCBSWCBmbG93IHN0ZWVyaW5nICovXFxuQEAgLTc3LDQ0ICs3OCwyMDAgQEAgc3RhdGljIGVudW0gbWx4NV90cmFmZmljX3R5cGVzIGZzX3BzcDJ0dChlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIGkpXFxuIFxcdHJldHVybiBNTFg1X1RUX0lQVjZfVURQO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2RlbF9ydWxlcyhzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyICpmdF9hdHRyLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKipmdClcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0KmZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsIGZ0X2F0dHIpO1xcbitcXHRpZiAoSVNfRVJSKCpmdCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUigqZnQpO1xcbitcXHRcXHQqZnQgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICoqdGFibGUpXFxuIHtcXG4tXFx0aWYgKHJ4X2Vyci1cXHUwMDNlYmFkX3J1bGUpIHtcXG4tXFx0XFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWJhZF9ydWxlKTtcXG4tXFx0XFx0cnhfZXJyLVxcdTAwM2ViYWRfcnVsZSA9IE5VTEw7XFxuK1xcdGlmICgqdGFibGUpIHtcXG4rXFx0XFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoKnRhYmxlKTtcXG4rXFx0XFx0KnRhYmxlID0gTlVMTDtcXG4gXFx0fVxcbit9XFxuIFxcbi1cXHRpZiAocnhfZXJyLVxcdTAwM2VlcnJfcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlZXJyX3J1bGUpO1xcbi1cXHRcXHRyeF9lcnItXFx1MDAzZWVycl9ydWxlID0gTlVMTDtcXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxcbit7XFxuK1xcdGlmICgqcnVsZSkge1xcbitcXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKCpydWxlKTtcXG4rXFx0XFx0KnJ1bGUgPSBOVUxMO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cClcXG4re1xcbitcXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcXG4rXFx0dTMyICppbiA9IGt2emFsbG9jKGlubGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0aW50IGVyciA9IDA7XFxuIFxcbi1cXHRpZiAocnhfZXJyLVxcdTAwM2VhdXRoX2ZhaWxfcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xcbi1cXHRcXHRyeF9lcnItXFx1MDAzZWF1dGhfZmFpbF9ydWxlID0gTlVMTDtcXG4rXFx0aWYgKCFpbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRNTFg1X1NFVChjcmVhdGVfZmxvd19ncm91cF9pbiwgaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVxcdTAwM2VtYXhfZnRlIC0gMSk7XFxuK1xcdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBpbiwgZW5kX2Zsb3dfaW5kZXgsIGZ0LVxcdTAwM2VtYXhfZnRlIC0gMSk7XFxuK1xcdCpncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGluKTtcXG4rXFx0aWYgKElTX0VSUigqZ3JvdXApKSB7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoKmdyb3VwKTtcXG4rXFx0XFx0Kmdyb3VwID0gTlVMTDtcXG4gXFx0fVxcbitcXHRrdmZyZWUoaW4pO1xcbiBcXG4tXFx0aWYgKHJ4X2Vyci1cXHUwMDNlcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlcnVsZSk7XFxuLVxcdFxcdHJ4X2Vyci1cXHUwMDNlcnVsZSA9IE5VTEw7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoc3RydWN0IG1seDVfZmxvd19ncm91cCAqKmdyb3VwKVxcbit7XFxuK1xcdGlmICgqZ3JvdXApIHtcXG4rXFx0XFx0bWx4NV9kZXN0cm95X2Zsb3dfZ3JvdXAoKmdyb3VwKTtcXG4rXFx0XFx0Kmdyb3VwID0gTlVMTDtcXG4gXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKVxcbit7XFxuK1xcdCpjb3VudGVyID0gbWx4NV9mY19jcmVhdGUoZGV2LCBmYWxzZSk7XFxuK1xcdGlmIChJU19FUlIoKmNvdW50ZXIpKSB7XFxuK1xcdFxcdGludCBlcnIgPSBQVFJfRVJSKCpjb3VudGVyKTtcXG4rXFxuK1xcdFxcdCpjb3VudGVyID0gTlVMTDtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuLVxcdGlmIChyeF9lcnItXFx1MDAzZWNvcHlfbW9kaWZ5X2hkcikge1xcbi1cXHRcXHRtbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhmcy1cXHUwMDNlbWRldiwgcnhfZXJyLVxcdTAwM2Vjb3B5X21vZGlmeV9oZHIpO1xcbi1cXHRcXHRyeF9lcnItXFx1MDAzZWNvcHlfbW9kaWZ5X2hkciA9IE5VTEw7XFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtbHg1X2ZjICoqY291bnRlcilcXG4re1xcbitcXHRpZiAoKmNvdW50ZXIpIHtcXG4rXFx0XFx0bWx4NV9mY19kZXN0cm95KGRldiwgKmNvdW50ZXIpO1xcbitcXHRcXHQqY291bnRlciA9IE5VTEw7XFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnRfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlICpyeClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspXFxuK1xcdFxcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZyeC1cXHUwMDNldWRwX3J1bGVzW2ldKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNnJ4LVxcdTAwM2VtaXNzX3J1bGUpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZyeC1cXHUwMDNlbWlzc19ncm91cCk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFxcdTAwMjZyeC1cXHUwMDNlZnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpXFxuIHtcXG4tXFx0YWNjZWxfcHNwX2ZzX3J4X2Vycl9kZWxfcnVsZXMoZnMsIHJ4X2Vycik7XFxuK1xcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cXHUwMDNlZnMsIGZhbHNlKTtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdID0ge307XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XFxuK1xcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXFx1MDAzZW1kZXY7XFxuK1xcdE1MWDVfREVDTEFSRV9GTE9XX0FDVChmbG93X2FjdCk7XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XFxuK1xcdGludCBpLCBlcnIgPSAwO1xcbitcXG4rXFx0c3BlYyA9IGt6YWxsb2Nfb2JqKCpzcGVjKTtcXG4rXFx0aWYgKCFzcGVjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgKyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTO1xcbitcXHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfUFNQX1JYX0ZUX0xFVkVMO1xcbitcXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcXG4rXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcXHUwMDI2ZnRfYXR0ciwgXFx1MDAyNnJ4LVxcdTAwM2VmdCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAocnhfZXJyLVxcdTAwM2VmdCkge1xcbi1cXHRcXHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShyeF9lcnItXFx1MDAzZWZ0KTtcXG4tXFx0XFx0cnhfZXJyLVxcdTAwM2VmdCA9IE5VTEw7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChyeC1cXHUwMDNlZnQsIFxcdTAwMjZyeC1cXHUwMDNlbWlzc19ncm91cCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4rXFxuK1xcdC8qIEFkZCBtaXNzIHJ1bGUgKi9cXG4rXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4rXFx0XFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xcbitcXHRmbG93X2FjdC5mbGFncyA9IEZMT1dfQUNUX0lHTk9SRV9GTE9XX0xFVkVMO1xcbitcXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xcbitcXHRkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTtcXG4rXFx0ZGVzdFsxXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcXG4rXFx0ZGVzdFsxXS5jb3VudGVyID0gZnMtXFx1MDAzZXJ4X2NvdW50ZXI7XFxuK1xcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4LVxcdTAwM2VmdCwgTlVMTCwgXFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcXG4rXFx0aWYgKElTX0VSUihydWxlKSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggcnVsZSwgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcdH1cXG4rXFx0cngtXFx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XFxuK1xcbitcXHQvKiBBZGQgVURQIHY0L3Y2IHJ1bGVzICovXFxuK1xcdHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhX2VuYWJsZSA9IE1MWDVfTUFUQ0hfT1VURVJfSEVBREVSUztcXG4rXFx0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfcGFyYW0sIHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhLFxcbitcXHRcXHRcXHQgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uKTtcXG4rXFx0TUxYNV9TRVRfVE9fT05FUyhmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtXFx1MDAzZW1hdGNoX2NyaXRlcmlhLFxcbitcXHRcXHRcXHQgaXBfcHJvdG9jb2wpO1xcbitcXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtXFx1MDAzZW1hdGNoX3ZhbHVlLCBpcF9wcm90b2NvbCxcXG4rXFx0XFx0IElQUFJPVE9fVURQKTtcXG4rXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4rXFx0XFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xcbitcXHRmbG93X2FjdC5mbGFncyA9IDA7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspIHtcXG4rXFx0XFx0aW50IHZlcnNpb24gPSBpID09IEFDQ0VMX0ZTX1BTUDQgPyA0IDogNjtcXG4rXFxuK1xcdFxcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsXFxuK1xcdFxcdFxcdCBvdXRlcl9oZWFkZXJzLmlwX3ZlcnNpb24sIHZlcnNpb24pO1xcbitcXHRcXHRkZXN0WzBdID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XFxuK1xcdFxcdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuK1xcdFxcdGRlc3RbMV0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9jb3VudGVyO1xcbitcXHRcXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgZGVzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgMik7XFxuK1xcdFxcdGlmIChJU19FUlIocnVsZSkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihydWxlKTtcXG4rXFx0XFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IFVEUCVkIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgICB2ZXJzaW9uLCBlcnIpO1xcbitcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cngtXFx1MDAzZXVkcF9ydWxlc1tpXSA9IHJ1bGU7XFxuK1xcdH1cXG4rXFx0Z290byBvdXRfc3BlYztcXG4rXFxuK291dF9lcnI6XFxuK1xcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTtcXG4rb3V0X3NwZWM6XFxuK1xcdGt2ZnJlZShzcGVjKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljXFxuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spXFxuK3tcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmNoZWNrLVxcdTAwM2ViYWRfcnVsZSk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFxcdTAwMjZjaGVjay1cXHUwMDNlZXJyX3J1bGUpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcXHUwMDI2Y2hlY2stXFx1MDAzZWF1dGhfZmFpbF9ydWxlKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmNoZWNrLVxcdTAwM2VydWxlKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcXHUwMDI2Y2hlY2stXFx1MDAzZWRyb3BfZ3JvdXApO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcXHUwMDI2Y2hlY2stXFx1MDAzZWZ0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYyxcXG5AQCAtMTI5LDE1ICsyODYsMzUgQEAgc3RhdGljIHZvaWQgYWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYyxcXG4gXFx0TUxYNV9TRVQoZnRlX21hdGNoX3NldF9taXNjMiwgbWlzY19wYXJhbXNfMiwgcHNwX3N5bmRyb21lLCBzeW5kcm9tZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90LFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2VyciAqcnhfZXJyKVxcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpXFxuIHtcXG4tXFx0dTggYWN0aW9uW01MWDVfVU5fU1pfQllURVMoc2V0X2FkZF9jb3B5X2FjdGlvbl9pbl9hdXRvKV0gPSB7fTtcXG4rXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XFxuK1xcdHN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfFxcbitcXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcXG4rXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcXG4rXFx0ZGVzdC5jb3VudGVyID0gY291bnRlcjtcXG4rXFx0KnJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIFxcdTAwMjZkZXN0LCAxKTtcXG4rXFx0aWYgKElTX0VSUigqcnVsZSkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUigqcnVsZSk7XFxuK1xcdFxcdCpydWxlID0gTlVMTDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWNcXG4raW50IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2NoZWNrX3RhYmxlICpjaGVjaylcXG4re1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xcbitcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cXHUwMDNlbWRldjtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2FjdCBmbG93X2FjdCA9IHt9O1xcbi1cXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZnRlO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XFxuIFxcdGludCBlcnIgPSAwO1xcbkBAIC0xNDYsMTc0ICszMjMsOTcgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbiBcXHRpZiAoIXNwZWMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0LyogQWN0aW9uIHRvIGNvcHkgNyBiaXQgcHNwX3N5bmRyb21lIHRvIHJlZ0JbMjM6MjldICovXFxuLVxcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xcbi1cXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBzcmNfZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX1BTUF9TWU5EUk9NRSk7XFxuLVxcdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIHNyY19vZmZzZXQsIDApO1xcbi1cXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDcpO1xcbi1cXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3RfZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcXG4tXFx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X29mZnNldCwgMjMpO1xcbitcXHRmdF9hdHRyLm1heF9mdGUgPSA0O1xcbitcXHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XFxuK1xcdGZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMjtcXG4rXFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUw7XFxuK1xcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcXHUwMDI2ZnRfYXR0ciwgXFx1MDAyNmNoZWNrLVxcdTAwM2VmdCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2Vycihmcy1cXHUwMDNlbWRldixcXG4rXFx0XFx0XFx0ICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBjaGVjayBmdCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4rXFx0fVxcbiBcXG4tXFx0bW9kaWZ5X2hkciA9IG1seDVfbW9kaWZ5X2hlYWRlcl9hbGxvYyhtZGV2LCBNTFg1X0ZMT1dfTkFNRVNQQUNFX0tFUk5FTCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgMSwgYWN0aW9uKTtcXG4tXFx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGFsbG9jIHBzcCBjb3B5IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dF9zcGVjO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoY2hlY2stXFx1MDAzZWZ0LCBcXHUwMDI2Y2hlY2stXFx1MDAzZWRyb3BfZ3JvdXApO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG1seDVfY29yZV9lcnIoZnMtXFx1MDAzZW1kZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggY2hlY2sgZHJvcCBncm91cCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbiBcXG4gXFx0YWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9PSyk7XFxuIFxcdC8qIGNyZWF0ZSBmdGUgKi9cXG4tXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX01PRF9IRFIgfFxcbi1cXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XFxuLVxcdFxcdFxcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xcbi1cXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4tXFx0ZGVzdFswXS50eXBlID0gZnNfcHJvdC1cXHUwMDNlZGVmYXVsdF9kZXN0LnR5cGU7XFxuLVxcdGRlc3RbMF0uZnQgPSBmc19wcm90LVxcdTAwM2VkZWZhdWx0X2Rlc3QuZnQ7XFxuLVxcdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3RbMV0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9mcy1cXHUwMDNlcnhfY291bnRlcjtcXG4tXFx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDIpO1xcbitcXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XFxuK1xcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuK1xcdGRlc3QuZnQgPSBmcy1cXHUwMDNlcnguZnQ7XFxuK1xcdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoY2hlY2stXFx1MDAzZWZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIFxcdTAwMjZkZXN0LCAxKTtcXG4gXFx0aWYgKElTX0VSUihmdGUpKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIoZnRlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGVyciBjb3B5IHJ1bGUgZXJyPSVkXFxcXG5cXFwiLCBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIG9rIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBlcnIpO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0cnhfZXJyLVxcdTAwM2VydWxlID0gZnRlO1xcbitcXHRjaGVjay1cXHUwMDNlcnVsZSA9IGZ0ZTtcXG4gXFxuIFxcdC8qIGFkZCBhdXRoIGZhaWwgZHJvcCBydWxlICovXFxuIFxcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XFxuIFxcdGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfSUNWX0ZBSUwpO1xcbi1cXHQvKiBjcmVhdGUgZnRlICovXFxuLVxcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcXG4tXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XFxuLVxcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3RbMF0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9mcy1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXI7XFxuLVxcdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAxKTtcXG4tXFx0aWYgKElTX0VSUihmdGUpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZnRlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRlcnIgPSBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShjaGVjay1cXHUwMDNlZnQsIHNwZWMsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGZzLVxcdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNmNoZWNrLVxcdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dF9kcm9wX3J1bGU7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRyeF9lcnItXFx1MDAzZWF1dGhfZmFpbF9ydWxlID0gZnRlO1xcbiBcXG4gXFx0LyogYWRkIGZyYW1pbmcgZHJvcCBydWxlICovXFxuIFxcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XFxuIFxcdGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzcGVjLCBQU1BfQkFEX1RSQUlMRVIpO1xcbi1cXHQvKiBjcmVhdGUgZnRlICovXFxuLVxcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcXG4tXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XFxuLVxcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3RbMF0uY291bnRlciA9IGZzLVxcdTAwM2VyeF9mcy1cXHUwMDNlcnhfZXJyX2NvdW50ZXI7XFxuLVxcdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAxKTtcXG4tXFx0aWYgKElTX0VSUihmdGUpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZnRlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiZmFpbCB0byBhZGQgcHNwIHJ4IGZyYW1pbmcgZXJyIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVxcdTAwM2VmdCwgc3BlYywgZnMtXFx1MDAzZXJ4X2Vycl9jb3VudGVyLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y2hlY2stXFx1MDAzZWVycl9ydWxlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgZnJhbWluZyBkcm9wIHJ1bGUgZXJyPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBlcnIpO1xcbi1cXHRcXHRnb3RvIG91dF9kcm9wX2F1dGhfZmFpbF9ydWxlO1xcbitcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0cnhfZXJyLVxcdTAwM2VlcnJfcnVsZSA9IGZ0ZTtcXG4gXFxuIFxcdC8qIGFkZCBtaXNjLiBlcnJvcnMgZHJvcCBydWxlICovXFxuIFxcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcXG4tXFx0bWVtc2V0KFxcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XFxuLVxcdC8qIGNyZWF0ZSBmdGUgKi9cXG4tXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfFxcbi1cXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcXG4tXFx0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcXG4tXFx0ZGVzdFswXS5jb3VudGVyID0gZnMtXFx1MDAzZXJ4X2ZzLVxcdTAwM2VyeF9iYWRfY291bnRlcjtcXG4tXFx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWZ0LCBzcGVjLCBcXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xcbi1cXHRpZiAoSVNfRVJSKGZ0ZSkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihmdGUpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVxcdTAwM2VmdCwgc3BlYywgZnMtXFx1MDAzZXJ4X2JhZF9jb3VudGVyLFxcbitcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2Y2hlY2stXFx1MDAzZWJhZF9ydWxlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsXFxuK1xcdFxcdFxcdCAgICAgIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggY2hlY2sgbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgICAgIGVycik7XFxuLVxcdFxcdGdvdG8gb3V0X2Ryb3BfZXJyb3JfcnVsZTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuLVxcdHJ4X2Vyci1cXHUwMDNlYmFkX3J1bGUgPSBmdGU7XFxuLVxcbi1cXHRyeF9lcnItXFx1MDAzZWNvcHlfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XFxuIFxcbiBcXHRnb3RvIG91dF9zcGVjO1xcbiBcXG4tb3V0X2Ryb3BfZXJyb3JfcnVsZTpcXG4tXFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZWVycl9ydWxlKTtcXG4tXFx0cnhfZXJyLVxcdTAwM2VlcnJfcnVsZSA9IE5VTEw7XFxuLW91dF9kcm9wX2F1dGhfZmFpbF9ydWxlOlxcbi1cXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xcbi1cXHRyeF9lcnItXFx1MDAzZWF1dGhfZmFpbF9ydWxlID0gTlVMTDtcXG4tb3V0X2Ryb3BfcnVsZTpcXG4tXFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXFx1MDAzZXJ1bGUpO1xcbi1cXHRyeF9lcnItXFx1MDAzZXJ1bGUgPSBOVUxMO1xcbi1vdXQ6XFxuLVxcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKG1kZXYsIG1vZGlmeV9oZHIpO1xcbitvdXRfZXJyOlxcbitcXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShjaGVjayk7XFxuIG91dF9zcGVjOlxcbiBcXHRrZnJlZShzcGVjKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdCxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXFxuK3N0YXRpYyB2b2lkXFxuK2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdClcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuLVxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XFxuLVxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4tXFx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcXG4tXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xcbi1cXHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0VSUl9MRVZFTDsgLy8gTUxYNUVfQUNDRUxfRlNfVENQX0ZUX0xFVkVMXFxuLVxcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbi1cXHRmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBcXHUwMDI2ZnRfYXR0cik7XFxuLVxcdGlmIChJU19FUlIoZnQpKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZnQpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKGZzLVxcdTAwM2VtZGV2LCBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGlubGluZSBmdCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4tXFxuLVxcdHJ4X2Vyci1cXHUwMDNlZnQgPSBmdDtcXG4tXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShmcywgZnNfcHJvdCwgcnhfZXJyKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfZXJyOlxcbi1cXHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZShmdCk7XFxuLVxcdHJ4X2Vyci1cXHUwMDNlZnQgPSBOVUxMO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdClcXG4te1xcbi1cXHRpZiAoZnNfcHJvdC1cXHUwMDNlZGVmX3J1bGUpIHtcXG4tXFx0XFx0bWx4NV9kZWxfZmxvd19ydWxlcyhmc19wcm90LVxcdTAwM2VkZWZfcnVsZSk7XFxuLVxcdFxcdGZzX3Byb3QtXFx1MDAzZWRlZl9ydWxlID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZzX3Byb3QtXFx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcXG4tXFx0XFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXFx1MDAzZW1kZXYsIGZzX3Byb3QtXFx1MDAzZXJ4X21vZGlmeV9oZHIpO1xcbi1cXHRcXHRmc19wcm90LVxcdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSkge1xcbi1cXHRcXHRtbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSk7XFxuLVxcdFxcdGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSA9IE5VTEw7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChmc19wcm90LVxcdTAwM2VtaXNzX2dyb3VwKSB7XFxuLVxcdFxcdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKGZzX3Byb3QtXFx1MDAzZW1pc3NfZ3JvdXApO1xcbi1cXHRcXHRmc19wcm90LVxcdTAwM2VtaXNzX2dyb3VwID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGZzX3Byb3QtXFx1MDAzZWZ0KSB7XFxuLVxcdFxcdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKGZzX3Byb3QtXFx1MDAzZWZ0KTtcXG4tXFx0XFx0ZnNfcHJvdC1cXHUwMDNlZnQgPSBOVUxMO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlcnVsZSk7XFxuK1xcdGlmIChkZWNyeXB0LVxcdTAwM2VyeF9tb2RpZnlfaGRyKSB7XFxuK1xcdFxcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVxcdTAwM2VtZGV2LCBkZWNyeXB0LVxcdTAwM2VyeF9tb2RpZnlfaGRyKTtcXG4rXFx0XFx0ZGVjcnlwdC1cXHUwMDNlcnhfbW9kaWZ5X2hkciA9IE5VTEw7XFxuIFxcdH1cXG4rXFx0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXFx1MDAyNmRlY3J5cHQtXFx1MDAzZW1pc3NfcnVsZSk7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXFx1MDAyNmRlY3J5cHQtXFx1MDAzZW1pc3NfZ3JvdXApO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlZnQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcXG5AQCAtMzI1LDcwICs0MjUsNjQgQEAgc3RhdGljIHZvaWQgc2V0dXBfZnRlX3VkcF9wc3Aoc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLCB1MTYgdWRwX3BvcnQpXFxuIFxcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cXHUwMDNlbWF0Y2hfdmFsdWUsIGlwX3Byb3RvY29sLCBJUFBST1RPX1VEUCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXFxuK3N0YXRpYyBpbnRcXG4rYWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSAqZGVjcnlwdCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uICpkZWZhdWx0X2Rlc3QpXFxuIHtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVxcdTAwM2VmcywgZmFsc2UpO1xcbiBcXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xcbi1cXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcXG4gXFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqbW9kaWZ5X2hkciA9IE5VTEw7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xcbiBcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVxcdTAwM2VtZGV2O1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICptaXNzX2dyb3VwO1xcbiBcXHRNTFg1X0RFQ0xBUkVfRkxPV19BQ1QoZmxvd19hY3QpO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcXG4tXFx0dTMyICpmbG93X2dyb3VwX2luO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuLVxcdGZsb3dfZ3JvdXBfaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7XFxuIFxcdHNwZWMgPSBrdnphbGxvY19vYmooKnNwZWMpO1xcbi1cXHRpZiAoIWZsb3dfZ3JvdXBfaW4gfHwgIXNwZWMpIHtcXG4tXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4rXFx0aWYgKCFzcGVjKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdC8qIENyZWF0ZSBGVCAqL1xcbiBcXHRmdF9hdHRyLm1heF9mdGUgPSAyO1xcbi1cXHRmdF9hdHRyLmxldmVsID0gTUxYNUVfQUNDRUxfRlNfRVNQX0ZUX0xFVkVMO1xcbi1cXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcXG4rXFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9GVF9MRVZFTDtcXG4gXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xcbiBcXHRmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDE7XFxuLVxcdGZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsIFxcdTAwMjZmdF9hdHRyKTtcXG4tXFx0aWYgKElTX0VSUihmdCkpIHtcXG4tXFx0XFx0ZXJyID0gUFRSX0VSUihmdCk7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBmdCBlcnI9JWRcXFxcblxcXCIsIGVycik7XFxuK1xcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcXHUwMDI2ZnRfYXR0ciwgXFx1MDAyNmRlY3J5cHQtXFx1MDAzZWZ0KTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZGVjcnlwdCBmdCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRmc19wcm90LVxcdTAwM2VmdCA9IGZ0O1xcbiBcXG4gXFx0LyogQ3JlYXRlIG1pc3NfZ3JvdXAgKi9cXG4tXFx0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGZsb3dfZ3JvdXBfaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVxcdTAwM2VtYXhfZnRlIC0gMSk7XFxuLVxcdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBmbG93X2dyb3VwX2luLCBlbmRfZmxvd19pbmRleCwgZnQtXFx1MDAzZW1heF9mdGUgLSAxKTtcXG4tXFx0bWlzc19ncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGZsb3dfZ3JvdXBfaW4pO1xcbi1cXHRpZiAoSVNfRVJSKG1pc3NfZ3JvdXApKSB7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIobWlzc19ncm91cCk7XFxuLVxcdFxcdG1seDVfY29yZV9lcnIobWRldiwgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX2dyb3VwIGVycj0lZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKGRlY3J5cHQtXFx1MDAzZWZ0LCBcXHUwMDI2ZGVjcnlwdC1cXHUwMDNlbWlzc19ncm91cCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgbWlzc19ncm91cCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRmc19wcm90LVxcdTAwM2VtaXNzX2dyb3VwID0gbWlzc19ncm91cDtcXG4gXFxuIFxcdC8qIENyZWF0ZSBtaXNzIHJ1bGUgKi9cXG4tXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmZzX3Byb3QtXFx1MDAzZWRlZmF1bHRfZGVzdCwgMSk7XFxuK1xcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcXG4rXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZGVjcnlwdC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgZGVmYXVsdF9kZXN0LFxcbitcXHRcXHRcXHRcXHQgICAxKTtcXG4gXFx0aWYgKElTX0VSUihydWxlKSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJ1bGUpO1xcbi1cXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggbWlzc19ydWxlIGVycj0lZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGRlY3J5cHQgbWlzc19ydWxlIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgZXJyKTtcXG4gXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuLVxcdGZzX3Byb3QtXFx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XFxuK1xcdGRlY3J5cHQtXFx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XFxuIFxcbi1cXHQvKiBBZGQgZGVmYXVsdCBSeCBwc3AgcnVsZSAqL1xcbitcXHQvKiBBZGQgUFNQIFJYIGRlY3J5cHQgcnVsZSAqL1xcbiBcXHRzZXR1cF9mdGVfdWRwX3BzcChzcGVjLCBQU1BfREVGQVVMVF9VRFBfUE9SVCk7XFxuIFxcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xcbiBcXHQvKiBTZXQgYml0WzMxLCAzMF0gUFNQIG1hcmtlciAqL1xcbi1cXHQvKiBTZXQgYml0WzI5LTIzXSBwc3Bfc3luZHJvbWUgaXMgc2V0IGluIGVycm9yIEZUICovXFxuICNkZWZpbmUgTUxYNUVfUFNQX01BUktFUl9CSVQgKEJJVCgzMCkgfCBCSVQoMzEpKVxcbiBcXHRNTFg1X1NFVChzZXRfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX1NFVCk7XFxuIFxcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcXG5AQCAtNDAzLDI3NSArNDk3LDE1OSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGVfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuIFxcdFxcdG1vZGlmeV9oZHIgPSBOVUxMO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0ZnNfcHJvdC1cXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XFxuK1xcdGRlY3J5cHQtXFx1MDAzZXJ4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xcbiBcXG4gXFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcXG4gXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ1JZUFRPX0RFQ1JZUFQgfFxcbiBcXHRcXHRcXHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSO1xcbiBcXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcXG4gXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4tXFx0ZGVzdC5mdCA9IGZzX3Byb3QtXFx1MDAzZXJ4X2Vyci5mdDtcXG4tXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnNfcHJvdC1cXHUwMDNlZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmRlc3QsIDEpO1xcbitcXHRkZXN0LmZ0ID0gZnMtXFx1MDAzZWNoZWNrLmZ0O1xcbitcXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhkZWNyeXB0LVxcdTAwM2VmdCwgc3BlYywgXFx1MDAyNmZsb3dfYWN0LCBcXHUwMDI2ZGVzdCwgMSk7XFxuIFxcdGlmIChJU19FUlIocnVsZSkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihydWxlKTtcXG4tXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LFxcbi1cXHRcXHRcXHQgICAgICBcXFwiZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgZXJyLCBmbG93X2FjdC5hY3Rpb24pO1xcbitcXHRcXHRtbHg1X2NvcmVfZXJyKG1kZXYsIFxcXCJmYWlsIHRvIGFkZCBwc3AgcnggZGVjcnlwdCBydWxlLCBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgIGVycik7XFxuIFxcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbiBcXG4tXFx0ZnNfcHJvdC1cXHUwMDNlZGVmX3J1bGUgPSBydWxlO1xcbi1cXHRnb3RvIG91dDtcXG4rXFx0ZGVjcnlwdC1cXHUwMDNlcnVsZSA9IHJ1bGU7XFxuK1xcdGdvdG8gb3V0X3NwZWM7XFxuIFxcbiBvdXRfZXJyOlxcbi1cXHRhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShmcywgZnNfcHJvdCk7XFxuLW91dDpcXG4tXFx0a3ZmcmVlKGZsb3dfZ3JvdXBfaW4pO1xcbitcXHRhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9kZXN0cm95KGZzLCBkZWNyeXB0KTtcXG4rb3V0X3NwZWM6XFxuIFxcdGt2ZnJlZShzcGVjKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFxuLVxcdC8qIFRoZSBuZXRkZXYgdW5yZWcgYWxyZWFkeSBoYXBwZW5lZCwgc28gYWxsIG9mZmxvYWRlZCBydWxlIGFyZSBhbHJlYWR5IHJlbW92ZWQgKi9cXG4tXFx0ZnNfcHJvdCA9IFxcdTAwMjZhY2NlbF9wc3AtXFx1MDAzZWZzX3Byb3RbdHlwZV07XFxuLVxcbi1cXHRhY2NlbF9wc3BfZnNfcnhfZnNfZGVzdHJveShmcywgZnNfcHJvdCk7XFxuLVxcbi1cXHRhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoZnMsIFxcdTAwMjZmc19wcm90LVxcdTAwM2VyeF9lcnIpO1xcbitcXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuK1xcdGludCBpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdC8qIGRpc2Nvbm5lY3QgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xcbitcXHRcXHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpKTtcXG4rXFx0XFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNyeXB0W2ldKTtcXG4rXFx0fVxcbitcXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcXHUwMDI2ZnMtXFx1MDAzZWNoZWNrKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXFx1MDAyNmZzLVxcdTAwM2VyeCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cXHUwMDNlZnMsIGZhbHNlKTtcXG4tXFx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRhY2NlbF9wc3AgPSBmcy1cXHUwMDNlcnhfZnM7XFxuLVxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W3R5cGVdO1xcbitcXHRpbnQgaSwgZXJyO1xcbiBcXG4tXFx0ZnNfcHJvdC1cXHUwMDNlZGVmYXVsdF9kZXN0ID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSk7XFxuLVxcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZXJyX2NyZWF0ZV9mdChmcywgZnNfcHJvdCwgXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXJ4X2Vycik7XFxuLVxcdGlmIChlcnIpXFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9mdF9jcmVhdGUoZnMsIFxcdTAwMjZmcy1cXHUwMDNlcngpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkZhaWxlZCBjcmVhdGluZyBSWCBzdGVlcmluZyB0YWJsZVxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuIFxcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0YWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KGZzLCBcXHUwMDI2ZnNfcHJvdC1cXHUwMDNlcnhfZXJyKTtcXG4tXFxuLVxcdHJldHVybiBlcnI7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxcbi17XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFx0c3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGM7XFxuLVxcdGludCBlcnIgPSAwO1xcbi1cXG4tXFx0aWYgKCFmcyB8fCAhZnMtXFx1MDAzZXJ4X2ZzKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdHR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXFx1MDAzZWZzLCBmYWxzZSk7XFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFx0ZnNfcHJvdCA9IFxcdTAwMjZhY2NlbF9wc3AtXFx1MDAzZWZzX3Byb3RbdHlwZV07XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXByb3RfbXV0ZXgpO1xcbi1cXHRpZiAoZnNfcHJvdC1cXHUwMDNlcmVmY250KyspXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0LyogY3JlYXRlIEZUICovXFxuLVxcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoZnMsIHR5cGUpO1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfY3JlYXRlKGZzLCBcXHUwMDI2ZnMtXFx1MDAzZWNoZWNrKTtcXG4gXFx0aWYgKGVycikge1xcbi1cXHRcXHRmc19wcm90LVxcdTAwM2VyZWZjbnQtLTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJGYWlsZWQgY3JlYXRpbmcgUlggY2hlY2sgc3RlZXJpbmcgdGFibGVcXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfZnQ7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIGNvbm5lY3QgKi9cXG4tXFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcXG4tXFx0ZGVzdC5mdCA9IGZzX3Byb3QtXFx1MDAzZWZ0O1xcbi1cXHRtbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSwgXFx1MDAyNmRlc3QpO1xcbi1cXG4tb3V0Olxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXByb3RfbXV0ZXgpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXFxuLXtcXG4tXFx0c3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGMgPSBtbHg1ZV9mc19nZXRfdHRjKGZzLVxcdTAwM2VmcywgZmFsc2UpO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFx0ZnNfcHJvdCA9IFxcdTAwMjZhY2NlbF9wc3AtXFx1MDAzZWZzX3Byb3RbdHlwZV07XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmZzX3Byb3QtXFx1MDAzZXByb3RfbXV0ZXgpO1xcbi1cXHRpZiAoLS1mc19wcm90LVxcdTAwM2VyZWZjbnQpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0LyogZGlzY29ubmVjdCAqL1xcbi1cXHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KHR5cGUpKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3Q7XFxuK1xcbitcXHRcXHRkZXN0ID0gbWx4NV90dGNfZ2V0X2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XFxuK1xcdFxcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShmcywgXFx1MDAyNmZzLVxcdTAwM2VkZWNyeXB0W2ldLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZGVzdCk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIkZhaWxlZCBjcmVhdGluZyBSWCBkZWNyeXB0IHN0ZWVyaW5nIHRhYmxlXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2RlY3J5cHRfZnQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XFxuK1xcdFxcdGRlc3QuZnQgPSBmcy1cXHUwMDNlZGVjcnlwdFtpXS5mdDtcXG4rXFx0XFx0bWx4NV90dGNfZndkX2Rlc3QodHRjLCBmc19wc3AydHQoaSksIFxcdTAwMjZkZXN0KTtcXG4rXFx0fVxcbiBcXG4tXFx0LyogcmVtb3ZlIEZUICovXFxuLVxcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KGZzLCB0eXBlKTtcXG4rXFx0cmV0dXJuIDA7XFxuIFxcbi1vdXQ6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZnNfcHJvdC1cXHUwMDNlcHJvdF9tdXRleCk7XFxuK2Vycl9kZWNyeXB0X2Z0OlxcbitcXHR3aGlsZSAoLS1pIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0bWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XFxuK1xcdFxcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIFxcdTAwMjZmcy1cXHUwMDNlZGVjcnlwdFtpXSk7XFxuK1xcdH1cXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koXFx1MDAyNmZzLVxcdTAwM2VjaGVjayk7XFxuK2Vycl9mdDpcXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXFx1MDAyNmZzLVxcdTAwM2VyeCk7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19jbGVhbnVwX3J4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XFxuLVxcdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcXG4tXFx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xcbi1cXG4tXFx0aWYgKCFmcy1cXHUwMDNlcnhfZnMpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGFjY2VsX3BzcCA9IGZzLVxcdTAwM2VyeF9mcztcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2JhZF9jb3VudGVyKTtcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcXG4tXFx0bWx4NV9mY19kZXN0cm95KGZzLVxcdTAwM2VtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XFxuLVxcdFxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W2ldO1xcbi1cXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZmc19wcm90LVxcdTAwM2Vwcm90X211dGV4KTtcXG4tXFx0XFx0V0FSTl9PTihmc19wcm90LVxcdTAwM2VyZWZjbnQpO1xcbi1cXHR9XFxuLVxcdGtmcmVlKGZzLVxcdTAwM2VyeF9mcyk7XFxuLVxcdGZzLVxcdTAwM2VyeF9mcyA9IE5VTEw7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXFx1MDAzZW1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZnMtXFx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy1cXHUwMDNlbWRldiwgXFx1MDAyNmZzLVxcdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XFxuK1xcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXFx1MDAzZW1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfY291bnRlcik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIHtcXG4tXFx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XFxuIFxcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXFx1MDAzZW1kZXY7XFxuLVxcdHN0cnVjdCBtbHg1X2ZjICpmbG93X2NvdW50ZXI7XFxuLVxcdGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgaTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGFjY2VsX3BzcCA9IGt6YWxsb2Nfb2JqKCphY2NlbF9wc3ApO1xcbi1cXHRpZiAoIWFjY2VsX3BzcClcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XFxuLVxcdFxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W2ldO1xcbi1cXHRcXHRtdXRleF9pbml0KFxcdTAwMjZmc19wcm90LVxcdTAwM2Vwcm90X211dGV4KTtcXG4tXFx0fVxcbi1cXG4tXFx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xcbi1cXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfY291bnRlcik7XFxuK1xcdGlmIChlcnIpIHtcXG4gXFx0XFx0bWx4NV9jb3JlX3dhcm4obWRldixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZmxvdyBjb3VudGVyIGVycj0lcGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBmbG93X2NvdW50ZXIpO1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7XFxuK1xcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZsb3cgY291bnRlciBlcnI9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBlcnIpO1xcbiBcXHRcXHRnb3RvIG91dF9lcnI7XFxuIFxcdH1cXG4tXFx0YWNjZWxfcHNwLVxcdTAwM2VyeF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xcbiBcXG4tXFx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xcbi1cXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG1seDVfY29yZV93YXJuKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIGZsb3dfY291bnRlcik7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcXG4tXFx0XFx0Z290byBvdXRfY291bnRlcl9lcnI7XFxuK1xcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0Z290byBvdXRfZXJyO1xcbiBcXHR9XFxuLVxcdGFjY2VsX3BzcC1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XFxuIFxcbi1cXHRmbG93X2NvdW50ZXIgPSBtbHg1X2ZjX2NyZWF0ZShtZGV2LCBmYWxzZSk7XFxuLVxcdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXFx1MDAyNmZzLVxcdTAwM2VyeF9lcnJfY291bnRlcik7XFxuK1xcdGlmIChlcnIpIHtcXG4gXFx0XFx0bWx4NV9jb3JlX3dhcm4obWRldixcXG4tXFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lcGVcXFxcblxcXCIsXFxuLVxcdFxcdFxcdCAgICAgICBmbG93X2NvdW50ZXIpO1xcbi1cXHRcXHRlcnIgPSBQVFJfRVJSKGZsb3dfY291bnRlcik7XFxuLVxcdFxcdGdvdG8gb3V0X2F1dGhfZmFpbF9jb3VudGVyX2VycjtcXG4rXFx0XFx0XFx0ICAgICAgIFxcXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRhY2NlbF9wc3AtXFx1MDAzZXJ4X2Vycl9jb3VudGVyID0gZmxvd19jb3VudGVyO1xcbiBcXG4tXFx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xcbi1cXHRpZiAoSVNfRVJSKGZsb3dfY291bnRlcikpIHtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFxcdTAwMjZmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG1seDVfY29yZV93YXJuKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGJhZCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ICAgICAgIGZsb3dfY291bnRlcik7XFxuLVxcdFxcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcXG4tXFx0XFx0Z290byBvdXRfZXJyX2NvdW50ZXJfZXJyO1xcbitcXHRcXHRcXHQgICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgICAgIGVycik7XFxuK1xcdFxcdGdvdG8gb3V0X2VycjtcXG4gXFx0fVxcbi1cXHRhY2NlbF9wc3AtXFx1MDAzZXJ4X2JhZF9jb3VudGVyID0gZmxvd19jb3VudGVyO1xcbi1cXG4tXFx0ZnMtXFx1MDAzZXJ4X2ZzID0gYWNjZWxfcHNwO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1vdXRfZXJyX2NvdW50ZXJfZXJyOlxcbi1cXHRtbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLVxcdTAwM2VyeF9lcnJfY291bnRlcik7XFxuLVxcdGFjY2VsX3BzcC1cXHUwMDNlcnhfZXJyX2NvdW50ZXIgPSBOVUxMO1xcbi1vdXRfYXV0aF9mYWlsX2NvdW50ZXJfZXJyOlxcbi1cXHRtbHg1X2ZjX2Rlc3Ryb3kobWRldiwgYWNjZWxfcHNwLVxcdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XFxuLVxcdGFjY2VsX3BzcC1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIgPSBOVUxMO1xcbi1vdXRfY291bnRlcl9lcnI6XFxuLVxcdG1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIpO1xcbi1cXHRhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIgPSBOVUxMO1xcbiBvdXRfZXJyOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XFxuLVxcdFxcdGZzX3Byb3QgPSBcXHUwMDI2YWNjZWxfcHNwLVxcdTAwM2Vmc19wcm90W2ldO1xcbi1cXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZmc19wcm90LVxcdTAwM2Vwcm90X211dGV4KTtcXG4tXFx0fVxcbi1cXHRrZnJlZShhY2NlbF9wc3ApO1xcbi1cXHRmcy1cXHUwMDNlcnhfZnMgPSBOVUxMO1xcbi1cXG4rXFx0YWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoZnMpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0aWYgKCFwcml2LVxcdTAwM2Vwc3ApXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspXFxuLVxcdFxcdGFjY2VsX3BzcF9mc19yeF9mdF9wdXQocHJpdi1cXHUwMDNlcHNwLVxcdTAwM2VmcywgaSk7XFxuLX1cXG4tXFxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4te1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcztcXG4tXFx0aW50IGVyciwgaTtcXG4tXFxuLVxcdGlmICghcHJpdi1cXHUwMDNlcHNwKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdGZzID0gcHJpdi1cXHUwMDNlcHNwLVxcdTAwM2VmcztcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTtcXG4tXFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuLW91dF9lcnI6XFxuLVxcdGktLTtcXG4tXFx0d2hpbGUgKGkgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KGZzLCBpKTtcXG4tXFx0XFx0LS1pO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRuZXRkZXZfbG9jayhwcml2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzKTtcXG4rXFx0bmV0ZGV2X3VubG9jayhwcml2LVxcdTAwM2VuZXRkZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlICp0eClcXG4ge1xcbiBcXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcXG5AQCAtNjgxLDcgKzY1OSw2IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4gXFx0dTMyICppbiwgKm1jLCAqb3V0ZXJfaGVhZGVyc19jO1xcbiBcXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqcnVsZTtcXG4gXFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcXG4gXFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XFxuIFxcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKmZnO1xcbiBcXHRpbnQgZXJyID0gMDtcXG5AQCAtNzAwLDggKzY3Nyw3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4gXFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX1BTUF9MRVZFTDtcXG4gXFx0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAxO1xcbiBcXG4tXFx0dHhfZnMgPSBmcy1cXHUwMDNldHhfZnM7XFxuLVxcdGZ0ID0gbWx4NV9jcmVhdGVfZmxvd190YWJsZSh0eF9mcy1cXHUwMDNlbnMsIFxcdTAwMjZmdF9hdHRyKTtcXG4rXFx0ZnQgPSBtbHg1X2NyZWF0ZV9mbG93X3RhYmxlKHR4LVxcdTAwM2VucywgXFx1MDAyNmZ0X2F0dHIpO1xcbiBcXHRpZiAoSVNfRVJSKGZ0KSkge1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKGZ0KTtcXG4gXFx0XFx0bWx4NV9jb3JlX2VycihtZGV2LCBcXFwiUFNQOiBmYWlsIHRvIGFkZCBwc3AgdHggZmxvdyB0YWJsZSwgZXJyID0gJWRcXFxcblxcXCIsIGVycik7XFxuQEAgLTcyNyw3ICs3MDMsNyBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIFxcdFxcdFxcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19FTkNSWVBUIHxcXG4gXFx0XFx0XFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XFxuIFxcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XFxuLVxcdGRlc3QuY291bnRlciA9IHR4X2ZzLVxcdTAwM2V0eF9jb3VudGVyO1xcbitcXHRkZXN0LmNvdW50ZXIgPSBmcy1cXHUwMDNldHhfY291bnRlcjtcXG4gXFx0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMoZnQsIHNwZWMsIFxcdTAwMjZmbG93X2FjdCwgXFx1MDAyNmRlc3QsIDEpO1xcbiBcXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XFxuIFxcdFxcdGVyciA9IFBUUl9FUlIocnVsZSk7XFxuQEAgLTczNSw5ICs3MTEsOSBAQCBzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIFxcdFxcdGdvdG8gZXJyX2FkZF9mbG93X3J1bGU7XFxuIFxcdH1cXG4gXFxuLVxcdHR4X2ZzLVxcdTAwM2VmdCA9IGZ0O1xcbi1cXHR0eF9mcy1cXHUwMDNlZmcgPSBmZztcXG4tXFx0dHhfZnMtXFx1MDAzZXJ1bGUgPSBydWxlO1xcbitcXHR0eC1cXHUwMDNlZnQgPSBmdDtcXG4rXFx0dHgtXFx1MDAzZWZnID0gZmc7XFxuK1xcdHR4LVxcdTAwM2VydWxlID0gcnVsZTtcXG4gXFx0Z290byBvdXQ7XFxuIFxcbiBlcnJfYWRkX2Zsb3dfcnVsZTpcXG5AQCAtNzUwLDg3ICs3MjYsMzUgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcylcXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXFxuIHtcXG4tXFx0aWYgKCF0eF9mcy1cXHUwMDNlZnQpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG1seDVfZGVsX2Zsb3dfcnVsZXModHhfZnMtXFx1MDAzZXJ1bGUpO1xcbi1cXHRtbHg1X2Rlc3Ryb3lfZmxvd19ncm91cCh0eF9mcy1cXHUwMDNlZmcpO1xcbi1cXHRtbHg1X2Rlc3Ryb3lfZmxvd190YWJsZSh0eF9mcy1cXHUwMDNlZnQpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcXHUwMDI2dHgtXFx1MDAzZXJ1bGUpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFxcdTAwMjZ0eC1cXHUwMDNlZmcpO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcXHUwMDI2dHgtXFx1MDAzZWZ0KTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4ge1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVxcdTAwM2V0eF9mcztcXG4tXFx0aW50IGVyciA9IDA7XFxuLVxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRpZiAodHhfZnMtXFx1MDAzZXJlZmNudCsrKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGVyciA9IGFjY2VsX3BzcF9mc190eF9jcmVhdGVfZnRfdGFibGUoZnMpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHR0eF9mcy1cXHUwMDNlcmVmY250LS07XFxuLW91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRyZXR1cm4gZXJyO1xcbitcXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLVxcdTAwM2VtZGV2LCBcXHUwMDI2ZnMtXFx1MDAzZXR4X2NvdW50ZXIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxcbi17XFxuLVxcdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtXFx1MDAzZXR4X2ZzO1xcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2dHhfZnMtXFx1MDAzZW11dGV4KTtcXG4tXFx0aWYgKC0tdHhfZnMtXFx1MDAzZXJlZmNudClcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRhY2NlbF9wc3BfZnNfdHhfZGVzdHJveSh0eF9mcyk7XFxuLW91dDpcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi19XFxuLVxcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfY2xlYW51cF90eChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcXG4te1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVxcdTAwM2V0eF9mcztcXG4tXFxuLVxcdGlmICghdHhfZnMpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdG1seDVfZmNfZGVzdHJveShmcy1cXHUwMDNlbWRldiwgdHhfZnMtXFx1MDAzZXR4X2NvdW50ZXIpO1xcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ0eF9mcy1cXHUwMDNlbXV0ZXgpO1xcbi1cXHRXQVJOX09OKHR4X2ZzLVxcdTAwM2VyZWZjbnQpO1xcbi1cXHRrZnJlZSh0eF9mcyk7XFxuLVxcdGZzLVxcdTAwM2V0eF9mcyA9IE5VTEw7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfdHgoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2luaXQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIHtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cXHUwMDNlbWRldjtcXG4tXFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xcbi1cXHRzdHJ1Y3QgbWx4NV9mYyAqZmxvd19jb3VudGVyO1xcbi1cXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcXG4rXFx0aW50IGVycjtcXG4gXFxuLVxcdG5zID0gbWx4NV9nZXRfZmxvd19uYW1lc3BhY2UobWRldiwgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpO1xcbi1cXHRpZiAoIW5zKVxcbitcXHRmcy1cXHUwMDNldHgubnMgPSBtbHg1X2dldF9mbG93X25hbWVzcGFjZShtZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9FR1JFU1NfSVBTRUMpO1xcbitcXHRpZiAoIWZzLVxcdTAwM2V0eC5ucylcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0dHhfZnMgPSBremFsbG9jX29iaigqdHhfZnMpO1xcbi1cXHRpZiAoIXR4X2ZzKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcXG4tXFx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfY291bnRlcihtZGV2LCBcXHUwMDI2ZnMtXFx1MDAzZXR4X2NvdW50ZXIpO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdG1seDVfY29yZV93YXJuKG1kZXYsXFxuLVxcdFxcdFxcdCAgICAgICBcXFwiZmFpbCB0byBjcmVhdGUgcHNwIHR4IGZsb3cgY291bnRlciBlcnI9JXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgZmxvd19jb3VudGVyKTtcXG4tXFx0XFx0a2ZyZWUodHhfZnMpO1xcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xcbitcXHRcXHRcXHQgICAgICAgXFxcImZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICAgZXJyKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbi1cXHR0eF9mcy1cXHUwMDNldHhfY291bnRlciA9IGZsb3dfY291bnRlcjtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2dHhfZnMtXFx1MDAzZW11dGV4KTtcXG4tXFx0dHhfZnMtXFx1MDAzZW5zID0gbnM7XFxuLVxcdGZzLVxcdTAwM2V0eF9mcyA9IHR4X2ZzO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtODM4LDMyICs3NjIsMjkgQEAgc3RhdGljIHZvaWRcXG4gbWx4NWVfYWNjZWxfcHNwX2ZzX2dldF9zdGF0c19maWxsKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMgKnN0YXRzKVxcbiB7XFxuLVxcdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gcHJpdi1cXHUwMDNlcHNwLVxcdTAwM2Vmcy1cXHUwMDNldHhfZnM7XFxuK1xcdHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzID0gcHJpdi1cXHUwMDNlcHNwLVxcdTAwM2VmcztcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbi1cXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XFxuLVxcbi1cXHRhY2NlbF9wc3AgPSAoc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqKXByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMtXFx1MDAzZXJ4X2ZzO1xcbiBcXG4tXFx0aWYgKHR4X2ZzLVxcdTAwM2V0eF9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIHR4X2ZzLVxcdTAwM2V0eF9jb3VudGVyLCBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF90eF9wa3RzLFxcbitcXHRpZiAoZnMtXFx1MDAzZXR4X2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXR4X2NvdW50ZXIsIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3R4X3BrdHMsXFxuIFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3R4X2J5dGVzKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2NvdW50ZXIpXFxuLVxcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgYWNjZWxfcHNwLVxcdTAwM2VyeF9jb3VudGVyLCBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzLFxcbitcXHRpZiAoZnMtXFx1MDAzZXJ4X2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2NvdW50ZXIsIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3J4X3BrdHMsXFxuIFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3J4X2J5dGVzKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXFxuK1xcdGlmIChmcy1cXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyLFxcbiBcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzX2F1dGhfZmFpbCxcXG4gXFx0XFx0XFx0ICAgICAgXFx1MDAyNnN0YXRzLVxcdTAwM2Vwc3BfcnhfYnl0ZXNfYXV0aF9mYWlsKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2Vycl9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cXHUwMDNlcnhfZXJyX2NvdW50ZXIsXFxuK1xcdGlmIChmcy1cXHUwMDNlcnhfZXJyX2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2Vycl9jb3VudGVyLFxcbiBcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzX2ZyYW1lX2VycixcXG4gXFx0XFx0XFx0ICAgICAgXFx1MDAyNnN0YXRzLVxcdTAwM2Vwc3BfcnhfYnl0ZXNfZnJhbWVfZXJyKTtcXG4gXFxuLVxcdGlmIChhY2NlbF9wc3AtXFx1MDAzZXJ4X2JhZF9jb3VudGVyKVxcbi1cXHRcXHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIGFjY2VsX3BzcC1cXHUwMDNlcnhfYmFkX2NvdW50ZXIsXFxuK1xcdGlmIChmcy1cXHUwMDNlcnhfYmFkX2NvdW50ZXIpXFxuK1xcdFxcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXFx1MDAzZXJ4X2JhZF9jb3VudGVyLFxcbiBcXHRcXHRcXHQgICAgICBcXHUwMDI2c3RhdHMtXFx1MDAzZXBzcF9yeF9wa3RzX2Ryb3AsXFxuIFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzdGF0cy1cXHUwMDNlcHNwX3J4X2J5dGVzX2Ryb3ApO1xcbiB9XFxuQEAgLTg3MywyMSArNzk0LDE1IEBAIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdGlmICghcHJpdi1cXHUwMDNlcHNwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMpO1xcbi19XFxuLVxcbi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuLXtcXG4tXFx0aWYgKCFwcml2LVxcdTAwM2Vwc3ApXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIGFjY2VsX3BzcF9mc190eF9mdF9nZXQocHJpdi1cXHUwMDNlcHNwLVxcdTAwM2Vmcyk7XFxuK1xcdG5ldGRldl9sb2NrKHByaXYtXFx1MDAzZW5ldGRldik7XFxuK1xcdGFjY2VsX3BzcF9mc190eF9mdF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzLVxcdTAwM2V0eCk7XFxuK1xcdG5ldGRldl91bmxvY2socHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfYWNjZWxfcHNwX2ZzX2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXFxuIHtcXG4tXFx0YWNjZWxfcHNwX2ZzX2NsZWFudXBfcngoZnMpO1xcbi1cXHRhY2NlbF9wc3BfZnNfY2xlYW51cF90eChmcyk7XFxuK1xcdGFjY2VsX3BzcF9mc19yeF9jbGVhbnVwKGZzKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX3R4X2NsZWFudXAoZnMpO1xcbiBcXHRrZnJlZShmcyk7XFxuIH1cXG4gXFxuQEAgLTkwMSwyOSArODE2LDYzIEBAIHN0YXRpYyBzdHJ1Y3QgbWx4NWVfcHNwX2ZzICptbHg1ZV9hY2NlbF9wc3BfZnNfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbiBcXHRmcy1cXHUwMDNlbWRldiA9IHByaXYtXFx1MDAzZW1kZXY7XFxuLVxcdGVyciA9IGFjY2VsX3BzcF9mc19pbml0X3R4KGZzKTtcXG4rXFx0ZXJyID0gYWNjZWxfcHNwX2ZzX3R4X2luaXQoZnMpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl90eDtcXG4gXFxuIFxcdGZzLVxcdTAwM2VmcyA9IHByaXYtXFx1MDAzZWZzO1xcbi1cXHRlcnIgPSBhY2NlbF9wc3BfZnNfaW5pdF9yeChmcyk7XFxuK1xcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9pbml0KGZzKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfcng7XFxuIFxcbiBcXHRyZXR1cm4gZnM7XFxuIFxcbiBlcnJfcng6XFxuLVxcdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcXG4rXFx0YWNjZWxfcHNwX2ZzX3R4X2NsZWFudXAoZnMpO1xcbiBlcnJfdHg6XFxuIFxcdGtmcmVlKGZzKTtcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlKHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMsIGV4dGFjayk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfZnRfY3JlYXRlKHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMsIFxcdTAwMjZwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzLVxcdTAwM2V0eCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiRmFpbGVkIGNyZWF0aW5nIFRYIHN0ZWVyaW5nIHRhYmxlXFxcIik7XFxuK1xcdFxcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMpO1xcbitcXHR9XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbit7XFxuK1xcdGFjY2VsX3BzcF9mc190eF9mdF9kZXN0cm95KFxcdTAwMjZwcml2LVxcdTAwM2Vwc3AtXFx1MDAzZWZzLVxcdTAwM2V0eCk7XFxuK1xcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlZnMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50XFxuIG1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4tXFx0cmV0dXJuIDA7IC8qIFRPRE86IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGRvIHRoaW5ncyB0byB0aGUgZGV2aWNlICovXFxuK1xcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYocHNkLVxcdTAwM2VtYWluX25ldGRldik7XFxuK1xcdGJvb2wgcHNwX2VuYWJsZWQgPSBwc2QtXFx1MDAzZWNvbmZpZy52ZXJzaW9ucztcXG4rXFx0Ym9vbCBlbmFibGVfcHNwID0gY29uZi1cXHUwMDNldmVyc2lvbnM7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0bmV0ZGV2X2xvY2socHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0aWYgKCFwc3BfZW5hYmxlZCBcXHUwMDI2XFx1MDAyNiBlbmFibGVfcHNwKVxcbitcXHRcXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlKHByaXYsIGV4dGFjayk7XFxuK1xcdGVsc2UgaWYgKHBzcF9lbmFibGVkIFxcdTAwMjZcXHUwMDI2ICFlbmFibGVfcHNwKVxcbitcXHRcXHRhY2NlbF9wc3BfZnNfZGVzdHJveShwcml2KTtcXG4rXFx0bmV0ZGV2X3VubG9jayhwcml2LVxcdTAwM2VuZXRkZXYpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuQEAgLTEwNzIsMjEgKzEwMjEsMjEgQEAgdm9pZCBtbHg1ZV9wc3BfdW5yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgbWx4NWVfcHNwICpwc3AgPSBwcml2LVxcdTAwM2Vwc3A7XFxuIFxcbi1cXHRpZiAoIXBzcCB8fCAhcHNwLVxcdTAwM2Vwc3ApXFxuK1xcdGlmICghcHNwIHx8ICFwc3AtXFx1MDAzZXBzZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cHNwX2Rldl91bnJlZ2lzdGVyKHBzcC1cXHUwMDNlcHNwKTtcXG4tXFx0cHNwLVxcdTAwM2Vwc3AgPSBOVUxMO1xcbitcXHRwc3BfZGV2X3VucmVnaXN0ZXIocHNwLVxcdTAwM2Vwc2QpO1xcbitcXHRwc3AtXFx1MDAzZXBzZCA9IE5VTEw7XFxuIH1cXG4gXFxuLXZvaWQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbitpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtXFx1MDAzZXBzcDtcXG4gXFx0c3RydWN0IHBzcF9kZXYgKnBzZDtcXG4gXFxuIFxcdC8qIEZXIENhcHMgbWlzc2luZyAqL1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZXBzcClcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdHBzcC1cXHUwMDNlY2Fwcy5hc3NvY19kcnZfc3BjID0gc2l6ZW9mKHUzMik7XFxuIFxcdHBzcC1cXHUwMDNlY2Fwcy52ZXJzaW9ucyA9IDEgXFx1MDAzY1xcdTAwM2MgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyODtcXG5AQCAtMTA5OCw5ICsxMDQ3LDExIEBAIHZvaWQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiBcXHRpZiAoSVNfRVJSKHBzZCkpIHtcXG4gXFx0XFx0bWx4NV9jb3JlX2Vycihwcml2LVxcdTAwM2VtZGV2LCBcXFwiUFNQIGZhaWxlZCB0byByZWdpc3RlciBkdWUgdG8gJXBlXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICBwc2QpO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHBzZCk7XFxuIFxcdH1cXG4tXFx0cHNwLVxcdTAwM2Vwc3AgPSBwc2Q7XFxuK1xcdHBzcC1cXHUwMDNlcHNkID0gcHNkO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXFxuaW5kZXggNmI2MmZlZjBkOWE3MzguLjNmNDQxZTdkZDU1YWMwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMge1xcbiB9O1xcbiBcXG4gc3RydWN0IG1seDVlX3BzcCB7XFxuLVxcdHN0cnVjdCBwc3BfZGV2ICpwc3A7XFxuK1xcdHN0cnVjdCBwc3BfZGV2ICpwc2Q7XFxuIFxcdHN0cnVjdCBwc3BfZGV2X2NhcHMgY2FwcztcXG4gXFx0c3RydWN0IG1seDVlX3BzcF9mcyAqZnM7XFxuIFxcdGF0b21pY190IHR4X2tleV9jbnQ7XFxuQEAgLTQzLDMzICs0MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pc19wc3BfZGV2aWNlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4taW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbi12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuK2ludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xcbiB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcXG4gdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XFxuICNlbHNlXFxuLXN0YXRpYyBpbmxpbmUgaW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbi17XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxcbi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4te1xcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cXG4gc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgfVxcbitzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX2luaXQoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpIHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF9jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xcbmluZGV4IGVmN2Y1MzM4NTQwZmRmLi4zNDhmZDdhOTYyNjE1YSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXFxuQEAgLTE0LDEyICsxNCw2IEBAXFxuICNpbmNsdWRlIFxcXCJlbl9hY2NlbC9wc3Bfcnh0eC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZW5fYWNjZWwvcHNwLmhcXFwiXFxuIFxcbi1lbnVtIHtcXG4tXFx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVELFxcbi1cXHRNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9BVVRIX0ZBSUxFRCxcXG4tXFx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfQkFEX1RSQUlMRVIsXFxuLX07XFxuLVxcbiBzdGF0aWMgdm9pZCBtbHg1ZV9wc3Bfc2V0X3N3cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlICpwc3Bfc3QsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X3dxZV9ldGhfc2VnICplc2VnKVxcbkBAIC0xMjIsMTYgKzExNiwxMSBAQCBzdGF0aWMgYm9vbCBtbHg1ZV9wc3Bfc2V0X3N0YXRlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxcbiBib29sIG1seDVlX3BzcF9vZmZsb2FkX2hhbmRsZV9yeF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NV9jcWU2NCAqY3FlKVxcbiB7XFxuLVxcdHUzMiBwc3BfbWV0YV9kYXRhID0gYmUzMl90b19jcHUoY3FlLVxcdTAwM2VmdF9tZXRhZGF0YSk7XFxuIFxcdHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0dTE2IGRldl9pZCA9IHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlcHNwLVxcdTAwM2VpZDtcXG4rXFx0dTE2IGRldl9pZCA9IHByaXYtXFx1MDAzZXBzcC1cXHUwMDNlcHNkLVxcdTAwM2VpZDtcXG4gXFx0Ym9vbCBzdHJpcF9pY3YgPSB0cnVlO1xcbiBcXHR1OCBnZW5lcmF0aW9uID0gMDtcXG4gXFxuLVxcdC8qIFRCRDogcmVwb3J0IGVycm9ycyBhcyBTVyBjb3VudGVycyB0byBldGh0b29sLCBhbnkgZnVydGhlciBoYW5kbGluZyA/ICovXFxuLVxcdGlmIChNTFg1X1BTUF9NRVRBREFUQV9TWU5EUk9NRShwc3BfbWV0YV9kYXRhKSAhPSBNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9ERUNSWVBURUQpXFxuLVxcdFxcdGdvdG8gZHJvcDtcXG4tXFxuIFxcdGlmIChwc3BfZGV2X3Jjdihza2IsIGRldl9pZCwgZ2VuZXJhdGlvbiwgc3RyaXBfaWN2KSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxcbmluZGV4IDcwMjg5YzkyMWJkNmIzLi4yYjA4MGMzOWNjMzdlZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXFxuQEAgLTEwLDkgKzEwLDggQEBcXG4gI2luY2x1ZGUgXFxcImVuLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJlbi90eHJ4LmhcXFwiXFxuIFxcbi0vKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjktMjM6IFBTUCBzeW5kcm9tZSwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xcbisvKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX01BUktFUihtZXRhZGF0YSkgICgoKChtZXRhZGF0YSkgXFx1MDAzZVxcdTAwM2UgMzApIFxcdTAwMjYgMHgzKSA9PSAweDMpXFxuLSNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfU1lORFJPTUUobWV0YWRhdGEpICgoKG1ldGFkYXRhKSBcXHUwMDNlXFx1MDAzZSAyMykgXFx1MDAyNiBHRU5NQVNLKDYsIDApKVxcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFxcdTAwMjYgR0VOTUFTSygyMiwgMCkpXFxuIFxcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5pbmRleCA3NzVmMGM2ZTU1Yzk1NS4uMmNiNDhiMjRkNWVhYzUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9tYWluLmNcXG5AQCAtNjE5MSw3ICs2MTkxLDcgQEAgc3RhdGljIGludCBtbHg1ZV9pbml0X25pY190eChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXFx1MDAzZW1kZXY7XFxuQEAgLTYxOTksNyArNjE5OSw5IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcbiBcXHRtbHg1ZV9mc19pbml0X2wyX2FkZHIocHJpdi1cXHUwMDNlZnMsIG5ldGRldik7XFxuIFxcdG1seDVlX2lwc2VjX2luaXQocHJpdik7XFxuLVxcdG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcXG4rXFx0ZXJyID0gbWx4NWVfcHNwX3JlZ2lzdGVyKHByaXYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dF9pcHNlY19jbGVhbnVwO1xcbiBcXG4gXFx0ZXJyID0gbWx4NWVfbWFjc2VjX2luaXQocHJpdik7XFxuIFxcdGlmIChlcnIpXFxuQEAgLTYyMjIsNyArNjIyNCw3IEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdG1seDVlX3BjaWVfY29uZ19ldmVudF9pbml0KHByaXYpO1xcbiBcXHRtbHg1ZV9odl92aGNhX3N0YXRzX2NyZWF0ZShwcml2KTtcXG4gXFx0aWYgKG5ldGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHRtbHg1ZV9kY2JubF9pbml0X2FwcChwcml2KTtcXG4gXFxuIFxcdG1seDVlX25pY19zZXRfcnhfbW9kZShwcml2KTtcXG5AQCAtNjIzNSw2ICs2MjM3LDEyIEBAIHN0YXRpYyB2b2lkIG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcXG4gXFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xcbiBcXHRydG5sX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfaXBzZWNfY2xlYW51cDpcXG4rXFx0bWx4NWVfaXBzZWNfY2xlYW51cChwcml2KTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfbmljX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuQEAgLTY2MTYsMTMgKzY2MjQsMTggQEAgaW50IG1seDVlX2F0dGFjaF9uZXRkZXYoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGdvdG8gZXJyX2NsZWFudXBfdHg7XFxuIFxcbi1cXHRpZiAocHJvZmlsZS1cXHUwMDNlZW5hYmxlKVxcbi1cXHRcXHRwcm9maWxlLVxcdTAwM2VlbmFibGUocHJpdik7XFxuK1xcdGlmIChwcm9maWxlLVxcdTAwM2VlbmFibGUpIHtcXG4rXFx0XFx0ZXJyID0gcHJvZmlsZS1cXHUwMDNlZW5hYmxlKHByaXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycl9jbGVhbnVwX3J4O1xcbitcXHR9XFxuIFxcbiBcXHRtbHg1ZV91cGRhdGVfZmVhdHVyZXMocHJpdi1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4rZXJyX2NsZWFudXBfcng6XFxuK1xcdHByb2ZpbGUtXFx1MDAzZWNsZWFudXBfcngocHJpdik7XFxuIGVycl9jbGVhbnVwX3R4OlxcbiBcXHRwcm9maWxlLVxcdTAwM2VjbGVhbnVwX3R4KHByaXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jXFxuaW5kZXggYzhiNzZkMzAxYzkyY2YuLjYwMzA1MWFiMWVhYTRmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xcbkBAIC0xMjYyLDkgKzEyNjIsMTEgQEAgc3RhdGljIHZvaWQgbWx4NWVfY2xlYW51cF9yZXBfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIFxcdG1seDVlX3JlcF9uZWlnaF9jbGVhbnVwKHJwcml2KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWx4NWVfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4rc3RhdGljIGludCBtbHg1ZV9yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcbiB7XFxuIFxcdG1seDVlX3NldF9uZXRkZXZfbXR1X2JvdW5kYXJpZXMocHJpdik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuQEAgLTEzMjIsNyArMTMyNCw3IEBAIHN0YXRpYyBpbnQgdXBsaW5rX3JlcF9hc3luY19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50XFxuIFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuK3N0YXRpYyBpbnQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtXFx1MDAzZW5ldGRldjtcXG4gXFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVxcdTAwM2VtZGV2O1xcbkBAIC0xMzU3LDYgKzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4gXFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xcbiBcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMTo0MDo1NS40NTEwMTI0NTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MjY1NDA1NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBNZWxsYW5veCBtbHg1IGhhcmR3YXJlIGRyaXZlciAoc3BlY2lmaWNhbGx5IHRoZSBQU1Agb2ZmbG9hZCBmZWF0dXJlKS4gU2luY2UgdGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgTWVsbGFub3ggQ29ubmVjdFggaGFyZHdhcmUgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlNzkyZGQwNTFiMDM1ZDE0YmZkYjU1YjhkYjY0NjIzZmM4NGI4YmI4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAyMTo0MDo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhcbmluZGV4IDIyNzBlMmU1NTBkZDllLi4zY2M3MjgzYjYyMTVlMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4uaFxuQEAgLTEwMTYsNyArMTAxNiw3IEBAIHN0cnVjdCBtbHg1ZV9wcm9maWxlIHtcbiBcdHZvaWRcdCgqY2xlYW51cF9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0aW50XHQoKmluaXRfdHgpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqY2xlYW51cF90eCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLVx0dm9pZFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbitcdGludFx0KCplbmFibGUpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbiBcdHZvaWRcdCgqZGlzYWJsZSkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0aW50XHQoKnVwZGF0ZV9yeCkoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIFx0dm9pZFx0KCp1cGRhdGVfc3RhdHMpKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi9mcy5oXG5pbmRleCAwOTFiODBhNjcxODlkZC4uNDk3M2ZiNDczZmYwMjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vZnMuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhcbkBAIC04OCwxMyArODgsMTggQEAgZW51bSB7XG4gI2lmZGVmIENPTkZJR19NTFg1X0VOX0FSRlNcbiBcdE1MWDVFX0FSRlNfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgKyAxLFxuICNlbmRpZlxuLSNpZiBkZWZpbmVkKENPTkZJR19NTFg1X0VOX0lQU0VDKSB8fCBkZWZpbmVkKENPTkZJR19NTFg1X0VOX1BTUClcbisjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9JUFNFQylcbiBcdE1MWDVFX0FDQ0VMX0ZTX0VTUF9GVF9MRVZFTCA9IE1MWDVFX0lOTkVSX1RUQ19GVF9MRVZFTCArIDEsXG4gXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfRVJSX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUE9MX0ZUX0xFVkVMLFxuIFx0TUxYNUVfQUNDRUxfRlNfUE9MX01JU1NfRlRfTEVWRUwsXG4gXHRNTFg1RV9BQ0NFTF9GU19FU1BfRlRfUk9DRV9MRVZFTCxcbiAjZW5kaWZcbisjaWYgZGVmaW5lZChDT05GSUdfTUxYNV9FTl9QU1ApXG4rXHRNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUwgPSBNTFg1RV9JTk5FUl9UVENfRlRfTEVWRUwgKyAxLFxuK1x0TUxYNUVfQUNDRUxfRlNfUFNQX0VSUl9GVF9MRVZFTCxcbitcdE1MWDVFX0FDQ0VMX0ZTX1BTUF9SWF9GVF9MRVZFTCxcbisjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCBtbHg1ZV9mbG93X3N0ZWVyaW5nO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhcbmluZGV4IGI1MjZiMzg5OGMyMmUwLi4zZjIxMmU0NmZjMmY5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9lbl9hY2NlbC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvZW5fYWNjZWwuaFxuQEAgLTIyMCwxOCArMjIwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX3R4X2ZpbmlzaChzdHJ1Y3QgbWx4NWVfdHhxc3EgKnNxLFxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1seDVlX2FjY2VsX2luaXRfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHByaXYpO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBtbHg1ZV9rdGxzX2luaXRfcngocHJpdik7XG4tXHRpZiAoZXJyKVxuLVx0XHRtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3J4X3RhYmxlcyhwcml2KTtcbi1cbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIG1seDVlX2t0bHNfaW5pdF9yeChwcml2KTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX2FjY2VsX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG5AQCAtMjQyLDEyICsyMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWx4NWVfYWNjZWxfY2xlYW51cF9yeChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9hY2NlbF9pbml0X3R4KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGludCBlcnI7XG4tXG4tXHRlcnIgPSBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhwcml2KTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHRyZXR1cm4gbWx4NWVfa3Rsc19pbml0X3R4KHByaXYpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmNcbmluZGV4IGQ5YWRiOTkzZTY0ZDk1Li43M2IyMzIzNzkyNjNhYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jXG5AQCAtMjEsNTEgKzIxLDUyIEBAIGVudW0gYWNjZWxfcHNwX3N5bmRyb21lIHtcbiBcdFBTUF9CQURfVFJBSUxFUixcbiB9O1xuIFxuLXN0cnVjdCBtbHg1ZV9wc3BfdHgge1xuK3N0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpmZztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuLVx0c3RydWN0IG11dGV4IG11dGV4OyAvKiBQcm90ZWN0IFBTUCBUWCBzdGVlcmluZyAqL1xuLVx0dTMyIHJlZmNudDtcbi1cdHN0cnVjdCBtbHg1X2ZjICp0eF9jb3VudGVyO1xuIH07XG4gXG4tc3RydWN0IG1seDVlX3BzcF9yeF9lcnIge1xuK3N0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUge1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2dyb3VwICpkcm9wX2dyb3VwO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYXV0aF9mYWlsX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZXJyX3J1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqYmFkX3J1bGU7XG4tXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICpjb3B5X21vZGlmeV9oZHI7XG4gfTtcbiBcbi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3Qge1xuK3N0cnVjdCBtbHg1ZV9wc3BfcnhfZGVjcnlwdF90YWJsZSB7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xuIFx0c3RydWN0IG1seDVfbW9kaWZ5X2hkciAqcnhfbW9kaWZ5X2hkcjtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVmYXVsdF9kZXN0O1xuLVx0c3RydWN0IG1seDVlX3BzcF9yeF9lcnIgcnhfZXJyO1xuLVx0dTMyIHJlZmNudDtcbi1cdHN0cnVjdCBtdXRleCBwcm90X211dGV4OyAvKiBwcm90ZWN0IEVTUDQvRVNQNiBwcm90b2NvbCAqL1xuLVx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKmRlZl9ydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gfTtcbiBcbi1zdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwIHtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCBmc19wcm90W0FDQ0VMX0ZTX1BTUF9OVU1fVFlQRVNdO1xuLVx0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XG4rc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSB7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqbWlzc19ydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnVkcF9ydWxlc1tBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcbiB9O1xuIFxuIHN0cnVjdCBtbHg1ZV9wc3BfZnMge1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXY7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbi1cdC8qIFJ4IG1hbmFnZSAqL1xuK1x0c3RydWN0IG1seDVfZmMgKnR4X2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4X3RhYmxlIHR4O1xuK1xuK1x0LyogUnggKi9cbiBcdHN0cnVjdCBtbHg1ZV9mbG93X3N0ZWVyaW5nICpmcztcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKnJ4X2ZzO1xuK1x0c3RydWN0IG1seDVfZmMgKnJ4X2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYXV0aF9mYWlsX2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfZXJyX2NvdW50ZXI7XG4rXHRzdHJ1Y3QgbWx4NV9mYyAqcnhfYmFkX2NvdW50ZXI7XG4rXG4rXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgZGVjcnlwdFtBQ0NFTF9GU19QU1BfTlVNX1RZUEVTXTtcbitcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfY2hlY2tfdGFibGUgY2hlY2s7XG4rXHRzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlIHJ4O1xuIH07XG4gXG4gLyogUFNQIFJYIGZsb3cgc3RlZXJpbmcgKi9cbkBAIC03Nyw0NCArNzgsMjAwIEBAIHN0YXRpYyBlbnVtIG1seDVfdHJhZmZpY190eXBlcyBmc19wc3AydHQoZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpKVxuIFx0cmV0dXJuIE1MWDVfVFRfSVBWNl9VRFA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9lcnJfZGVsX3J1bGVzKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHQgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgKmZ0X2F0dHIsXG4rXHRcdFx0XHQgIHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKipmdClcbit7XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X25hbWVzcGFjZSAqbnMgPSBtbHg1ZV9mc19nZXRfbnMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0KmZ0ID0gbWx4NV9jcmVhdGVfYXV0b19ncm91cGVkX2Zsb3dfdGFibGUobnMsIGZ0X2F0dHIpO1xuK1x0aWYgKElTX0VSUigqZnQpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIoKmZ0KTtcbitcdFx0KmZ0ID0gTlVMTDtcbitcdH1cbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKip0YWJsZSlcbiB7XG4tXHRpZiAocnhfZXJyLVx1MDAzZWJhZF9ydWxlKSB7XG4tXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWJhZF9ydWxlKTtcbi1cdFx0cnhfZXJyLVx1MDAzZWJhZF9ydWxlID0gTlVMTDtcbitcdGlmICgqdGFibGUpIHtcbitcdFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoKnRhYmxlKTtcbitcdFx0KnRhYmxlID0gTlVMTDtcbiBcdH1cbit9XG4gXG4tXHRpZiAocnhfZXJyLVx1MDAzZWVycl9ydWxlKSB7XG4tXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWVycl9ydWxlKTtcbi1cdFx0cnhfZXJyLVx1MDAzZWVycl9ydWxlID0gTlVMTDtcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqKnJ1bGUpXG4re1xuK1x0aWYgKCpydWxlKSB7XG4rXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMoKnJ1bGUpO1xuK1x0XHQqcnVsZSA9IE5VTEw7XG4gXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9taXNzX2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cClcbit7XG4rXHRpbnQgaW5sZW4gPSBNTFg1X1NUX1NaX0JZVEVTKGNyZWF0ZV9mbG93X2dyb3VwX2luKTtcbitcdHUzMiAqaW4gPSBrdnphbGxvYyhpbmxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRpbnQgZXJyID0gMDtcbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpIHtcbi1cdFx0bWx4NV9kZWxfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuK1x0aWYgKCFpbilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRNTFg1X1NFVChjcmVhdGVfZmxvd19ncm91cF9pbiwgaW4sIHN0YXJ0X2Zsb3dfaW5kZXgsIGZ0LVx1MDAzZW1heF9mdGUgLSAxKTtcbitcdE1MWDVfU0VUKGNyZWF0ZV9mbG93X2dyb3VwX2luLCBpbiwgZW5kX2Zsb3dfaW5kZXgsIGZ0LVx1MDAzZW1heF9mdGUgLSAxKTtcbitcdCpncm91cCA9IG1seDVfY3JlYXRlX2Zsb3dfZ3JvdXAoZnQsIGluKTtcbitcdGlmIChJU19FUlIoKmdyb3VwKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKCpncm91cCk7XG4rXHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4rXHRrdmZyZWUoaW4pO1xuIFxuLVx0aWYgKHJ4X2Vyci1cdTAwM2VydWxlKSB7XG4tXHRcdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZXJ1bGUpO1xuLVx0XHRyeF9lcnItXHUwMDNlcnVsZSA9IE5VTEw7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKipncm91cClcbit7XG4rXHRpZiAoKmdyb3VwKSB7XG4rXHRcdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKCpncm91cCk7XG4rXHRcdCpncm91cCA9IE5VTEw7XG4gXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1seDVfZmMgKipjb3VudGVyKVxuK3tcbitcdCpjb3VudGVyID0gbWx4NV9mY19jcmVhdGUoZGV2LCBmYWxzZSk7XG4rXHRpZiAoSVNfRVJSKCpjb3VudGVyKSkge1xuK1x0XHRpbnQgZXJyID0gUFRSX0VSUigqY291bnRlcik7XG4rXG4rXHRcdCpjb3VudGVyID0gTlVMTDtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbiBcbi1cdGlmIChyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyKSB7XG4tXHRcdG1seDVfbW9kaWZ5X2hlYWRlcl9kZWFsbG9jKGZzLVx1MDAzZW1kZXYsIHJ4X2Vyci1cdTAwM2Vjb3B5X21vZGlmeV9oZHIpO1xuLVx0XHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gTlVMTDtcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbWx4NV9mYyAqKmNvdW50ZXIpXG4re1xuK1x0aWYgKCpjb3VudGVyKSB7XG4rXHRcdG1seDVfZmNfZGVzdHJveShkZXYsICpjb3VudGVyKTtcbitcdFx0KmNvdW50ZXIgPSBOVUxMO1xuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZXJyX2Rlc3Ryb3lfZnQoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF90YWJsZSAqcngpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspXG4rXHRcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNnJ4LVx1MDAzZXVkcF9ydWxlc1tpXSk7XG4rXHRhY2NlbF9wc3BfZnNfZGVsX2Zsb3dfcnVsZShcdTAwMjZyeC1cdTAwM2VtaXNzX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZyeC1cdTAwM2VtaXNzX2dyb3VwKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFx1MDAyNnJ4LVx1MDAzZWZ0KTtcbit9XG4rXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X3RhYmxlICpyeClcbiB7XG4tXHRhY2NlbF9wc3BfZnNfcnhfZXJyX2RlbF9ydWxlcyhmcywgcnhfZXJyKTtcbitcdHN0cnVjdCBtbHg1X3R0Y190YWJsZSAqdHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuK1x0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuK1x0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuK1x0TUxYNV9ERUNMQVJFX0ZMT1dfQUNUKGZsb3dfYWN0KTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfaGFuZGxlICpydWxlO1xuK1x0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuK1x0aW50IGksIGVyciA9IDA7XG4rXG4rXHRzcGVjID0ga3phbGxvY19vYmooKnNwZWMpO1xuK1x0aWYgKCFzcGVjKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGZ0X2F0dHIubWF4X2Z0ZSA9IDEgKyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTO1xuK1x0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9SWF9GVF9MRVZFTDtcbitcdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuK1x0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9mdChmcywgXHUwMDI2ZnRfYXR0ciwgXHUwMDI2cngtXHUwMDNlZnQpO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4gXG4tXHRpZiAocnhfZXJyLVx1MDAzZWZ0KSB7XG4tXHRcdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKHJ4X2Vyci1cdTAwM2VmdCk7XG4tXHRcdHJ4X2Vyci1cdTAwM2VmdCA9IE5VTEw7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAocngtXHUwMDNlZnQsIFx1MDAyNnJ4LVx1MDAzZW1pc3NfZ3JvdXApO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IG1pc3NfZ3JvdXAgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgZXJyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuK1xuK1x0LyogQWRkIG1pc3MgcnVsZSAqL1xuK1x0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbitcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuK1x0Zmxvd19hY3QuZmxhZ3MgPSBGTE9XX0FDVF9JR05PUkVfRkxPV19MRVZFTDtcbitcdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0ZMT1dfVEFCTEU7XG4rXHRkZXN0WzBdLmZ0ID0gbWx4NV9nZXRfdHRjX2Zsb3dfdGFibGUodHRjKTtcbitcdGRlc3RbMV0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4rXHRkZXN0WzFdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9jb3VudGVyO1xuK1x0cnVsZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocngtXHUwMDNlZnQsIE5VTEwsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAyKTtcbitcdGlmIChJU19FUlIocnVsZSkpIHtcbitcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBydWxlLCBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4rXHRyeC1cdTAwM2VtaXNzX3J1bGUgPSBydWxlO1xuK1xuK1x0LyogQWRkIFVEUCB2NC92NiBydWxlcyAqL1xuK1x0c3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYV9lbmFibGUgPSBNTFg1X01BVENIX09VVEVSX0hFQURFUlM7XG4rXHRNTFg1X1NFVF9UT19PTkVTKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF9jcml0ZXJpYSxcbitcdFx0XHQgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uKTtcbitcdE1MWDVfU0VUX1RPX09ORVMoZnRlX21hdGNoX3NldF9seXJfMl80LCBzcGVjLVx1MDAzZW1hdGNoX2NyaXRlcmlhLFxuK1x0XHRcdCBpcF9wcm90b2NvbCk7XG4rXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X2x5cl8yXzQsIHNwZWMtXHUwMDNlbWF0Y2hfdmFsdWUsIGlwX3Byb3RvY29sLFxuK1x0XHQgSVBQUk9UT19VRFApO1xuK1x0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbitcdFx0TUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuK1x0Zmxvd19hY3QuZmxhZ3MgPSAwO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4rXHRcdGludCB2ZXJzaW9uID0gaSA9PSBBQ0NFTF9GU19QU1A0ID8gNCA6IDY7XG4rXG4rXHRcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9wYXJhbSwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSxcbitcdFx0XHQgb3V0ZXJfaGVhZGVycy5pcF92ZXJzaW9uLCB2ZXJzaW9uKTtcbitcdFx0ZGVzdFswXSA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpO1xuK1x0XHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuK1x0XHRkZXN0WzFdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9jb3VudGVyO1xuK1x0XHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeC1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsXG4rXHRcdFx0XHRcdCAgIDIpO1xuK1x0XHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4rXHRcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbitcdFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4rXHRcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBVRFAlZCBydWxlIGVycj0lZFxcblwiLFxuK1x0XHRcdFx0ICAgICAgdmVyc2lvbiwgZXJyKTtcbitcdFx0XHRnb3RvIG91dF9lcnI7XG4rXHRcdH1cbitcdFx0cngtXHUwMDNldWRwX3J1bGVzW2ldID0gcnVsZTtcbitcdH1cbitcdGdvdG8gb3V0X3NwZWM7XG4rXG4rb3V0X2VycjpcbitcdGFjY2VsX3BzcF9mc19yeF9mdF9kZXN0cm95KHJ4KTtcbitvdXRfc3BlYzpcbitcdGt2ZnJlZShzcGVjKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpY1xuK3ZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spXG4re1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlYmFkX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlZXJyX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlYXV0aF9mYWlsX3J1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2Y2hlY2stXHUwMDNlcnVsZSk7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mbG93X2dyb3VwKFx1MDAyNmNoZWNrLVx1MDAzZWRyb3BfZ3JvdXApO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZnQoXHUwMDI2Y2hlY2stXHUwMDNlZnQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjLFxuQEAgLTEyOSwxNSArMjg2LDM1IEBAIHN0YXRpYyB2b2lkIGFjY2VsX3BzcF9zZXR1cF9zeW5kcm9tZV9tYXRjaChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsXG4gXHRNTFg1X1NFVChmdGVfbWF0Y2hfc2V0X21pc2MyLCBtaXNjX3BhcmFtc18yLCBwc3Bfc3luZHJvbWUsIHN5bmRyb21lKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZXJyX2FkZF9ydWxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBtbHg1ZV9wc3BfcnhfZXJyICpyeF9lcnIpXG4rc3RhdGljIGludCBhY2NlbF9wc3BfYWRkX2Ryb3BfcnVsZShzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdCxcbitcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2Zsb3dfc3BlYyAqc3BlYyxcbitcdFx0XHRcdCAgIHN0cnVjdCBtbHg1X2ZjICpjb3VudGVyLFxuK1x0XHRcdFx0ICAgc3RydWN0IG1seDVfZmxvd19oYW5kbGUgKipydWxlKVxuIHtcbi1cdHU4IGFjdGlvbltNTFg1X1VOX1NaX0JZVEVTKHNldF9hZGRfY29weV9hY3Rpb25faW5fYXV0byldID0ge307XG4rXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfYWN0IGZsb3dfYWN0ID0ge307XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbitcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbitcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4rXHRkZXN0LmNvdW50ZXIgPSBjb3VudGVyO1xuK1x0KnJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4rXHRpZiAoSVNfRVJSKCpydWxlKSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKCpydWxlKTtcbitcdFx0KnJ1bGUgPSBOVUxMO1xuK1x0fVxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljXG4raW50IGFjY2VsX3BzcF9mc19yeF9jaGVja19mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgc3RydWN0IG1seDVlX3BzcF9yeF9jaGVja190YWJsZSAqY2hlY2spXG4re1xuK1x0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbitcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdCA9IHt9O1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBmcy1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0WzJdO1xuIFx0c3RydWN0IG1seDVfZmxvd19hY3QgZmxvd19hY3QgPSB7fTtcbi1cdHN0cnVjdCBtbHg1X21vZGlmeV9oZHIgKm1vZGlmeV9oZHI7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2hhbmRsZSAqZnRlO1xuIFx0c3RydWN0IG1seDVfZmxvd19zcGVjICpzcGVjO1xuIFx0aW50IGVyciA9IDA7XG5AQCAtMTQ2LDE3NCArMzIzLDk3IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2Vycl9hZGRfcnVsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdGlmICghc3BlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHQvKiBBY3Rpb24gdG8gY29weSA3IGJpdCBwc3Bfc3luZHJvbWUgdG8gcmVnQlsyMzoyOV0gKi9cbi1cdE1MWDVfU0VUKGNvcHlfYWN0aW9uX2luLCBhY3Rpb24sIGFjdGlvbl90eXBlLCBNTFg1X0FDVElPTl9UWVBFX0NPUFkpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9QU1BfU1lORFJPTUUpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgc3JjX29mZnNldCwgMCk7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBsZW5ndGgsIDcpO1xuLVx0TUxYNV9TRVQoY29weV9hY3Rpb25faW4sIGFjdGlvbiwgZHN0X2ZpZWxkLCBNTFg1X0FDVElPTl9JTl9GSUVMRF9NRVRBREFUQV9SRUdfQik7XG4tXHRNTFg1X1NFVChjb3B5X2FjdGlvbl9pbiwgYWN0aW9uLCBkc3Rfb2Zmc2V0LCAyMyk7XG4rXHRmdF9hdHRyLm1heF9mdGUgPSA0O1xuK1x0ZnRfYXR0ci5hdXRvZ3JvdXAubnVtX3Jlc2VydmVkX2VudHJpZXMgPSAxO1xuK1x0ZnRfYXR0ci5hdXRvZ3JvdXAubWF4X251bV9ncm91cHMgPSAyO1xuK1x0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX0FDQ0VMX0ZTX1BTUF9FUlJfRlRfTEVWRUw7XG4rXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfZnQoZnMsIFx1MDAyNmZ0X2F0dHIsIFx1MDAyNmNoZWNrLVx1MDAzZWZ0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2Vycihmcy1cdTAwM2VtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGNoZWNrIGZ0IGVycj0lZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4rXHR9XG4gXG4tXHRtb2RpZnlfaGRyID0gbWx4NV9tb2RpZnlfaGVhZGVyX2FsbG9jKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfS0VSTkVMLFxuLVx0XHRcdFx0XHQgICAgICAxLCBhY3Rpb24pO1xuLVx0aWYgKElTX0VSUihtb2RpZnlfaGRyKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKG1vZGlmeV9oZHIpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4tXHRcdFx0ICAgICAgXCJmYWlsIHRvIGFsbG9jIHBzcCBjb3B5IG1vZGlmeV9oZWFkZXJfaWQgZXJyPSVkXFxuXCIsIGVycik7XG4tXHRcdGdvdG8gb3V0X3NwZWM7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX21pc3NfZ3JvdXAoY2hlY2stXHUwMDNlZnQsIFx1MDAyNmNoZWNrLVx1MDAzZWRyb3BfZ3JvdXApO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKGZzLVx1MDAzZW1kZXYsXG4rXHRcdFx0ICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggY2hlY2sgZHJvcCBncm91cCBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4gXG4gXHRhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3BlYywgUFNQX09LKTtcbiBcdC8qIGNyZWF0ZSBmdGUgKi9cbi1cdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9NT0RfSERSIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRmbG93X2FjdC5tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbi1cdGRlc3RbMF0udHlwZSA9IGZzX3Byb3QtXHUwMDNlZGVmYXVsdF9kZXN0LnR5cGU7XG4tXHRkZXN0WzBdLmZ0ID0gZnNfcHJvdC1cdTAwM2VkZWZhdWx0X2Rlc3QuZnQ7XG4tXHRkZXN0WzFdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFsxXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfY291bnRlcjtcbi1cdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCwgMik7XG4rXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRldEX0RFU1Q7XG4rXHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuK1x0ZGVzdC5mdCA9IGZzLVx1MDAzZXJ4LmZ0O1xuK1x0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhjaGVjay1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmRlc3QsIDEpO1xuIFx0aWYgKElTX0VSUihmdGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBlcnIgY29weSBydWxlIGVycj0lZFxcblwiLCBlcnIpO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBjaGVjayBvayBydWxlIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdHJ4X2Vyci1cdTAwM2VydWxlID0gZnRlO1xuK1x0Y2hlY2stXHUwMDNlcnVsZSA9IGZ0ZTtcbiBcbiBcdC8qIGFkZCBhdXRoIGZhaWwgZHJvcCBydWxlICovXG4gXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4tXHRtZW1zZXQoXHUwMDI2Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpO1xuIFx0YWNjZWxfcHNwX3NldHVwX3N5bmRyb21lX21hdGNoKHNwZWMsIFBTUF9JQ1ZfRkFJTCk7XG4tXHQvKiBjcmVhdGUgZnRlICovXG4tXHRmbG93X2FjdC5hY3Rpb24gPSBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fRFJPUCB8XG4tXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fQ09VTlQ7XG4tXHRkZXN0WzBdLnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9DT1VOVEVSO1xuLVx0ZGVzdFswXS5jb3VudGVyID0gZnMtXHUwMDNlcnhfZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXI7XG4tXHRmdGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIGRlc3QsIDEpO1xuLVx0aWYgKElTX0VSUihmdGUpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnRlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBhdXRoIGZhaWwgZHJvcCBydWxlIGVycj0lZFxcblwiLFxuK1x0ZXJyID0gYWNjZWxfcHNwX2FkZF9kcm9wX3J1bGUoY2hlY2stXHUwMDNlZnQsIHNwZWMsXG4rXHRcdFx0XHQgICAgICBmcy1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWF1dGhfZmFpbF9ydWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGF1dGggZmFpbCBkcm9wIHJ1bGUgZXJyPSVkXFxuXCIsXG4gXHRcdFx0ICAgICAgZXJyKTtcbi1cdFx0Z290byBvdXRfZHJvcF9ydWxlO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBmdGU7XG4gXG4gXHQvKiBhZGQgZnJhbWluZyBkcm9wIHJ1bGUgKi9cbiBcdG1lbXNldChzcGVjLCAwLCBzaXplb2YoKnNwZWMpKTtcbi1cdG1lbXNldChcdTAwMjZmbG93X2FjdCwgMCwgc2l6ZW9mKGZsb3dfYWN0KSk7XG4gXHRhY2NlbF9wc3Bfc2V0dXBfc3luZHJvbWVfbWF0Y2goc3BlYywgUFNQX0JBRF9UUkFJTEVSKTtcbi1cdC8qIGNyZWF0ZSBmdGUgKi9cbi1cdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9EUk9QIHxcbi1cdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbi1cdGRlc3RbMF0udHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0WzBdLmNvdW50ZXIgPSBmcy1cdTAwM2VyeF9mcy1cdTAwM2VyeF9lcnJfY291bnRlcjtcbi1cdGZ0ZSA9IG1seDVfYWRkX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgZGVzdCwgMSk7XG4tXHRpZiAoSVNfRVJSKGZ0ZSkpIHtcbi1cdFx0ZXJyID0gUFRSX0VSUihmdGUpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGZyYW1pbmcgZXJyIGRyb3AgcnVsZSBlcnI9JWRcXG5cIixcbitcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVx1MDAzZWZ0LCBzcGVjLCBmcy1cdTAwM2VyeF9lcnJfY291bnRlcixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWVycl9ydWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIGZyYW1pbmcgZHJvcCBydWxlIGVycj0lZFxcblwiLFxuIFx0XHRcdCAgICAgIGVycik7XG4tXHRcdGdvdG8gb3V0X2Ryb3BfYXV0aF9mYWlsX3J1bGU7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdHJ4X2Vyci1cdTAwM2VlcnJfcnVsZSA9IGZ0ZTtcbiBcbiBcdC8qIGFkZCBtaXNjLiBlcnJvcnMgZHJvcCBydWxlICovXG4gXHRtZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7XG4tXHRtZW1zZXQoXHUwMDI2Zmxvd19hY3QsIDAsIHNpemVvZihmbG93X2FjdCkpO1xuLVx0LyogY3JlYXRlIGZ0ZSAqL1xuLVx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0RST1AgfFxuLVx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NPVU5UO1xuLVx0ZGVzdFswXS50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfQ09VTlRFUjtcbi1cdGRlc3RbMF0uY291bnRlciA9IGZzLVx1MDAzZXJ4X2ZzLVx1MDAzZXJ4X2JhZF9jb3VudGVyO1xuLVx0ZnRlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhyeF9lcnItXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZXN0LCAxKTtcbi1cdGlmIChJU19FUlIoZnRlKSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZ0ZSk7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJmYWlsIHRvIGFkZCBwc3AgcnggbWlzYy4gZXJyIGRyb3AgcnVsZSBlcnI9JWRcXG5cIixcbitcdGVyciA9IGFjY2VsX3BzcF9hZGRfZHJvcF9ydWxlKGNoZWNrLVx1MDAzZWZ0LCBzcGVjLCBmcy1cdTAwM2VyeF9iYWRfY291bnRlcixcbitcdFx0XHRcdCAgICAgIFx1MDAyNmNoZWNrLVx1MDAzZWJhZF9ydWxlKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuK1x0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ4IGNoZWNrIG1pc2MuIGVyciBkcm9wIHJ1bGUgZXJyPSVkXFxuXCIsXG4gXHRcdFx0ICAgICAgZXJyKTtcbi1cdFx0Z290byBvdXRfZHJvcF9lcnJvcl9ydWxlO1xuK1x0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRyeF9lcnItXHUwMDNlYmFkX3J1bGUgPSBmdGU7XG4tXG4tXHRyeF9lcnItXHUwMDNlY29weV9tb2RpZnlfaGRyID0gbW9kaWZ5X2hkcjtcbiBcbiBcdGdvdG8gb3V0X3NwZWM7XG4gXG4tb3V0X2Ryb3BfZXJyb3JfcnVsZTpcbi1cdG1seDVfZGVsX2Zsb3dfcnVsZXMocnhfZXJyLVx1MDAzZWVycl9ydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VlcnJfcnVsZSA9IE5VTEw7XG4tb3V0X2Ryb3BfYXV0aF9mYWlsX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VhdXRoX2ZhaWxfcnVsZSk7XG4tXHRyeF9lcnItXHUwMDNlYXV0aF9mYWlsX3J1bGUgPSBOVUxMO1xuLW91dF9kcm9wX3J1bGU6XG4tXHRtbHg1X2RlbF9mbG93X3J1bGVzKHJ4X2Vyci1cdTAwM2VydWxlKTtcbi1cdHJ4X2Vyci1cdTAwM2VydWxlID0gTlVMTDtcbi1vdXQ6XG4tXHRtbHg1X21vZGlmeV9oZWFkZXJfZGVhbGxvYyhtZGV2LCBtb2RpZnlfaGRyKTtcbitvdXRfZXJyOlxuK1x0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koY2hlY2spO1xuIG91dF9zcGVjOlxuIFx0a2ZyZWUoc3BlYyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9lcnJfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0XHQgc3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90LFxuLVx0XHRcdFx0XHQgc3RydWN0IG1seDVlX3BzcF9yeF9lcnIgKnJ4X2VycilcbitzdGF0aWMgdm9pZFxuK2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbWx4NWVfcHNwX3J4X2RlY3J5cHRfdGFibGUgKmRlY3J5cHQpXG4ge1xuLVx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlX2F0dHIgZnRfYXR0ciA9IHt9O1xuLVx0c3RydWN0IG1seDVfZmxvd190YWJsZSAqZnQ7XG4tXHRpbnQgZXJyO1xuLVxuLVx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcbi1cdGZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMjtcbi1cdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfRVJSX0xFVkVMOyAvLyBNTFg1RV9BQ0NFTF9GU19UQ1BfRlRfTEVWRUxcbi1cdGZ0X2F0dHIucHJpbyA9IE1MWDVFX05JQ19QUklPO1xuLVx0ZnQgPSBtbHg1X2NyZWF0ZV9hdXRvX2dyb3VwZWRfZmxvd190YWJsZShucywgXHUwMDI2ZnRfYXR0cik7XG4tXHRpZiAoSVNfRVJSKGZ0KSkge1xuLVx0XHRlcnIgPSBQVFJfRVJSKGZ0KTtcbi1cdFx0bWx4NV9jb3JlX2Vycihmcy1cdTAwM2VtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBpbmxpbmUgZnQgZXJyPSVkXFxuXCIsIGVycik7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4tXG4tXHRyeF9lcnItXHUwMDNlZnQgPSBmdDtcbi1cdGVyciA9IGFjY2VsX3BzcF9mc19yeF9lcnJfYWRkX3J1bGUoZnMsIGZzX3Byb3QsIHJ4X2Vycik7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dF9lcnI7XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1vdXRfZXJyOlxuLVx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoZnQpO1xuLVx0cnhfZXJyLVx1MDAzZWZ0ID0gTlVMTDtcbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdClcbi17XG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VkZWZfcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlZGVmX3J1bGUpO1xuLVx0XHRmc19wcm90LVx1MDAzZWRlZl9ydWxlID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbi1cdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbi1cdH1cbi1cbi1cdGlmIChmc19wcm90LVx1MDAzZW1pc3NfcnVsZSkge1xuLVx0XHRtbHg1X2RlbF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlbWlzc19ydWxlKTtcbi1cdFx0ZnNfcHJvdC1cdTAwM2VtaXNzX3J1bGUgPSBOVUxMO1xuLVx0fVxuLVxuLVx0aWYgKGZzX3Byb3QtXHUwMDNlbWlzc19ncm91cCkge1xuLVx0XHRtbHg1X2Rlc3Ryb3lfZmxvd19ncm91cChmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXApO1xuLVx0XHRmc19wcm90LVx1MDAzZW1pc3NfZ3JvdXAgPSBOVUxMO1xuLVx0fVxuLVxuLVx0aWYgKGZzX3Byb3QtXHUwMDNlZnQpIHtcbi1cdFx0bWx4NV9kZXN0cm95X2Zsb3dfdGFibGUoZnNfcHJvdC1cdTAwM2VmdCk7XG4tXHRcdGZzX3Byb3QtXHUwMDNlZnQgPSBOVUxMO1xuK1x0YWNjZWxfcHNwX2ZzX2RlbF9mbG93X3J1bGUoXHUwMDI2ZGVjcnlwdC1cdTAwM2VydWxlKTtcbitcdGlmIChkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIpIHtcbitcdFx0bWx4NV9tb2RpZnlfaGVhZGVyX2RlYWxsb2MoZnMtXHUwMDNlbWRldiwgZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyKTtcbitcdFx0ZGVjcnlwdC1cdTAwM2VyeF9tb2RpZnlfaGRyID0gTlVMTDtcbiBcdH1cbitcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNmRlY3J5cHQtXHUwMDNlbWlzc19ydWxlKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Zsb3dfZ3JvdXAoXHUwMDI2ZGVjcnlwdC1cdTAwM2VtaXNzX2dyb3VwKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2Z0KFx1MDAyNmRlY3J5cHQtXHUwMDNlZnQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcbkBAIC0zMjUsNzAgKzQyNSw2NCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9mdGVfdWRwX3BzcChzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWMsIHUxNiB1ZHBfcG9ydClcbiBcdE1MWDVfU0VUKGZ0ZV9tYXRjaF9zZXRfbHlyXzJfNCwgc3BlYy1cdTAwM2VtYXRjaF92YWx1ZSwgaXBfcHJvdG9jb2wsIElQUFJPVE9fVURQKTtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3QpXG4rc3RhdGljIGludFxuK2FjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2NyZWF0ZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbitcdFx0XHRcdCAgc3RydWN0IG1seDVlX3BzcF9yeF9kZWNyeXB0X3RhYmxlICpkZWNyeXB0LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uICpkZWZhdWx0X2Rlc3QpXG4ge1xuLVx0c3RydWN0IG1seDVfZmxvd19uYW1lc3BhY2UgKm5zID0gbWx4NWVfZnNfZ2V0X25zKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4gXHR1OCBhY3Rpb25bTUxYNV9VTl9TWl9CWVRFUyhzZXRfYWRkX2NvcHlfYWN0aW9uX2luX2F1dG8pXSA9IHt9O1xuLVx0aW50IGlubGVuID0gTUxYNV9TVF9TWl9CWVRFUyhjcmVhdGVfZmxvd19ncm91cF9pbik7XG4gXHRzdHJ1Y3QgbWx4NV9tb2RpZnlfaGRyICptb2RpZnlfaGRyID0gTlVMTDtcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGVfYXR0ciBmdF9hdHRyID0ge307XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X2Rlc3RpbmF0aW9uIGRlc3QgPSB7fTtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfZ3JvdXAgKm1pc3NfZ3JvdXA7XG4gXHRNTFg1X0RFQ0xBUkVfRkxPV19BQ1QoZmxvd19hY3QpO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4tXHRzdHJ1Y3QgbWx4NV9mbG93X3RhYmxlICpmdDtcbi1cdHUzMiAqZmxvd19ncm91cF9pbjtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0Zmxvd19ncm91cF9pbiA9IGt2emFsbG9jKGlubGVuLCBHRlBfS0VSTkVMKTtcbiBcdHNwZWMgPSBrdnphbGxvY19vYmooKnNwZWMpO1xuLVx0aWYgKCFmbG93X2dyb3VwX2luIHx8ICFzcGVjKSB7XG4tXHRcdGVyciA9IC1FTk9NRU07XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuK1x0aWYgKCFzcGVjKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdC8qIENyZWF0ZSBGVCAqL1xuIFx0ZnRfYXR0ci5tYXhfZnRlID0gMjtcbi1cdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19FU1BfRlRfTEVWRUw7XG4tXHRmdF9hdHRyLnByaW8gPSBNTFg1RV9OSUNfUFJJTztcbitcdGZ0X2F0dHIubGV2ZWwgPSBNTFg1RV9BQ0NFTF9GU19QU1BfRlRfTEVWRUw7XG4gXHRmdF9hdHRyLmF1dG9ncm91cC5udW1fcmVzZXJ2ZWRfZW50cmllcyA9IDE7XG4gXHRmdF9hdHRyLmF1dG9ncm91cC5tYXhfbnVtX2dyb3VwcyA9IDE7XG4tXHRmdCA9IG1seDVfY3JlYXRlX2F1dG9fZ3JvdXBlZF9mbG93X3RhYmxlKG5zLCBcdTAwMjZmdF9hdHRyKTtcbi1cdGlmIChJU19FUlIoZnQpKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIoZnQpO1xuLVx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZ0IGVycj0lZFxcblwiLCBlcnIpO1xuK1x0ZnRfYXR0ci5wcmlvID0gTUxYNUVfTklDX1BSSU87XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2Z0KGZzLCBcdTAwMjZmdF9hdHRyLCBcdTAwMjZkZWNyeXB0LVx1MDAzZWZ0KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IGZ0IGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlZnQgPSBmdDtcbiBcbiBcdC8qIENyZWF0ZSBtaXNzX2dyb3VwICovXG4tXHRNTFg1X1NFVChjcmVhdGVfZmxvd19ncm91cF9pbiwgZmxvd19ncm91cF9pbiwgc3RhcnRfZmxvd19pbmRleCwgZnQtXHUwMDNlbWF4X2Z0ZSAtIDEpO1xuLVx0TUxYNV9TRVQoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4sIGZsb3dfZ3JvdXBfaW4sIGVuZF9mbG93X2luZGV4LCBmdC1cdTAwM2VtYXhfZnRlIC0gMSk7XG4tXHRtaXNzX2dyb3VwID0gbWx4NV9jcmVhdGVfZmxvd19ncm91cChmdCwgZmxvd19ncm91cF9pbik7XG4tXHRpZiAoSVNfRVJSKG1pc3NfZ3JvdXApKSB7XG4tXHRcdGVyciA9IFBUUl9FUlIobWlzc19ncm91cCk7XG4tXHRcdG1seDVfY29yZV9lcnIobWRldiwgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggbWlzc19ncm91cCBlcnI9JWRcXG5cIiwgZXJyKTtcbitcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGVfbWlzc19ncm91cChkZWNyeXB0LVx1MDAzZWZ0LCBcdTAwMjZkZWNyeXB0LVx1MDAzZW1pc3NfZ3JvdXApO1xuK1x0aWYgKGVycikge1xuK1x0XHRtbHg1X2NvcmVfZXJyKG1kZXYsXG4rXHRcdFx0ICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZGVjcnlwdCBtaXNzX2dyb3VwIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlbWlzc19ncm91cCA9IG1pc3NfZ3JvdXA7XG4gXG4gXHQvKiBDcmVhdGUgbWlzcyBydWxlICovXG4tXHRydWxlID0gbWx4NV9hZGRfZmxvd19ydWxlcyhmdCwgc3BlYywgXHUwMDI2Zmxvd19hY3QsIFx1MDAyNmZzX3Byb3QtXHUwMDNlZGVmYXVsdF9kZXN0LCAxKTtcbitcdGZsb3dfYWN0LmFjdGlvbiA9IE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9GV0RfREVTVDtcbitcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBkZWZhdWx0X2Rlc3QsXG4rXHRcdFx0XHQgICAxKTtcbiBcdGlmIChJU19FUlIocnVsZSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBtaXNzX3J1bGUgZXJyPSVkXFxuXCIsIGVycik7XG4rXHRcdG1seDVfY29yZV9lcnIobWRldixcbitcdFx0XHQgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBkZWNyeXB0IG1pc3NfcnVsZSBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRmc19wcm90LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4rXHRkZWNyeXB0LVx1MDAzZW1pc3NfcnVsZSA9IHJ1bGU7XG4gXG4tXHQvKiBBZGQgZGVmYXVsdCBSeCBwc3AgcnVsZSAqL1xuK1x0LyogQWRkIFBTUCBSWCBkZWNyeXB0IHJ1bGUgKi9cbiBcdHNldHVwX2Z0ZV91ZHBfcHNwKHNwZWMsIFBTUF9ERUZBVUxUX1VEUF9QT1JUKTtcbiBcdGZsb3dfYWN0LmNyeXB0by50eXBlID0gTUxYNV9GTE9XX0NPTlRFWFRfRU5DUllQVF9ERUNSWVBUX1RZUEVfUFNQO1xuIFx0LyogU2V0IGJpdFszMSwgMzBdIFBTUCBtYXJrZXIgKi9cbi1cdC8qIFNldCBiaXRbMjktMjNdIHBzcF9zeW5kcm9tZSBpcyBzZXQgaW4gZXJyb3IgRlQgKi9cbiAjZGVmaW5lIE1MWDVFX1BTUF9NQVJLRVJfQklUIChCSVQoMzApIHwgQklUKDMxKSlcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgYWN0aW9uX3R5cGUsIE1MWDVfQUNUSU9OX1RZUEVfU0VUKTtcbiBcdE1MWDVfU0VUKHNldF9hY3Rpb25faW4sIGFjdGlvbiwgZmllbGQsIE1MWDVfQUNUSU9OX0lOX0ZJRUxEX01FVEFEQVRBX1JFR19CKTtcbkBAIC00MDMsMjc1ICs0OTcsMTU5IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZV9mdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcyxcbiBcdFx0bW9kaWZ5X2hkciA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGZzX3Byb3QtXHUwMDNlcnhfbW9kaWZ5X2hkciA9IG1vZGlmeV9oZHI7XG4rXHRkZWNyeXB0LVx1MDAzZXJ4X21vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFxuIFx0Zmxvd19hY3QuYWN0aW9uID0gTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0ZXRF9ERVNUIHxcbiBcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DUllQVE9fREVDUllQVCB8XG4gXHRcdFx0ICBNTFg1X0ZMT1dfQ09OVEVYVF9BQ1RJT05fTU9EX0hEUjtcbiBcdGZsb3dfYWN0Lm1vZGlmeV9oZHIgPSBtb2RpZnlfaGRyO1xuIFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbi1cdGRlc3QuZnQgPSBmc19wcm90LVx1MDAzZXJ4X2Vyci5mdDtcbi1cdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZzX3Byb3QtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZkZXN0LCAxKTtcbitcdGRlc3QuZnQgPSBmcy1cdTAwM2VjaGVjay5mdDtcbitcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGRlY3J5cHQtXHUwMDNlZnQsIHNwZWMsIFx1MDAyNmZsb3dfYWN0LCBcdTAwMjZkZXN0LCAxKTtcbiBcdGlmIChJU19FUlIocnVsZSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihydWxlKTtcbi1cdFx0bWx4NV9jb3JlX2VycihtZGV2LFxuLVx0XHRcdCAgICAgIFwiZmFpbCB0byBhZGQgcHNwIHJ1bGUgUnggZGVjcnlwdGlvbiwgZXJyPSVkLCBmbG93X2FjdC5hY3Rpb24gPSAlIzA0WFxcblwiLFxuLVx0XHRcdCAgICAgIGVyciwgZmxvd19hY3QuYWN0aW9uKTtcbitcdFx0bWx4NV9jb3JlX2VycihtZGV2LCBcImZhaWwgdG8gYWRkIHBzcCByeCBkZWNyeXB0IHJ1bGUsIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgIGVycik7XG4gXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbiBcbi1cdGZzX3Byb3QtXHUwMDNlZGVmX3J1bGUgPSBydWxlO1xuLVx0Z290byBvdXQ7XG4rXHRkZWNyeXB0LVx1MDAzZXJ1bGUgPSBydWxlO1xuK1x0Z290byBvdXRfc3BlYztcbiBcbiBvdXRfZXJyOlxuLVx0YWNjZWxfcHNwX2ZzX3J4X2ZzX2Rlc3Ryb3koZnMsIGZzX3Byb3QpO1xuLW91dDpcbi1cdGt2ZnJlZShmbG93X2dyb3VwX2luKTtcbitcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIGRlY3J5cHQpO1xuK291dF9zcGVjOlxuIFx0a3ZmcmVlKHNwZWMpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZGVzdHJveShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcywgZW51bSBhY2NlbF9mc19wc3BfdHlwZSB0eXBlKVxuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcbi1cbi1cdGFjY2VsX3BzcCA9IGZzLVx1MDAzZXJ4X2ZzO1xuLVxuLVx0LyogVGhlIG5ldGRldiB1bnJlZyBhbHJlYWR5IGhhcHBlbmVkLCBzbyBhbGwgb2ZmbG9hZGVkIHJ1bGUgYXJlIGFscmVhZHkgcmVtb3ZlZCAqL1xuLVx0ZnNfcHJvdCA9IFx1MDAyNmFjY2VsX3BzcC1cdTAwM2Vmc19wcm90W3R5cGVdO1xuLVxuLVx0YWNjZWxfcHNwX2ZzX3J4X2ZzX2Rlc3Ryb3koZnMsIGZzX3Byb3QpO1xuLVxuLVx0YWNjZWxfcHNwX2ZzX3J4X2Vycl9kZXN0cm95X2Z0KGZzLCBcdTAwMjZmc19wcm90LVx1MDAzZXJ4X2Vycik7XG4rXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbitcdGludCBpO1xuIFxuLVx0cmV0dXJuIDA7XG4rXHQvKiBkaXNjb25uZWN0ICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBQ0NFTF9GU19QU1BfTlVNX1RZUEVTOyBpKyspIHtcbitcdFx0bWx4NV90dGNfZndkX2RlZmF1bHRfZGVzdCh0dGMsIGZzX3BzcDJ0dChpKSk7XG4rXHRcdGFjY2VsX3BzcF9mc19yeF9kZWNyeXB0X2Z0X2Rlc3Ryb3koZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0pO1xuK1x0fVxuK1x0YWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuK1x0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsIGVudW0gYWNjZWxfZnNfcHNwX3R5cGUgdHlwZSlcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0YyA9IG1seDVlX2ZzX2dldF90dGMoZnMtXHUwMDNlZnMsIGZhbHNlKTtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3BfcHJvdCAqZnNfcHJvdDtcbi1cdHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKmFjY2VsX3BzcDtcbi1cdGludCBlcnI7XG4tXG4tXHRhY2NlbF9wc3AgPSBmcy1cdTAwM2VyeF9mcztcbi1cdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFt0eXBlXTtcbitcdGludCBpLCBlcnI7XG4gXG4tXHRmc19wcm90LVx1MDAzZWRlZmF1bHRfZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQodHlwZSkpO1xuLVxuLVx0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2Vycl9jcmVhdGVfZnQoZnMsIGZzX3Byb3QsIFx1MDAyNmZzX3Byb3QtXHUwMDNlcnhfZXJyKTtcbi1cdGlmIChlcnIpXG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfY3JlYXRlKGZzLCBcdTAwMjZmcy1cdTAwM2VyeCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJGYWlsZWQgY3JlYXRpbmcgUlggc3RlZXJpbmcgdGFibGVcIik7XG4gXHRcdHJldHVybiBlcnI7XG4rXHR9XG4gXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfY3JlYXRlX2Z0KGZzLCBmc19wcm90KTtcbi1cdGlmIChlcnIpXG4tXHRcdGFjY2VsX3BzcF9mc19yeF9lcnJfZGVzdHJveV9mdChmcywgXHUwMDI2ZnNfcHJvdC1cdTAwM2VyeF9lcnIpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXG4te1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVfZmxvd19kZXN0aW5hdGlvbiBkZXN0ID0ge307XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXHRzdHJ1Y3QgbWx4NV90dGNfdGFibGUgKnR0Yztcbi1cdGludCBlcnIgPSAwO1xuLVxuLVx0aWYgKCFmcyB8fCAhZnMtXHUwMDNlcnhfZnMpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0dHRjID0gbWx4NWVfZnNfZ2V0X3R0Yyhmcy1cdTAwM2VmcywgZmFsc2UpO1xuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRmc19wcm90ID0gXHUwMDI2YWNjZWxfcHNwLVx1MDAzZWZzX3Byb3RbdHlwZV07XG4tXHRtdXRleF9sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRpZiAoZnNfcHJvdC1cdTAwM2VyZWZjbnQrKylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHQvKiBjcmVhdGUgRlQgKi9cbi1cdGVyciA9IGFjY2VsX3BzcF9mc19yeF9jcmVhdGUoZnMsIHR5cGUpO1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NoZWNrX2Z0X2NyZWF0ZShmcywgXHUwMDI2ZnMtXHUwMDNlY2hlY2spO1xuIFx0aWYgKGVycikge1xuLVx0XHRmc19wcm90LVx1MDAzZXJlZmNudC0tO1xuLVx0XHRnb3RvIG91dDtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcIkZhaWxlZCBjcmVhdGluZyBSWCBjaGVjayBzdGVlcmluZyB0YWJsZVwiKTtcbitcdFx0Z290byBlcnJfZnQ7XG4gXHR9XG4gXG4tXHQvKiBjb25uZWN0ICovXG4tXHRkZXN0LnR5cGUgPSBNTFg1X0ZMT1dfREVTVElOQVRJT05fVFlQRV9GTE9XX1RBQkxFO1xuLVx0ZGVzdC5mdCA9IGZzX3Byb3QtXHUwMDNlZnQ7XG4tXHRtbHg1X3R0Y19md2RfZGVzdCh0dGMsIGZzX3BzcDJ0dCh0eXBlKSwgXHUwMDI2ZGVzdCk7XG4tXG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzLCBlbnVtIGFjY2VsX2ZzX3BzcF90eXBlIHR5cGUpXG4te1xuLVx0c3RydWN0IG1seDVfdHRjX3RhYmxlICp0dGMgPSBtbHg1ZV9mc19nZXRfdHRjKGZzLVx1MDAzZWZzLCBmYWxzZSk7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4tXG4tXHRhY2NlbF9wc3AgPSBmcy1cdTAwM2VyeF9mcztcbi1cdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFt0eXBlXTtcbi1cdG11dGV4X2xvY2soXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbi1cdGlmICgtLWZzX3Byb3QtXHUwMDNlcmVmY250KVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdC8qIGRpc2Nvbm5lY3QgKi9cbi1cdG1seDVfdHRjX2Z3ZF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQodHlwZSkpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4rXHRcdHN0cnVjdCBtbHg1X2Zsb3dfZGVzdGluYXRpb24gZGVzdDtcbitcbitcdFx0ZGVzdCA9IG1seDVfdHRjX2dldF9kZWZhdWx0X2Rlc3QodHRjLCBmc19wc3AydHQoaSkpO1xuK1x0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZGVjcnlwdF9mdF9jcmVhdGUoZnMsIFx1MDAyNmZzLVx1MDAzZWRlY3J5cHRbaV0sXG4rXHRcdFx0XHRcdFx0XHRcdTAwMjZkZXN0KTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHRcdCAgICAgICBcIkZhaWxlZCBjcmVhdGluZyBSWCBkZWNyeXB0IHN0ZWVyaW5nIHRhYmxlXCIpO1xuK1x0XHRcdGdvdG8gZXJyX2RlY3J5cHRfZnQ7XG4rXHRcdH1cbitcbitcdFx0ZGVzdC50eXBlID0gTUxYNV9GTE9XX0RFU1RJTkFUSU9OX1RZUEVfRkxPV19UQUJMRTtcbitcdFx0ZGVzdC5mdCA9IGZzLVx1MDAzZWRlY3J5cHRbaV0uZnQ7XG4rXHRcdG1seDVfdHRjX2Z3ZF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpLCBcdTAwMjZkZXN0KTtcbitcdH1cbiBcbi1cdC8qIHJlbW92ZSBGVCAqL1xuLVx0YWNjZWxfcHNwX2ZzX3J4X2Rlc3Ryb3koZnMsIHR5cGUpO1xuK1x0cmV0dXJuIDA7XG4gXG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZzX3Byb3QtXHUwMDNlcHJvdF9tdXRleCk7XG4rZXJyX2RlY3J5cHRfZnQ6XG4rXHR3aGlsZSAoLS1pIFx1MDAzZT0gMCkge1xuK1x0XHRtbHg1X3R0Y19md2RfZGVmYXVsdF9kZXN0KHR0YywgZnNfcHNwMnR0KGkpKTtcbitcdFx0YWNjZWxfcHNwX2ZzX3J4X2RlY3J5cHRfZnRfZGVzdHJveShmcywgXHUwMDI2ZnMtXHUwMDNlZGVjcnlwdFtpXSk7XG4rXHR9XG4rXHRhY2NlbF9wc3BfZnNfcnhfY2hlY2tfZnRfZGVzdHJveShcdTAwMjZmcy1cdTAwM2VjaGVjayk7XG4rZXJyX2Z0OlxuK1x0YWNjZWxfcHNwX2ZzX3J4X2Z0X2Rlc3Ryb3koXHUwMDI2ZnMtXHUwMDNlcngpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX2NsZWFudXBfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3J4X2NsZWFudXAoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4ge1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcF9wcm90ICpmc19wcm90O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xuLVxuLVx0aWYgKCFmcy1cdTAwM2VyeF9mcylcbi1cdFx0cmV0dXJuO1xuLVxuLVx0YWNjZWxfcHNwID0gZnMtXHUwMDNlcnhfZnM7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2JhZF9jb3VudGVyKTtcbi1cdG1seDVfZmNfZGVzdHJveShmcy1cdTAwM2VtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuLVx0bWx4NV9mY19kZXN0cm95KGZzLVx1MDAzZW1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgYWNjZWxfcHNwLVx1MDAzZXJ4X2NvdW50ZXIpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4tXHRcdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFtpXTtcbi1cdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0XHRXQVJOX09OKGZzX3Byb3QtXHUwMDNlcmVmY250KTtcbi1cdH1cbi1cdGtmcmVlKGZzLVx1MDAzZXJ4X2ZzKTtcbi1cdGZzLVx1MDAzZXJ4X2ZzID0gTlVMTDtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy1cdTAwM2VtZGV2LCBcdTAwMjZmcy1cdTAwM2VyeF9lcnJfY291bnRlcik7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9jb3VudGVyKGZzLVx1MDAzZW1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbitcdGFjY2VsX3BzcF9mc19kZXN0cm95X2NvdW50ZXIoZnMtXHUwMDNlbWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfY291bnRlcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX2luaXRfcngoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMpXG4rc3RhdGljIGludCBhY2NlbF9wc3BfZnNfcnhfaW5pdChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwX3Byb3QgKmZzX3Byb3Q7XG4tXHRzdHJ1Y3QgbWx4NWVfYWNjZWxfZnNfcHNwICphY2NlbF9wc3A7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IGZzLVx1MDAzZW1kZXY7XG4tXHRzdHJ1Y3QgbWx4NV9mYyAqZmxvd19jb3VudGVyO1xuLVx0ZW51bSBhY2NlbF9mc19wc3BfdHlwZSBpO1xuIFx0aW50IGVycjtcbiBcbi1cdGFjY2VsX3BzcCA9IGt6YWxsb2Nfb2JqKCphY2NlbF9wc3ApO1xuLVx0aWYgKCFhY2NlbF9wc3ApXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKSB7XG4tXHRcdGZzX3Byb3QgPSBcdTAwMjZhY2NlbF9wc3AtXHUwMDNlZnNfcHJvdFtpXTtcbi1cdFx0bXV0ZXhfaW5pdChcdTAwMjZmc19wcm90LVx1MDAzZXByb3RfbXV0ZXgpO1xuLVx0fVxuLVxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfY291bnRlcik7XG4rXHRpZiAoZXJyKSB7XG4gXHRcdG1seDVfY29yZV93YXJuKG1kZXYsXG4tXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGZsb3cgY291bnRlciBlcnI9JXBlXFxuXCIsXG4tXHRcdFx0ICAgICAgIGZsb3dfY291bnRlcik7XG4tXHRcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcbitcdFx0XHQgICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZmxvdyBjb3VudGVyIGVycj0lZFxcblwiLFxuK1x0XHRcdCAgICAgICBlcnIpO1xuIFx0XHRnb3RvIG91dF9lcnI7XG4gXHR9XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlciA9IGZsb3dfY291bnRlcjtcbiBcbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2F1dGhfZmFpbF9jb3VudGVyKTtcbitcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggYXV0aCBmYWlsIGZsb3cgY291bnRlciBlcnI9JXBlXFxuXCIsXG4tXHRcdFx0ICAgICAgIGZsb3dfY291bnRlcik7XG4tXHRcdGVyciA9IFBUUl9FUlIoZmxvd19jb3VudGVyKTtcbi1cdFx0Z290byBvdXRfY291bnRlcl9lcnI7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGF1dGggZmFpbCBmbG93IGNvdW50ZXIgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlciA9IGZsb3dfY291bnRlcjtcbiBcbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXJ4X2Vycl9jb3VudGVyKTtcbitcdGlmIChlcnIpIHtcbiBcdFx0bWx4NV9jb3JlX3dhcm4obWRldixcbi1cdFx0XHQgICAgICAgXCJmYWlsIHRvIGNyZWF0ZSBwc3AgcnggZXJyb3IgZmxvdyBjb3VudGVyIGVycj0lcGVcXG5cIixcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9hdXRoX2ZhaWxfY291bnRlcl9lcnI7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGVycm9yIGZsb3cgY291bnRlciBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICAgZXJyKTtcbitcdFx0Z290byBvdXRfZXJyO1xuIFx0fVxuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2Vycl9jb3VudGVyID0gZmxvd19jb3VudGVyO1xuIFxuLVx0Zmxvd19jb3VudGVyID0gbWx4NV9mY19jcmVhdGUobWRldiwgZmFsc2UpO1xuLVx0aWYgKElTX0VSUihmbG93X2NvdW50ZXIpKSB7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfY3JlYXRlX2NvdW50ZXIobWRldiwgXHUwMDI2ZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpO1xuK1x0aWYgKGVycikge1xuIFx0XHRtbHg1X2NvcmVfd2FybihtZGV2LFxuLVx0XHRcdCAgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCByeCBiYWQgZmxvdyBjb3VudGVyIGVycj0lcGVcXG5cIixcbi1cdFx0XHQgICAgICAgZmxvd19jb3VudGVyKTtcbi1cdFx0ZXJyID0gUFRSX0VSUihmbG93X2NvdW50ZXIpO1xuLVx0XHRnb3RvIG91dF9lcnJfY291bnRlcl9lcnI7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHJ4IGJhZCBmbG93IGNvdW50ZXIgZXJyPSVkXFxuXCIsXG4rXHRcdFx0ICAgICAgIGVycik7XG4rXHRcdGdvdG8gb3V0X2VycjtcbiBcdH1cbi1cdGFjY2VsX3BzcC1cdTAwM2VyeF9iYWRfY291bnRlciA9IGZsb3dfY291bnRlcjtcbi1cbi1cdGZzLVx1MDAzZXJ4X2ZzID0gYWNjZWxfcHNwO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG4tb3V0X2Vycl9jb3VudGVyX2Vycjpcbi1cdG1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIpO1xuLVx0YWNjZWxfcHNwLVx1MDAzZXJ4X2Vycl9jb3VudGVyID0gTlVMTDtcbi1vdXRfYXV0aF9mYWlsX2NvdW50ZXJfZXJyOlxuLVx0bWx4NV9mY19kZXN0cm95KG1kZXYsIGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcik7XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIgPSBOVUxMO1xuLW91dF9jb3VudGVyX2Vycjpcbi1cdG1seDVfZmNfZGVzdHJveShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlcik7XG4tXHRhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlciA9IE5VTEw7XG4gb3V0X2Vycjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xuLVx0XHRmc19wcm90ID0gXHUwMDI2YWNjZWxfcHNwLVx1MDAzZWZzX3Byb3RbaV07XG4tXHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2ZnNfcHJvdC1cdTAwM2Vwcm90X211dGV4KTtcbi1cdH1cbi1cdGtmcmVlKGFjY2VsX3BzcCk7XG4tXHRmcy1cdTAwM2VyeF9mcyA9IE5VTEw7XG4tXG4rXHRhY2NlbF9wc3BfZnNfcnhfY2xlYW51cChmcyk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbi1cdGludCBpO1xuLVxuIFx0aWYgKCFwcml2LVx1MDAzZXBzcClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUNDRUxfRlNfUFNQX05VTV9UWVBFUzsgaSsrKVxuLVx0XHRhY2NlbF9wc3BfZnNfcnhfZnRfcHV0KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBpKTtcbi19XG4tXG4taW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLXtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzO1xuLVx0aW50IGVyciwgaTtcbi1cbi1cdGlmICghcHJpdi1cdTAwM2Vwc3ApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0ZnMgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcztcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFDQ0VMX0ZTX1BTUF9OVU1fVFlQRVM7IGkrKykge1xuLVx0XHRlcnIgPSBhY2NlbF9wc3BfZnNfcnhfZnRfZ2V0KGZzLCBpKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRnb3RvIG91dF9lcnI7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1vdXRfZXJyOlxuLVx0aS0tO1xuLVx0d2hpbGUgKGkgXHUwMDNlPSAwKSB7XG4tXHRcdGFjY2VsX3BzcF9mc19yeF9mdF9wdXQoZnMsIGkpO1xuLVx0XHQtLWk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gZXJyO1xuK1x0bmV0ZGV2X2xvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuK1x0YWNjZWxfcHNwX2ZzX3J4X2Rlc3Ryb3kocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMpO1xuK1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9mdF9jcmVhdGUoc3RydWN0IG1seDVlX3BzcF9mcyAqZnMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1ZV9wc3BfdHhfdGFibGUgKnR4KVxuIHtcbiBcdGludCBpbmxlbiA9IE1MWDVfU1RfU1pfQllURVMoY3JlYXRlX2Zsb3dfZ3JvdXBfaW4pO1xuIFx0c3RydWN0IG1seDVfZmxvd190YWJsZV9hdHRyIGZ0X2F0dHIgPSB7fTtcbkBAIC02ODEsNyArNjU5LDYgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0dTMyICppbiwgKm1jLCAqb3V0ZXJfaGVhZGVyc19jO1xuIFx0c3RydWN0IG1seDVfZmxvd19oYW5kbGUgKnJ1bGU7XG4gXHRzdHJ1Y3QgbWx4NV9mbG93X3NwZWMgKnNwZWM7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbiBcdHN0cnVjdCBtbHg1X2Zsb3dfdGFibGUgKmZ0O1xuIFx0c3RydWN0IG1seDVfZmxvd19ncm91cCAqZmc7XG4gXHRpbnQgZXJyID0gMDtcbkBAIC03MDAsOCArNjc3LDcgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0ZnRfYXR0ci5sZXZlbCA9IE1MWDVFX1BTUF9MRVZFTDtcbiBcdGZ0X2F0dHIuYXV0b2dyb3VwLm1heF9udW1fZ3JvdXBzID0gMTtcbiBcbi1cdHR4X2ZzID0gZnMtXHUwMDNldHhfZnM7XG4tXHRmdCA9IG1seDVfY3JlYXRlX2Zsb3dfdGFibGUodHhfZnMtXHUwMDNlbnMsIFx1MDAyNmZ0X2F0dHIpO1xuK1x0ZnQgPSBtbHg1X2NyZWF0ZV9mbG93X3RhYmxlKHR4LVx1MDAzZW5zLCBcdTAwMjZmdF9hdHRyKTtcbiBcdGlmIChJU19FUlIoZnQpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIoZnQpO1xuIFx0XHRtbHg1X2NvcmVfZXJyKG1kZXYsIFwiUFNQOiBmYWlsIHRvIGFkZCBwc3AgdHggZmxvdyB0YWJsZSwgZXJyID0gJWRcXG5cIiwgZXJyKTtcbkBAIC03MjcsNyArNzAzLDcgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0XHRcdCAgTUxYNV9GTE9XX0NPTlRFWFRfQUNUSU9OX0NSWVBUT19FTkNSWVBUIHxcbiBcdFx0XHQgIE1MWDVfRkxPV19DT05URVhUX0FDVElPTl9DT1VOVDtcbiBcdGRlc3QudHlwZSA9IE1MWDVfRkxPV19ERVNUSU5BVElPTl9UWVBFX0NPVU5URVI7XG4tXHRkZXN0LmNvdW50ZXIgPSB0eF9mcy1cdTAwM2V0eF9jb3VudGVyO1xuK1x0ZGVzdC5jb3VudGVyID0gZnMtXHUwMDNldHhfY291bnRlcjtcbiBcdHJ1bGUgPSBtbHg1X2FkZF9mbG93X3J1bGVzKGZ0LCBzcGVjLCBcdTAwMjZmbG93X2FjdCwgXHUwMDI2ZGVzdCwgMSk7XG4gXHRpZiAoSVNfRVJSKHJ1bGUpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIocnVsZSk7XG5AQCAtNzM1LDkgKzcxMSw5IEBAIHN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2NyZWF0ZV9mdF90YWJsZShzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiBcdFx0Z290byBlcnJfYWRkX2Zsb3dfcnVsZTtcbiBcdH1cbiBcbi1cdHR4X2ZzLVx1MDAzZWZ0ID0gZnQ7XG4tXHR0eF9mcy1cdTAwM2VmZyA9IGZnO1xuLVx0dHhfZnMtXHUwMDNlcnVsZSA9IHJ1bGU7XG4rXHR0eC1cdTAwM2VmdCA9IGZ0O1xuK1x0dHgtXHUwMDNlZmcgPSBmZztcbitcdHR4LVx1MDAzZXJ1bGUgPSBydWxlO1xuIFx0Z290byBvdXQ7XG4gXG4gZXJyX2FkZF9mbG93X3J1bGU6XG5AQCAtNzUwLDg3ICs3MjYsMzUgQEAgc3RhdGljIGludCBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eCAqdHhfZnMpXG4rc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koc3RydWN0IG1seDVlX3BzcF90eF90YWJsZSAqdHgpXG4ge1xuLVx0aWYgKCF0eF9mcy1cdTAwM2VmdClcbi1cdFx0cmV0dXJuO1xuLVxuLVx0bWx4NV9kZWxfZmxvd19ydWxlcyh0eF9mcy1cdTAwM2VydWxlKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X2dyb3VwKHR4X2ZzLVx1MDAzZWZnKTtcbi1cdG1seDVfZGVzdHJveV9mbG93X3RhYmxlKHR4X2ZzLVx1MDAzZWZ0KTtcbitcdGFjY2VsX3BzcF9mc19kZWxfZmxvd19ydWxlKFx1MDAyNnR4LVx1MDAzZXJ1bGUpO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfZmxvd19ncm91cChcdTAwMjZ0eC1cdTAwM2VmZyk7XG4rXHRhY2NlbF9wc3BfZnNfZGVzdHJveV9mdChcdTAwMjZ0eC1cdTAwM2VmdCk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgYWNjZWxfcHNwX2ZzX3R4X2Z0X2dldChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbitzdGF0aWMgdm9pZCBhY2NlbF9wc3BfZnNfdHhfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVx0aW50IGVyciA9IDA7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdGlmICh0eF9mcy1cdTAwM2VyZWZjbnQrKylcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfY3JlYXRlX2Z0X3RhYmxlKGZzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHR4X2ZzLVx1MDAzZXJlZmNudC0tO1xuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRyZXR1cm4gZXJyO1xuK1x0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3lfY291bnRlcihmcy1cdTAwM2VtZGV2LCBcdTAwMjZmcy1cdTAwM2V0eF9jb3VudGVyKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYWNjZWxfcHNwX2ZzX3R4X2Z0X3B1dChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbi17XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IGZzLVx1MDAzZXR4X2ZzO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tXHRpZiAoLS10eF9mcy1cdTAwM2VyZWZjbnQpXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0YWNjZWxfcHNwX2ZzX3R4X2Rlc3Ryb3kodHhfZnMpO1xuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZ0eF9mcy1cdTAwM2VtdXRleCk7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuLXtcbi1cdHN0cnVjdCBtbHg1ZV9wc3BfdHggKnR4X2ZzID0gZnMtXHUwMDNldHhfZnM7XG4tXG4tXHRpZiAoIXR4X2ZzKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRtbHg1X2ZjX2Rlc3Ryb3koZnMtXHUwMDNlbWRldiwgdHhfZnMtXHUwMDNldHhfY291bnRlcik7XG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdFdBUk5fT04odHhfZnMtXHUwMDNlcmVmY250KTtcbi1cdGtmcmVlKHR4X2ZzKTtcbi1cdGZzLVx1MDAzZXR4X2ZzID0gTlVMTDtcbi19XG4tXG4tc3RhdGljIGludCBhY2NlbF9wc3BfZnNfaW5pdF90eChzdHJ1Y3QgbWx4NWVfcHNwX2ZzICpmcylcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc190eF9pbml0KHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gZnMtXHUwMDNlbWRldjtcbi1cdHN0cnVjdCBtbHg1X2Zsb3dfbmFtZXNwYWNlICpucztcbi1cdHN0cnVjdCBtbHg1X2ZjICpmbG93X2NvdW50ZXI7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcztcbitcdGludCBlcnI7XG4gXG4tXHRucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsIE1MWDVfRkxPV19OQU1FU1BBQ0VfRUdSRVNTX0lQU0VDKTtcbi1cdGlmICghbnMpXG4rXHRmcy1cdTAwM2V0eC5ucyA9IG1seDVfZ2V0X2Zsb3dfbmFtZXNwYWNlKG1kZXYsXG4rXHRcdFx0XHRcdCAgICBNTFg1X0ZMT1dfTkFNRVNQQUNFX0VHUkVTU19JUFNFQyk7XG4rXHRpZiAoIWZzLVx1MDAzZXR4Lm5zKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHR0eF9mcyA9IGt6YWxsb2Nfb2JqKCp0eF9mcyk7XG4tXHRpZiAoIXR4X2ZzKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdGZsb3dfY291bnRlciA9IG1seDVfZmNfY3JlYXRlKG1kZXYsIGZhbHNlKTtcbi1cdGlmIChJU19FUlIoZmxvd19jb3VudGVyKSkge1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX2NyZWF0ZV9jb3VudGVyKG1kZXYsIFx1MDAyNmZzLVx1MDAzZXR4X2NvdW50ZXIpO1xuK1x0aWYgKGVycikge1xuIFx0XHRtbHg1X2NvcmVfd2FybihtZGV2LFxuLVx0XHRcdCAgICAgICBcImZhaWwgdG8gY3JlYXRlIHBzcCB0eCBmbG93IGNvdW50ZXIgZXJyPSVwZVxcblwiLFxuLVx0XHRcdCAgICAgICBmbG93X2NvdW50ZXIpO1xuLVx0XHRrZnJlZSh0eF9mcyk7XG4tXHRcdHJldHVybiBQVFJfRVJSKGZsb3dfY291bnRlcik7XG4rXHRcdFx0ICAgICAgIFwiZmFpbCB0byBjcmVhdGUgcHNwIHR4IGZsb3cgY291bnRlciBlcnI9JWRcXG5cIixcbitcdFx0XHQgICAgICAgZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbiBcdH1cbi1cdHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIgPSBmbG93X2NvdW50ZXI7XG4tXHRtdXRleF9pbml0KFx1MDAyNnR4X2ZzLVx1MDAzZW11dGV4KTtcbi1cdHR4X2ZzLVx1MDAzZW5zID0gbnM7XG4tXHRmcy1cdTAwM2V0eF9mcyA9IHR4X2ZzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTgzOCwzMiArNzYyLDI5IEBAIHN0YXRpYyB2b2lkXG4gbWx4NWVfYWNjZWxfcHNwX2ZzX2dldF9zdGF0c19maWxsKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbWx4NWVfcHNwX3N0YXRzICpzdGF0cylcbiB7XG4tXHRzdHJ1Y3QgbWx4NWVfcHNwX3R4ICp0eF9mcyA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXR4X2ZzO1xuK1x0c3RydWN0IG1seDVlX3BzcF9mcyAqZnMgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2VmcztcbiBcdHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2ID0gcHJpdi1cdTAwM2VtZGV2O1xuLVx0c3RydWN0IG1seDVlX2FjY2VsX2ZzX3BzcCAqYWNjZWxfcHNwO1xuLVxuLVx0YWNjZWxfcHNwID0gKHN0cnVjdCBtbHg1ZV9hY2NlbF9mc19wc3AgKilwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcy1cdTAwM2VyeF9mcztcbiBcbi1cdGlmICh0eF9mcy1cdTAwM2V0eF9jb3VudGVyKVxuLVx0XHRtbHg1X2ZjX3F1ZXJ5KG1kZXYsIHR4X2ZzLVx1MDAzZXR4X2NvdW50ZXIsIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF90eF9wa3RzLFxuK1x0aWYgKGZzLVx1MDAzZXR4X2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNldHhfY291bnRlciwgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3R4X3BrdHMsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3R4X2J5dGVzKTtcbiBcbi1cdGlmIChhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfY291bnRlciwgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHMsXG4rXHRpZiAoZnMtXHUwMDNlcnhfY291bnRlcilcbitcdFx0bWx4NV9mY19xdWVyeShtZGV2LCBmcy1cdTAwM2VyeF9jb3VudGVyLCBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfcGt0cyxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXMpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9hdXRoX2ZhaWxfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXG4rXHRpZiAoZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfYXV0aF9mYWlsX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfYXV0aF9mYWlsLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9ieXRlc19hdXRoX2ZhaWwpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9lcnJfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfZXJyX2NvdW50ZXIsXG4rXHRpZiAoZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfZXJyX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfZnJhbWVfZXJyLFxuIFx0XHRcdCAgICAgIFx1MDAyNnN0YXRzLVx1MDAzZXBzcF9yeF9ieXRlc19mcmFtZV9lcnIpO1xuIFxuLVx0aWYgKGFjY2VsX3BzcC1cdTAwM2VyeF9iYWRfY291bnRlcilcbi1cdFx0bWx4NV9mY19xdWVyeShtZGV2LCBhY2NlbF9wc3AtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4rXHRpZiAoZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIpXG4rXHRcdG1seDVfZmNfcXVlcnkobWRldiwgZnMtXHUwMDNlcnhfYmFkX2NvdW50ZXIsXG4gXHRcdFx0ICAgICAgXHUwMDI2c3RhdHMtXHUwMDNlcHNwX3J4X3BrdHNfZHJvcCxcbiBcdFx0XHQgICAgICBcdTAwMjZzdGF0cy1cdTAwM2Vwc3BfcnhfYnl0ZXNfZHJvcCk7XG4gfVxuQEAgLTg3MywyMSArNzk0LDE1IEBAIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF90eF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoIXByaXYtXHUwMDNlcHNwKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRhY2NlbF9wc3BfZnNfdHhfZnRfcHV0KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbi19XG4tXG4taW50IG1seDVfYWNjZWxfcHNwX2ZzX2luaXRfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLXtcbi1cdGlmICghcHJpdi1cdTAwM2Vwc3ApXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGFjY2VsX3BzcF9mc190eF9mdF9nZXQocHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMpO1xuK1x0bmV0ZGV2X2xvY2socHJpdi1cdTAwM2VuZXRkZXYpO1xuK1x0YWNjZWxfcHNwX2ZzX3R4X2Z0X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2Vwc3AtXHUwMDNlZnMtXHUwMDNldHgpO1xuK1x0bmV0ZGV2X3VubG9jayhwcml2LVx1MDAzZW5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVlX2FjY2VsX3BzcF9mc19jbGVhbnVwKHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzKVxuIHtcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3J4KGZzKTtcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcbitcdGFjY2VsX3BzcF9mc19yeF9jbGVhbnVwKGZzKTtcbitcdGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTtcbiBcdGtmcmVlKGZzKTtcbiB9XG4gXG5AQCAtOTAxLDI5ICs4MTYsNjMgQEAgc3RhdGljIHN0cnVjdCBtbHg1ZV9wc3BfZnMgKm1seDVlX2FjY2VsX3BzcF9mc19pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdGZzLVx1MDAzZW1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG4tXHRlcnIgPSBhY2NlbF9wc3BfZnNfaW5pdF90eChmcyk7XG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfaW5pdChmcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl90eDtcbiBcbiBcdGZzLVx1MDAzZWZzID0gcHJpdi1cdTAwM2Vmcztcbi1cdGVyciA9IGFjY2VsX3BzcF9mc19pbml0X3J4KGZzKTtcbitcdGVyciA9IGFjY2VsX3BzcF9mc19yeF9pbml0KGZzKTtcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX3J4O1xuIFxuIFx0cmV0dXJuIGZzO1xuIFxuIGVycl9yeDpcbi1cdGFjY2VsX3BzcF9mc19jbGVhbnVwX3R4KGZzKTtcbitcdGFjY2VsX3BzcF9mc190eF9jbGVhbnVwKGZzKTtcbiBlcnJfdHg6XG4gXHRrZnJlZShmcyk7XG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBcbitzdGF0aWMgaW50IGFjY2VsX3BzcF9mc19jcmVhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gYWNjZWxfcHNwX2ZzX3J4X2NyZWF0ZShwcml2LVx1MDAzZXBzcC1cdTAwM2VmcywgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRlcnIgPSBhY2NlbF9wc3BfZnNfdHhfZnRfY3JlYXRlKHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLCBcdTAwMjZwcml2LVx1MDAzZXBzcC1cdTAwM2Vmcy1cdTAwM2V0eCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJGYWlsZWQgY3JlYXRpbmcgVFggc3RlZXJpbmcgdGFibGVcIik7XG4rXHRcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbitcdH1cbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFjY2VsX3BzcF9mc19kZXN0cm95KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuK3tcbitcdGFjY2VsX3BzcF9mc190eF9mdF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcHNwLVx1MDAzZWZzLVx1MDAzZXR4KTtcbitcdGFjY2VsX3BzcF9mc19yeF9kZXN0cm95KHByaXYtXHUwMDNlcHNwLVx1MDAzZWZzKTtcbit9XG4rXG4gc3RhdGljIGludFxuIG1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcbiBcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0cmV0dXJuIDA7IC8qIFRPRE86IHRoaXMgc2hvdWxkIGFjdHVhbGx5IGRvIHRoaW5ncyB0byB0aGUgZGV2aWNlICovXG4rXHRzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHBzZC1cdTAwM2VtYWluX25ldGRldik7XG4rXHRib29sIHBzcF9lbmFibGVkID0gcHNkLVx1MDAzZWNvbmZpZy52ZXJzaW9ucztcbitcdGJvb2wgZW5hYmxlX3BzcCA9IGNvbmYtXHUwMDNldmVyc2lvbnM7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdG5ldGRldl9sb2NrKHByaXYtXHUwMDNlbmV0ZGV2KTtcbitcdGlmICghcHNwX2VuYWJsZWQgXHUwMDI2XHUwMDI2IGVuYWJsZV9wc3ApXG4rXHRcdGVyciA9IGFjY2VsX3BzcF9mc19jcmVhdGUocHJpdiwgZXh0YWNrKTtcbitcdGVsc2UgaWYgKHBzcF9lbmFibGVkIFx1MDAyNlx1MDAyNiAhZW5hYmxlX3BzcClcbitcdFx0YWNjZWxfcHNwX2ZzX2Rlc3Ryb3kocHJpdik7XG4rXHRuZXRkZXZfdW5sb2NrKHByaXYtXHUwMDNlbmV0ZGV2KTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbkBAIC0xMDcyLDIxICsxMDIxLDIxIEBAIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IG1seDVlX3BzcCAqcHNwID0gcHJpdi1cdTAwM2Vwc3A7XG4gXG4tXHRpZiAoIXBzcCB8fCAhcHNwLVx1MDAzZXBzcClcbitcdGlmICghcHNwIHx8ICFwc3AtXHUwMDNlcHNkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRwc3BfZGV2X3VucmVnaXN0ZXIocHNwLVx1MDAzZXBzcCk7XG4tXHRwc3AtXHUwMDNlcHNwID0gTlVMTDtcbitcdHBzcF9kZXZfdW5yZWdpc3Rlcihwc3AtXHUwMDNlcHNkKTtcbitcdHBzcC1cdTAwM2Vwc2QgPSBOVUxMO1xuIH1cbiBcbi12b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbitpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdHN0cnVjdCBtbHg1ZV9wc3AgKnBzcCA9IHByaXYtXHUwMDNlcHNwO1xuIFx0c3RydWN0IHBzcF9kZXYgKnBzZDtcbiBcbiBcdC8qIEZXIENhcHMgbWlzc2luZyAqL1xuIFx0aWYgKCFwcml2LVx1MDAzZXBzcClcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdHBzcC1cdTAwM2VjYXBzLmFzc29jX2Rydl9zcGMgPSBzaXplb2YodTMyKTtcbiBcdHBzcC1cdTAwM2VjYXBzLnZlcnNpb25zID0gMSBcdTAwM2NcdTAwM2MgUFNQX1ZFUlNJT05fSERSMF9BRVNfR0NNXzEyODtcbkBAIC0xMDk4LDkgKzEwNDcsMTEgQEAgdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoSVNfRVJSKHBzZCkpIHtcbiBcdFx0bWx4NV9jb3JlX2Vycihwcml2LVx1MDAzZW1kZXYsIFwiUFNQIGZhaWxlZCB0byByZWdpc3RlciBkdWUgdG8gJXBlXFxuXCIsXG4gXHRcdFx0ICAgICAgcHNkKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gUFRSX0VSUihwc2QpO1xuIFx0fVxuLVx0cHNwLVx1MDAzZXBzcCA9IHBzZDtcbitcdHBzcC1cdTAwM2Vwc2QgPSBwc2Q7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gaW50IG1seDVlX3BzcF9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaFxuaW5kZXggNmI2MmZlZjBkOWE3MzguLjNmNDQxZTdkZDU1YWMwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmhcbkBAIC0yMyw3ICsyMyw3IEBAIHN0cnVjdCBtbHg1ZV9wc3Bfc3RhdHMge1xuIH07XG4gXG4gc3RydWN0IG1seDVlX3BzcCB7XG4tXHRzdHJ1Y3QgcHNwX2RldiAqcHNwO1xuK1x0c3RydWN0IHBzcF9kZXYgKnBzZDtcbiBcdHN0cnVjdCBwc3BfZGV2X2NhcHMgY2FwcztcbiBcdHN0cnVjdCBtbHg1ZV9wc3BfZnMgKmZzO1xuIFx0YXRvbWljX3QgdHhfa2V5X2NudDtcbkBAIC00MywzMyArNDMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIG1seDVfaXNfcHNwX2RldmljZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1pbnQgbWx4NV9hY2NlbF9wc3BfZnNfaW5pdF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NV9hY2NlbF9wc3BfZnNfY2xlYW51cF9yeF90YWJsZXMoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuLWludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1X2FjY2VsX3BzcF9mc19jbGVhbnVwX3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4tdm9pZCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuK2ludCBtbHg1ZV9wc3BfcmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIHZvaWQgbWx4NWVfcHNwX3VucmVnaXN0ZXIoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpO1xuIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdik7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3J4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfcnhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbi1zdGF0aWMgaW5saW5lIGludCBtbHg1X2FjY2VsX3BzcF9mc19pbml0X3R4X3RhYmxlcyhzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbi17XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVfYWNjZWxfcHNwX2ZzX2NsZWFudXBfdHhfdGFibGVzKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGJvb2wgbWx4NV9pc19wc3BfZGV2aWNlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICptZGV2KVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF9yZWdpc3RlcihzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG4rc3RhdGljIGlubGluZSBpbnQgbWx4NWVfcHNwX3JlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIG1seDVlX3BzcF91bnJlZ2lzdGVyKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KSB7IH1cbiBzdGF0aWMgaW5saW5lIGludCBtbHg1ZV9wc3BfaW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtbHg1ZV9wc3BfY2xlYW51cChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdikgeyB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY1xuaW5kZXggZWY3ZjUzMzg1NDBmZGYuLjM0OGZkN2E5NjI2MTVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5jXG5AQCAtMTQsMTIgKzE0LDYgQEBcbiAjaW5jbHVkZSBcImVuX2FjY2VsL3BzcF9yeHR4LmhcIlxuICNpbmNsdWRlIFwiZW5fYWNjZWwvcHNwLmhcIlxuIFxuLWVudW0ge1xuLVx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVELFxuLVx0TUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfQVVUSF9GQUlMRUQsXG4tXHRNTFg1RV9QU1BfT0ZGTE9BRF9SWF9TWU5EUk9NRV9CQURfVFJBSUxFUixcbi19O1xuLVxuIHN0YXRpYyB2b2lkIG1seDVlX3BzcF9zZXRfc3dwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgc3RydWN0IG1seDVlX2FjY2VsX3R4X3BzcF9zdGF0ZSAqcHNwX3N0LFxuIFx0XHRcdCAgICAgIHN0cnVjdCBtbHg1X3dxZV9ldGhfc2VnICplc2VnKVxuQEAgLTEyMiwxNiArMTE2LDExIEBAIHN0YXRpYyBib29sIG1seDVlX3BzcF9zZXRfc3RhdGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYsXG4gYm9vbCBtbHg1ZV9wc3Bfb2ZmbG9hZF9oYW5kbGVfcnhfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBtbHg1X2NxZTY0ICpjcWUpXG4ge1xuLVx0dTMyIHBzcF9tZXRhX2RhdGEgPSBiZTMyX3RvX2NwdShjcWUtXHUwMDNlZnRfbWV0YWRhdGEpO1xuIFx0c3RydWN0IG1seDVlX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0dTE2IGRldl9pZCA9IHByaXYtXHUwMDNlcHNwLVx1MDAzZXBzcC1cdTAwM2VpZDtcbitcdHUxNiBkZXZfaWQgPSBwcml2LVx1MDAzZXBzcC1cdTAwM2Vwc2QtXHUwMDNlaWQ7XG4gXHRib29sIHN0cmlwX2ljdiA9IHRydWU7XG4gXHR1OCBnZW5lcmF0aW9uID0gMDtcbiBcbi1cdC8qIFRCRDogcmVwb3J0IGVycm9ycyBhcyBTVyBjb3VudGVycyB0byBldGh0b29sLCBhbnkgZnVydGhlciBoYW5kbGluZyA/ICovXG4tXHRpZiAoTUxYNV9QU1BfTUVUQURBVEFfU1lORFJPTUUocHNwX21ldGFfZGF0YSkgIT0gTUxYNUVfUFNQX09GRkxPQURfUlhfU1lORFJPTUVfREVDUllQVEVEKVxuLVx0XHRnb3RvIGRyb3A7XG4tXG4gXHRpZiAocHNwX2Rldl9yY3Yoc2tiLCBkZXZfaWQsIGdlbmVyYXRpb24sIHN0cmlwX2ljdikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3Bfcnh0eC5oXG5pbmRleCA3MDI4OWM5MjFiZDZiMy4uMmIwODBjMzljYzM3ZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcF9yeHR4LmhcbkBAIC0xMCw5ICsxMCw4IEBAXG4gI2luY2x1ZGUgXCJlbi5oXCJcbiAjaW5jbHVkZSBcImVuL3R4cnguaFwiXG4gXG4tLyogQml0MzA6IFBTUCBtYXJrZXIsIEJpdDI5LTIzOiBQU1Agc3luZHJvbWUsIEJpdDIyLTA6IFBTUCBvYmogaWQgKi9cbisvKiBCaXQzMDogUFNQIG1hcmtlciwgQml0MjItMDogUFNQIG9iaiBpZCAqL1xuICNkZWZpbmUgTUxYNV9QU1BfTUVUQURBVEFfTUFSS0VSKG1ldGFkYXRhKSAgKCgoKG1ldGFkYXRhKSBcdTAwM2VcdTAwM2UgMzApIFx1MDAyNiAweDMpID09IDB4Mylcbi0jZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX1NZTkRST01FKG1ldGFkYXRhKSAoKChtZXRhZGF0YSkgXHUwMDNlXHUwMDNlIDIzKSBcdTAwMjYgR0VOTUFTSyg2LCAwKSlcbiAjZGVmaW5lIE1MWDVfUFNQX01FVEFEQVRBX0hBTkRMRShtZXRhZGF0YSkgICgobWV0YWRhdGEpIFx1MDAyNiBHRU5NQVNLKDIyLCAwKSlcbiBcbiBzdHJ1Y3QgbWx4NWVfYWNjZWxfdHhfcHNwX3N0YXRlIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuaW5kZXggNzc1ZjBjNmU1NWM5NTUuLjJjYjQ4YjI0ZDVlYWM1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX21haW4uY1xuQEAgLTYxOTEsNyArNjE5MSw3IEBAIHN0YXRpYyBpbnQgbWx4NWVfaW5pdF9uaWNfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbitzdGF0aWMgaW50IG1seDVlX25pY19lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHByaXYtXHUwMDNlbmV0ZGV2O1xuIFx0c3RydWN0IG1seDVfY29yZV9kZXYgKm1kZXYgPSBwcml2LVx1MDAzZW1kZXY7XG5AQCAtNjE5OSw3ICs2MTk5LDkgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcbiBcdG1seDVlX2ZzX2luaXRfbDJfYWRkcihwcml2LVx1MDAzZWZzLCBuZXRkZXYpO1xuIFx0bWx4NWVfaXBzZWNfaW5pdChwcml2KTtcbi1cdG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcbitcdGVyciA9IG1seDVlX3BzcF9yZWdpc3Rlcihwcml2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0X2lwc2VjX2NsZWFudXA7XG4gXG4gXHRlcnIgPSBtbHg1ZV9tYWNzZWNfaW5pdChwcml2KTtcbiBcdGlmIChlcnIpXG5AQCAtNjIyMiw3ICs2MjI0LDcgQEAgc3RhdGljIHZvaWQgbWx4NWVfbmljX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG1seDVlX3BjaWVfY29uZ19ldmVudF9pbml0KHByaXYpO1xuIFx0bWx4NWVfaHZfdmhjYV9zdGF0c19jcmVhdGUocHJpdik7XG4gXHRpZiAobmV0ZGV2LVx1MDAzZXJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRClcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gMDtcbiBcdG1seDVlX2RjYm5sX2luaXRfYXBwKHByaXYpO1xuIFxuIFx0bWx4NWVfbmljX3NldF9yeF9tb2RlKHByaXYpO1xuQEAgLTYyMzUsNiArNjIzNywxMiBAQCBzdGF0aWMgdm9pZCBtbHg1ZV9uaWNfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIFx0bmV0ZGV2X3VubG9jayhuZXRkZXYpO1xuIFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbitcbitcdHJldHVybiAwO1xuK1xuK291dF9pcHNlY19jbGVhbnVwOlxuK1x0bWx4NWVfaXBzZWNfY2xlYW51cChwcml2KTtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIG1seDVlX25pY19kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuQEAgLTY2MTYsMTMgKzY2MjQsMTggQEAgaW50IG1seDVlX2F0dGFjaF9uZXRkZXYoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbnVwX3R4O1xuIFxuLVx0aWYgKHByb2ZpbGUtXHUwMDNlZW5hYmxlKVxuLVx0XHRwcm9maWxlLVx1MDAzZWVuYWJsZShwcml2KTtcbitcdGlmIChwcm9maWxlLVx1MDAzZWVuYWJsZSkge1xuK1x0XHRlcnIgPSBwcm9maWxlLVx1MDAzZWVuYWJsZShwcml2KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGVycl9jbGVhbnVwX3J4O1xuK1x0fVxuIFxuIFx0bWx4NWVfdXBkYXRlX2ZlYXR1cmVzKHByaXYtXHUwMDNlbmV0ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuIFxuK2Vycl9jbGVhbnVwX3J4OlxuK1x0cHJvZmlsZS1cdTAwM2VjbGVhbnVwX3J4KHByaXYpO1xuIGVycl9jbGVhbnVwX3R4OlxuIFx0cHJvZmlsZS1cdTAwM2VjbGVhbnVwX3R4KHByaXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY1xuaW5kZXggYzhiNzZkMzAxYzkyY2YuLjYwMzA1MWFiMWVhYTRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3JlcC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fcmVwLmNcbkBAIC0xMjYyLDkgKzEyNjIsMTEgQEAgc3RhdGljIHZvaWQgbWx4NWVfY2xlYW51cF9yZXBfdHgoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4gXHRtbHg1ZV9yZXBfbmVpZ2hfY2xlYW51cChycHJpdik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG1seDVlX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBtbHg1ZV9yZXBfZW5hYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIHtcbiBcdG1seDVlX3NldF9uZXRkZXZfbXR1X2JvdW5kYXJpZXMocHJpdik7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfcmVwX2Rpc2FibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG5AQCAtMTMyMiw3ICsxMzI0LDcgQEAgc3RhdGljIGludCB1cGxpbmtfcmVwX2FzeW5jX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnRcbiBcdHJldHVybiBOT1RJRllfRE9ORTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9lbmFibGUoc3RydWN0IG1seDVlX3ByaXYgKnByaXYpXG4rc3RhdGljIGludCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHJpdi1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqbWRldiA9IHByaXYtXHUwMDNlbWRldjtcbkBAIC0xMzU3LDYgKzEzNTksOCBAQCBzdGF0aWMgdm9pZCBtbHg1ZV91cGxpbmtfcmVwX2VuYWJsZShzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcbiBcdG5ldGRldl91bmxvY2sobmV0ZGV2KTtcbiBcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWx4NWVfdXBsaW5rX3JlcF9kaXNhYmxlKHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDA6NTUuNDUxMDE1NTAxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE4Nzc0MDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBhIE1lbGxhbm94IG1seDUgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgc2VlbXMgbGlrZSBpdCB0d2Vha3MgdGhlIE1lbGxhbm94IG1seDUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIHN0dWZmLiBJdCB0b3VjaGVzIGEgYnVuY2ggb2YgZmlsZXM6IGBwc3AuY2AsIGBwc3AuaGAsIGBwc3Bfcnh0eC5jYCwgYGVuX21haW4uY2AsIGBlbl9yZXAuY2AsIGBlbi5oYCwgYW5kIGBmcy5oYC4gQmFzaWNhbGx5LCBpdOKAmXMgYWx0ZXJpbmcgaG93IGZsb3cgc3RlZXJpbmcgcnVsZXMgYXJlIG1hZGUgYW5kIGhhbmRsZWQgd2hlbiB3ZSdyZSBvZmZsb2FkaW5nIFBTUCB0YXNrcy4gSXQgYWxzbyBsb29rcyBsaWtlIGEgY2FsbGJhY2sgaW4gdGhlIGBtbHg1ZV9wcm9maWxlYCBpcyByZXR1cm5pbmcgYW4gYGludGAgbm93IGluc3RlYWQgb2YgYHZvaWRgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpczogQ2FuIEkgZXZlbiAqdGVzdCogdGhpcyBwYXRjaCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgbWx4NSBkcml2ZXIgKnJlcXVpcmVzKiBzcGVjaWZpYyBNZWxsYW5veCBoYXJkd2FyZSDigJMgQ29ubmVjdFgtNCwgNSwgNiwgb3IgNy4gU3l6a2FsbGVyLCB3aGljaCBpcyBteSBnby10byBmdXp6aW5nIHRvb2wsIGRvZXNuJ3QgaGF2ZSBNZWxsYW5veCBoYXJkd2FyZS4gU28sIGNhbiBRRU1VIGVtdWxhdGUgbWx4NT8gSSBrbm93IFFFTVUgZW11bGF0ZXMgc2V2ZXJhbCBOSUNzLCBsaWtlIGUxMDAwLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCB2bXhuZXQzLCBhbmQgaWdiLCBidXQgbm90IHVzdWFsbHkgbWx4NSBuYXRpdmVseS4gSSBtaWdodCBiZSBhYmxlIHRvIGZpbmQgYSBjdXN0b20gY29uZmlndXJhdGlvbiwgYnV0IGl0J3Mgbm90IHN0YW5kYXJkLiBUaGVyZSdzIG5vIHN0YW5kYXJkIHNvZnR3YXJlIGVtdWxhdGlvbiwgZWl0aGVyLCBzaW5jZSBpdCdzIGEgaGFyZHdhcmUgZHJpdmVyLlxuXG5TeXprYWxsZXIgZG9lcyBoYXZlIGNsZXZlciBlbXVsYXRpb24gbWVjaGFuaXNtcyBmb3Igb3RoZXIgZGV2aWNlcyDigJMgaXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGZvciBVU0IsIGBtYWM4MDIxMV9od3NpbWAgZm9yIHdpZmksIGB2a21zYCBmb3IgRFJNLCBhbmQgYHZpdmlkYCBmb3IgVjRMMi4gRm9yIGV0aGVybmV0LCBpdCB1c2VzIGB0dW5gL2B0YXBgIG9yIGB2ZXRoYC4gQnV0IEkgZG9u4oCZdCB0aGluayB0aGVyZSBpcyBhIGRpcmVjdCBlcXVpdmFsZW50IGZvciBlbXVsYXRpbmcgUENJZSBkZXZpY2VzIGxpa2UgbWx4NS5cblxuU28sIHJlYWxpc3RpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXAuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUncyBubyBzdWJ0bGUgd2F5IHRvIHRyaWdnZXIgdGhpcyBtbHg1IGNvZGUgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4gSXMgdGhlcmUgc29tZSBraW5kIG9mIG1vY2sgZHJpdmVyIG9yIHNpbXVsYXRpb24gbGF5ZXI/IEknbGwgcnVuIGEga2VybmVsIHNlYXJjaCBmb3IgXCJtbHg1XCIgYW5kIHNlZSB3aGF0IGl0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc5MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIxOjQxOjA0LjYzODc1OTM1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDExMTMzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NV9jb3JlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMzM4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz01OD1zdHJ1Y3QgbWx4NV9kbWFfcG9vbCB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy02MS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VfbGlzdDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo2MjpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTYzLVxcdGludCBub2RlO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9Nzk9c3RydWN0IG1seDVfZG1hX3Bvb2xfc3RhdHMge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtODktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6OTA6c3RhdGljIHZvaWQgKm1seDVfZG1hX3phbGxvY19jb2hlcmVudF9ub2RlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtOTEtXFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0xMDk9c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9kZXN0cm95KHN0cnVjdCBtbHg1X2RtYV9wb29sICpwb29sKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMTE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjExNTpzdGF0aWMgc3RydWN0IG1seDVfZG1hX3Bvb2wgKm1seDVfZG1hX3Bvb2xfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMTE2LVxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IG5vZGUsIHU4IGJsb2NrX3NoaWZ0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9MTMzPW1seDVfZG1hX3Bvb2xfcGFnZV9hbGxvYyhzdHJ1Y3QgbWx4NV9kbWFfcG9vbCAqcG9vbClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTE2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzoxNjM6c3RhdGljIHZvaWQgbWx4NV9kbWFfcG9vbF9wYWdlX2ZyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0xNjQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtbHg1X2RtYV9wb29sX3BhZ2UgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0yODM9c3RhdGljIHN0cnVjdCBtbHg1X2ZyYWdfYnVmX25vZGVfcG9vbHMgKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjI4NDptbHg1X2ZyYWdfYnVmX25vZGVfcG9vbHNfY3JlYXRlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBub2RlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTI4NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0zMDc9bWx4NV9mcmFnX2J1Zl9kbWFfcG9vbHNfZGVidWdmc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqcHJpdilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMDgte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjMwOTpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gZmlsZS1cXHUwMDNlcHJpdmF0ZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMTAtXFx0aW50IG5vZGU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz0zMzY9REVGSU5FX1NIT1dfQVRUUklCVVRFKG1seDVfZnJhZ19idWZfZG1hX3Bvb2xzX2RlYnVnZnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTMzNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzozMzg6dm9pZCBtbHg1X2ZyYWdfYnVmX3Bvb2xzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zMzkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjM1OTppbnQgbWx4NV9mcmFnX2J1Zl9wb29sc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtMzYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTM4Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzozODg6aW50IG1seDVfZnJhZ19idWZfYWxsb2Nfbm9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgc2l6ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy0zODktXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWx4NV9mcmFnX2J1ZiAqYnVmLCBpbnQgbm9kZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jPTQyNT1FWFBPUlRfU1lNQk9MX0dQTChtbHg1X2ZyYWdfYnVmX2FsbG9jX25vZGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTQyNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo0Mjc6dm9pZCBtbHg1X2ZyYWdfYnVmX2ZyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfZnJhZ19idWYgKmJ1ZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy00Mjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9NDQ1PUVYUE9SVF9TWU1CT0xfR1BMKG1seDVfZnJhZ19idWZfZnJlZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmMtNDQ2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jOjQ0NzpzdGF0aWMgc3RydWN0IG1seDVfZGJfcGdkaXIgKm1seDVfYWxsb2NfZGJfcGdkaXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy00NDgtXFx0XFx0XFx0XFx0XFx0XFx0IGludCBub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM9NDc2PXN0YXRpYyBpbnQgbWx4NV9hbGxvY19kYl9mcm9tX3BnZGlyKHN0cnVjdCBtbHg1X2RiX3BnZGlyICpwZ2RpcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTUwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYzo1MDE6aW50IG1seDVfZGJfYWxsb2Nfbm9kZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9kYiAqZGIsIGludCBub2RlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jLTUwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYz01Mjg9RVhQT1JUX1NZTUJPTF9HUEwobWx4NV9kYl9hbGxvY19ub2RlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2FsbG9jLmM6NTMwOnZvaWQgbWx4NV9kYl9mcmVlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2RiICpkYilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYy01MzEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTI4Mz1zdGF0aWMgdm9pZCBwb2xsX3RpbWVvdXQoc3RydWN0IG1seDVfY21kX3dvcmtfZW50ICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI4NC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI4NTpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGVudC1cXHUwMDNlY21kLCBzdHJ1Y3QgbWx4NV9jb3JlX2RldiwgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjg2LVxcdHU2NCBjbWRfdG9fbXMgPSBtbHg1X3RvdXRfbXMoZGV2LCBDTUQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTMzMT1zdGF0aWMgdm9pZCBkdW1wX2J1Zih2b2lkICpidWYsIGludCBzaXplLCBpbnQgZGF0YV9vbmx5LCBpbnQgb2Zmc2V0LCBpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTM0Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MzQ3OnN0YXRpYyBpbnQgbWx4NV9pbnRlcm5hbF9lcnJfcmV0X3ZhbHVlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBvcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMzQ4LVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKnN5bmQsIHU4ICpzdGF0dXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9NzkzPXN0YXRpYyBpbnQgY21kX3N0YXR1c190b19lcnIodTggc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6ODE3OnZvaWQgbWx4NV9jbWRfb3V0X2VycihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgxOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9ODI3PUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfb3V0X2Vycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTgyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6ODI5OnN0YXRpYyB2b2lkIGNtZF9zdGF0dXNfcHJpbnQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdm9pZCAqaW4sIHZvaWQgKm91dClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy04NDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjg0NTppbnQgbWx4NV9jbWRfY2hlY2soc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgaW50IGVyciwgdm9pZCAqaW4sIHZvaWQgKm91dClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtODQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz04NzI9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9jaGVjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTg3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6ODc0OnN0YXRpYyB2b2lkIGR1bXBfY29tbWFuZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy04NzUtXFx0XFx0XFx0IHN0cnVjdCBtbHg1X2NtZF93b3JrX2VudCAqZW50LCBpbnQgaW5wdXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTMxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5MzI6c3RhdGljIHZvaWQgbWx4NV9jbWRfY29tcF9oYW5kbGVyKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHU2NCB2ZWMsIGJvb2wgZm9yY2VkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTMzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz05MzQ9c3RhdGljIHZvaWQgY2JfdGltZW91dF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05MzktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBjYl90aW1lb3V0X3dvcmspO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5NDA6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihlbnQtXFx1MDAzZWNtZCwgc3RydWN0IG1seDVfY29yZV9kZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk0MS1cXHRcXHRcXHRcXHRcXHRcXHQgY21kKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk2MTpzdGF0aWMgdm9pZCBmcmVlX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jbWRfbXNnICptc2cpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5NjI6c3RhdGljIHZvaWQgbWx4NV9mcmVlX2NtZF9tc2coc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTYzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9OTY1PXN0YXRpYyBib29sIG9wY29kZV9hbGxvd2VkKHN0cnVjdCBtbHg1X2NtZCAqY21kLCB1MTYgb3Bjb2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTk3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6OTczOmJvb2wgbWx4NV9jbWRfaXNfZG93bihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05NzQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTk4MD1zdGF0aWMgdm9pZCBjbWRfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05ODUtXFx0c3RydWN0IG1seDVfY21kX2xheW91dCAqbGF5O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzo5ODY6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTg3LVxcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy05OTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjk5NDpcXHRkZXYgPSBjb250YWluZXJfb2YoY21kLCBzdHJ1Y3QgbWx4NV9jb3JlX2RldiwgY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtOTk1LVxcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG1seDVfdG91dF9tcyhkZXYsIENNRCkpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTExNDA9ZW51bSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTE0NDpzdGF0aWMgdm9pZCB3YWl0X2Z1bmNfaGFuZGxlX2V4ZWNfdGltZW91dChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMTQ1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG1seDVfY21kX3dvcmtfZW50ICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE2OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTE2OTpzdGF0aWMgaW50IHdhaXRfZnVuYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jbWRfd29ya19lbnQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTE3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTIxNS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTIxNjpzdGF0aWMgYm9vbCBtbHg1X2NtZF9hbGxfc3RhbGxlZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjU4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxMjU5OnN0YXRpYyBpbnQgbWx4NV9jbWRfaW52b2tlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZF9tc2cgKmluLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMjYwLVxcdFxcdFxcdCAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm91dCwgdm9pZCAqdW91dCwgaW50IHVvdXRfc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xMzM3PXN0YXRpYyBzc2l6ZV90IGRiZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMzM5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTM0MDpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xMzQxLVxcdHN0cnVjdCBtbHg1X2NtZF9kZWJ1ZyAqZGJnID0gXFx1MDAyNmRldi1cXHUwMDNlY21kLmRiZztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNDA0PXN0YXRpYyBpbnQgbWx4NV9jb3B5X2Zyb21fbXNnKHZvaWQgKnRvLCBzdHJ1Y3QgbWx4NV9jbWRfbXNnICpmcm9tLCBpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDM2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNDM3OnN0YXRpYyBzdHJ1Y3QgbWx4NV9jbWRfbWFpbGJveCAqYWxsb2NfY21kX2JveChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDM4LVxcdFxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGZsYWdzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NTctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE0NTg6c3RhdGljIHZvaWQgZnJlZV9jbWRfYm94KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NTktXFx0XFx0XFx0IHN0cnVjdCBtbHg1X2NtZF9tYWlsYm94ICptYWlsYm94KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE0NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE0NjU6c3RhdGljIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1seDVfYWxsb2NfY21kX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNDY2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBmbGFncywgaW50IHNpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUxMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTUxMjpzdGF0aWMgdm9pZCBtbHg1X2ZyZWVfY21kX21zZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTEzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNTI2PXN0YXRpYyBzc2l6ZV90IGRhdGFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUyOC17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE1Mjk6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTUzMC1cXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFxcdTAwMjZkZXYtXFx1MDAzZWNtZC5kYmc7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU1MD1zdGF0aWMgc3NpemVfdCBkYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTUyLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTU1MzpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2ID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNTU0LVxcdHN0cnVjdCBtbHg1X2NtZF9kZWJ1ZyAqZGJnID0gXFx1MDAyNmRldi1cXHUwMDNlY21kLmRiZztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNTcwPXN0YXRpYyBzc2l6ZV90IG91dGxlbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU3Mi17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE1NzM6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU3NC1cXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFxcdTAwMjZkZXYtXFx1MDAzZWNtZC5kYmc7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTU4NT1zdGF0aWMgc3NpemVfdCBvdXRsZW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU4Ny17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE1ODg6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTU4OS1cXHRzdHJ1Y3QgbWx4NV9jbWRfZGVidWcgKmRiZyA9IFxcdTAwMjZkZXYtXFx1MDAzZWNtZC5kYmc7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MTYyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbGZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTYyNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTYyODpzdGF0aWMgdm9pZCBzZXRfd3FuYW1lKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2Mjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE2MzY6c3RhdGljIHZvaWQgY2xlYW5fZGVidWdfZmlsZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTYzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY0NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY0NjpzdGF0aWMgdm9pZCBjcmVhdGVfZGVidWdmc19maWxlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjQ3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjU4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjU5OnZvaWQgbWx4NV9jbWRfYWxsb3dlZF9vcGNvZGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTY3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY3NTpzdGF0aWMgdm9pZCBtbHg1X2NtZF9jaGFuZ2VfbW9kKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBtb2RlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xNjkxPXN0YXRpYyBpbnQgY21kX2NvbXBfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjkzLXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTY5NDpcXHRzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNjk1LVxcdHN0cnVjdCBtbHg1X2NtZCAqY21kO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE2OTgtXFx0Y21kID0gbWx4NV9uYl9jb2YobmIsIHN0cnVjdCBtbHg1X2NtZCwgbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNjk5OlxcdGRldiA9IGNvbnRhaW5lcl9vZihjbWQsIHN0cnVjdCBtbHg1X2NvcmVfZGV2LCBjbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzAwLVxcdGVxZSA9IGRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTcwOC19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MDk6dm9pZCBtbHg1X2NtZF91c2VfZXZlbnRzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE3MTY6dm9pZCBtbHg1X2NtZF91c2VfcG9sbGluZyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xNzIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxNzIyOnN0YXRpYyB2b2lkIGZyZWVfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZF9tc2cgKm1zZylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTcyMy17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTczNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTczNTpzdGF0aWMgdm9pZCBtbHg1X2NtZF9jb21wX2hhbmRsZXIoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTY0IHZlYywgYm9vbCBmb3JjZWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE3MzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE4MzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE4Mzk6c3RhdGljIHZvaWQgbWx4NV9jbWRfdHJpZ2dlcl9jb21wbGV0aW9ucyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODczLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoxODc0OnZvaWQgbWx4NV9jbWRfZmx1c2goc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTg3NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTg5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTg5NzpzdGF0aWMgc3RydWN0IG1seDVfY21kX21zZyAqYWxsb2NfbXNnKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIGludCBpbl9zaXplLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xODk4LVxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0xOTM1PXN0YXRpYyBpbnQgaXNfbWFuYWdlX3BhZ2VzKHZvaWQgKmluKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE5MzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NDA6c3RhdGljIGJvb2wgbWx4NV9oYXNfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MTk0NTpzdGF0aWMgYm9vbCBtbHg1X2NtZF9pc19wcml2aWxlZ2VkX3VpZChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0xOTQ2LVxcdFxcdFxcdFxcdCAgICAgICB1MTYgdWlkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTE5NTQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjE5NTU6c3RhdGljIGludCBjbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMTk1Ni1cXHRcXHQgICAgaW50IG91dF9zaXplLCBtbHg1X2NtZF9jYmtfdCBjYWxsYmFjaywgdm9pZCAqY29udGV4dCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMDM1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMDM2OnN0YXRpYyB2b2lkIG1seDVfY21kX2Vycl90cmFjZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwMzcte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNDUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIwNDY6c3RhdGljIHZvaWQgY21kX3N0YXR1c19sb2coc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IG9wY29kZSwgdTggc3RhdHVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMDQ3LVxcdFxcdFxcdCAgIHUzMiBzeW5kcm9tZSwgaW50IGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMDcxLS8qIHByZXNlcnZlIC1FUkVNT1RFSU8gZm9yIG91dGJveC5zdGF0dXMgIT0gT0ssIG90aGVyd2lzZSByZXR1cm4gZXJyIGFzIGlzICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIwNzI6c3RhdGljIGludCBjbWRfc3RhdHVzX2VycihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBpbnQgZXJyLCB1MTYgb3Bjb2RlLCB1MTYgb3BfbW9kLCB2b2lkICpvdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIwNzMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxMDYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxMDc6aW50IG1seDVfY21kX2RvKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSwgdm9pZCAqb3V0LCBpbnQgb3V0X3NpemUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxMTU9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9kbyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjEyOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjEyOTppbnQgbWx4NV9jbWRfZXhlYyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCB2b2lkICppbiwgaW50IGluX3NpemUsIHZvaWQgKm91dCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjEzMC1cXHRcXHQgIGludCBvdXRfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMTM2PUVYUE9SVF9TWU1CT0wobWx4NV9jbWRfZXhlYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE1MS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjE1MjppbnQgbWx4NV9jbWRfZXhlY19wb2xsaW5nKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHZvaWQgKmluLCBpbnQgaW5fc2l6ZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE1My1cXHRcXHRcXHQgIHZvaWQgKm91dCwgaW50IG91dF9zaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxNjI9RVhQT1JUX1NZTUJPTChtbHg1X2NtZF9leGVjX3BvbGxpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMTYzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMTY0OnZvaWQgbWx4NV9jbWRfaW5pdF9hc3luY19jdHgoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE2NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBtbHg1X2FzeW5jX2N0eCAqY3R4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jPTIxODk9c3RhdGljIHZvaWQgbWx4NV9jbWRfZXhlY19jYl9oYW5kbGVyKGludCBzdGF0dXMsIHZvaWQgKl93b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIxOTItXFx0c3RydWN0IG1seDVfYXN5bmNfY3R4ICpjdHg7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIxOTM6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjE5NC1cXHRib29sIHRocm90dGxlX2xvY2tlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYz0yMjE0PWludCBtbHg1X2NtZF9leGVjX2NiKHN0cnVjdCBtbHg1X2FzeW5jX2N0eCAqY3R4LCB2b2lkICppbiwgaW50IGluX3NpemUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjIxNy17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIyMTg6XFx0c3RydWN0IG1seDVfY29yZV9kZXYgKmRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjE5LVxcdHUxNiB1aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjI2OD1FWFBPUlRfU1lNQk9MKG1seDVfY21kX2V4ZWNfY2IpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMjcwOmludCBtbHg1X2NtZF9hbGxvd19vdGhlcl92aGNhX2FjY2VzcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjcxLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG1seDVfY21kX2FsbG93X290aGVyX3ZoY2FfYWNjZXNzX2F0dHIgKmF0dHIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjI4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjI5MDppbnQgbWx4NV9jbWRfYWxpYXNfb2JqX2NyZWF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMjkxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtbHg1X2NtZF9hbGlhc19vYmpfY3JlYXRlX2F0dHIgKmFsaWFzX2F0dHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjMyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjMyNjppbnQgbWx4NV9jbWRfYWxpYXNfb2JqX2Rlc3Ryb3koc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTMyIG9ial9pZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjMyNy1cXHRcXHRcXHQgICAgICAgdTE2IG9ial90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTIzMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjIzMzk6c3RhdGljIHZvaWQgZGVzdHJveV9tc2dfY2FjaGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjM0MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjM1OT1zdGF0aWMgdW5zaWduZWQgY21kX2NhY2hlX2VudF9zaXplW01MWDVfTlVNX0NPTU1BTkRfQ0FDSEVTXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzY2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyMzY3OnN0YXRpYyB2b2lkIGNyZWF0ZV9tc2dfY2FjaGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjM2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjM5Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjM5MzpzdGF0aWMgaW50IGFsbG9jX2NtZF9wYWdlKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NtZCAqY21kKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yMzk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDIxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDIyOnN0YXRpYyB2b2lkIGZyZWVfY21kX3BhZ2Uoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY21kICpjbWQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0MjMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI0MjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI0Mjg6c3RhdGljIHUxNiBjbWRpZl9yZXYoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQyOS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjQzMzppbnQgbWx4NV9jbWRfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDU0OnZvaWQgbWx4NV9jbWRfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNDYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNDYyOmludCBtbHg1X2NtZF9lbmFibGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjQ2My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU0Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjU0ODp2b2lkIG1seDVfY21kX2Rpc2FibGUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU1OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM6MjU2MDp2b2lkIG1seDVfY21kX3NldF9zdGF0ZShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTYxLVxcdFxcdFxcdGVudW0gbWx4NV9jbWRpZl9zdGF0ZSBjbWRpZl9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYy0yNTY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jbWQuYzoyNTY2OmludCBtbHg1X2NtZF9hZGRfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHVpZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmM9MjU3MT1FWFBPUlRfU1lNQk9MKG1seDVfY21kX2FkZF9wcml2aWxlZ2VkX3VpZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jLTI1NzItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NtZC5jOjI1NzM6dm9pZCBtbHg1X2NtZF9yZW1vdmVfcHJpdmlsZWdlZF91aWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IHVpZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY21kLmMtMjU3NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0xMDA9c3RhdGljIHZvaWQgbWx4NV9jb3JlX2NxX2R1bW15X2NiKHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLCBzdHJ1Y3QgbWx4NV9lcWUgKmVxZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTEwNy0vKiBDYWxsZXJzIG11c3QgdmVyaWZ5IG91dGJveCBzdGF0dXMgaW4gY2FzZSBvZiBlcnIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxMDg6aW50IG1seDVfY3JlYXRlX2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTEwOS1cXHRcXHQgICB1MzIgKmluLCBpbnQgaW5sZW4sIHUzMiAqb3V0LCBpbnQgb3V0bGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmM9MTc4PUVYUE9SVF9TWU1CT0wobWx4NV9jcmVhdGVfY3EpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMTgwLS8qIG91Ym94IGlzIGNoZWNrZWQgYW5kIGVyciB2YWwgaXMgbm9ybWFsaXplZCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjE4MTppbnQgbWx4NV9jb3JlX2NyZWF0ZV9jcShzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LCBzdHJ1Y3QgbWx4NV9jb3JlX2NxICpjcSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYy0xODItXFx0XFx0XFx0dTMyICppbiwgaW50IGlubGVuLCB1MzIgKm91dCwgaW50IG91dGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTE4OD1FWFBPUlRfU1lNQk9MKG1seDVfY29yZV9jcmVhdGVfY3EpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTE4OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoxOTA6aW50IG1seDVfY29yZV9kZXN0cm95X2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTE5MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0yMTM9RVhQT1JUX1NZTUJPTChtbHg1X2NvcmVfZGVzdHJveV9jcSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jOjIxNTppbnQgbWx4NV9jb3JlX3F1ZXJ5X2NxKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIxNi1cXHRcXHQgICAgICAgdTMyICpvdXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYz0yMjQ9RVhQT1JUX1NZTUJPTChtbHg1X2NvcmVfcXVlcnlfY3EpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIyNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoyMjY6aW50IG1seDVfY29yZV9tb2RpZnlfY3Eoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9jcSAqY3EsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2NxLmMtMjI3LVxcdFxcdFxcdHUzMiAqaW4sIGludCBpbmxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jPTIzNT1FWFBPUlRfU1lNQk9MKG1seDVfY29yZV9tb2RpZnlfY3EpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvY3EuYzoyMzc6aW50IG1seDVfY29yZV9tb2RpZnlfY3FfbW9kZXJhdGlvbihzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9jcS5jLTIzOC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWx4NV9jb3JlX2NxICpjcSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9OTY9dm9pZCBtbHg1X3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMDE6c3RydWN0IGRlbnRyeSAqbWx4NV9kZWJ1Z2ZzX2dldF9kZXZfcm9vdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MTA1PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z2ZzX2dldF9kZXZfcm9vdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMDc6dm9pZCBtbHg1X3FwX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MTExPUVYUE9SVF9TWU1CT0wobWx4NV9xcF9kZWJ1Z2ZzX2luaXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTEyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MTEzOnZvaWQgbWx4NV9xcF9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExNC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTExNz1FWFBPUlRfU1lNQk9MKG1seDVfcXBfZGVidWdmc19jbGVhbnVwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjExOTp2b2lkIG1seDVfZXFfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0xMjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoxMjQ6dm9pZCBtbHg1X2VxX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMTI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9MjAyPW1seDVfY21kaWZfYWxsb2Nfc3RhdHMoc3RydWN0IHhhcnJheSAqc3RhdHNfeGEsIGludCBvcGNvZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTIxOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjIxOTp2b2lkIG1seDVfY21kaWZfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yMjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyNTk6dm9pZCBtbHg1X2NtZGlmX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjYwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjY5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MjcwOnZvaWQgbWx4NV9jcV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI3MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI3NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI3NTp2b2lkIG1seDVfY3FfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yNzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzoyODA6dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMjkzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6Mjk0OnZvaWQgbWx4NV9wYWdlc19kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI5OTp2b2lkIG1seDVfcGFnZXNfYnlfZnVuY190eXBlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzAwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzIyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MzIzOnZvaWQgbWx4NV9wYWdlc19ieV9mdW5jX3R5cGVfZGVidWdmc19jbGVhbnVwKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0zMjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0zMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzozMzc6c3RhdGljIHU2NCBxcF9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtMzM4LVxcdFxcdFxcdCBpbnQgaW5kZXgsIGludCAqaXNfc3RyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy00MTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo0MTc6c3RhdGljIHU2NCBlcV9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2VxICplcSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTQxOC1cXHRcXHRcXHQgaW50IGluZGV4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy00NTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo0NTc6c3RhdGljIHU2NCBjcV9yZWFkX2ZpZWxkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfY3EgKmNxLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNDU4LVxcdFxcdFxcdCBpbnQgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTUzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01MzctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1Mzg6c3RhdGljIGludCBhZGRfcmVzX3RyZWUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgZW51bSBkYmdfcnNjX3R5cGUgdHlwZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTUzOS1cXHRcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgbWx4NV9yc2NfZGVidWcgKipkYmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTU2Nj1zdGF0aWMgdm9pZCByZW1fcmVzX3RyZWUoc3RydWN0IG1seDVfcnNjX2RlYnVnICpkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01NzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1NzI6aW50IG1seDVfZGVidWdfcXBfYWRkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2NvcmVfcXAgKnFwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTczLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM9NTg3PUVYUE9SVF9TWU1CT0wobWx4NV9kZWJ1Z19xcF9hZGQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMtNTg4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6NTg5OnZvaWQgbWx4NV9kZWJ1Z19xcF9yZW1vdmUoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgc3RydWN0IG1seDVfY29yZV9xcCAqcXApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz01OTc9RVhQT1JUX1NZTUJPTChtbHg1X2RlYnVnX3FwX3JlbW92ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy01OTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYzo1OTk6aW50IG1seDVfZGVidWdfZXFfYWRkKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHN0cnVjdCBtbHg1X2VxICplcSlcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MDQuODc5ODg2OTk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc3NTkwODI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgbWx4NV9jb3JlX2RldmAgQ29kZSB3aXRoIFN5emthbGxlcioqXG5cbk9rYXksIHNvIHRoZSBvdXRwdXQgc2hvd3MgdGhhdCBgbWx4NV9jb3JlX2RldmAgaXMgc2lnbmlmaWNhbnRseSBwcmVzZW50IGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBjYW4gc3l6a2FsbGVyIHBvc3NpYmx5IHRyaWdnZXIgdGhpcyBjb2RlPyBJdCdzIGFsbCBhYm91dCBzeXN0ZW0gY2FsbHMgZm9yIHN5emthbGxlciwgcmlnaHQ/IFRoZSBpc3N1ZSBpcyBwcmV0dHkgb2J2aW91czogd2l0aG91dCB0aGUgTWVsbGFub3ggaGFyZHdhcmUsIHRoZSBkcml2ZXIgc2ltcGx5IHdvbid0IHByb2JlLiBObyBwcm9iZSwgbm8gYG1seDVfY29yZV9kZXZgLCBubyBjb2RlIGV4ZWN1dGlvbi5cblxuSXMgdGhlcmUgYW55IGtpbmQgb2YgbmV0bGluayBtYWdpYyB0aGF0IGNvdWxkIGJ5cGFzcyB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQ/IE5vcGUsIG1seDUgaXMgYSBQQ0kgZHJpdmVyLiBJdCBuZWVkcyB0aGF0IFBDSSBkZXZpY2UgdG8gZ2V0IG9mZiB0aGUgZ3JvdW5kLiBObyBQQ0kgZGV2aWNlLCBubyBwcm9iZSwgbm8gbmV0ZGV2LCBkZWFkIGVuZC5cblxuV2FpdCwgZG9lc24ndCBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgdG8gZW11bGF0ZSBQQ0kgZGV2aWNlcywgbGlrZSBgc3l6X3BjaV9kZXZpY2VfYWRkYD8gTm8sIHRoYXQncyBub3QgcmlnaHQuIEl0IGhhcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLCBidXQgbm8gZ2VuZXJpYyBQQ0kgZW11bGF0b3IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBEaWQgc3l6a2FsbGVyIGludHJvZHVjZSBzb21lIGNsZXZlciBQQ0kgZW11bGF0aW9uIHRocm91Z2ggYHZoY2lgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBOb3BlLlxuXG5Pa2F5LCBsZXQncyBzdGVwIGJhY2suIEkgdGhvdWdodCBJIHJlbWVtYmVyZWQgc2VlaW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZV9hZGRgLiBOb3BlLCBub3QgaW4gc3l6a2FsbGVyLlxuXG5MZXQncyBjdXQgdG8gdGhlIGNoYXNlIGFuZCBmaW5kIG91dCBpZiBTeXprYWxsZXIgZnV6emVkIG1seDUuIExvb2tzIGxpa2UgaXQgZG9lc24ndCwgYmVjYXVzZSBpdCBuZWVkcyB0aGUgaGFyZHdhcmUuXG5cbkJ1dCB3YWl0ISBIb2xkIG9uIGEgc2Vjb25kLCB0aGUgcHJvbXB0IHNheXM6XG5cblwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCJcblxuXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoIHRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlwiXG5cblRoaXMgaXMgY3J1Y2lhbC4gVGhlIHByb21wdCBtYWtlcyBhIGNsZWFyIGRpc3RpbmN0aW9uIGJldHdlZW4gcmVhY2hhYmxlIGFuZCB1bnJlYWNoYWJsZSBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIGV2YWx1YXRlIHJlYWNoYWJpbGl0eSBpbiBhIFFFTVUtbGlrZSBlbnZpcm9ubWVudC5cblxuTm93LCBJJ20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIGZvciBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgbWx4NS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk4NTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MTIuNjU1Nzk5MDMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxODU0MzU5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWx4NS4qZW11bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MTM0Nz1zdHJ1Y3QgbWx4NV9pZmNfZGV2aWNlX2V2ZW50X2NhcF9iaXRzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oLTEzNTItXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MTM1MzpzdHJ1Y3QgbWx4NV9pZmNfdmlydGlvX2VtdWxhdGlvbl9jYXBfYml0cyB7XFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMTM1NC1cXHR1OCAgICAgICAgIGRlc2NfdHVubmVsX29mZmxvYWRfdHlwZVsweDFdO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9Mzg1Mj11bmlvbiBtbHg1X2lmY19oY2FfY2FwX3VuaW9uX2JpdHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzg2OS1cXHRzdHJ1Y3QgbWx4NV9pZmNfZGV2aWNlX21lbV9jYXBfYml0cyBkZXZpY2VfbWVtX2NhcDtcXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaDozODcwOlxcdHN0cnVjdCBtbHg1X2lmY192aXJ0aW9fZW11bGF0aW9uX2NhcF9iaXRzIHZpcnRpb19lbXVsYXRpb25fY2FwO1xcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oLTM4NzEtXFx0c3RydWN0IG1seDVfaWZjX3RscF9kZXZfZW11X2NhcGFiaWxpdGllc19iaXRzIHRscF9kZXZfZW11X2NhcGFiaWxpdGllcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MTkuODQxMjQzMTM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxMzU2MjM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOYXZpZ2F0aW5nIHRoZSBWaXJ0aW8gYW5kIE1MWDUgTGFuZHNjYXBlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGdvaW5nIGRvd24gdGhlIHdyb25nIHBhdGggaGVyZS4gYHZpcnRpb19lbXVsYXRpb25fY2FwYCBpcyBzcGVjaWZpY2FsbHkgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aGluIHZpcnRpbywgbm90IGZvciBzaW11bGF0aW5nIG1seDUgaW4gYSBzb2Z0d2FyZSBjb250ZXh0LiBUaGF0J3MgYSBjcml0aWNhbCBkaXN0aW5jdGlvbi5cblxuTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpczogaG93IGNhbiBJIGFjdHVhbGx5IGdldCB0byB0aGUgYm90dG9tIG9mIHRoZSBgbWx4NWVfcHNwX3NldF9jb25maWdgIGZ1bmN0aW9uPyBJIGtub3cgaXQncyBiZWluZyBjYWxsZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZW50cnkgcG9pbnRzLiBBaCwgcmlnaHQsIGl0J3MgY2FsbGVkIGFzIGEgY2FsbGJhY2sgd2l0aGluIGBwc3BfZGV2X2NvbmZpZ2AuIFNvLCBgbWx4NWVfcHNwX3NldF9jb25maWdgIGlzIHBhcnQgb2YgYSBjYWxsYmFjayBpbiBgcHNwX2Rldl9jb25maWdgLlxuXG5CdXQgSSdtIG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsOiB3aGF0IGV4YWN0bHkgaXMgdGhpcyBgcHNwX2RldmAgc3RydWN0dXJlIHRoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjaz8gVGltZSB0byBnbyBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHNvdXJjZSBjb2RlLiBJIHNob3VsZCBmaW5kIGl0IGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvcHNwLmhgLCBvciBzb21ldGhpbmcgc2ltaWxhciB3aXRoaW4gdGhlIGtlcm5lbCdzIGluY2x1ZGUgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTAzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIxOjQxOjI2LjI1NDgwODQzNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE1ODI0NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBzcF9kZXZfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM9ODYwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmM6ODYxOm1seDVlX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwLmMtODYyLVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jPTEyMT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL3BzcC5jOjEyMjpuc2ltX3BzcF9zZXRfY29uZmlnKHN0cnVjdCBwc3BfZGV2ICpwc2QsIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAqY29uZixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vcHNwLmMtMTIzLVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5pbmNsdWRlL25ldC9wc3AvdHlwZXMuaD0xND1zdHJ1Y3QgcHNwaGRyIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTM5LS8qKlxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjQwOiAqIHN0cnVjdCBwc3BfZGV2X2NvbmZpZyAtIFBTUCBkZXZpY2UgY29uZmlndXJhdGlvblxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQxLSAqIEB2ZXJzaW9uczogUFNQIHZlcnNpb25zIGVuYWJsZWQgb24gdGhlIGRldmljZVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTQyLSAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjQzOnN0cnVjdCBwc3BfZGV2X2NvbmZpZyB7XFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtNDQtXFx0dTMyIHZlcnNpb25zO1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmg9ODk9c3RydWN0IHBzcF9kZXYge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMTA0LVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjEwNTpcXHRzdHJ1Y3QgcHNwX2Rldl9jb25maWcgY29uZmlnO1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oLTEwNi1cXG4tLVxcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oPTE5NT1zdHJ1Y3QgcHNwX2Rldl9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjAwLVxcdCAqL1xcbmluY2x1ZGUvbmV0L3BzcC90eXBlcy5oOjIwMTpcXHRpbnQgKCpzZXRfY29uZmlnKShzdHJ1Y3QgcHNwX2RldiAqcHNkLCBzdHJ1Y3QgcHNwX2Rldl9jb25maWcgKmNvbmYsXFxuaW5jbHVkZS9uZXQvcHNwL3R5cGVzLmgtMjAyLVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbm5ldC9wc3AvcHNwX25sLmM9Mzk4PWludCBwc3BfbmxfZGV2X3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvcHNwL3BzcF9ubC5jLTQwMC1cXHRzdHJ1Y3QgcHNwX2RldiAqcHNkID0gaW5mby1cXHUwMDNldXNlcl9wdHJbMF07XFxubmV0L3BzcC9wc3BfbmwuYzo0MDE6XFx0c3RydWN0IHBzcF9kZXZfY29uZmlnIG5ld19jb25maWc7XFxubmV0L3BzcC9wc3BfbmwuYy00MDItXFx0c3RydWN0IHNrX2J1ZmYgKnJzcDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MzEuNzcwNjQwOTQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzIxNzk3ODQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogbWx4NSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCB0b3VjaGVzIGBuZXRkZXZzaW1gLCBzcGVjaWZpY2FsbHkgYG5zaW1fcHNwX3NldF9jb25maWdgLiBCdXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBidXJpZWQgZGVlcCBpbiB0aGUgTWVsbGFub3ggYG1seDVgIGRyaXZlciwgaW4gYHBzcC5jYC4gSW1tZWRpYXRlbHksIG15IGV4cGVydCBicmFpbiBmbGFncyBhIHBvdGVudGlhbCBpc3N1ZTogdGhpcyBpcyBNZWxsYW5veCBoYXJkd2FyZS1kZXBlbmRlbnQuIFN5emthbGxlcidzIHN0YW5kYXJkIGVudmlyb25tZW50LCBiZSBpdCBHQ0Ugb3IgUUVNVSwgaXNuJ3QgZ29pbmcgdG8gbWFnaWNhbGx5IGNvbmp1cmUgdXAgYSBNZWxsYW5veCBjYXJkLCByaWdodD8gSSBzdGFydCB0byB0aGluayBhYm91dCB3aGV0aGVyIHRoZXJlJ3Mgc29tZSBjbGV2ZXIgUENJIGRldmljZSBpbmplY3Rpb24sIG9yIHBlcmhhcHMgYSB2aXJ0dWFsIHByb2JlIG1lY2hhbmlzbSBmb3IgdGhlIE1lbGxhbm94IGRyaXZlci5cblxuTGV0IG1lIHRoaW5rLCBkb2VzIGBuZXRkZXZzaW1gIHNvbWVob3cgdXNlIGBtbHg1YD8gTm8sIGNvbXBsZXRlbHkgc2VwYXJhdGUgZHJpdmVycy4gVGhpcyBtZWFucyB0aG9zZSBgbWx4NWAgY2hhbmdlcyBhcmUgYWxtb3N0IGNlcnRhaW5seSB1bnJlYWNoYWJsZSBpbiB0eXBpY2FsIHN5emthbGxlciBzZXR1cHMuXG5cbk5vdywgbGV0J3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IHJldmlldyB0aGUgcHJvdmlkZWQgcHJvbXB0J3MgY3JpdGVyaWEgZm9yIGEgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBkZXRlcm1pbmF0aW9uLiBJdCBzcGVjaWZpZXMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFuZCB0aGF0IGlzIGV4YWN0bHkgd2hhdCB3ZSBoYXZlIGhlcmUuIFRoZSBwYXRjaCBpbmNsdWRlcyBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlIHRoYXQgcmVxdWlyZXMgYSBNZWxsYW5veCBQQ0kgZGV2aWNlLCB3aGljaCwgYXMgZmFyIGFzIEkga25vdywgaXMgbm90IGVtdWxhdGVkIHdpdGhpbiBzeXprYWxsZXIncyBRRU1VIGVudmlyb25tZW50LiBUaGUgYG1seDVgIGRyaXZlciBpcyBub3QgcmVhY2hhYmxlIGFuZCBpdCBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuXG5cblVubGVzcyB0aGVyZSBpcyBzb21lIG9ic2N1cmUgdmlydHVhbCBidXMgdGhhdCBhbGxvd3Mgc3l6a2FsbGVyIHRvIHJlYWNoIFBDSSBkZXZpY2UgZHJpdmVycy4gV2FpdCBhIG1pbnV0ZSwgbm8sIGBtbHg1YCBpcyBhIFBDSSBkZXZpY2UgZHJpdmVyLCB0aGVyZSBpcyBubyB3YXkgYXJvdW5kIHRoYXQuXG5cbk9rLCBsYXN0IGNoZWNrIC0gTGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGFueSBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBgbWx4NWAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNzgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6MzguOTg4NjIzMzQyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTU0NDYyOTU4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeXpfLiptbHg1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6NDUuOTQzMDk5MTYxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3NzMyNzE5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYSBmaXJtIFwibm8uXCIgSXMgdGhlcmUgZXZlbiBhIHJlbW90ZSBwb3NzaWJpbGl0eSB0aGlzIGNvdWxkIGJlIGZ1enplZCBlZmZlY3RpdmVseT8gTm8sIHRoZSBoYXJkd2FyZSBkcml2ZXJzIGZvciBQQ0kgZGV2aWNlcywgcGFydGljdWxhcmx5IHRob3NlIGxpa2UgdGhlIE1lbGxhbm94IGRyaXZlcnMsIGFyZSBub3QgcmVhbGlzdGljYWxseSByZWFjaGFibGUgd2l0aG91dCBwcm9wZXIgUUVNVSBlbXVsYXRpb24uIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgY29yZSBrZXJuZWwgbW9kaWZpY2F0aW9ucyBoaWRkZW4gaW4gaGVyZS4gT2theSwgdGhlIGRpZmYgaXMgb25seSB0b3VjaGluZyBmaWxlcyB3aXRoaW46XG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuLmhgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL2ZzLmhgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL2VuX2FjY2VsLmhgXG5gZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX2FjY2VsL3BzcC5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9hY2NlbC9wc3AuaGBcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguY2BcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fYWNjZWwvcHNwX3J4dHguaGBcbmBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fbWFpbi5jYFxuYGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl9yZXAuY2BcblxuWWVwLCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9gIGRpcmVjdG9yeS4gU28sIGl0J3MgcHVyZWx5IGEgTWVsbGFub3ggaGFyZHdhcmUgZHJpdmVyIHBhdGNoLlxuXG5JJ3ZlIGdvdCB0aGUgcmVzcG9uc2UuXG5gV29ydGhGdXp6aW5nOiBmYWxzZWBcblxuVGhlIHJhdGlvbmFsZT8gVGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyB0aGUgTWVsbGFub3ggYG1seDVgIGhhcmR3YXJlIGRyaXZlciwgYW5kIGl0IGxvb2tzIHNwZWNpZmljYWxseSB0byB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZS4gQmVjYXVzZSB0aGlzIGRyaXZlciBmdW5kYW1lbnRhbGx5IHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQsIGFuZCBpdCdzIG5vdCBlbXVsYXRlZCBvciBzaW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHRoZSBjb2RlIHBhdGhzIHNpbXBseSAqd29uJ3QqIGJlIGV4ZXJjaXNlZCBkdXJpbmcgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI5NzMsIk91dHB1dFRva2VucyI6ODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjE6NDE6NTMuNzE2Mzc1OTU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgTWVsbGFub3ggbWx4NSBoYXJkd2FyZSBkcml2ZXIgKHNwZWNpZmljYWxseSB0aGUgUFNQIG9mZmxvYWQgZmVhdHVyZSkuIFNpbmNlIHRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIE1lbGxhbm94IENvbm5lY3RYIGhhcmR3YXJlIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIE1lbGxhbm94IG1seDUgaGFyZHdhcmUgZHJpdmVyIChzcGVjaWZpY2FsbHkgdGhlIFBTUCBvZmZsb2FkIGZlYXR1cmUpLiBTaW5jZSB0aGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBNZWxsYW5veCBDb25uZWN0WCBoYXJkd2FyZSBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow55w6j[1] Phase: Running StartedAt: 2026-07-07 21:42:06 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow55w6j[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-07 21:42:06 +0000 UTC FinishedAt: 2026-07-07 21:42:29 +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,}