Name: series-workflowbzqpx Phase: Failed StartedAt: 2026-09-01 04:04:15 +0000 UTC FinishedAt: 2026-09-01 05:01:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbzqpx[0] Phase: Succeeded StartedAt: 2026-09-01 04:04:15 +0000 UTC FinishedAt: 2026-09-01 05:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbzqpx[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 04:04:15 +0000 UTC FinishedAt: 2026-09-01 05:01:12 +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+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGZibmljIChNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2EyOThkYTY5ODA2NTIzMzNiMTU0NTk0MmU3ZGE0NThhZGQ5MmQxZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDU6MDA6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG5pbmRleCBkMDcxNTY5NWM0M2U3Li40YTQ5YzIwZTRhMDE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbkBAIC0yMiwxMSAmIzQzOzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcbiAjZGVmaW5lIEZCTklDX01BWF9OQVBJX1ZFQ1RPUlNcdFx0MTI4dVxuICNkZWZpbmUgRkJOSUNfTUJYX0NNUExfU0xPVFNcdFx0NFxuIFxuJiM0MztzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbGFzdF9yZWFkO1xuJiM0MztcdHMzMiB0ZW1wX21kZWc7XG4mIzQzO1x0czMyIHZvbHRfbXY7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBmYm5pY19kZXYge1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBkZW50cnkgKmRiZ19mYmQ7XG4gXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgJiM0MzsxOTIsNyBAQCB2b2lkIGZibmljX2Z3X2ZyZWVfbWJ4KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuJiM0Mzt2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpO1xuIFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiB2b2lkIGZibmljX21hY19mcmVlX2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNTc1LDYgJiM0Mzs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHtcbiBcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXG4gXHRcdFx0ICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSxcbiBcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTiksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU4pLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXG4gXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4gfTtcbiBcbkBAIC03MDIsNiAmIzQzOzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xuIFx0ZmJkLVx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XG4gXG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5dLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhdLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQgPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTl0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4ID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWF0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTYxOCw2ICYjNDM7MTYzOSw1NyBAQCBmYm5pY19md19wYXJzZXJfdGVzdCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX0xBU1RcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiYjNDM7e1xuJiM0MztcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XG4mIzQzO1x0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xuJiM0MztcdHMzMiB2YWx1ZTtcbiYjNDM7XG4mIzQzO1x0dGhlcm1fZXhjZWVkZWQgPVxuJiM0MztcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpO1xuJiM0MztcdHZvbHRfZXhjZWVkZWQgPVxuJiM0MztcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7XG4mIzQzO1xuJiM0MztcdGlmICghdGhlcm1fZXhjZWVkZWQgXHUwMDI2XHUwMDI2ICF2b2x0X2V4Y2VlZGVkKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1RocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGhlcm1fZXhjZWVkZWQpIHtcbiYjNDM7XHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7VGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7VGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1DXFxuXCYjMzQ7LCB2YWx1ZSk7XG4mIzQzO1x0XHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZvbHRfZXhjZWVkZWQpIHtcbiYjNDM7XHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9WT0xUQUdFXSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXFxuXCYjMzQ7LCB2YWx1ZSk7XG4mIzQzO1x0XHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsdWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuQEAgLTE2NDYsNiAmIzQzOzE3MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuIFx0RkJOSUNfVExWX1BBUlNFUihUU0VORV9SRUFEX1JFU1AsXG4gXHRcdFx0IGZibmljX3RzZW5lX3JlYWRfcmVzcF9pbmRleCxcbiBcdFx0XHQgZmJuaWNfZndfcGFyc2VfdHNlbmVfcmVhZF9yZXNwKSxcbiYjNDM7XHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcbiYjNDM7XHRcdFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxuJiM0MztcdFx0XHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxuIFx0RkJOSUNfVExWX1BBUlNFUihMT0dfTVNHX1JFUSxcbiBcdFx0XHQgZmJuaWNfZndfbG9nX3JlcV9pbmRleCxcbiBcdFx0XHQgZmJuaWNfZndfcGFyc2VfbG9nX3JlcSksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG5pbmRleCBkODQ3MjNlNGNmYTM2Li44NzMwMWU2MDgyNTU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiAmIzQzOzQ1LDE4IEBAIHN0cnVjdCBmYm5pY19md192ZXIge1xuIFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcbiB9O1xuIFxuJiM0MzsvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGVcbiYjNDM7ICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4mIzQzOyAqIHJlZnJlc2hlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHtcbiYjNDM7XHRzMzIgbWluO1xuJiM0MztcdHMzMiBtYXg7XG4mIzQzO1x0czMyIGNyaXQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xuQEAgLTYwLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0dThcdGxpbmtfc3BlZWQ7XG4gXHR1OFx0bGlua19mZWM7XG4gXHR1MzJcdGFudGlfcm9sbGJhY2tfdmVyc2lvbjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4mIzQzO1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB2b2x0O1xuIH07XG4gXG4gc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24ge1xuQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7XG4gXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXHRcdFx0PSAweDM5LFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUVx0XHRcdD0gMHgzQyxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQXHRcdD0gMHgzRCxcbiYjNDM7XHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiAmIzQzOzI1OCwxMiBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlx0XHRcdD0gMHgxMSxcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUlx0XHQ9IDB4MTIsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cdFx0PSAweDE1LFxuJiM0MztcdC8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhcdFx0XHQ9IDB4MTksXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXHRcdFx0PSAweDFhLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXHRcdFx0PSAweDFjLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxuIH07XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTcsMTQgQEAgZW51bSB7XG4gXHRGQk5JQ19GV19UU0VORV9NU0dfTUFYXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBR1x0PSAweDAsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXHQ9IDB4MSxcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVx0XHRcdD0gMHgzLFxuJiM0MztcdEZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RkJOSUNfRldfT1dORVJTSElQX0ZMQUdcdFx0XHQ9IDB4MCxcbiBcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXHRcdFx0PSAweDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG5pbmRleCBkZWY4NTk4YWNlZWNmLi4zZjMzNTIyZmNmZDJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbkBAIC0yLDQxICYjNDM7MiwxODQgQEBcbiAvKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h3bW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7ZmJuaWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ZibmljX21hYy5oXCYjMzQ7XG4gXG4tc3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfaWQoZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSlcbiYjNDM7c3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXApXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVEVNUDtcbi1cdGlmICh0eXBlID09IGh3bW9uX2luKVxuLVx0XHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XG4mIzQzO1x0cmV0dXJuIDA0NDQ7XG4mIzQzO31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XHRzMzIgKmNhY2hlZDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpZCkge1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4mIzQzO1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V0ZW1wX21kZWc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuJiM0MztcdFx0Y2FjaGVkID0gXHUwMDI2Y2FjaGUtXHUwMDNldm9sdF9tdjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXHUwMDNlbGFzdF9yZWFkKSkge1xuJiM0MztcdFx0KnZhbCA9ICpjYWNoZWQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTtcbiYjNDM7XHRpZiAoIWZ3X2NtcGwpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVycik7XG4mIzQzO1x0XHRnb3RvIGV4aXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbiYjNDM7XHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXG4mIzQzO1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4mIzQzO1x0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRfX2Z1bmNfXywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbiYjNDM7XHRjYWNoZS1cdTAwM2V0ZW1wX21kZWcgPSBmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xuJiM0MztcdGNhY2hlLVx1MDAzZXZvbHRfbXYgPSBmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcbiYjNDM7XHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuJiM0MztcbiYjNDM7XHQqdmFsID0gKmNhY2hlZDtcbiYjNDM7ZXhpdF9jbGVhbnVwOlxuJiM0MztcdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4mIzQzO2V4aXRfZnJlZTpcbiYjNDM7XHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxuLVx0XHRcdFx0ICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbi1cdFx0XHRcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXAgXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4tXHRpZiAodHlwZSA9PSBod21vbl9pbiBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl9pbl9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4mIzQzO1x0aWYgKHRociA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREFUQTtcbiBcbiYjNDM7XHQqdmFsID0gdGhyO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfYWxhcm0obG9uZyBhLCBsb25nIGIsIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl90ZW1wX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhdHRyKSB7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXg6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9taW5fYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluLCAqdmFsLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbjpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4OlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbl9hbGFybTpcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBmYm5pY19od21vbl9zZW5zb3JfcmVhZChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX2lucHV0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxuIFx0XHRcdCAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbClcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgKm1hYyA9IGZiZC1cdTAwM2VtYWM7XG4tXHRpbnQgaWQ7XG4gXG4tXHRpZCA9IGZibmljX2h3bW9uX3NlbnNvcl9pZCh0eXBlKTtcbi1cdHJldHVybiBpZCBcdTAwM2MgMCA/IGlkIDogbWFjLVx1MDAzZWdldF9zZW5zb3IoZmJkLCBpZCwgdmFsKTtcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXA6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX2luOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7XG5AQCAtNDUsOCAmIzQzOzE4OCwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqZmJuaWNfaHdtb25faW5mb1tdID0ge1xuLVx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxuLVx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLCBIV01PTl9JX0lOUFVUKSxcbiYjNDM7XHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9JTlBVVCB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcbiYjNDM7XHRIV01PTl9DSEFOTkVMX0lORk8oaW4sXG4mIzQzO1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuJiM0MztcdFx0XHQgICBIV01PTl9JX01JTiB8IEhXTU9OX0lfTUlOX0FMQVJNIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fSV9NQVggfCBIV01PTl9JX01BWF9BTEFSTSksXG4gXHROVUxMXG4gfTtcbiBcbkBAIC01NywyNSAmIzQzOzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZiZC1cdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVx1MDAzZWRldiwgXCYjMzQ7ZmJuaWNcJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgICBmYmQsIFx1MDAyNmZibmljX2NoaXBfaW5mbyxcbi1cdFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuLVx0aWYgKElTX0VSUihmYmQtXHUwMDNlaHdtb24pKSB7XG4mIzQzO1x0LyogU2VlZCBjYWNoZSB3aXRoIHNlbnRpbmVsIHNvIHRoZSBmaXJzdCByZWFkIGFsd2F5cyByZWZyZXNoZXMuICovXG4mIzQzO1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuJiM0MztcdGZiZC1cdTAwM2Vod21vbl9jYWNoZS52b2x0X212ID0gRkJOSUNfU0VOU09SX05PX0RBVEE7XG4mIzQzO1xuJiM0MztcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcJiMzNDtmYm5pY1wmIzM0OywgZmJkLFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoaHdtb24pKSB7XG4gXHRcdGRldl9ub3RpY2UoZmJkLVx1MDAzZWRldixcbiBcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgaHdtb24gZGV2aWNlICVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuJiM0MztcdFx0XHQgICBod21vbik7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZmJkLVx1MDAzZWh3bW9uLCBod21vbik7XG4gfVxuIFxuIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4mIzQzO1x0aHdtb24gPSBmYmQtXHUwMDNlaHdtb247XG4mIzQzO1x0LyogUGFpciB3aXRoIFJFQURfT05DRSgpIGluIGZibmljX2h3bW9uX25vdGlmeV9ldmVudCgpLiBQdWJsaXNoIE5VTExcbiYjNDM7XHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuJiM0MztcdCAqIGNhbm5vdCBkZXJlZmVyZW5jZSB0aGUgaHdtb24gZGV2aWNlIGFmdGVyIHdlIHVucmVnaXN0ZXIgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuJiM0MztcdHN5bmNocm9uaXplX2lycShmYmQtXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xuJiM0MztcbiYjNDM7XHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbiYjNDM7e1xuJiM0MztcdGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGU7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1x0czMyIGF0dHIgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpZCkge1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4mIzQzO1x0XHR0eXBlID0gaHdtb25fdGVtcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX2NyaXRfYWxhcm07XG4mIzQzO1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4KVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbiYjNDM7XHRcdHR5cGUgPSBod21vbl9pbjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX2luX21pbl9hbGFybTtcbiYjNDM7XHRcdGVsc2UgaWYgKHZhbCBcdTAwM2U9IGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXgpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBhaXIgd2l0aCBXUklURV9PTkNFKCkgaW4gZmJuaWNfaHdtb25fdW5yZWdpc3RlcigpLiBTa2lwIHRoZVxuJiM0MztcdCAqIG5vdGlmaWNhdGlvbiBpZiBod21vbiBmYWlsZWQgdG8gcmVnaXN0ZXIgb3IgaGFzIGFscmVhZHkgYmVlbiB0b3JuXG4mIzQzO1x0ICogZG93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRod21vbiA9IFJFQURfT05DRShmYmQtXHUwMDNlaHdtb24pO1xuJiM0MztcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4mIzQzO1x0XHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmNcbkBAIC04OTksNjAgJiM0Mzs4OTksNiBAQCBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHJlc2V0LFxuIFx0XHRcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXG4tXHRcdFx0XHQgICAgIGxvbmcgKnZhbClcbi17XG4tXHRzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDtcbi1cdGludCBlcnIgPSAwO1xuLVx0czMyICpzZW5zb3I7XG4tXG4tXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XG4tXHRpZiAoIWZ3X2NtcGwpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0c3dpdGNoIChpZCkge1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuLVx0XHRzZW5zb3IgPSBcdTAwMjZmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuLVx0XHRcdFwmIzM0O0ZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdGVycik7XG4tXHRcdGdvdG8gZXhpdF9mcmVlO1xuLVx0fVxuLVxuLVx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZndfY21wbC1cdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCYjMzQ7KTtcbi1cdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbi1cdGlmIChmd19jbXBsLVx1MDAzZXJlc3VsdCkge1xuLVx0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXG5cJiMzNDssXG4tXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuLVx0fVxuLVxuLVx0KnZhbCA9ICpzZW5zb3I7XG4tZXhpdF9jbGVhbnVwOlxuLVx0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbi1leGl0X2ZyZWU6XG4tXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXG4gXHQuZ2V0X2xpbmsgPSBmYm5pY19tYWNfZ2V0X2xpbmssXG5AQCAtOTY2LDcgJiM0Mzs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcbiBcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXG4gXHQubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsXG4tXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCAmIzQzOzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xuIFxuIFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcdHZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpO1xuLVxuLVx0aW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7XG4gfTtcbiBcbiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgZmJuaWMgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgbm90IHJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YTI5OGRhNjk4MDY1MjMzM2IxNTQ1OTQyZTdkYTQ1OGFkZDkyZDFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAwNTowMDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaAppbmRleCBkMDcxNTY5NWM0M2U3Li40YTQ5YzIwZTRhMDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCkBAIC0yMiwxMSAmIzQzOzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjsKICNkZWZpbmUgRkJOSUNfTUFYX05BUElfVkVDVE9SUwkJMTI4dQogI2RlZmluZSBGQk5JQ19NQlhfQ01QTF9TTE9UUwkJNAogCiYjNDM7c3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7CiYjNDM7CXMzMiB0ZW1wX21kZWc7CiYjNDM7CXMzMiB2b2x0X212OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZmJuaWNfZGV2IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwlzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7CiAJc3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjsKIAlzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKm90cF9yZXBvcnRlcjsKIApAQCAtMTg1LDYgJiM0MzsxOTIsNyBAQCB2b2lkIGZibmljX2Z3X2ZyZWVfbWJ4KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiAKIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwomIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCk7CiAKIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIHZvaWQgZmJuaWNfbWFjX2ZyZWVfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwpAQCAtNTc1LDYgJiM0Mzs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHsKIAlGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLAogCQkJICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSwKIAlGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksCiAJRkJOSUNfVExWX0FUVFJfTEFTVAogfTsKIApAQCAtNzAyLDYgJiM0Mzs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKIAkvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovCiAJZmJkLSZndDtmd19jYXAubmVlZF9ibWNfdGNhbV9yZWluaXQgPSB0cnVlOwogCiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluID0KJiM0MzsJCWZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudGVtcC5tYXggPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQgPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudm9sdC5taW4gPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MTgsNiAmIzQzOzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7CiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9MQVNUCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSwKJiM0MzsJCQkJCQkgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKJiM0Mzt7CiYjNDM7CWJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7CiYjNDM7CXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTsKJiM0MzsJczMyIHZhbHVlOwomIzQzOwomIzQzOwl0aGVybV9leGNlZWRlZCA9CiYjNDM7CQlmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7CiYjNDM7CXZvbHRfZXhjZWVkZWQgPQomIzQzOwkJZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7CiYjNDM7CiYjNDM7CWlmICghdGhlcm1fZXhjZWVkZWQgJmFtcDsmYW1wOyAhdm9sdF9leGNlZWRlZCkgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkmIzM0O1RocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0aGVybV9leGNlZWRlZCkgewomIzQzOwkJaWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7CiYjNDM7CQkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCXZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpOwomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcbiYjMzQ7LCB2YWx1ZSk7CiYjNDM7CQlmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2b2x0X2V4Y2VlZGVkKSB7CiYjNDM7CQlpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHsKJiM0MzsJCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJdmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVEFHRSk7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxuJiMzNDssIHZhbHVlKTsKJiM0MzsJCWZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksCiAJRkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsCkBAIC0xNjQ2LDYgJiM0MzsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCwKIAkJCSBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsCiAJCQkgZmJuaWNfZndfcGFyc2VfdHNlbmVfcmVhZF9yZXNwKSwKJiM0MzsJRkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsCiYjNDM7CQkJIGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LAomIzQzOwkJCSBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksCiAJRkJOSUNfVExWX1BBUlNFUihMT0dfTVNHX1JFUSwKIAkJCSBmYm5pY19md19sb2dfcmVxX2luZGV4LAogCQkJIGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKQEAgLTYsNiAmIzQzOzYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKIHN0cnVjdCBmYm5pY19kZXY7CkBAIC00NCw2ICYjNDM7NDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7CiAJY2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTsKIH07CiAKJiM0MzsvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGUKJiM0MzsgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXQKJiM0MzsgKiByZWZyZXNoZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQQkJCVMzMl9NSU4KJiM0MzsKJiM0MztzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHsKJiM0MzsJczMyIG1pbjsKJiM0MzsJczMyIG1heDsKJiM0MzsJczMyIGNyaXQ7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBmYm5pY19md19jYXAgewogCXN0cnVjdCB7CiAJCXN0cnVjdCBmYm5pY19md192ZXIgbWdtdCwgYm9vdGxvYWRlcjsKQEAgLTYwLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAgewogCXU4CWxpbmtfc3BlZWQ7CiAJdTgJbGlua19mZWM7CiAJdTMyCWFudGlfcm9sbGJhY2tfdmVyc2lvbjsKJiM0MzsJc3RydWN0IGZibmljX3RocmVzaG9sZCB0ZW1wOwomIzQzOwlzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7CiB9OwogCiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7CkBAIC0yMTIsNiAmIzQzOzIyNyw3IEBAIGVudW0gewogCUZCTklDX1RMVl9NU0dfSURfUVNGUF9SRUFEX1JFU1AJCQk9IDB4MzksCiAJRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUQkJCT0gMHgzQywKIAlGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUAkJPSAweDNELAomIzQzOwlGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfU0VORF9MT0dTX1JFUQkJPSAweDQzLAogCUZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVEJCQk9IDB4NDQsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFU1AJCQk9IDB4NDUsCkBAIC0yNDIsNiAmIzQzOzI1OCwxMiBAQCBlbnVtIHsKIAlGQk5JQ19GV19DQVBfUkVTUF9VRUZJX1ZFUlNJT04JCQk9IDB4MTEsCiAJRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSCQk9IDB4MTIsCiAJRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OCQk9IDB4MTUsCiYjNDM7CS8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOCQkJPSAweDE4LAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWAkJCT0gMHgxOSwKJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUCQkJPSAweDFhLAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTgkJCT0gMHgxYiwKJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgJCQk9IDB4MWMsCiAJRkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWAogfTsKIApAQCAtMjc1LDYgJiM0MzsyOTcsMTQgQEAgZW51bSB7CiAJRkJOSUNfRldfVFNFTkVfTVNHX01BWAogfTsKIAomIzQzO2VudW0gewomIzQzOwlGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHCT0gMHgwLAomIzQzOwlGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcJPSAweDEsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX1RIRVJNQUwJCQk9IDB4MiwKJiM0MzsJRkJOSUNfRldfVFNFTkVfVk9MVEFHRQkJCT0gMHgzLAomIzQzOwlGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLAomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlGQk5JQ19GV19PV05FUlNISVBfRkxBRwkJCT0gMHgwLAogCUZCTklDX0ZXX09XTkVSU0hJUF9USU1FCQkJPSAweDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMKaW5kZXggZGVmODU5OGFjZWVjZi4uM2YzMzUyMmZjZmQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwpAQCAtMiw0MSAmIzQzOzIsMTg0IEBACiAvKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvaHdtb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvamlmZmllcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ZibmljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtmYm5pY19tYWMuaCYjMzQ7CiAKLXN0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX2lkKGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUpCiYjNDM7c3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLAomIzQzOwkJCQkgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAomIzQzOwkJCQkgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpCiB7Ci0JaWYgKHR5cGUgPT0gaHdtb25fdGVtcCkKLQkJcmV0dXJuIEZCTklDX1NFTlNPUl9URU1QOwotCWlmICh0eXBlID09IGh3bW9uX2luKQotCQlyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7CiYjNDM7CXJldHVybiAwNDQ0OwomIzQzO30KIAotCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gJmFtcDtmYmQtJmd0O2h3bW9uX2NhY2hlOwomIzQzOwlzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CXMzMiAqY2FjaGVkOwomIzQzOwomIzQzOwlzd2l0Y2ggKGlkKSB7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1RFTVA6CiYjNDM7CQljYWNoZWQgPSAmYW1wO2NhY2hlLSZndDt0ZW1wX21kZWc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRToKJiM0MzsJCWNhY2hlZCA9ICZhbXA7Y2FjaGUtJmd0O3ZvbHRfbXY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBICZhbXA7JmFtcDsKJiM0MzsJICAgIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhjYWNoZS0mZ3Q7bGFzdF9yZWFkKSkgewomIzQzOwkJKnZhbCA9ICpjYWNoZWQ7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7CiYjNDM7CWlmICghZndfY21wbCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwllcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsCiYjNDM7CQkJJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJZXJyKTsKJiM0MzsJCWdvdG8gZXhpdF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7ZndfY21wbC0mZ3Q7ZG9uZSwgMTAgKiBIWikpIHsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcbiYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FVElNRURPVVQ7CiYjNDM7CQlnb3RvIGV4aXRfY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi8KJiM0MzsJaWYgKGZ3X2NtcGwtJmd0O3Jlc3VsdCkgewomIzQzOwkJZXJyID0gZndfY21wbC0mZ3Q7cmVzdWx0OwomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCBlcnIpOwomIzQzOwkJZ290byBleGl0X2NsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi8KJiM0MzsJY2FjaGUtJmd0O3RlbXBfbWRlZyA9IGZ3X2NtcGwtJmd0O3UudHNlbmUubWlsbGlkZWdyZWVzOwomIzQzOwljYWNoZS0mZ3Q7dm9sdF9tdiA9IGZ3X2NtcGwtJmd0O3UudHNlbmUubWlsbGl2b2x0czsKJiM0MzsJY2FjaGUtJmd0O2xhc3RfcmVhZCA9IGppZmZpZXM7CiYjNDM7CiYjNDM7CSp2YWwgPSAqY2FjaGVkOwomIzQzO2V4aXRfY2xlYW51cDoKJiM0MzsJZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTsKJiM0MztleGl0X2ZyZWU6CiYjNDM7CWZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsCi0JCQkJICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKLQkJCQkgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpCiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKQogewotCWlmICh0eXBlID09IGh3bW9uX3RlbXAgJmFtcDsmYW1wOyBhdHRyID09IGh3bW9uX3RlbXBfaW5wdXQpCi0JCXJldHVybiAwNDQ0OwotCWlmICh0eXBlID09IGh3bW9uX2luICZhbXA7JmFtcDsgYXR0ciA9PSBod21vbl9pbl9pbnB1dCkKLQkJcmV0dXJuIDA0NDQ7CiYjNDM7CWlmICh0aHIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiAKJiM0MzsJKnZhbCA9IHRocjsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJaWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJKnZhbCA9IGEgJmd0Oz0gYjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWluOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWF4OgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWF4LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfY3JpdDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9pbnB1dDoKJiM0MzsJY2FzZSBod21vbl90ZW1wX21pbl9hbGFybToKJiM0MzsJY2FzZSBod21vbl90ZW1wX21heF9hbGFybToKJiM0MzsJY2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBmYm5pY19od21vbl9zZW5zb3JfcmVhZChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9pbnB1dDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLSZndDtmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQsIHZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX2luX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25faW5fbWluOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWluLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luX21heDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbl9pbnB1dDoKJiM0MzsJY2FzZSBod21vbl9pbl9taW5fYWxhcm06CiYjNDM7CWNhc2UgaHdtb25faW5fbWF4X2FsYXJtOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX2luX2lucHV0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgaHdtb25faW5fbWluX2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLSZndDtmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW5fbWF4X2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLSZndDtmd19jYXAudm9sdC5tYXgsIHZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCiAJCQkgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpCiB7CiAJc3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JY29uc3Qgc3RydWN0IGZibmljX21hYyAqbWFjID0gZmJkLSZndDttYWM7Ci0JaW50IGlkOwogCi0JaWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7Ci0JcmV0dXJuIGlkICZsdDsgMCA/IGlkIDogbWFjLSZndDtnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIGh3bW9uX3RlbXA6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbjoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9pbl9yZWFkKGZiZCwgYXR0ciwgdmFsKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7CkBAIC00NSw4ICYjNDM7MTg4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpmYm5pY19od21vbl9pbmZvW10gPSB7Ci0JSFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLAotCUhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksCiYjNDM7CUhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLAomIzQzOwkJCSAgIEhXTU9OX1RfSU5QVVQgfAomIzQzOwkJCSAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfAomIzQzOwkJCSAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NQVhfQUxBUk0gfAomIzQzOwkJCSAgIEhXTU9OX1RfQ1JJVCB8IEhXTU9OX1RfQ1JJVF9BTEFSTSksCiYjNDM7CUhXTU9OX0NIQU5ORUxfSU5GTyhpbiwKJiM0MzsJCQkgICBIV01PTl9JX0lOUFVUIHwKJiM0MzsJCQkgICBIV01PTl9JX01JTiB8IEhXTU9OX0lfTUlOX0FMQVJNIHwKJiM0MzsJCQkgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUFYX0FMQVJNKSwKIAlOVUxMCiB9OwogCkBAIC01NywyNSAmIzQzOzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7CiAKIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsKIAlpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKQogCQlyZXR1cm47CiAKLQlmYmQtJmd0O2h3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtJmd0O2RldiwgJiMzNDtmYm5pYyYjMzQ7LAotCQkJCQkJICAgICBmYmQsICZhbXA7ZmJuaWNfY2hpcF9pbmZvLAotCQkJCQkJICAgICBOVUxMKTsKLQlpZiAoSVNfRVJSKGZiZC0mZ3Q7aHdtb24pKSB7CiYjNDM7CS8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqLwomIzQzOwlmYmQtJmd0O2h3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBOwomIzQzOwlmYmQtJmd0O2h3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTsKJiM0MzsKJiM0MzsJaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC0mZ3Q7ZGV2LCAmIzM0O2ZibmljJiMzNDssIGZiZCwKJiM0MzsJCQkJCQkmYW1wO2ZibmljX2NoaXBfaW5mbywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoaHdtb24pKSB7CiAJCWRldl9ub3RpY2UoZmJkLSZndDtkZXYsCiAJCQkgICAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXG4mIzM0OywKLQkJCSAgIGZiZC0mZ3Q7aHdtb24pOwotCQlmYmQtJmd0O2h3bW9uID0gTlVMTDsKJiM0MzsJCQkgICBod21vbik7CiYjNDM7CQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKGZiZC0mZ3Q7aHdtb24sIGh3bW9uKTsKIH0KIAogdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIHsKJiM0MzsJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CiAJaWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSB8fCAhZmJkLSZndDtod21vbikKIAkJcmV0dXJuOwogCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLSZndDtod21vbik7Ci0JZmJkLSZndDtod21vbiA9IE5VTEw7CiYjNDM7CWh3bW9uID0gZmJkLSZndDtod21vbjsKJiM0MzsJLyogUGFpciB3aXRoIFJFQURfT05DRSgpIGluIGZibmljX2h3bW9uX25vdGlmeV9ldmVudCgpLiBQdWJsaXNoIE5VTEwKJiM0MzsJICogYW5kIHdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRlcgbWFpbGJveCBJUlEgaGFuZGxlciB0byBmaW5pc2ggc28gaXQKJiM0MzsJICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UoZmJkLSZndDtod21vbiwgTlVMTCk7CiYjNDM7CXN5bmNocm9uaXplX2lycShmYmQtJmd0O2Z3X21zaXhfdmVjdG9yKTsKJiM0MzsKJiM0MzsJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpCiYjNDM7ewomIzQzOwllbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsJczMyIGF0dHIgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3dpdGNoIChpZCkgewomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9URU1QOgomIzQzOwkJdHlwZSA9IGh3bW9uX3RlbXA7CiYjNDM7CiYjNDM7CQlpZiAodmFsICZsdDs9IGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluKQomIzQzOwkJCWF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTsKJiM0MzsJCWVsc2UgaWYgKHZhbCAmZ3Q7PSBmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQpCiYjNDM7CQkJYXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTsKJiM0MzsJCWVsc2UgaWYgKHZhbCAmZ3Q7PSBmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCkKJiM0MzsJCQlhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRToKJiM0MzsJCXR5cGUgPSBod21vbl9pbjsKJiM0MzsKJiM0MzsJCWlmICh2YWwgJmx0Oz0gZmJkLSZndDtmd19jYXAudm9sdC5taW4pCiYjNDM7CQkJYXR0ciA9IGh3bW9uX2luX21pbl9hbGFybTsKJiM0MzsJCWVsc2UgaWYgKHZhbCAmZ3Q7PSBmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCkKJiM0MzsJCQlhdHRyID0gaHdtb25faW5fbWF4X2FsYXJtOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlCiYjNDM7CSAqIG5vdGlmaWNhdGlvbiBpZiBod21vbiBmYWlsZWQgdG8gcmVnaXN0ZXIgb3IgaGFzIGFscmVhZHkgYmVlbiB0b3JuCiYjNDM7CSAqIGRvd24uCiYjNDM7CSAqLwomIzQzOwlod21vbiA9IFJFQURfT05DRShmYmQtJmd0O2h3bW9uKTsKJiM0MzsJaWYgKGF0dHIgJmd0Oz0gMCAmYW1wOyZhbXA7IGh3bW9uKQomIzQzOwkJaHdtb25fbm90aWZ5X2V2ZW50KGh3bW9uLCB0eXBlLCBhdHRyLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jCmluZGV4IDUzYjdhOTM4YjRjMjcuLmZiYTJlMmVmYWViOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwpAQCAtODk5LDYwICYjNDM7ODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCwKIAkJCSAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpOwogfQogCi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsCi0JCQkJICAgICBsb25nICp2YWwpCi17Ci0Jc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7Ci0JaW50IGVyciA9IDA7Ci0JczMyICpzZW5zb3I7Ci0KLQlmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7Ci0JaWYgKCFmd19jbXBsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN3aXRjaCAoaWQpIHsKLQljYXNlIEZCTklDX1NFTlNPUl9URU1QOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGlkZWdyZWVzOwotCQlicmVhazsKLQljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGl2b2x0czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihmYmQtJmd0O2RldiwKLQkJCSYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcbiYjMzQ7LAotCQkJZXJyKTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtmd19jbXBsLSZndDtkb25lLCAxMCAqIEhaKSkgewotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXG4mIzM0Oyk7Ci0JCWVyciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gZXhpdF9jbGVhbnVwOwotCX0KLQotCS8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqLwotCWlmIChmd19jbXBsLSZndDtyZXN1bHQpIHsKLQkJZXJyID0gZndfY21wbC0mZ3Q7cmVzdWx0OwotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxuJiMzNDssCi0JCQlfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBleGl0X2NsZWFudXA7Ci0JfQotCi0JKnZhbCA9ICpzZW5zb3I7Ci1leGl0X2NsZWFudXA6Ci0JZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTsKLWV4aXRfZnJlZToKLQlmYm5pY19md19wdXRfY21wbChmd19jbXBsKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0gewogCS5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLAogCS5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluaywKQEAgLTk2Niw3ICYjNDM7OTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7CiAJLmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLAogCS5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsCiAJLmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLAotCS5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYywKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oCkBAIC0xMzcsOCAmIzQzOzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMgewogCiAJdm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIAl2b2lkICgqbGlua191cCkoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTsKLQotCWludCAoKmdldF9zZW5zb3IpKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpOwogfTsKIAogaW50IGZibmljX21hY19pbml0KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTAxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIGxpc3QgdGhlIGZpbGVzIHNwZWNpZmljYWxseTogYGZibmljLmhgLCBgZmJuaWNfZncuY2AsIGBmYm5pY19mdy5oYCwgYGZibmljX2h3bW9uLmNgLCBgZmJuaWNfbWFjLmNgLCBhbmQgYGZibmljX21hYy5oYC4KCk5vdywgSSBuZWVkIHRvIGtlZXAgdGhlIGV2YWx1YXRpb24gaW5zdHJ1Y3Rpb25zIGluIG1pbmQuIFRoZSBtYWluIG9iamVjdGl2ZSBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoeSBvZiBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIGFib3V0IGNhc2VzIHdoZXJlIHdlICpzaG91bGRuJiMzOTt0KiBjb25zaWRlciBpdCBmb3IgZnV6emluZzogdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgYXJlIGludm9rZWQgZHVyaW5nIGRldmljZSByZW1vdmFsLiBHb3QgaXQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZmJuaWNgIGlzLiBBaGEsIGl0JiMzOTtzIE1ldGEmIzM5O3MgTklDIGRyaXZlciwgdGhlaXIgY3VzdG9tIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgLyBBU0lDLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcsIGJlY2F1c2UgaWYgaXQmIzM5O3MgTWV0YS1zcGVjaWZpYyBhbmQgcmVxdWlyZXMgdGhlaXIgaGFyZHdhcmUsIHRoYXQgcmFpc2VzIGEgZmxhZyBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkJOSUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfTUVUQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSAmIzM0O2ZibmljJiMzNDsgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyAmIzM0O2ZibmljJiMzNDsgdGhpbmcuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHN0YXJ0aW5nIHdpdGggYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIFRoYXQgdXN1YWxseSBob2xkcyB0aGUga2V5IGZvciBkaXNjb3ZlcmluZyB3aGF0IHRoZSBoZWNrIGEgZHJpdmVyIGRvZXMgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlbiwgSSYjMzk7bGwgZHJpbGwgZG93biBmdXJ0aGVyIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgY2x1ZXMgYXJlIHJldmVhbGVkLCBzbyBJIGNhbiBzdGFydCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ldGEgUGxhdGZvcm1zIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxuICAgNzpcdFx0Ym9vbCBcJiMzNDtNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBkZXNpZ25lZCBieSBNZXRhLCBzYXkgWS5cbiAgMTE6XHRcdCAgVGhhdCYjMzk7cyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE0Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTU6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBNZXRhIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxNjpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE3Olx0XG4gIDE4Olx0aWYgTkVUX1ZFTkRPUl9NRVRBXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEZCTklDXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8IENPTVBJTEVfVEVTVFxuICAyMzpcdFx0ZGVwZW5kcyBvbiAhUzM5MFxuICAyNDpcdFx0ZGVwZW5kcyBvbiBNQVhfU0tCX0ZSQUdTIFx1MDAzYyAyMlxuICAyNTpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDI2Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDI3Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMjg6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjk6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICAzMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMzE6XHRcdHNlbGVjdCBQTERNRldcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cbiAgMzQ6XHRcbiAgMzU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAzNjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuICAzNzpcdFxuICAzODpcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBmYm5pY2AgRHJpdmVyKioKCkFscmlnaHQsIHNvIGBmYm5pY2AuIFRoYXQmIzM5O3MgTWV0YSYjMzk7cyBjdXN0b20gQVNJQyBQQ0llIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgZHJpdmVyLiBNYWtlcyBzZW5zZS4gR2l2ZW4gdGhlICYjMzQ7UENJZSYjMzQ7IGluIHRoZSBuYW1lIGFuZCB0aGUgQVNJQyBpbXBsaWNhdGlvbiwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGllY2Ugb2YgaGFyZHdhcmUgZGlyZWN0bHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhpcyBzdXNwaWNpb24sIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBkcml2ZXImIzM5O3MgY29yZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB0eXBpY2FsIHN1c3BlY3RzLCBzcGVjaWZpY2FsbHkgZmlsZXMgbGlrZSBgZmJuaWNfcGNpLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgYnVpbHQgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCBQQ0kgaGFyZHdhcmUuIElmIGl0JiMzOTtzIGEgUENJIGRldmljZSBkcml2ZXIsIHdoaWNoIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXMsIGl0JiMzOTtsbCBuZWVkIHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VuY2Ugb24gdGhlIFBDSWUgYnVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX3BjaV90YmwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfaW5mbyAqZmJuaWNfaW5mb190YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzozMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZmJuaWNfcGNpX3RibFtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zMS1cdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIEZCTklDX0FTSUMsIGZibmljX2JvYXJkX2FzaWMpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zNC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzozNTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZmJuaWNfcGNpX3RibCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTM2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjE0PXN0YXRpYyB2b2lkIGZibmljX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yNTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjI1MTogKiBAZW50OiBlbnRyeSBpbiBmYm5pY19wY2lfdGJsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI1Mi0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9NjI2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBmYm5pY19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTYyNy1cdC5uYW1lXHRcdD0gZmJuaWNfZHJpdmVyX25hbWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjYyODpcdC5pZF90YWJsZVx0PSBmYm5pY19wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MjktXHQucHJvYmVcdFx0PSBmYm5pY19wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1MQoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZmJuaWNgIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBmYm5pY2AgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSYjMzk7cyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIEFTSUMuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGUgZ3VpZGVsaW5lcyBmbGFnIGEgcmVkIGxpZ2h0LiBUaGlzIGtpbmQgb2YgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBpcyBhIG5vLWdvIGZvciBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKVGhlIGd1aWRlbGluZSBpcyBjbGVhcjogaWYgYSBwYXRjaCBvbmx5IHRvdWNoZXMgY29kZSB0aGF0JiMzOTtzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHNldHVwcywgbGlrZSB0aGlzLCB3ZSBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gVGhhdCBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgc3R1ZmYgbGlrZSB0aGlzIGBmYm5pY2AgZHJpdmVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkuLi4gWWVwLCB0aGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9gLiBJIGNhbiBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgbGlzdGVkOiBgZmJuaWMuaGAsIGBmYm5pY19mdy5jYCwgYGZibmljX2Z3LmhgLCBgZmJuaWNfaHdtb24uY2AsIGBmYm5pY19tYWMuY2AsIGFuZCBgZmJuaWNfbWFjLmhgLiBBbGwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoaXMgdmVuZG9yLXNwZWNpZmljIGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBpcyBlc3NlbnRpYWxseSB6ZXJvIGluIGEgc3RhbmRhcmQgdGVzdGluZyBlbnZpcm9ubWVudC4KClNvLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGZibmljIChNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTIuNTI1MDcyMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMyMzE1NDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTIuNTI1MTE1OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzM3Nzk4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YTI5OGRhNjk4MDY1MjMzM2IxNTQ1OTQyZTdkYTQ1OGFkZDkyZDFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDU6MDA6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXFxuaW5kZXggZDA3MTU2OTVjNDNlNy4uNGE0OWMyMGU0YTAxNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG5AQCAtMjIsMTEgKzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcXG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXFx0XFx0MTI4dVxcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXFx0XFx0NFxcbiBcXG4rc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XFxuK1xcdHMzMiB0ZW1wX21kZWc7XFxuK1xcdHMzMiB2b2x0X212O1xcbit9O1xcbitcXG4gc3RydWN0IGZibmljX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcXG4gXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XFxuIFxcbkBAIC0xODUsNiArMTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcXG4gXFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNTc1LDYgKzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xcbiBcXHRGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLFxcbiBcXHRcXHRcXHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxcbiBcXHRGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXFxuIFxcdEZCTklDX1RMVl9BVFRSX0xBU1RcXG4gfTtcXG4gXFxuQEAgLTcwMiw2ICs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcXG4gXFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xcbiBcXHRmYmQtXFx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XFxuIFxcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1heCA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWF0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQgPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWF4ID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTYxOCw2ICsxNjM5LDU3IEBAIGZibmljX2Z3X3BhcnNlcl90ZXN0KHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfTEFTVFxcbit9O1xcbitcXG4rc3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbit7XFxuK1xcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XFxuK1xcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTtcXG4rXFx0czMyIHZhbHVlO1xcbitcXG4rXFx0dGhlcm1fZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XFxuK1xcdHZvbHRfZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcXG4rXFxuK1xcdGlmICghdGhlcm1fZXhjZWVkZWQgXFx1MDAyNlxcdTAwMjYgIXZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIlRocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XFxuK1xcdFxcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcXFxcblxcXCIsIHZhbHVlKTtcXG4rXFx0XFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VdKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldiwgXFxcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcXFxuXFxcIiwgdmFsdWUpO1xcbitcXHRcXHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsdWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCxcXG5AQCAtMTY0Niw2ICsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihUU0VORV9SRUFEX1JFU1AsXFxuIFxcdFxcdFxcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXFxuIFxcdFxcdFxcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxcbitcXHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcXG4rXFx0XFx0XFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxcbitcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxcbiBcXHRcXHRcXHQgZmJuaWNfZndfbG9nX3JlcV9pbmRleCxcXG4gXFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5pbmRleCBkODQ3MjNlNGNmYTM2Li44NzMwMWU2MDgyNTU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZGV2O1xcbkBAIC00NCw2ICs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHtcXG4gXFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcXG4gfTtcXG4gXFxuKy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxcbisgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXRcXG4rICogcmVmcmVzaGVkLlxcbisgKi9cXG4rI2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQVxcdFxcdFxcdFMzMl9NSU5cXG4rXFxuK3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xcbitcXHRzMzIgbWluO1xcbitcXHRzMzIgbWF4O1xcbitcXHRzMzIgY3JpdDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBmYm5pY19md19jYXAge1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XFxuQEAgLTYwLDYgKzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XFxuIFxcdHU4XFx0bGlua19zcGVlZDtcXG4gXFx0dThcXHRsaW5rX2ZlYztcXG4gXFx0dTMyXFx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xcbitcXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XFxuK1xcdHN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHtcXG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXFx0XFx0XFx0PSAweDM5LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXFx0XFx0XFx0PSAweDNDLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFxcdFxcdD0gMHgzRCxcXG4rXFx0RkJOSUNfVExWX01TR19JRF9TRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AgPSAweDQwLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXFx0XFx0PSAweDQzLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVRXFx0XFx0XFx0PSAweDQ0LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFxcdFxcdFxcdD0gMHg0NSxcXG5AQCAtMjQyLDYgKzI1OCwxMiBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXFx0XFx0XFx0PSAweDExLFxcbiBcXHRGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFJcXHRcXHQ9IDB4MTIsXFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlxcdFxcdD0gMHgxNSxcXG4rXFx0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cXHRcXHRcXHQ9IDB4MTgsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXFx0XFx0XFx0PSAweDE5LFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcXHRcXHRcXHQ9IDB4MWEsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXFx0XFx0XFx0PSAweDFiLFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWFxcdFxcdFxcdD0gMHgxYyxcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxcbiB9O1xcbiBcXG5AQCAtMjc1LDYgKzI5NywxNCBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxcbiB9O1xcbiBcXG4rZW51bSB7XFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUdcXHQ9IDB4MCxcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXFx0PSAweDEsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNQUxcXHRcXHRcXHQ9IDB4MixcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVxcdFxcdFxcdD0gMHgzLFxcbitcXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9GTEFHXFx0XFx0XFx0PSAweDAsXFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXFx0XFx0XFx0PSAweDEsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuQEAgLTIsNDEgKzIsMTg0IEBAXFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHdtb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJmYm5pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZmJuaWNfbWFjLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxcbitzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XFxuK1xcdHJldHVybiAwNDQ0O1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXFx1MDAyNmZiZC1cXHUwMDNlaHdtb25fY2FjaGU7XFxuK1xcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0czMyICpjYWNoZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdGNhY2hlZCA9IFxcdTAwMjZjYWNoZS1cXHUwMDNldGVtcF9tZGVnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4rXFx0XFx0Y2FjaGVkID0gXFx1MDAyNmNhY2hlLVxcdTAwM2V2b2x0X212O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXFx1MDAzZWxhc3RfcmVhZCkpIHtcXG4rXFx0XFx0KnZhbCA9ICpjYWNoZWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuK1xcdGlmICghZndfY21wbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4rXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbitcXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cXG4rXFx0Y2FjaGUtXFx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbitcXHRjYWNoZS1cXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4rXFx0Y2FjaGUtXFx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XFxuK1xcbitcXHQqdmFsID0gKmNhY2hlZDtcXG4rZXhpdF9jbGVhbnVwOlxcbitcXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xcbitleGl0X2ZyZWU6XFxuK1xcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcXG4tXFx0XFx0cmV0dXJuIDA0NDQ7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25faW5faW5wdXQpXFxuLVxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIFxcbitcXHQqdmFsID0gdGhyO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuK3tcXG4rXFx0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0KnZhbCA9IGEgXFx1MDAzZT0gYjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25faW5fbWluOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5fbWF4OlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuK1xcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX2luX2lucHV0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXFx1MDAzZW1hYztcXG4tXFx0aW50IGlkO1xcbiBcXG4tXFx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XFxuLVxcdHJldHVybiBpZCBcXHUwMDNjIDAgPyBpZCA6IG1hYy1cXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBod21vbl90ZW1wOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl9pbjpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcXG4tXFx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxcbi1cXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxcbitcXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9JTlBVVCB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxcbitcXHRcXHRcXHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcXG4rXFx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxcbitcXHRcXHRcXHQgICBIV01PTl9JX0lOUFVUIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxcbiBcXHROVUxMXFxuIH07XFxuIFxcbkBAIC01NywyNSArMjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcXG4gXFxuIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xcbitcXG4gXFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZmJkLVxcdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVxcdTAwM2VkZXYsIFxcXCJmYm5pY1xcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmJkLCBcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbi1cXHRpZiAoSVNfRVJSKGZiZC1cXHUwMDNlaHdtb24pKSB7XFxuK1xcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcXG4rXFxuK1xcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXFx1MDAzZWRldiwgXFxcImZibmljXFxcIiwgZmJkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihod21vbikpIHtcXG4gXFx0XFx0ZGV2X25vdGljZShmYmQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICBmYmQtXFx1MDAzZWh3bW9uKTtcXG4tXFx0XFx0ZmJkLVxcdTAwM2Vod21vbiA9IE5VTEw7XFxuK1xcdFxcdFxcdCAgIGh3bW9uKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGZiZC1cXHUwMDNlaHdtb24sIGh3bW9uKTtcXG4gfVxcbiBcXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcXG4rXFxuIFxcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cXHUwMDNlaHdtb24pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC1cXHUwMDNlaHdtb24pO1xcbi1cXHRmYmQtXFx1MDAzZWh3bW9uID0gTlVMTDtcXG4rXFx0aHdtb24gPSBmYmQtXFx1MDAzZWh3bW9uO1xcbitcXHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxcbitcXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxcbitcXHQgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShmYmQtXFx1MDAzZWh3bW9uLCBOVUxMKTtcXG4rXFx0c3luY2hyb25pemVfaXJxKGZiZC1cXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xcbitcXG4rXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pO1xcbit9XFxuK1xcbit2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpXFxuK3tcXG4rXFx0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcXG4rXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHMzMiBhdHRyID0gLTE7XFxuK1xcbitcXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdHR5cGUgPSBod21vbl90ZW1wO1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDNjPSBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcXG4rXFx0XFx0XFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0KVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxcbitcXHRcXHR0eXBlID0gaHdtb25faW47XFxuK1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2M9IGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluKVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGVcXG4rXFx0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cXG4rXFx0ICogZG93bi5cXG4rXFx0ICovXFxuK1xcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cXHUwMDNlaHdtb24pO1xcbitcXHRpZiAoYXR0ciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGh3bW9uKVxcbitcXHRcXHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xcbkBAIC04OTksNjAgKzg5OSw2IEBAIGZibmljX21hY19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgcmVzZXQsXFxuIFxcdFxcdFxcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgbG9uZyAqdmFsKVxcbi17XFxuLVxcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbi1cXHRpbnQgZXJyID0gMDtcXG4tXFx0czMyICpzZW5zb3I7XFxuLVxcbi1cXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuLVxcdGlmICghZndfY21wbClcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRzd2l0Y2ggKGlkKSB7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4tXFx0fVxcbi1cXG4tXFx0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2ZyZWU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZmd19jbXBsLVxcdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXFxcblxcXCIpO1xcbi1cXHRcXHRlcnIgPSAtRVRJTUVET1VUO1xcbi1cXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXFxuLVxcdGlmIChmd19jbXBsLVxcdTAwM2VyZXN1bHQpIHtcXG4tXFx0XFx0ZXJyID0gZndfY21wbC1cXHUwMDNlcmVzdWx0O1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRfX2Z1bmNfXywgZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2NsZWFudXA7XFxuLVxcdH1cXG4tXFxuLVxcdCp2YWwgPSAqc2Vuc29yO1xcbi1leGl0X2NsZWFudXA6XFxuLVxcdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XFxuLWV4aXRfZnJlZTpcXG4tXFx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcXG4gXFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXFxuIFxcdC5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluayxcXG5AQCAtOTY2LDcgKzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsXFxuIFxcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXFxuIFxcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcXG4tXFx0LmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XFxuIFxcbiBcXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXHR2b2lkICgqbGlua191cCkoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcXG4tXFxuLVxcdGludCAoKmdldF9zZW5zb3IpKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpO1xcbiB9O1xcbiBcXG4gaW50IGZibmljX21hY19pbml0KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA1OjAwOjE0LjE1OTUxNTI1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ2ODg2OTkxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2EyOThkYTY5ODA2NTIzMzNiMTU0NTk0MmU3ZGE0NThhZGQ5MmQxZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDU6MDA6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7XG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXHRcdDEyOHVcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXHRcdDRcbiBcbitzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4rXHRzMzIgdGVtcF9tZGVnO1xuK1x0czMyIHZvbHRfbXY7XG4rfTtcbitcbiBzdHJ1Y3QgZmJuaWNfZGV2IHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkO1xuIFx0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgKzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcbiBcbiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbmluZGV4IDI4M2QyNWZhZTc5ZTcuLjZkY2EzODA3NmQ3YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuQEAgLTU3NSw2ICs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHtcbiBcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXG4gXHRcdFx0ICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSxcbiBcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgpLFxuIFx0RkJOSUNfVExWX0FUVFJfTEFTVFxuIH07XG4gXG5AQCAtNzAyLDYgKzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xuIFx0ZmJkLVx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XG4gXG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4gPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXggPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNjE4LDYgKzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksXG4rXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4rfTtcbitcbitzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbit7XG4rXHRib29sIHRoZXJtX2V4Y2VlZGVkLCB2b2x0X2V4Y2VlZGVkO1xuK1x0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xuK1x0czMyIHZhbHVlO1xuK1xuK1x0dGhlcm1fZXhjZWVkZWQgPVxuK1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XG4rXHR2b2x0X2V4Y2VlZGVkID1cbitcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7XG4rXG4rXHRpZiAoIXRoZXJtX2V4Y2VlZGVkIFx1MDAyNlx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XCJUaHJlc2hvbGQgZXhjZWVkZWQgbWVzc2FnZSB3aXRoIG5vIGZsYWcgc2V0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICh0aGVybV9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRpZiAodm9sdF9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuQEAgLTE2NDYsNiArMTcxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcbiBcdFx0XHQgZmJuaWNfdHNlbmVfcmVhZF9yZXNwX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxuK1x0RkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsXG4rXHRcdFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxuK1x0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxuIFx0XHRcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV9sb2dfcmVxKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiArNDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XG4gXHRjaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdO1xuIH07XG4gXG4rLyogU2VudGluZWwgZm9yIGEgc2Vuc29yIHZhbHVlIHRoZSBkcml2ZXIgZG9lcyBub3QgaGF2ZTogYSB0aHJlc2hvbGQgdGhlXG4rICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4rICogcmVmcmVzaGVkLlxuKyAqL1xuKyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4rXG4rc3RydWN0IGZibmljX3RocmVzaG9sZCB7XG4rXHRzMzIgbWluO1xuK1x0czMyIG1heDtcbitcdHMzMiBjcml0O1xuK307XG4rXG4gc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XG5AQCAtNjAsNiArNzMsOCBAQCBzdHJ1Y3QgZmJuaWNfZndfY2FwIHtcbiBcdHU4XHRsaW5rX3NwZWVkO1xuIFx0dThcdGxpbmtfZmVjO1xuIFx0dTMyXHRhbnRpX3JvbGxiYWNrX3ZlcnNpb247XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XG4gfTtcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xuIFx0RkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUFx0XHRcdD0gMHgzOSxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVFcdFx0XHQ9IDB4M0MsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFx0XHQ9IDB4M0QsXG4rXHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiArMjU4LDEyIEBAIGVudW0ge1xuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXHRcdFx0PSAweDExLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXHRcdD0gMHgxMixcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlx0XHQ9IDB4MTUsXG4rXHQvKiAweDE2IGFuZCAweDE3IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFx0XHRcdD0gMHgxOSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVFx0XHRcdD0gMHgxYSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcdFx0XHQ9IDB4MWMsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYXG4gfTtcbiBcbkBAIC0yNzUsNiArMjk3LDE0IEBAIGVudW0ge1xuIFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxuIH07XG4gXG4rZW51bSB7XG4rXHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXHQ9IDB4MCxcbitcdEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBR1x0PSAweDEsXG4rXHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4rXHRGQk5JQ19GV19UU0VORV9WT0xUQUdFXHRcdFx0PSAweDMsXG4rXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxuK307XG4rXG4gZW51bSB7XG4gXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1x0XHRcdD0gMHgwLFxuIFx0RkJOSUNfRldfT1dORVJTSElQX1RJTUVcdFx0XHQ9IDB4MSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgKzIsMTg0IEBAXG4gLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od21vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJmYm5pYy5oXCJcbiAjaW5jbHVkZSBcImZibmljX21hYy5oXCJcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuK3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbitcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4rXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbitcdHJldHVybiAwNDQ0O1xuK31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4re1xuK1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbitcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuK1x0aW50IGVyciA9IDA7XG4rXHRzMzIgKmNhY2hlZDtcbitcbitcdHN3aXRjaCAoaWQpIHtcbitcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4rXHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuK1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLVx1MDAzZWxhc3RfcmVhZCkpIHtcbitcdFx0KnZhbCA9ICpjYWNoZWQ7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuK1x0aWYgKCFmd19jbXBsKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIGV4aXRfZnJlZTtcbitcdH1cbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIGV4aXRfY2xlYW51cDtcbitcdH1cbitcbitcdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuK1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4rXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIGVycik7XG4rXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbitcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4rXHRjYWNoZS1cdTAwM2V2b2x0X212ID0gZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4rXHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuK1xuK1x0KnZhbCA9ICpjYWNoZWQ7XG4rZXhpdF9jbGVhbnVwOlxuK1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbitleGl0X2ZyZWU6XG4rXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbi1cdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4tXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXAgXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4tXHRpZiAodHlwZSA9PSBod21vbl9pbiBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl9pbl9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4rXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4rXHQqdmFsID0gdGhyO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuK3tcbitcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0c3dpdGNoIChhdHRyKSB7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl9pbl9taW46XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9tYXg6XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbitcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzd2l0Y2ggKGF0dHIpIHtcbitcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiBcdFx0XHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4tXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXHUwMDNlbWFjO1xuLVx0aW50IGlkO1xuIFxuLVx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XG4tXHRyZXR1cm4gaWQgXHUwMDNjIDAgPyBpZCA6IG1hYy1cdTAwM2VnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7XG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgaHdtb25fdGVtcDpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luOlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSxcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksXG4rXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbitcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbitcdFx0XHQgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuK1x0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxuK1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxuIFx0TlVMTFxuIH07XG4gXG5AQCAtNTcsMjUgKzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXG4gXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmYmQtXHUwMDNlaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwiZmJuaWNcIixcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbitcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbitcbitcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcImZibmljXCIsIGZiZCxcbitcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcXG5cIixcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuK1x0XHRcdCAgIGh3bW9uKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbitcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4rXHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbitcdC8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMXG4rXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuK1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuK1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4rXG4rXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4rfVxuK1xuK3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbit7XG4rXHRlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlO1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzMzIgYXR0ciA9IC0xO1xuK1xuK1x0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3dpdGNoIChpZCkge1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbitcdFx0dHlwZSA9IGh3bW9uX3RlbXA7XG4rXG4rXHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuK1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4rXHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heClcbitcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbitcdFx0dHlwZSA9IGh3bW9uX2luO1xuK1xuK1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbitcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuK1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4KVxuK1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4rXHQgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9yblxuK1x0ICogZG93bi5cbitcdCAqL1xuK1x0aHdtb24gPSBSRUFEX09OQ0UoZmJkLVx1MDAzZWh3bW9uKTtcbitcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4rXHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Li5mYmEyZTJlZmFlYjhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuQEAgLTg5OSw2MCArODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcbiBcdFx0XHQgICAgVE1JX1NUQVRfVFhfUEFDS0VUXzkyMTdfTUFYX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIGludCBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLFxuLVx0XHRcdFx0ICAgICBsb25nICp2YWwpXG4te1xuLVx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XG4tXHRpbnQgZXJyID0gMDtcbi1cdHMzMiAqc2Vuc29yO1xuLVxuLVx0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuLVx0aWYgKCFmd19jbXBsKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHN3aXRjaCAoaWQpIHtcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbi1cdFx0XHRcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxuXCIsXG4tXHRcdFx0ZXJyKTtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZmd19jbXBsLVx1MDAzZWRvbmUsIDEwICogSFopKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwiKTtcbi1cdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbi1cdGlmIChmd19jbXBsLVx1MDAzZXJlc3VsdCkge1xuLVx0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIiVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxcblwiLFxuLVx0XHRcdF9fZnVuY19fLCBlcnIpO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdCp2YWwgPSAqc2Vuc29yO1xuLWV4aXRfY2xlYW51cDpcbi1cdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4tZXhpdF9mcmVlOlxuLVx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLFxuIFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxuQEAgLTk2Niw3ICs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcbiBcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXG4gXHQubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsXG4tXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XG4gXG4gXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XG4tXG4tXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcbiB9O1xuIFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTQuMTU5NTE2NDc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUxNTEwNDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoaXMgTGludXggS2VybmVsIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gTGV0J3MgbGlzdCB0aGUgZmlsZXMgc3BlY2lmaWNhbGx5OiBgZmJuaWMuaGAsIGBmYm5pY19mdy5jYCwgYGZibmljX2Z3LmhgLCBgZmJuaWNfaHdtb24uY2AsIGBmYm5pY19tYWMuY2AsIGFuZCBgZmJuaWNfbWFjLmhgLlxuXG5Ob3csIEkgbmVlZCB0byBrZWVwIHRoZSBldmFsdWF0aW9uIGluc3RydWN0aW9ucyBpbiBtaW5kLiBUaGUgbWFpbiBvYmplY3RpdmUgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aHkgb2YgZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyBhYm91dCBjYXNlcyB3aGVyZSB3ZSAqc2hvdWxkbid0KiBjb25zaWRlciBpdCBmb3IgZnV6emluZzogdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgYXJlIGludm9rZWQgZHVyaW5nIGRldmljZSByZW1vdmFsLiBHb3QgaXQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBmYm5pY2AgaXMuIEFoYSwgaXQncyBNZXRhJ3MgTklDIGRyaXZlciwgdGhlaXIgY3VzdG9tIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgLyBBU0lDLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZSB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZywgYmVjYXVzZSBpZiBpdCdzIE1ldGEtc3BlY2lmaWMgYW5kIHJlcXVpcmVzIHRoZWlyIGhhcmR3YXJlLCB0aGF0IHJhaXNlcyBhIGZsYWcgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTcuNjc0NjIzNTc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjQ4OTUyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZCTklDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTkuMjk5NTI2MDUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODM3ODAwODM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBcImZibmljXCIgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIFwiZmJuaWNcIiB0aGluZy4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnYC4gVGhhdCB1c3VhbGx5IGhvbGRzIHRoZSBrZXkgZm9yIGRpc2NvdmVyaW5nIHdoYXQgdGhlIGhlY2sgYSBkcml2ZXIgZG9lcyBpbiB0aGUgYnVpbGQgc3lzdGVtLiBUaGVuLCBJJ2xsIGRyaWxsIGRvd24gZnVydGhlciBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggaXQuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGNsdWVzIGFyZSByZXZlYWxlZCwgc28gSSBjYW4gc3RhcnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MjcuNjc3NTM2NjY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ldGEgUGxhdGZvcm1zIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiTWV0YSBQbGF0Zm9ybXMgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGRlc2lnbmVkIGJ5IE1ldGEsIHNheSBZLlxcbiAgMTE6XFx0XFx0ICBUaGF0J3MgTWV0YSBhcyBpbiB0aGUgcGFyZW50IGNvbXBhbnkgb2YgRmFjZWJvb2suXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDE0OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTU6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IE1ldGEgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXFxuICAxNjpcXHRcXHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgTkVUX1ZFTkRPUl9NRVRBXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBGQk5JQ1xcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2VcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8IENPTVBJTEVfVEVTVFxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBNQVhfU0tCX0ZSQUdTIFxcdTAwM2MgMjJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgMjY6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjc6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAyODpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyOTpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAzMTpcXHRcXHRzZWxlY3QgUExETUZXXFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMzY6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxcbiAgMzc6XFx0XFxuICAzODpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfTUVUQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNTowMDoyNy42Nzc1OTQ0MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzM2OTI1MTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZmJuaWNgIERyaXZlcioqXG5cbkFscmlnaHQsIHNvIGBmYm5pY2AuIFRoYXQncyBNZXRhJ3MgY3VzdG9tIEFTSUMgUENJZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIGRyaXZlci4gTWFrZXMgc2Vuc2UuIEdpdmVuIHRoZSBcIlBDSWVcIiBpbiB0aGUgbmFtZSBhbmQgdGhlIEFTSUMgaW1wbGljYXRpb24sIEknbSBwcmV0dHkgY2VydGFpbiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwaWVjZSBvZiBoYXJkd2FyZSBkaXJlY3RseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbiwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdGhlIGRyaXZlcidzIGNvcmUgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB0eXBpY2FsIHN1c3BlY3RzLCBzcGVjaWZpY2FsbHkgZmlsZXMgbGlrZSBgZmJuaWNfcGNpLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgYnVpbHQgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCBQQ0kgaGFyZHdhcmUuIElmIGl0J3MgYSBQQ0kgZGV2aWNlIGRyaXZlciwgd2hpY2ggaXQgYWxtb3N0IGNlcnRhaW5seSBpcywgaXQnbGwgbmVlZCB0aGF0IHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbmNlIG9uIHRoZSBQQ0llIGJ1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA1OjAwOjQxLjA0Njg0ODAyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY5NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYm5pY19wY2lfdGJsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19pbmZvICpmYm5pY19pbmZvX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjMwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmYm5pY19wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zMS1cXHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBGQk5JQ19BU0lDLCBmYm5pY19ib2FyZF9hc2ljKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zNC19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MzU6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGZibmljX3BjaV90YmwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMzYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTIxND1zdGF0aWMgdm9pZCBmYm5pY19zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yNTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzoyNTE6ICogQGVudDogZW50cnkgaW4gZmJuaWNfcGNpX3RibFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMjUyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTYyNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZmJuaWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtNjI3LVxcdC5uYW1lXFx0XFx0PSBmYm5pY19kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjYyODpcXHQuaWRfdGFibGVcXHQ9IGZibmljX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MjktXFx0LnByb2JlXFx0XFx0PSBmYm5pY19wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6NDEuMDk0NTQ2NDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc1MzY0MzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZmJuaWNgIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgZmJuaWNgIGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkcml2ZXIgZm9yIE1ldGEncyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIEFTSUMuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGUgZ3VpZGVsaW5lcyBmbGFnIGEgcmVkIGxpZ2h0LiBUaGlzIGtpbmQgb2YgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBpcyBhIG5vLWdvIGZvciBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5UaGUgZ3VpZGVsaW5lIGlzIGNsZWFyOiBpZiBhIHBhdGNoIG9ubHkgdG91Y2hlcyBjb2RlIHRoYXQncyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMsIGxpa2UgdGhpcywgd2Ugc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFRoYXQgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIHN0dWZmIGxpa2UgdGhpcyBgZmJuaWNgIGRyaXZlci5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkuLi4gWWVwLCB0aGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9gLiBJIGNhbiBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgbGlzdGVkOiBgZmJuaWMuaGAsIGBmYm5pY19mdy5jYCwgYGZibmljX2Z3LmhgLCBgZmJuaWNfaHdtb24uY2AsIGBmYm5pY19tYWMuY2AsIGFuZCBgZmJuaWNfbWFjLmhgLiBBbGwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gdGhpcyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGZ1enppbmcgcG90ZW50aWFsIGlzIGVzc2VudGlhbGx5IHplcm8gaW4gYSBzdGFuZGFyZCB0ZXN0aW5nIGVudmlyb25tZW50LlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1MSwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNTowMDo0OC44NDgxOTIxMTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgZmJuaWMgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgbm90IHJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6NDguODQ4MjE2MTczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbzqpx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 04:04:15 +0000 UTC FinishedAt: 2026-09-01 05:00:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGZibmljIChNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2EyOThkYTY5ODA2NTIzMzNiMTU0NTk0MmU3ZGE0NThhZGQ5MmQxZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDU6MDA6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG5pbmRleCBkMDcxNTY5NWM0M2U3Li40YTQ5YzIwZTRhMDE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbkBAIC0yMiwxMSAmIzQzOzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcbiAjZGVmaW5lIEZCTklDX01BWF9OQVBJX1ZFQ1RPUlNcdFx0MTI4dVxuICNkZWZpbmUgRkJOSUNfTUJYX0NNUExfU0xPVFNcdFx0NFxuIFxuJiM0MztzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgbGFzdF9yZWFkO1xuJiM0MztcdHMzMiB0ZW1wX21kZWc7XG4mIzQzO1x0czMyIHZvbHRfbXY7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBmYm5pY19kZXYge1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiBcdHN0cnVjdCBkZW50cnkgKmRiZ19mYmQ7XG4gXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgJiM0MzsxOTIsNyBAQCB2b2lkIGZibmljX2Z3X2ZyZWVfbWJ4KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuJiM0Mzt2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpO1xuIFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiB2b2lkIGZibmljX21hY19mcmVlX2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5AQCAtNTc1LDYgJiM0Mzs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHtcbiBcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXG4gXHRcdFx0ICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSxcbiBcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTiksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU4pLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXG4gXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4gfTtcbiBcbkBAIC03MDIsNiAmIzQzOzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xuIFx0ZmJkLVx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XG4gXG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5dLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhdLFxuJiM0MztcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4mIzQzO1x0ZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQgPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTl0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4ID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWF0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTYxOCw2ICYjNDM7MTYzOSw1NyBAQCBmYm5pY19md19wYXJzZXJfdGVzdCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX0xBU1RcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbiYjNDM7e1xuJiM0MztcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XG4mIzQzO1x0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xuJiM0MztcdHMzMiB2YWx1ZTtcbiYjNDM7XG4mIzQzO1x0dGhlcm1fZXhjZWVkZWQgPVxuJiM0MztcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpO1xuJiM0MztcdHZvbHRfZXhjZWVkZWQgPVxuJiM0MztcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7XG4mIzQzO1xuJiM0MztcdGlmICghdGhlcm1fZXhjZWVkZWQgXHUwMDI2XHUwMDI2ICF2b2x0X2V4Y2VlZGVkKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1RocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGhlcm1fZXhjZWVkZWQpIHtcbiYjNDM7XHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7VGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7VGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1DXFxuXCYjMzQ7LCB2YWx1ZSk7XG4mIzQzO1x0XHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZvbHRfZXhjZWVkZWQpIHtcbiYjNDM7XHRcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9WT0xUQUdFXSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXFxuXCYjMzQ7LCB2YWx1ZSk7XG4mIzQzO1x0XHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsdWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuQEAgLTE2NDYsNiAmIzQzOzE3MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuIFx0RkJOSUNfVExWX1BBUlNFUihUU0VORV9SRUFEX1JFU1AsXG4gXHRcdFx0IGZibmljX3RzZW5lX3JlYWRfcmVzcF9pbmRleCxcbiBcdFx0XHQgZmJuaWNfZndfcGFyc2VfdHNlbmVfcmVhZF9yZXNwKSxcbiYjNDM7XHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcbiYjNDM7XHRcdFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxuJiM0MztcdFx0XHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxuIFx0RkJOSUNfVExWX1BBUlNFUihMT0dfTVNHX1JFUSxcbiBcdFx0XHQgZmJuaWNfZndfbG9nX3JlcV9pbmRleCxcbiBcdFx0XHQgZmJuaWNfZndfcGFyc2VfbG9nX3JlcSksXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG5pbmRleCBkODQ3MjNlNGNmYTM2Li44NzMwMWU2MDgyNTU1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiAmIzQzOzQ1LDE4IEBAIHN0cnVjdCBmYm5pY19md192ZXIge1xuIFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcbiB9O1xuIFxuJiM0MzsvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGVcbiYjNDM7ICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4mIzQzOyAqIHJlZnJlc2hlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHtcbiYjNDM7XHRzMzIgbWluO1xuJiM0MztcdHMzMiBtYXg7XG4mIzQzO1x0czMyIGNyaXQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0c3RydWN0IHtcbiBcdFx0c3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyO1xuQEAgLTYwLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAge1xuIFx0dThcdGxpbmtfc3BlZWQ7XG4gXHR1OFx0bGlua19mZWM7XG4gXHR1MzJcdGFudGlfcm9sbGJhY2tfdmVyc2lvbjtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4mIzQzO1x0c3RydWN0IGZibmljX3RocmVzaG9sZCB2b2x0O1xuIH07XG4gXG4gc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24ge1xuQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7XG4gXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXHRcdFx0PSAweDM5LFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUVx0XHRcdD0gMHgzQyxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQXHRcdD0gMHgzRCxcbiYjNDM7XHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiAmIzQzOzI1OCwxMiBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTlx0XHRcdD0gMHgxMSxcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUlx0XHQ9IDB4MTIsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT05cdFx0PSAweDE1LFxuJiM0MztcdC8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhcdFx0XHQ9IDB4MTksXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXHRcdFx0PSAweDFhLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuJiM0MztcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXHRcdFx0PSAweDFjLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxuIH07XG4gXG5AQCAtMjc1LDYgJiM0MzsyOTcsMTQgQEAgZW51bSB7XG4gXHRGQk5JQ19GV19UU0VORV9NU0dfTUFYXG4gfTtcbiBcbiYjNDM7ZW51bSB7XG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBR1x0PSAweDAsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXHQ9IDB4MSxcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVx0XHRcdD0gMHgzLFxuJiM0MztcdEZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RkJOSUNfRldfT1dORVJTSElQX0ZMQUdcdFx0XHQ9IDB4MCxcbiBcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXHRcdFx0PSAweDEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG5pbmRleCBkZWY4NTk4YWNlZWNmLi4zZjMzNTIyZmNmZDJiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbkBAIC0yLDQxICYjNDM7MiwxODQgQEBcbiAvKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h3bW9uLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7ZmJuaWMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ZibmljX21hYy5oXCYjMzQ7XG4gXG4tc3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfaWQoZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSlcbiYjNDM7c3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxuJiM0MztcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXApXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVEVNUDtcbi1cdGlmICh0eXBlID09IGh3bW9uX2luKVxuLVx0XHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XG4mIzQzO1x0cmV0dXJuIDA0NDQ7XG4mIzQzO31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XHRzMzIgKmNhY2hlZDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpZCkge1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4mIzQzO1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V0ZW1wX21kZWc7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuJiM0MztcdFx0Y2FjaGVkID0gXHUwMDI2Y2FjaGUtXHUwMDNldm9sdF9tdjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXHUwMDNlbGFzdF9yZWFkKSkge1xuJiM0MztcdFx0KnZhbCA9ICpjYWNoZWQ7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTtcbiYjNDM7XHRpZiAoIWZ3X2NtcGwpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVycik7XG4mIzQzO1x0XHRnb3RvIGV4aXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0ZXJyID0gLUVUSU1FRE9VVDtcbiYjNDM7XHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXG4mIzQzO1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4mIzQzO1x0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRfX2Z1bmNfXywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbiYjNDM7XHRjYWNoZS1cdTAwM2V0ZW1wX21kZWcgPSBmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xuJiM0MztcdGNhY2hlLVx1MDAzZXZvbHRfbXYgPSBmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcbiYjNDM7XHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuJiM0MztcbiYjNDM7XHQqdmFsID0gKmNhY2hlZDtcbiYjNDM7ZXhpdF9jbGVhbnVwOlxuJiM0MztcdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4mIzQzO2V4aXRfZnJlZTpcbiYjNDM7XHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxuLVx0XHRcdFx0ICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbi1cdFx0XHRcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXAgXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4tXHRpZiAodHlwZSA9PSBod21vbl9pbiBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl9pbl9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4mIzQzO1x0aWYgKHRociA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREFUQTtcbiBcbiYjNDM7XHQqdmFsID0gdGhyO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfYWxhcm0obG9uZyBhLCBsb25nIGIsIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl90ZW1wX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhdHRyKSB7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXg6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9taW5fYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluLCAqdmFsLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbjpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4OlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbl9hbGFybTpcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBmYm5pY19od21vbl9zZW5zb3JfcmVhZChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWwpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX2lucHV0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxuIFx0XHRcdCAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbClcbiB7XG4gXHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbi1cdGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgKm1hYyA9IGZiZC1cdTAwM2VtYWM7XG4tXHRpbnQgaWQ7XG4gXG4tXHRpZCA9IGZibmljX2h3bW9uX3NlbnNvcl9pZCh0eXBlKTtcbi1cdHJldHVybiBpZCBcdTAwM2MgMCA/IGlkIDogbWFjLVx1MDAzZWdldF9zZW5zb3IoZmJkLCBpZCwgdmFsKTtcbiYjNDM7XHRzd2l0Y2ggKHR5cGUpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXA6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX2luOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7XG5AQCAtNDUsOCAmIzQzOzE4OCwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7XG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoYW5uZWxfaW5mbyAqZmJuaWNfaHdtb25faW5mb1tdID0ge1xuLVx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxuLVx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLCBIV01PTl9JX0lOUFVUKSxcbiYjNDM7XHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9JTlBVVCB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcbiYjNDM7XHRIV01PTl9DSEFOTkVMX0lORk8oaW4sXG4mIzQzO1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuJiM0MztcdFx0XHQgICBIV01PTl9JX01JTiB8IEhXTU9OX0lfTUlOX0FMQVJNIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fSV9NQVggfCBIV01PTl9JX01BWF9BTEFSTSksXG4gXHROVUxMXG4gfTtcbiBcbkBAIC01NywyNSAmIzQzOzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikpXG4gXHRcdHJldHVybjtcbiBcbi1cdGZiZC1cdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVx1MDAzZWRldiwgXCYjMzQ7ZmJuaWNcJiMzNDssXG4tXHRcdFx0XHRcdFx0ICAgICBmYmQsIFx1MDAyNmZibmljX2NoaXBfaW5mbyxcbi1cdFx0XHRcdFx0XHQgICAgIE5VTEwpO1xuLVx0aWYgKElTX0VSUihmYmQtXHUwMDNlaHdtb24pKSB7XG4mIzQzO1x0LyogU2VlZCBjYWNoZSB3aXRoIHNlbnRpbmVsIHNvIHRoZSBmaXJzdCByZWFkIGFsd2F5cyByZWZyZXNoZXMuICovXG4mIzQzO1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuJiM0MztcdGZiZC1cdTAwM2Vod21vbl9jYWNoZS52b2x0X212ID0gRkJOSUNfU0VOU09SX05PX0RBVEE7XG4mIzQzO1xuJiM0MztcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcJiMzNDtmYm5pY1wmIzM0OywgZmJkLFxuJiM0MztcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuJiM0MztcdGlmIChJU19FUlIoaHdtb24pKSB7XG4gXHRcdGRldl9ub3RpY2UoZmJkLVx1MDAzZWRldixcbiBcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVnaXN0ZXIgaHdtb24gZGV2aWNlICVwZVxcblwmIzM0Oyxcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuJiM0MztcdFx0XHQgICBod21vbik7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoZmJkLVx1MDAzZWh3bW9uLCBod21vbik7XG4gfVxuIFxuIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4mIzQzO1x0aHdtb24gPSBmYmQtXHUwMDNlaHdtb247XG4mIzQzO1x0LyogUGFpciB3aXRoIFJFQURfT05DRSgpIGluIGZibmljX2h3bW9uX25vdGlmeV9ldmVudCgpLiBQdWJsaXNoIE5VTExcbiYjNDM7XHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuJiM0MztcdCAqIGNhbm5vdCBkZXJlZmVyZW5jZSB0aGUgaHdtb24gZGV2aWNlIGFmdGVyIHdlIHVucmVnaXN0ZXIgaXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuJiM0MztcdHN5bmNocm9uaXplX2lycShmYmQtXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xuJiM0MztcbiYjNDM7XHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbiYjNDM7e1xuJiM0MztcdGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGU7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1x0czMyIGF0dHIgPSAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpZCkge1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4mIzQzO1x0XHR0eXBlID0gaHdtb25fdGVtcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX2NyaXRfYWxhcm07XG4mIzQzO1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4KVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbiYjNDM7XHRcdHR5cGUgPSBod21vbl9pbjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX2luX21pbl9hbGFybTtcbiYjNDM7XHRcdGVsc2UgaWYgKHZhbCBcdTAwM2U9IGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXgpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4mIzQzO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBhaXIgd2l0aCBXUklURV9PTkNFKCkgaW4gZmJuaWNfaHdtb25fdW5yZWdpc3RlcigpLiBTa2lwIHRoZVxuJiM0MztcdCAqIG5vdGlmaWNhdGlvbiBpZiBod21vbiBmYWlsZWQgdG8gcmVnaXN0ZXIgb3IgaGFzIGFscmVhZHkgYmVlbiB0b3JuXG4mIzQzO1x0ICogZG93bi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRod21vbiA9IFJFQURfT05DRShmYmQtXHUwMDNlaHdtb24pO1xuJiM0MztcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4mIzQzO1x0XHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmNcbkBAIC04OTksNjAgJiM0Mzs4OTksNiBAQCBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHJlc2V0LFxuIFx0XHRcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXG4tXHRcdFx0XHQgICAgIGxvbmcgKnZhbClcbi17XG4tXHRzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDtcbi1cdGludCBlcnIgPSAwO1xuLVx0czMyICpzZW5zb3I7XG4tXG4tXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XG4tXHRpZiAoIWZ3X2NtcGwpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0c3dpdGNoIChpZCkge1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuLVx0XHRzZW5zb3IgPSBcdTAwMjZmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGV4aXRfZnJlZTtcbi1cdH1cbi1cbi1cdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuLVx0XHRcdFwmIzM0O0ZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdGVycik7XG4tXHRcdGdvdG8gZXhpdF9mcmVlO1xuLVx0fVxuLVxuLVx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZndfY21wbC1cdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCYjMzQ7KTtcbi1cdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbi1cdGlmIChmd19jbXBsLVx1MDAzZXJlc3VsdCkge1xuLVx0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXG5cJiMzNDssXG4tXHRcdFx0X19mdW5jX18sIGVycik7XG4tXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuLVx0fVxuLVxuLVx0KnZhbCA9ICpzZW5zb3I7XG4tZXhpdF9jbGVhbnVwOlxuLVx0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbi1leGl0X2ZyZWU6XG4tXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbi1cbi1cdHJldHVybiBlcnI7XG4tfVxuLVxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXG4gXHQuZ2V0X2xpbmsgPSBmYm5pY19tYWNfZ2V0X2xpbmssXG5AQCAtOTY2LDcgJiM0Mzs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcbiBcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXG4gXHQubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsXG4tXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCAmIzQzOzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMge1xuIFxuIFx0dm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcdHZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpO1xuLVxuLVx0aW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7XG4gfTtcbiBcbiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgZmJuaWMgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgbm90IHJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YTI5OGRhNjk4MDY1MjMzM2IxNTQ1OTQyZTdkYTQ1OGFkZDkyZDFmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMSAwNTowMDoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaAppbmRleCBkMDcxNTY5NWM0M2U3Li40YTQ5YzIwZTRhMDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCkBAIC0yMiwxMSAmIzQzOzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjsKICNkZWZpbmUgRkJOSUNfTUFYX05BUElfVkVDVE9SUwkJMTI4dQogI2RlZmluZSBGQk5JQ19NQlhfQ01QTF9TTE9UUwkJNAogCiYjNDM7c3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7CiYjNDM7CXMzMiB0ZW1wX21kZWc7CiYjNDM7CXMzMiB2b2x0X212OwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgZmJuaWNfZGV2IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwlzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7CiAJc3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjsKIAlzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKm90cF9yZXBvcnRlcjsKIApAQCAtMTg1LDYgJiM0MzsxOTIsNyBAQCB2b2lkIGZibmljX2Z3X2ZyZWVfbWJ4KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiAKIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIHZvaWQgZmJuaWNfaHdtb25fdW5yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwomIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCk7CiAKIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIHZvaWQgZmJuaWNfbWFjX2ZyZWVfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwpAQCAtNTc1LDYgJiM0Mzs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHsKIAlGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLAogCQkJICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSwKIAlGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksCiAJRkJOSUNfVExWX0FUVFJfTEFTVAogfTsKIApAQCAtNzAyLDYgJiM0Mzs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKIAkvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovCiAJZmJkLSZndDtmd19jYXAubmVlZF9ibWNfdGNhbV9yZWluaXQgPSB0cnVlOwogCiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluID0KJiM0MzsJCWZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudGVtcC5tYXggPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQgPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVF0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsJZmJkLSZndDtmd19jYXAudm9sdC5taW4gPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MTgsNiAmIzQzOzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpCiAJcmV0dXJuIGVycjsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7CiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksCiYjNDM7CUZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9MQVNUCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSwKJiM0MzsJCQkJCQkgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKJiM0Mzt7CiYjNDM7CWJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7CiYjNDM7CXN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTsKJiM0MzsJczMyIHZhbHVlOwomIzQzOwomIzQzOwl0aGVybV9leGNlZWRlZCA9CiYjNDM7CQlmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7CiYjNDM7CXZvbHRfZXhjZWVkZWQgPQomIzQzOwkJZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7CiYjNDM7CiYjNDM7CWlmICghdGhlcm1fZXhjZWVkZWQgJmFtcDsmYW1wOyAhdm9sdF9leGNlZWRlZCkgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkmIzM0O1RocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh0aGVybV9leGNlZWRlZCkgewomIzQzOwkJaWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7CiYjNDM7CQkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCXZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpOwomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcbiYjMzQ7LCB2YWx1ZSk7CiYjNDM7CQlmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsdWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2b2x0X2V4Y2VlZGVkKSB7CiYjNDM7CQlpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHsKJiM0MzsJCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJdmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVEFHRSk7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1ZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxuJiMzNDssIHZhbHVlKTsKJiM0MzsJCWZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRFU1QsIGZibmljX3Rsdl90ZXN0X2luZGV4LCBmYm5pY19md19wYXJzZXJfdGVzdCksCiAJRkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsCkBAIC0xNjQ2LDYgJiM0MzsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHsKIAlGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCwKIAkJCSBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsCiAJCQkgZmJuaWNfZndfcGFyc2VfdHNlbmVfcmVhZF9yZXNwKSwKJiM0MzsJRkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsCiYjNDM7CQkJIGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LAomIzQzOwkJCSBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksCiAJRkJOSUNfVExWX1BBUlNFUihMT0dfTVNHX1JFUSwKIAkJCSBmYm5pY19md19sb2dfcmVxX2luZGV4LAogCQkJIGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKQEAgLTYsNiAmIzQzOzYsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2V0aGVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiAKIHN0cnVjdCBmYm5pY19kZXY7CkBAIC00NCw2ICYjNDM7NDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7CiAJY2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTsKIH07CiAKJiM0MzsvKiBTZW50aW5lbCBmb3IgYSBzZW5zb3IgdmFsdWUgdGhlIGRyaXZlciBkb2VzIG5vdCBoYXZlOiBhIHRocmVzaG9sZCB0aGUKJiM0MzsgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXQKJiM0MzsgKiByZWZyZXNoZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQQkJCVMzMl9NSU4KJiM0MzsKJiM0MztzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHsKJiM0MzsJczMyIG1pbjsKJiM0MzsJczMyIG1heDsKJiM0MzsJczMyIGNyaXQ7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBmYm5pY19md19jYXAgewogCXN0cnVjdCB7CiAJCXN0cnVjdCBmYm5pY19md192ZXIgbWdtdCwgYm9vdGxvYWRlcjsKQEAgLTYwLDYgJiM0Mzs3Myw4IEBAIHN0cnVjdCBmYm5pY19md19jYXAgewogCXU4CWxpbmtfc3BlZWQ7CiAJdTgJbGlua19mZWM7CiAJdTMyCWFudGlfcm9sbGJhY2tfdmVyc2lvbjsKJiM0MzsJc3RydWN0IGZibmljX3RocmVzaG9sZCB0ZW1wOwomIzQzOwlzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7CiB9OwogCiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7CkBAIC0yMTIsNiAmIzQzOzIyNyw3IEBAIGVudW0gewogCUZCTklDX1RMVl9NU0dfSURfUVNGUF9SRUFEX1JFU1AJCQk9IDB4MzksCiAJRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFUQkJCT0gMHgzQywKIAlGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUAkJPSAweDNELAomIzQzOwlGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfU0VORF9MT0dTX1JFUQkJPSAweDQzLAogCUZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVEJCQk9IDB4NDQsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFU1AJCQk9IDB4NDUsCkBAIC0yNDIsNiAmIzQzOzI1OCwxMiBAQCBlbnVtIHsKIAlGQk5JQ19GV19DQVBfUkVTUF9VRUZJX1ZFUlNJT04JCQk9IDB4MTEsCiAJRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSCQk9IDB4MTIsCiAJRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OCQk9IDB4MTUsCiYjNDM7CS8qIDB4MTYgYW5kIDB4MTcgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOCQkJPSAweDE4LAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWAkJCT0gMHgxOSwKJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUCQkJPSAweDFhLAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTgkJCT0gMHgxYiwKJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgJCQk9IDB4MWMsCiAJRkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWAogfTsKIApAQCAtMjc1LDYgJiM0MzsyOTcsMTQgQEAgZW51bSB7CiAJRkJOSUNfRldfVFNFTkVfTVNHX01BWAogfTsKIAomIzQzO2VudW0gewomIzQzOwlGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHCT0gMHgwLAomIzQzOwlGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcJPSAweDEsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX1RIRVJNQUwJCQk9IDB4MiwKJiM0MzsJRkJOSUNfRldfVFNFTkVfVk9MVEFHRQkJCT0gMHgzLAomIzQzOwlGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLAomIzQzO307CiYjNDM7CiBlbnVtIHsKIAlGQk5JQ19GV19PV05FUlNISVBfRkxBRwkJCT0gMHgwLAogCUZCTklDX0ZXX09XTkVSU0hJUF9USU1FCQkJPSAweDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMKaW5kZXggZGVmODU5OGFjZWVjZi4uM2YzMzUyMmZjZmQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwpAQCAtMiw0MSAmIzQzOzIsMTg0IEBACiAvKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvaHdtb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvamlmZmllcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2ZibmljLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtmYm5pY19tYWMuaCYjMzQ7CiAKLXN0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX2lkKGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUpCiYjNDM7c3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLAomIzQzOwkJCQkgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAomIzQzOwkJCQkgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpCiB7Ci0JaWYgKHR5cGUgPT0gaHdtb25fdGVtcCkKLQkJcmV0dXJuIEZCTklDX1NFTlNPUl9URU1QOwotCWlmICh0eXBlID09IGh3bW9uX2luKQotCQlyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7CiYjNDM7CXJldHVybiAwNDQ0OwomIzQzO30KIAotCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gJmFtcDtmYmQtJmd0O2h3bW9uX2NhY2hlOwomIzQzOwlzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CXMzMiAqY2FjaGVkOwomIzQzOwomIzQzOwlzd2l0Y2ggKGlkKSB7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1RFTVA6CiYjNDM7CQljYWNoZWQgPSAmYW1wO2NhY2hlLSZndDt0ZW1wX21kZWc7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRToKJiM0MzsJCWNhY2hlZCA9ICZhbXA7Y2FjaGUtJmd0O3ZvbHRfbXY7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBICZhbXA7JmFtcDsKJiM0MzsJICAgIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhjYWNoZS0mZ3Q7bGFzdF9yZWFkKSkgewomIzQzOwkJKnZhbCA9ICpjYWNoZWQ7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7CiYjNDM7CWlmICghZndfY21wbCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwllcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsCiYjNDM7CQkJJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJZXJyKTsKJiM0MzsJCWdvdG8gZXhpdF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7ZndfY21wbC0mZ3Q7ZG9uZSwgMTAgKiBIWikpIHsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcbiYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FVElNRURPVVQ7CiYjNDM7CQlnb3RvIGV4aXRfY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi8KJiM0MzsJaWYgKGZ3X2NtcGwtJmd0O3Jlc3VsdCkgewomIzQzOwkJZXJyID0gZndfY21wbC0mZ3Q7cmVzdWx0OwomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCBlcnIpOwomIzQzOwkJZ290byBleGl0X2NsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi8KJiM0MzsJY2FjaGUtJmd0O3RlbXBfbWRlZyA9IGZ3X2NtcGwtJmd0O3UudHNlbmUubWlsbGlkZWdyZWVzOwomIzQzOwljYWNoZS0mZ3Q7dm9sdF9tdiA9IGZ3X2NtcGwtJmd0O3UudHNlbmUubWlsbGl2b2x0czsKJiM0MzsJY2FjaGUtJmd0O2xhc3RfcmVhZCA9IGppZmZpZXM7CiYjNDM7CiYjNDM7CSp2YWwgPSAqY2FjaGVkOwomIzQzO2V4aXRfY2xlYW51cDoKJiM0MzsJZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTsKJiM0MztleGl0X2ZyZWU6CiYjNDM7CWZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsCi0JCQkJICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKLQkJCQkgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpCiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKQogewotCWlmICh0eXBlID09IGh3bW9uX3RlbXAgJmFtcDsmYW1wOyBhdHRyID09IGh3bW9uX3RlbXBfaW5wdXQpCi0JCXJldHVybiAwNDQ0OwotCWlmICh0eXBlID09IGh3bW9uX2luICZhbXA7JmFtcDsgYXR0ciA9PSBod21vbl9pbl9pbnB1dCkKLQkJcmV0dXJuIDA0NDQ7CiYjNDM7CWlmICh0aHIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiAKJiM0MzsJKnZhbCA9IHRocjsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJaWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKJiM0MzsKJiM0MzsJKnZhbCA9IGEgJmd0Oz0gYjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWluOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWF4OgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWF4LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfY3JpdDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9pbnB1dDoKJiM0MzsJY2FzZSBod21vbl90ZW1wX21pbl9hbGFybToKJiM0MzsJY2FzZSBod21vbl90ZW1wX21heF9hbGFybToKJiM0MzsJY2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBmYm5pY19od21vbl9zZW5zb3JfcmVhZChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9pbnB1dDoKJiM0MzsJCXJldHVybiAwOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLSZndDtmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQsIHZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX2luX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25faW5fbWluOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWluLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luX21heDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbl9pbnB1dDoKJiM0MzsJY2FzZSBod21vbl9pbl9taW5fYWxhcm06CiYjNDM7CWNhc2UgaHdtb25faW5fbWF4X2FsYXJtOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXN3aXRjaCAoYXR0cikgewomIzQzOwljYXNlIGh3bW9uX2luX2lucHV0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgaHdtb25faW5fbWluX2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLSZndDtmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW5fbWF4X2FsYXJtOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLSZndDtmd19jYXAudm9sdC5tYXgsIHZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCiAJCQkgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpCiB7CiAJc3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JY29uc3Qgc3RydWN0IGZibmljX21hYyAqbWFjID0gZmJkLSZndDttYWM7Ci0JaW50IGlkOwogCi0JaWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7Ci0JcmV0dXJuIGlkICZsdDsgMCA/IGlkIDogbWFjLSZndDtnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIGh3bW9uX3RlbXA6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbjoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9pbl9yZWFkKGZiZCwgYXR0ciwgdmFsKTsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29wcyBmYm5pY19od21vbl9vcHMgPSB7CkBAIC00NSw4ICYjNDM7MTg4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpmYm5pY19od21vbl9pbmZvW10gPSB7Ci0JSFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLAotCUhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksCiYjNDM7CUhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLAomIzQzOwkJCSAgIEhXTU9OX1RfSU5QVVQgfAomIzQzOwkJCSAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfAomIzQzOwkJCSAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NQVhfQUxBUk0gfAomIzQzOwkJCSAgIEhXTU9OX1RfQ1JJVCB8IEhXTU9OX1RfQ1JJVF9BTEFSTSksCiYjNDM7CUhXTU9OX0NIQU5ORUxfSU5GTyhpbiwKJiM0MzsJCQkgICBIV01PTl9JX0lOUFVUIHwKJiM0MzsJCQkgICBIV01PTl9JX01JTiB8IEhXTU9OX0lfTUlOX0FMQVJNIHwKJiM0MzsJCQkgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUFYX0FMQVJNKSwKIAlOVUxMCiB9OwogCkBAIC01NywyNSAmIzQzOzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7CiAKIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsKIAlpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKQogCQlyZXR1cm47CiAKLQlmYmQtJmd0O2h3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtJmd0O2RldiwgJiMzNDtmYm5pYyYjMzQ7LAotCQkJCQkJICAgICBmYmQsICZhbXA7ZmJuaWNfY2hpcF9pbmZvLAotCQkJCQkJICAgICBOVUxMKTsKLQlpZiAoSVNfRVJSKGZiZC0mZ3Q7aHdtb24pKSB7CiYjNDM7CS8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqLwomIzQzOwlmYmQtJmd0O2h3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBOwomIzQzOwlmYmQtJmd0O2h3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTsKJiM0MzsKJiM0MzsJaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC0mZ3Q7ZGV2LCAmIzM0O2ZibmljJiMzNDssIGZiZCwKJiM0MzsJCQkJCQkmYW1wO2ZibmljX2NoaXBfaW5mbywgTlVMTCk7CiYjNDM7CWlmIChJU19FUlIoaHdtb24pKSB7CiAJCWRldl9ub3RpY2UoZmJkLSZndDtkZXYsCiAJCQkgICAmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXG4mIzM0OywKLQkJCSAgIGZiZC0mZ3Q7aHdtb24pOwotCQlmYmQtJmd0O2h3bW9uID0gTlVMTDsKJiM0MzsJCQkgICBod21vbik7CiYjNDM7CQlyZXR1cm47CiAJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKGZiZC0mZ3Q7aHdtb24sIGh3bW9uKTsKIH0KIAogdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCkKIHsKJiM0MzsJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CiAJaWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSB8fCAhZmJkLSZndDtod21vbikKIAkJcmV0dXJuOwogCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLSZndDtod21vbik7Ci0JZmJkLSZndDtod21vbiA9IE5VTEw7CiYjNDM7CWh3bW9uID0gZmJkLSZndDtod21vbjsKJiM0MzsJLyogUGFpciB3aXRoIFJFQURfT05DRSgpIGluIGZibmljX2h3bW9uX25vdGlmeV9ldmVudCgpLiBQdWJsaXNoIE5VTEwKJiM0MzsJICogYW5kIHdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRlcgbWFpbGJveCBJUlEgaGFuZGxlciB0byBmaW5pc2ggc28gaXQKJiM0MzsJICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UoZmJkLSZndDtod21vbiwgTlVMTCk7CiYjNDM7CXN5bmNocm9uaXplX2lycShmYmQtJmd0O2Z3X21zaXhfdmVjdG9yKTsKJiM0MzsKJiM0MzsJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpCiYjNDM7ewomIzQzOwllbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsJczMyIGF0dHIgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3dpdGNoIChpZCkgewomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9URU1QOgomIzQzOwkJdHlwZSA9IGh3bW9uX3RlbXA7CiYjNDM7CiYjNDM7CQlpZiAodmFsICZsdDs9IGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWluKQomIzQzOwkJCWF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTsKJiM0MzsJCWVsc2UgaWYgKHZhbCAmZ3Q7PSBmYmQtJmd0O2Z3X2NhcC50ZW1wLmNyaXQpCiYjNDM7CQkJYXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTsKJiM0MzsJCWVsc2UgaWYgKHZhbCAmZ3Q7PSBmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCkKJiM0MzsJCQlhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRToKJiM0MzsJCXR5cGUgPSBod21vbl9pbjsKJiM0MzsKJiM0MzsJCWlmICh2YWwgJmx0Oz0gZmJkLSZndDtmd19jYXAudm9sdC5taW4pCiYjNDM7CQkJYXR0ciA9IGh3bW9uX2luX21pbl9hbGFybTsKJiM0MzsJCWVsc2UgaWYgKHZhbCAmZ3Q7PSBmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCkKJiM0MzsJCQlhdHRyID0gaHdtb25faW5fbWF4X2FsYXJtOwomIzQzOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlCiYjNDM7CSAqIG5vdGlmaWNhdGlvbiBpZiBod21vbiBmYWlsZWQgdG8gcmVnaXN0ZXIgb3IgaGFzIGFscmVhZHkgYmVlbiB0b3JuCiYjNDM7CSAqIGRvd24uCiYjNDM7CSAqLwomIzQzOwlod21vbiA9IFJFQURfT05DRShmYmQtJmd0O2h3bW9uKTsKJiM0MzsJaWYgKGF0dHIgJmd0Oz0gMCAmYW1wOyZhbXA7IGh3bW9uKQomIzQzOwkJaHdtb25fbm90aWZ5X2V2ZW50KGh3bW9uLCB0eXBlLCBhdHRyLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jCmluZGV4IDUzYjdhOTM4YjRjMjcuLmZiYTJlMmVmYWViOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwpAQCAtODk5LDYwICYjNDM7ODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCwKIAkJCSAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpOwogfQogCi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsCi0JCQkJICAgICBsb25nICp2YWwpCi17Ci0Jc3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7Ci0JaW50IGVyciA9IDA7Ci0JczMyICpzZW5zb3I7Ci0KLQlmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7Ci0JaWYgKCFmd19jbXBsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN3aXRjaCAoaWQpIHsKLQljYXNlIEZCTklDX1NFTlNPUl9URU1QOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGlkZWdyZWVzOwotCQlicmVhazsKLQljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgotCQlzZW5zb3IgPSAmYW1wO2Z3X2NtcGwtJmd0O3UudHNlbmUubWlsbGl2b2x0czsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihmYmQtJmd0O2RldiwKLQkJCSYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcbiYjMzQ7LAotCQkJZXJyKTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtmd19jbXBsLSZndDtkb25lLCAxMCAqIEhaKSkgewotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXG4mIzM0Oyk7Ci0JCWVyciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gZXhpdF9jbGVhbnVwOwotCX0KLQotCS8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqLwotCWlmIChmd19jbXBsLSZndDtyZXN1bHQpIHsKLQkJZXJyID0gZndfY21wbC0mZ3Q7cmVzdWx0OwotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxuJiMzNDssCi0JCQlfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBleGl0X2NsZWFudXA7Ci0JfQotCi0JKnZhbCA9ICpzZW5zb3I7Ci1leGl0X2NsZWFudXA6Ci0JZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTsKLWV4aXRfZnJlZToKLQlmYm5pY19md19wdXRfY21wbChmd19jbXBsKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0gewogCS5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLAogCS5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluaywKQEAgLTk2Niw3ICYjNDM7OTEyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7CiAJLmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLAogCS5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsCiAJLmxpbmtfdXAgPSBmYm5pY19tYWNfbGlua191cF9hc2ljLAotCS5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYywKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oCkBAIC0xMzcsOCAmIzQzOzEzNyw2IEBAIHN0cnVjdCBmYm5pY19tYWMgewogCiAJdm9pZCAoKmxpbmtfZG93bikoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIAl2b2lkICgqbGlua191cCkoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTsKLQotCWludCAoKmdldF9zZW5zb3IpKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpOwogfTsKIAogaW50IGZibmljX21hY19pbml0KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTAxCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV2YWx1YXRpbmcgdGhpcyBMaW51eCBLZXJuZWwgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0b3VjaGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIGxpc3QgdGhlIGZpbGVzIHNwZWNpZmljYWxseTogYGZibmljLmhgLCBgZmJuaWNfZncuY2AsIGBmYm5pY19mdy5oYCwgYGZibmljX2h3bW9uLmNgLCBgZmJuaWNfbWFjLmNgLCBhbmQgYGZibmljX21hYy5oYC4KCk5vdywgSSBuZWVkIHRvIGtlZXAgdGhlIGV2YWx1YXRpb24gaW5zdHJ1Y3Rpb25zIGluIG1pbmQuIFRoZSBtYWluIG9iamVjdGl2ZSBoZXJlIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoeSBvZiBmdXp6aW5nLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIGFib3V0IGNhc2VzIHdoZXJlIHdlICpzaG91bGRuJiMzOTt0KiBjb25zaWRlciBpdCBmb3IgZnV6emluZzogdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgYXJlIGludm9rZWQgZHVyaW5nIGRldmljZSByZW1vdmFsLiBHb3QgaXQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgZmJuaWNgIGlzLiBBaGEsIGl0JiMzOTtzIE1ldGEmIzM5O3MgTklDIGRyaXZlciwgdGhlaXIgY3VzdG9tIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgLyBBU0lDLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcsIGJlY2F1c2UgaWYgaXQmIzM5O3MgTWV0YS1zcGVjaWZpYyBhbmQgcmVxdWlyZXMgdGhlaXIgaGFyZHdhcmUsIHRoYXQgcmFpc2VzIGEgZmxhZyBpbW1lZGlhdGVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRkJOSUMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTE4PWlmIE5FVF9WRU5ET1JfTUVUQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTIxLVx0dHJpc3RhdGUgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB5b3UgZGVzY3JpYmVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSAmIzM0O2ZibmljJiMzNDsgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyAmIzM0O2ZibmljJiMzNDsgdGhpbmcuIE15IGluaXRpYWwgYXBwcm9hY2ggd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMsIHN0YXJ0aW5nIHdpdGggYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIFRoYXQgdXN1YWxseSBob2xkcyB0aGUga2V5IGZvciBkaXNjb3ZlcmluZyB3aGF0IHRoZSBoZWNrIGEgZHJpdmVyIGRvZXMgaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlbiwgSSYjMzk7bGwgZHJpbGwgZG93biBmdXJ0aGVyIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIGl0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBhbmQgY2x1ZXMgYXJlIHJldmVhbGVkLCBzbyBJIGNhbiBzdGFydCB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE1ldGEgUGxhdGZvcm1zIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxuICAgNzpcdFx0Ym9vbCBcJiMzNDtNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXCYjMzQ7XG4gICA4Olx0XHRkZWZhdWx0IHlcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBkZXNpZ25lZCBieSBNZXRhLCBzYXkgWS5cbiAgMTE6XHRcdCAgVGhhdCYjMzk7cyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE0Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTU6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBNZXRhIGNhcmRzLiBJZiB5b3Ugc2F5IFksIHlvdSB3aWxsIGJlIGFza2VkIGZvclxuICAxNjpcdFx0ICB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4gIDE3Olx0XG4gIDE4Olx0aWYgTkVUX1ZFTkRPUl9NRVRBXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIEZCTklDXG4gIDIxOlx0XHR0cmlzdGF0ZSBcJiMzNDtNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8IENPTVBJTEVfVEVTVFxuICAyMzpcdFx0ZGVwZW5kcyBvbiAhUzM5MFxuICAyNDpcdFx0ZGVwZW5kcyBvbiBNQVhfU0tCX0ZSQUdTIFx1MDAzYyAyMlxuICAyNTpcdFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG4gIDI2Olx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG4gIDI3Olx0XHRzZWxlY3QgTkVUX0RFVkxJTktcbiAgMjg6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjk6XHRcdHNlbGVjdCBQQ1NfWFBDU1xuICAzMDpcdFx0c2VsZWN0IFBIWUxJTktcbiAgMzE6XHRcdHNlbGVjdCBQTERNRldcbiAgMzI6XHRcdGhlbHBcbiAgMzM6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cbiAgMzQ6XHRcbiAgMzU6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuICAzNjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuICAzNzpcdFxuICAzODpcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMDU6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBmYm5pY2AgRHJpdmVyKioKCkFscmlnaHQsIHNvIGBmYm5pY2AuIFRoYXQmIzM5O3MgTWV0YSYjMzk7cyBjdXN0b20gQVNJQyBQQ0llIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgZHJpdmVyLiBNYWtlcyBzZW5zZS4gR2l2ZW4gdGhlICYjMzQ7UENJZSYjMzQ7IGluIHRoZSBuYW1lIGFuZCB0aGUgQVNJQyBpbXBsaWNhdGlvbiwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcGllY2Ugb2YgaGFyZHdhcmUgZGlyZWN0bHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhpcyBzdXNwaWNpb24sIGFuZCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlIHRoZSBkcml2ZXImIzM5O3MgY29yZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB0eXBpY2FsIHN1c3BlY3RzLCBzcGVjaWZpY2FsbHkgZmlsZXMgbGlrZSBgZmJuaWNfcGNpLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgYnVpbHQgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCBQQ0kgaGFyZHdhcmUuIElmIGl0JiMzOTtzIGEgUENJIGRldmljZSBkcml2ZXIsIHdoaWNoIGl0IGFsbW9zdCBjZXJ0YWlubHkgaXMsIGl0JiMzOTtsbCBuZWVkIHRoYXQgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VuY2Ugb24gdGhlIFBDSWUgYnVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDA1OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX3BjaV90YmwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfaW5mbyAqZmJuaWNfaW5mb190YmxbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzozMDpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgZmJuaWNfcGNpX3RibFtdID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zMS1cdHsgUENJX0RFVklDRV9EQVRBKE1FVEEsIEZCTklDX0FTSUMsIGZibmljX2JvYXJkX2FzaWMpIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zNC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzozNTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZmJuaWNfcGNpX3RibCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTM2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjE0PXN0YXRpYyB2b2lkIGZibmljX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yNTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjI1MTogKiBAZW50OiBlbnRyeSBpbiBmYm5pY19wY2lfdGJsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI1Mi0gKlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9NjI2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBmYm5pY19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTYyNy1cdC5uYW1lXHRcdD0gZmJuaWNfZHJpdmVyX25hbWUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjYyODpcdC5pZF90YWJsZVx0PSBmYm5pY19wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MjktXHQucHJvYmVcdFx0PSBmYm5pY19wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ1MQoJCQkJCQkJb3V0cHV0OiA4NAoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZmJuaWNgIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBmYm5pY2AgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgTWV0YSYjMzk7cyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIEFTSUMuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGUgZ3VpZGVsaW5lcyBmbGFnIGEgcmVkIGxpZ2h0LiBUaGlzIGtpbmQgb2YgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBpcyBhIG5vLWdvIGZvciBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLgoKVGhlIGd1aWRlbGluZSBpcyBjbGVhcjogaWYgYSBwYXRjaCBvbmx5IHRvdWNoZXMgY29kZSB0aGF0JiMzOTtzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIHNldHVwcywgbGlrZSB0aGlzLCB3ZSBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gVGhhdCBpbmNsdWRlcyB2ZW5kb3Itc3BlY2lmaWMgc3R1ZmYgbGlrZSB0aGlzIGBmYm5pY2AgZHJpdmVyLgoKTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkuLi4gWWVwLCB0aGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9gLiBJIGNhbiBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgbGlzdGVkOiBgZmJuaWMuaGAsIGBmYm5pY19mdy5jYCwgYGZibmljX2Z3LmhgLCBgZmJuaWNfaHdtb24uY2AsIGBmYm5pY19tYWMuY2AsIGFuZCBgZmJuaWNfbWFjLmhgLiBBbGwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC4KClRoZXJlZm9yZSwgc2luY2UgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkIHRvIHRoaXMgdmVuZG9yLXNwZWNpZmljIGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUsIHRoZSBmdXp6aW5nIHBvdGVudGlhbCBpcyBlc3NlbnRpYWxseSB6ZXJvIGluIGEgc3RhbmRhcmQgdGVzdGluZyBlbnZpcm9ubWVudC4KClNvLCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIGZibmljIChNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlKSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgTklDIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgYXJlIG5vdCByZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAwNTowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTIuNTI1MDcyMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjMyMzE1NDU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTIuNTI1MTE1OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzM3Nzk4MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YTI5OGRhNjk4MDY1MjMzM2IxNTQ1OTQyZTdkYTQ1OGFkZDkyZDFmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDEgMDU6MDA6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXFxuaW5kZXggZDA3MTU2OTVjNDNlNy4uNGE0OWMyMGU0YTAxNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG5AQCAtMjIsMTEgKzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcXG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXFx0XFx0MTI4dVxcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXFx0XFx0NFxcbiBcXG4rc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XFxuK1xcdHMzMiB0ZW1wX21kZWc7XFxuK1xcdHMzMiB2b2x0X212O1xcbit9O1xcbitcXG4gc3RydWN0IGZibmljX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcXG4gXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XFxuIFxcbkBAIC0xODUsNiArMTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcXG4gXFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNTc1LDYgKzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xcbiBcXHRGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLFxcbiBcXHRcXHRcXHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxcbiBcXHRGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXFxuIFxcdEZCTklDX1RMVl9BVFRSX0xBU1RcXG4gfTtcXG4gXFxuQEAgLTcwMiw2ICs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcXG4gXFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xcbiBcXHRmYmQtXFx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XFxuIFxcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1heCA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWF0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQgPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWF4ID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTYxOCw2ICsxNjM5LDU3IEBAIGZibmljX2Z3X3BhcnNlcl90ZXN0KHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfTEFTVFxcbit9O1xcbitcXG4rc3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbit7XFxuK1xcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XFxuK1xcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTtcXG4rXFx0czMyIHZhbHVlO1xcbitcXG4rXFx0dGhlcm1fZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XFxuK1xcdHZvbHRfZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcXG4rXFxuK1xcdGlmICghdGhlcm1fZXhjZWVkZWQgXFx1MDAyNlxcdTAwMjYgIXZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIlRocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XFxuK1xcdFxcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcXFxcblxcXCIsIHZhbHVlKTtcXG4rXFx0XFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VdKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldiwgXFxcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcXFxuXFxcIiwgdmFsdWUpO1xcbitcXHRcXHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsdWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCxcXG5AQCAtMTY0Niw2ICsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihUU0VORV9SRUFEX1JFU1AsXFxuIFxcdFxcdFxcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXFxuIFxcdFxcdFxcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxcbitcXHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcXG4rXFx0XFx0XFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxcbitcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxcbiBcXHRcXHRcXHQgZmJuaWNfZndfbG9nX3JlcV9pbmRleCxcXG4gXFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5pbmRleCBkODQ3MjNlNGNmYTM2Li44NzMwMWU2MDgyNTU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZGV2O1xcbkBAIC00NCw2ICs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHtcXG4gXFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcXG4gfTtcXG4gXFxuKy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxcbisgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXRcXG4rICogcmVmcmVzaGVkLlxcbisgKi9cXG4rI2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQVxcdFxcdFxcdFMzMl9NSU5cXG4rXFxuK3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xcbitcXHRzMzIgbWluO1xcbitcXHRzMzIgbWF4O1xcbitcXHRzMzIgY3JpdDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBmYm5pY19md19jYXAge1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XFxuQEAgLTYwLDYgKzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XFxuIFxcdHU4XFx0bGlua19zcGVlZDtcXG4gXFx0dThcXHRsaW5rX2ZlYztcXG4gXFx0dTMyXFx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xcbitcXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XFxuK1xcdHN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHtcXG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXFx0XFx0XFx0PSAweDM5LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXFx0XFx0XFx0PSAweDNDLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFxcdFxcdD0gMHgzRCxcXG4rXFx0RkJOSUNfVExWX01TR19JRF9TRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AgPSAweDQwLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXFx0XFx0PSAweDQzLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVRXFx0XFx0XFx0PSAweDQ0LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFxcdFxcdFxcdD0gMHg0NSxcXG5AQCAtMjQyLDYgKzI1OCwxMiBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXFx0XFx0XFx0PSAweDExLFxcbiBcXHRGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFJcXHRcXHQ9IDB4MTIsXFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlxcdFxcdD0gMHgxNSxcXG4rXFx0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cXHRcXHRcXHQ9IDB4MTgsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXFx0XFx0XFx0PSAweDE5LFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcXHRcXHRcXHQ9IDB4MWEsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXFx0XFx0XFx0PSAweDFiLFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWFxcdFxcdFxcdD0gMHgxYyxcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxcbiB9O1xcbiBcXG5AQCAtMjc1LDYgKzI5NywxNCBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxcbiB9O1xcbiBcXG4rZW51bSB7XFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUdcXHQ9IDB4MCxcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXFx0PSAweDEsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNQUxcXHRcXHRcXHQ9IDB4MixcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVxcdFxcdFxcdD0gMHgzLFxcbitcXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9GTEFHXFx0XFx0XFx0PSAweDAsXFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXFx0XFx0XFx0PSAweDEsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuQEAgLTIsNDEgKzIsMTg0IEBAXFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHdtb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJmYm5pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZmJuaWNfbWFjLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxcbitzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XFxuK1xcdHJldHVybiAwNDQ0O1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXFx1MDAyNmZiZC1cXHUwMDNlaHdtb25fY2FjaGU7XFxuK1xcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0czMyICpjYWNoZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdGNhY2hlZCA9IFxcdTAwMjZjYWNoZS1cXHUwMDNldGVtcF9tZGVnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4rXFx0XFx0Y2FjaGVkID0gXFx1MDAyNmNhY2hlLVxcdTAwM2V2b2x0X212O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXFx1MDAzZWxhc3RfcmVhZCkpIHtcXG4rXFx0XFx0KnZhbCA9ICpjYWNoZWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuK1xcdGlmICghZndfY21wbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4rXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbitcXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cXG4rXFx0Y2FjaGUtXFx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbitcXHRjYWNoZS1cXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4rXFx0Y2FjaGUtXFx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XFxuK1xcbitcXHQqdmFsID0gKmNhY2hlZDtcXG4rZXhpdF9jbGVhbnVwOlxcbitcXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xcbitleGl0X2ZyZWU6XFxuK1xcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcXG4tXFx0XFx0cmV0dXJuIDA0NDQ7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25faW5faW5wdXQpXFxuLVxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIFxcbitcXHQqdmFsID0gdGhyO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuK3tcXG4rXFx0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0KnZhbCA9IGEgXFx1MDAzZT0gYjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25faW5fbWluOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5fbWF4OlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuK1xcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX2luX2lucHV0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXFx1MDAzZW1hYztcXG4tXFx0aW50IGlkO1xcbiBcXG4tXFx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XFxuLVxcdHJldHVybiBpZCBcXHUwMDNjIDAgPyBpZCA6IG1hYy1cXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBod21vbl90ZW1wOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl9pbjpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcXG4tXFx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxcbi1cXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxcbitcXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9JTlBVVCB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxcbitcXHRcXHRcXHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcXG4rXFx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxcbitcXHRcXHRcXHQgICBIV01PTl9JX0lOUFVUIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxcbiBcXHROVUxMXFxuIH07XFxuIFxcbkBAIC01NywyNSArMjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcXG4gXFxuIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xcbitcXG4gXFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZmJkLVxcdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVxcdTAwM2VkZXYsIFxcXCJmYm5pY1xcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmJkLCBcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbi1cXHRpZiAoSVNfRVJSKGZiZC1cXHUwMDNlaHdtb24pKSB7XFxuK1xcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcXG4rXFxuK1xcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXFx1MDAzZWRldiwgXFxcImZibmljXFxcIiwgZmJkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihod21vbikpIHtcXG4gXFx0XFx0ZGV2X25vdGljZShmYmQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICBmYmQtXFx1MDAzZWh3bW9uKTtcXG4tXFx0XFx0ZmJkLVxcdTAwM2Vod21vbiA9IE5VTEw7XFxuK1xcdFxcdFxcdCAgIGh3bW9uKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGZiZC1cXHUwMDNlaHdtb24sIGh3bW9uKTtcXG4gfVxcbiBcXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcXG4rXFxuIFxcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cXHUwMDNlaHdtb24pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC1cXHUwMDNlaHdtb24pO1xcbi1cXHRmYmQtXFx1MDAzZWh3bW9uID0gTlVMTDtcXG4rXFx0aHdtb24gPSBmYmQtXFx1MDAzZWh3bW9uO1xcbitcXHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxcbitcXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxcbitcXHQgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShmYmQtXFx1MDAzZWh3bW9uLCBOVUxMKTtcXG4rXFx0c3luY2hyb25pemVfaXJxKGZiZC1cXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xcbitcXG4rXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pO1xcbit9XFxuK1xcbit2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpXFxuK3tcXG4rXFx0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcXG4rXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHMzMiBhdHRyID0gLTE7XFxuK1xcbitcXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdHR5cGUgPSBod21vbl90ZW1wO1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDNjPSBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcXG4rXFx0XFx0XFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0KVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxcbitcXHRcXHR0eXBlID0gaHdtb25faW47XFxuK1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2M9IGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluKVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGVcXG4rXFx0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cXG4rXFx0ICogZG93bi5cXG4rXFx0ICovXFxuK1xcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cXHUwMDNlaHdtb24pO1xcbitcXHRpZiAoYXR0ciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGh3bW9uKVxcbitcXHRcXHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xcbkBAIC04OTksNjAgKzg5OSw2IEBAIGZibmljX21hY19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgcmVzZXQsXFxuIFxcdFxcdFxcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgbG9uZyAqdmFsKVxcbi17XFxuLVxcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbi1cXHRpbnQgZXJyID0gMDtcXG4tXFx0czMyICpzZW5zb3I7XFxuLVxcbi1cXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuLVxcdGlmICghZndfY21wbClcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRzd2l0Y2ggKGlkKSB7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4tXFx0fVxcbi1cXG4tXFx0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2ZyZWU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZmd19jbXBsLVxcdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXFxcblxcXCIpO1xcbi1cXHRcXHRlcnIgPSAtRVRJTUVET1VUO1xcbi1cXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXFxuLVxcdGlmIChmd19jbXBsLVxcdTAwM2VyZXN1bHQpIHtcXG4tXFx0XFx0ZXJyID0gZndfY21wbC1cXHUwMDNlcmVzdWx0O1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRfX2Z1bmNfXywgZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2NsZWFudXA7XFxuLVxcdH1cXG4tXFxuLVxcdCp2YWwgPSAqc2Vuc29yO1xcbi1leGl0X2NsZWFudXA6XFxuLVxcdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XFxuLWV4aXRfZnJlZTpcXG4tXFx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcXG4gXFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXFxuIFxcdC5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluayxcXG5AQCAtOTY2LDcgKzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsXFxuIFxcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXFxuIFxcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcXG4tXFx0LmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XFxuIFxcbiBcXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXHR2b2lkICgqbGlua191cCkoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcXG4tXFxuLVxcdGludCAoKmdldF9zZW5zb3IpKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpO1xcbiB9O1xcbiBcXG4gaW50IGZibmljX21hY19pbml0KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA1OjAwOjE0LjE1OTUxNTI1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ2ODg2OTkxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2EyOThkYTY5ODA2NTIzMzNiMTU0NTk0MmU3ZGE0NThhZGQ5MmQxZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMDU6MDA6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7XG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXHRcdDEyOHVcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXHRcdDRcbiBcbitzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4rXHRzMzIgdGVtcF9tZGVnO1xuK1x0czMyIHZvbHRfbXY7XG4rfTtcbitcbiBzdHJ1Y3QgZmJuaWNfZGV2IHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkO1xuIFx0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgKzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcbiBcbiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbmluZGV4IDI4M2QyNWZhZTc5ZTcuLjZkY2EzODA3NmQ3YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuQEAgLTU3NSw2ICs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHtcbiBcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXG4gXHRcdFx0ICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSxcbiBcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgpLFxuIFx0RkJOSUNfVExWX0FUVFJfTEFTVFxuIH07XG4gXG5AQCAtNzAyLDYgKzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xuIFx0ZmJkLVx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XG4gXG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4gPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXggPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNjE4LDYgKzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksXG4rXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4rfTtcbitcbitzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbit7XG4rXHRib29sIHRoZXJtX2V4Y2VlZGVkLCB2b2x0X2V4Y2VlZGVkO1xuK1x0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xuK1x0czMyIHZhbHVlO1xuK1xuK1x0dGhlcm1fZXhjZWVkZWQgPVxuK1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XG4rXHR2b2x0X2V4Y2VlZGVkID1cbitcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7XG4rXG4rXHRpZiAoIXRoZXJtX2V4Y2VlZGVkIFx1MDAyNlx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XCJUaHJlc2hvbGQgZXhjZWVkZWQgbWVzc2FnZSB3aXRoIG5vIGZsYWcgc2V0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICh0aGVybV9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRpZiAodm9sdF9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuQEAgLTE2NDYsNiArMTcxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcbiBcdFx0XHQgZmJuaWNfdHNlbmVfcmVhZF9yZXNwX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxuK1x0RkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsXG4rXHRcdFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxuK1x0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxuIFx0XHRcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV9sb2dfcmVxKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiArNDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XG4gXHRjaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdO1xuIH07XG4gXG4rLyogU2VudGluZWwgZm9yIGEgc2Vuc29yIHZhbHVlIHRoZSBkcml2ZXIgZG9lcyBub3QgaGF2ZTogYSB0aHJlc2hvbGQgdGhlXG4rICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4rICogcmVmcmVzaGVkLlxuKyAqL1xuKyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4rXG4rc3RydWN0IGZibmljX3RocmVzaG9sZCB7XG4rXHRzMzIgbWluO1xuK1x0czMyIG1heDtcbitcdHMzMiBjcml0O1xuK307XG4rXG4gc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XG5AQCAtNjAsNiArNzMsOCBAQCBzdHJ1Y3QgZmJuaWNfZndfY2FwIHtcbiBcdHU4XHRsaW5rX3NwZWVkO1xuIFx0dThcdGxpbmtfZmVjO1xuIFx0dTMyXHRhbnRpX3JvbGxiYWNrX3ZlcnNpb247XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XG4gfTtcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xuIFx0RkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUFx0XHRcdD0gMHgzOSxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVFcdFx0XHQ9IDB4M0MsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFx0XHQ9IDB4M0QsXG4rXHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiArMjU4LDEyIEBAIGVudW0ge1xuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXHRcdFx0PSAweDExLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXHRcdD0gMHgxMixcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlx0XHQ9IDB4MTUsXG4rXHQvKiAweDE2IGFuZCAweDE3IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFx0XHRcdD0gMHgxOSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVFx0XHRcdD0gMHgxYSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcdFx0XHQ9IDB4MWMsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYXG4gfTtcbiBcbkBAIC0yNzUsNiArMjk3LDE0IEBAIGVudW0ge1xuIFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxuIH07XG4gXG4rZW51bSB7XG4rXHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXHQ9IDB4MCxcbitcdEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBR1x0PSAweDEsXG4rXHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4rXHRGQk5JQ19GV19UU0VORV9WT0xUQUdFXHRcdFx0PSAweDMsXG4rXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxuK307XG4rXG4gZW51bSB7XG4gXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1x0XHRcdD0gMHgwLFxuIFx0RkJOSUNfRldfT1dORVJTSElQX1RJTUVcdFx0XHQ9IDB4MSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgKzIsMTg0IEBAXG4gLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od21vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJmYm5pYy5oXCJcbiAjaW5jbHVkZSBcImZibmljX21hYy5oXCJcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuK3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbitcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4rXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbitcdHJldHVybiAwNDQ0O1xuK31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4re1xuK1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbitcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuK1x0aW50IGVyciA9IDA7XG4rXHRzMzIgKmNhY2hlZDtcbitcbitcdHN3aXRjaCAoaWQpIHtcbitcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4rXHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuK1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLVx1MDAzZWxhc3RfcmVhZCkpIHtcbitcdFx0KnZhbCA9ICpjYWNoZWQ7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuK1x0aWYgKCFmd19jbXBsKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIGV4aXRfZnJlZTtcbitcdH1cbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIGV4aXRfY2xlYW51cDtcbitcdH1cbitcbitcdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuK1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4rXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIGVycik7XG4rXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbitcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4rXHRjYWNoZS1cdTAwM2V2b2x0X212ID0gZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4rXHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuK1xuK1x0KnZhbCA9ICpjYWNoZWQ7XG4rZXhpdF9jbGVhbnVwOlxuK1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbitleGl0X2ZyZWU6XG4rXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbi1cdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4tXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXAgXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4tXHRpZiAodHlwZSA9PSBod21vbl9pbiBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl9pbl9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4rXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4rXHQqdmFsID0gdGhyO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuK3tcbitcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0c3dpdGNoIChhdHRyKSB7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl9pbl9taW46XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9tYXg6XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbitcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzd2l0Y2ggKGF0dHIpIHtcbitcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiBcdFx0XHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4tXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXHUwMDNlbWFjO1xuLVx0aW50IGlkO1xuIFxuLVx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XG4tXHRyZXR1cm4gaWQgXHUwMDNjIDAgPyBpZCA6IG1hYy1cdTAwM2VnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7XG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgaHdtb25fdGVtcDpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luOlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSxcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksXG4rXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbitcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbitcdFx0XHQgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuK1x0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxuK1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxuIFx0TlVMTFxuIH07XG4gXG5AQCAtNTcsMjUgKzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXG4gXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmYmQtXHUwMDNlaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwiZmJuaWNcIixcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbitcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbitcbitcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcImZibmljXCIsIGZiZCxcbitcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcXG5cIixcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuK1x0XHRcdCAgIGh3bW9uKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbitcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4rXHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbitcdC8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMXG4rXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuK1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuK1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4rXG4rXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4rfVxuK1xuK3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbit7XG4rXHRlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlO1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzMzIgYXR0ciA9IC0xO1xuK1xuK1x0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3dpdGNoIChpZCkge1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbitcdFx0dHlwZSA9IGh3bW9uX3RlbXA7XG4rXG4rXHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuK1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4rXHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heClcbitcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbitcdFx0dHlwZSA9IGh3bW9uX2luO1xuK1xuK1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbitcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuK1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4KVxuK1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4rXHQgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9yblxuK1x0ICogZG93bi5cbitcdCAqL1xuK1x0aHdtb24gPSBSRUFEX09OQ0UoZmJkLVx1MDAzZWh3bW9uKTtcbitcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4rXHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Li5mYmEyZTJlZmFlYjhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuQEAgLTg5OSw2MCArODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcbiBcdFx0XHQgICAgVE1JX1NUQVRfVFhfUEFDS0VUXzkyMTdfTUFYX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIGludCBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLFxuLVx0XHRcdFx0ICAgICBsb25nICp2YWwpXG4te1xuLVx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XG4tXHRpbnQgZXJyID0gMDtcbi1cdHMzMiAqc2Vuc29yO1xuLVxuLVx0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuLVx0aWYgKCFmd19jbXBsKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHN3aXRjaCAoaWQpIHtcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbi1cdFx0XHRcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxuXCIsXG4tXHRcdFx0ZXJyKTtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZmd19jbXBsLVx1MDAzZWRvbmUsIDEwICogSFopKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwiKTtcbi1cdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbi1cdGlmIChmd19jbXBsLVx1MDAzZXJlc3VsdCkge1xuLVx0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIiVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxcblwiLFxuLVx0XHRcdF9fZnVuY19fLCBlcnIpO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdCp2YWwgPSAqc2Vuc29yO1xuLWV4aXRfY2xlYW51cDpcbi1cdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4tZXhpdF9mcmVlOlxuLVx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLFxuIFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxuQEAgLTk2Niw3ICs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcbiBcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXG4gXHQubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsXG4tXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XG4gXG4gXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XG4tXG4tXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcbiB9O1xuIFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTQuMTU5NTE2NDc0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUxNTEwNDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIHRoaXMgTGludXggS2VybmVsIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgc2VlIHdoYXQgd2UncmUgZGVhbGluZyB3aXRoLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2AgZGlyZWN0b3J5LiBUaGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gTGV0J3MgbGlzdCB0aGUgZmlsZXMgc3BlY2lmaWNhbGx5OiBgZmJuaWMuaGAsIGBmYm5pY19mdy5jYCwgYGZibmljX2Z3LmhgLCBgZmJuaWNfaHdtb24uY2AsIGBmYm5pY19tYWMuY2AsIGFuZCBgZmJuaWNfbWFjLmhgLlxuXG5Ob3csIEkgbmVlZCB0byBrZWVwIHRoZSBldmFsdWF0aW9uIGluc3RydWN0aW9ucyBpbiBtaW5kLiBUaGUgbWFpbiBvYmplY3RpdmUgaGVyZSBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBpcyB3b3J0aHkgb2YgZnV6emluZy4gVGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyBhYm91dCBjYXNlcyB3aGVyZSB3ZSAqc2hvdWxkbid0KiBjb25zaWRlciBpdCBmb3IgZnV6emluZzogdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCBkcml2ZXJzIHRoYXQgcmVseSBvbiBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgdGVhcmRvd24gY2FsbGJhY2tzIHRoYXQgYXJlIGludm9rZWQgZHVyaW5nIGRldmljZSByZW1vdmFsLiBHb3QgaXQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBmYm5pY2AgaXMuIEFoYSwgaXQncyBNZXRhJ3MgTklDIGRyaXZlciwgdGhlaXIgY3VzdG9tIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgLyBBU0lDLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZSB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZywgYmVjYXVzZSBpZiBpdCdzIE1ldGEtc3BlY2lmaWMgYW5kIHJlcXVpcmVzIHRoZWlyIGhhcmR3YXJlLCB0aGF0IHJhaXNlcyBhIGZsYWcgaW1tZWRpYXRlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTcuNjc0NjIzNTc3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjQ4OTUyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZCTklDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0xOD1pZiBORVRfVkVORE9SX01FVEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMTktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjIwOmNvbmZpZyBGQk5JQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yMS1cXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MTkuMjk5NTI2MDUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODM3ODAwODM0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBcImZibmljXCIgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzIFwiZmJuaWNcIiB0aGluZy4gTXkgaW5pdGlhbCBhcHByb2FjaCB3aWxsIGJlIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnYC4gVGhhdCB1c3VhbGx5IGhvbGRzIHRoZSBrZXkgZm9yIGRpc2NvdmVyaW5nIHdoYXQgdGhlIGhlY2sgYSBkcml2ZXIgZG9lcyBpbiB0aGUgYnVpbGQgc3lzdGVtLiBUaGVuLCBJJ2xsIGRyaWxsIGRvd24gZnVydGhlciBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvYCBkaXJlY3RvcnkgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggaXQuIExldCdzIHNlZSB3aGF0IGludGVyZXN0aW5nIHRpZGJpdHMgYW5kIGNsdWVzIGFyZSByZXZlYWxlZCwgc28gSSBjYW4gc3RhcnQgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTA0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6MjcuNjc3NTM2NjY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ldGEgUGxhdGZvcm1zIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIE5FVF9WRU5ET1JfTUVUQVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiTWV0YSBQbGF0Zm9ybXMgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGRlc2lnbmVkIGJ5IE1ldGEsIHNheSBZLlxcbiAgMTE6XFx0XFx0ICBUaGF0J3MgTWV0YSBhcyBpbiB0aGUgcGFyZW50IGNvbXBhbnkgb2YgRmFjZWJvb2suXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDE0OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTU6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IE1ldGEgY2FyZHMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXFxuICAxNjpcXHRcXHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0aWYgTkVUX1ZFTkRPUl9NRVRBXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBGQk5JQ1xcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2VcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIDY0QklUIHx8IENPTVBJTEVfVEVTVFxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiAhUzM5MFxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBNQVhfU0tCX0ZSQUdTIFxcdTAwM2MgMjJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gUENJX01TSVxcbiAgMjY6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAgMjc6XFx0XFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuICAyODpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyOTpcXHRcXHRzZWxlY3QgUENTX1hQQ1NcXG4gIDMwOlxcdFxcdHNlbGVjdCBQSFlMSU5LXFxuICAzMTpcXHRcXHRzZWxlY3QgUExETUZXXFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxcbiAgMzY6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxcbiAgMzc6XFx0XFxuICAzODpcXHRlbmRpZiAjIE5FVF9WRU5ET1JfTUVUQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNTowMDoyNy42Nzc1OTQ0MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzM2OTI1MTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIHRoZSBgZmJuaWNgIERyaXZlcioqXG5cbkFscmlnaHQsIHNvIGBmYm5pY2AuIFRoYXQncyBNZXRhJ3MgY3VzdG9tIEFTSUMgUENJZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIGRyaXZlci4gTWFrZXMgc2Vuc2UuIEdpdmVuIHRoZSBcIlBDSWVcIiBpbiB0aGUgbmFtZSBhbmQgdGhlIEFTSUMgaW1wbGljYXRpb24sIEknbSBwcmV0dHkgY2VydGFpbiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBwaWVjZSBvZiBoYXJkd2FyZSBkaXJlY3RseS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGlzIHN1c3BpY2lvbiwgYW5kIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdGhlIGRyaXZlcidzIGNvcmUgY29kZS4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSB0eXBpY2FsIHN1c3BlY3RzLCBzcGVjaWZpY2FsbHkgZmlsZXMgbGlrZSBgZmJuaWNfcGNpLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFybHkgbmFtZWQuIFRoYXQgc2hvdWxkIHF1aWNrbHkgcmV2ZWFsIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgYnVpbHQgdG8gaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCBQQ0kgaGFyZHdhcmUuIElmIGl0J3MgYSBQQ0kgZGV2aWNlIGRyaXZlciwgd2hpY2ggaXQgYWxtb3N0IGNlcnRhaW5seSBpcywgaXQnbGwgbmVlZCB0aGF0IHBoeXNpY2FsIGhhcmR3YXJlIHByZXNlbmNlIG9uIHRoZSBQQ0llIGJ1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDA1OjAwOjQxLjA0Njg0ODAyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY5NDY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYm5pY19wY2lfdGJsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19pbmZvICpmYm5pY19pbmZvX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjMwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmYm5pY19wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zMS1cXHR7IFBDSV9ERVZJQ0VfREFUQShNRVRBLCBGQk5JQ19BU0lDLCBmYm5pY19ib2FyZF9hc2ljKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0zNC19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MzU6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGZibmljX3BjaV90YmwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMzYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTIxND1zdGF0aWMgdm9pZCBmYm5pY19zZXJ2aWNlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yNTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzoyNTE6ICogQGVudDogZW50cnkgaW4gZmJuaWNfcGNpX3RibFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMjUyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTYyNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZmJuaWNfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtNjI3LVxcdC5uYW1lXFx0XFx0PSBmYm5pY19kcml2ZXJfbmFtZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjYyODpcXHQuaWRfdGFibGVcXHQ9IGZibmljX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MjktXFx0LnByb2JlXFx0XFx0PSBmYm5pY19wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6NDEuMDk0NTQ2NDQ4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzc1MzY0MzMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBgZmJuaWNgIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgZmJuaWNgIGRyaXZlciwgd2hpY2ggSSBrbm93IGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkcml2ZXIgZm9yIE1ldGEncyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlIEFTSUMuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGUgZ3VpZGVsaW5lcyBmbGFnIGEgcmVkIGxpZ2h0LiBUaGlzIGtpbmQgb2YgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCBpcyBhIG5vLWdvIGZvciBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlxuXG5UaGUgZ3VpZGVsaW5lIGlzIGNsZWFyOiBpZiBhIHBhdGNoIG9ubHkgdG91Y2hlcyBjb2RlIHRoYXQncyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBzZXR1cHMsIGxpa2UgdGhpcywgd2Ugc2V0IGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFRoYXQgaW5jbHVkZXMgdmVuZG9yLXNwZWNpZmljIHN0dWZmIGxpa2UgdGhpcyBgZmJuaWNgIGRyaXZlci5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkuLi4gWWVwLCB0aGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9gLiBJIGNhbiBzZWUgdGhlIG1vZGlmaWNhdGlvbnMgbGlzdGVkOiBgZmJuaWMuaGAsIGBmYm5pY19mdy5jYCwgYGZibmljX2Z3LmhgLCBgZmJuaWNfaHdtb24uY2AsIGBmYm5pY19tYWMuY2AsIGFuZCBgZmJuaWNfbWFjLmhgLiBBbGwgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LCBleGFjdGx5IHdoYXQgSSBleHBlY3RlZC5cblxuVGhlcmVmb3JlLCBzaW5jZSB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gdGhpcyB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLCB3aGljaCBJIGtub3cgaXMgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSwgdGhlIGZ1enppbmcgcG90ZW50aWFsIGlzIGVzc2VudGlhbGx5IHplcm8gaW4gYSBzdGFuZGFyZCB0ZXN0aW5nIGVudmlyb25tZW50LlxuXG5TbywgSSdtIGNvbmZpZGVudCBpbiB0aGUgYXNzZXNzbWVudC4gYEVuYWJsZUNvbmZpZ3NgIHNob3VsZCBiZSBlbXB0eSwgYEZvY3VzU3ltYm9sc2Agc2hvdWxkIGJlIGVtcHR5LCBhbmQgYFdvcnRoRnV6emluZ2AgaXMgdW5lcXVpdm9jYWxseSBgZmFsc2VgLiBUaW1lIHRvIGZpbmFsaXplIHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1MSwiT3V0cHV0VG9rZW5zIjo4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQwNTowMDo0OC44NDgxOTIxMTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgZmJuaWMgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBOSUMgZHJpdmVyIHJlcXVpcmluZyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBhcmUgbm90IHJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBmYm5pYyAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIE5JQyBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGFyZSBub3QgcmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMDU6MDA6NDguODQ4MjE2MTczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbzqpx[1] Phase: Running StartedAt: 2026-09-01 05:01:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbzqpx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-01 05:01:12 +0000 UTC FinishedAt: 2026-09-01 05:01:16 +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,}