Name: series-workflow76lvd Phase: Failed StartedAt: 2026-09-09 19:30:12 +0000 UTC FinishedAt: 2026-09-09 19:34:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76lvd[0] Phase: Succeeded StartedAt: 2026-09-09 19:30:12 +0000 UTC FinishedAt: 2026-09-09 19:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76lvd[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 19:30:12 +0000 UTC FinishedAt: 2026-09-09 19:34:49 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxOTQyMDNjOWVkZDg5NmQ0OWYyYzY3NzQ3M2QwNTZmNGIxMDcxMTgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxOTozNDowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggNjQ2MTllOWE3MDRkZC4uMjFhYzgwYmRkMDg0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC0xMCw4ICYjNDM7MTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbkBAIC00OTEsNiAmIzQzOzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdFx0XHRcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGJ1Zl9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkID0gcWRtYV9pZCAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksXG4mIzQzO1x0XHQgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSxcbiYjNDM7XHRcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgaWQgPSBxZG1hX2lkICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgJiM0MzsgMSksXG4mIzQzO1x0XHRcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4mIzQzO1x0aW50IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4mIzQzO1x0aW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFx1MDAyNnFkbWEtXHUwMDNlcV9yeFtpXTtcbiYjNDM7XHRcdHUzMiBzaXplO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcS1cdTAwM2VuZGVzYylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbiYjNDM7XHRcdHNpemUgPSBtaW5fdCh1MzIsIHNpemUsIEFJUk9IQV9NQVhfUlhfU0laRSk7XG4mIzQzO1x0XHRhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoZXRoLCBxZG1hX2lkLCBscm9fcXVldWVfaW5kZXgsIGksXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZSk7XG4mIzQzO1x0XHRscm9fcXVldWVfaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4ge1xuIFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcbkBAIC02MTYsNiAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxuIFx0XHRlLVx1MDAzZWRtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKSAmIzQzOyBvZmZzZXQ7XG4gXHRcdGUtXHUwMDNlZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuIFxuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVx1MDAzZWRtYV9sZW4pO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVx1MDAzZWRtYV9hZGRyKSk7XG5AQCAtNjU3LDEzICYjNDM7NzQyLDE0NiBAQCBhaXJvaGFfcWRtYV9nZXRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYylcbiBcdHJldHVybiBwb3J0LVx1MDAzZWRldnNbZF0gPyBwb3J0LVx1MDAzZWRldnNbZF0gOiBFUlJfUFRSKC1FTk9ERVYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHQgIHUzMiBtc2cxLCB1MzIgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHRoX29mZiwgdGNwX2Fja19zZXEsIGRhdGFfb2ZmLCBhZ2dfY291bnQgPSAxO1xuJiM0MztcdHUzMiBtc2cyID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMikpO1xuJiM0MztcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcS1cdTAwM2Vza2I7XG4mIzQzO1x0dTE2IHRjcF93aW4sIGwyX2xlbjtcbiYjNDM7XHRzdHJ1Y3QgdGNwaGRyICp0aDtcbiYjNDM7XHRib29sIGlwdjQsIGlwdjY7XG4mIzQzO1xuJiM0MztcdGlmIChhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpIHtcbiYjNDM7XHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4mIzQzO1x0XHRpZiAoYWdnX2NvdW50IFx1MDAzZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoYWdnX2NvdW50IFx1MDAzYz0gMSkpIC8qIG5vdCBMUk8gKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpcHY0ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNF9NQVNLLCBtc2cxKTtcbiYjNDM7XHRpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTtcbiYjNDM7XHRpZiAoIWlwdjQgXHUwMDI2XHUwMDI2ICFpcHY2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGwyX2xlbiA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTSywgbXNnMik7XG4mIzQzO1xuJiM0MztcdGlmIChpcHY0KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCwgX2lwaDtcbiYjNDM7XG4mIzQzO1x0XHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsMl9sZW4sIHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4mIzQzO1x0XHRpZiAoIWlwaClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2VpaGwgXHUwMDNjIDUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHRoX29mZiA9IGwyX2xlbiAmIzQzOyAoaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMik7XG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGwyX2xlbik7XG4mIzQzO1x0XHRpcGgtXHUwMDNldG90X2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIGwyX2xlbik7XG4mIzQzO1x0XHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuJiM0MztcdFx0aXBoLVx1MDAzZWNoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopaXBoLCBpcGgtXHUwMDNlaWhsKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1xuJiM0MztcdFx0dGhfb2ZmID0gbDJfbGVuICYjNDM7IHNpemVvZigqaXA2aCk7XG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGwyX2xlbik7XG4mIzQzO1x0XHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyICE9IE5FWFRIRFJfVENQKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpcDZoLVx1MDAzZXBheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGFfb2ZmID0gdGhfb2ZmICYjNDM7IHNpemVvZigqdGgpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjIGRhdGFfb2ZmKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGRhdGFfb2ZmKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHRoX29mZik7XG4mIzQzO1x0aWYgKHRoLVx1MDAzZWRvZmYgXHUwMDNjIDUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZGF0YV9vZmYgPSB0aF9vZmYgJiM0MzsgKHRoLVx1MDAzZWRvZmYgXHUwMDNjXHUwMDNjIDIpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjPSBkYXRhX29mZilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSyxcbiYjNDM7XHRcdFx0ICAgIGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzMpKSk7XG4mIzQzO1x0dGNwX2Fja19zZXEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2VkYXRhKSk7XG4mIzQzO1x0dGgtXHUwMDNlYWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTtcbiYjNDM7XHR0aC1cdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGNwIHRpbWVzdGFtcCBvcHRpb24gKi9cbiYjNDM7XHRpZiAodGgtXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgJiM0MzsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkgLyA0KSB7XG4mIzQzO1x0XHR1MzIgdG9wdDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGhfb2ZmKTtcbiYjNDM7XHRcdHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAodG9wdCA9PSAoKFRDUE9QVF9OT1AgXHUwMDNjXHUwMDNjIDI0KSB8IChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAxNikgfFxuJiM0MztcdFx0XHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFx1MDAzY1x1MDAzYyA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKSkge1xuJiM0MztcdFx0XHR1OCAqcHRyID0gKHU4ICopdGggJiM0Mzsgc2l6ZW9mKCp0aCkgJiM0MzsgMiAqIHNpemVvZihfX2JlMzIpO1xuJiM0MztcdFx0XHRfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIFRoZSBmaWVsZCBpcyBwcmUtemVyb2VkIGluIHRoZSBwb3N0ZWQgZGVzY3JpcHRvcixcbiYjNDM7XHRcdFx0ICogc28gYSBub24temVybyB2YWx1ZSBpcyB0aGUgaGFyZHdhcmUgY29uZmlybWluZyB0aGVcbiYjNDM7XHRcdFx0ICogdGltZXN0YW1wIGVjaG8gcmVwbHkgaXMgdmFsaWQuIExlYXZlIFRTZWNyXG4mIzQzO1x0XHRcdCAqIHVudG91Y2hlZCBvdGhlcndpc2UsIHNpbmNlIHRoZSBoYXJkd2FyZSBtYXkgbm90XG4mIzQzO1x0XHRcdCAqIHBvcHVsYXRlIGl0IGZvciBldmVyeSBhZ2dyZWdhdGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAodGNwX3RzX3JlcGx5KVxuJiM0MztcdFx0XHRcdHB1dF91bmFsaWduZWRfYmUzMihsZTMyX3RvX2NwdSh0Y3BfdHNfcmVwbHkpLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHIpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlwdjQpIHtcbiYjNDM7XHRcdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBsMl9sZW4pO1xuJiM0MztcbiYjNDM7XHRcdHRoLVx1MDAzZWNoZWNrID0gfnRjcF92NF9jaGVjayhsZW4gLSB0aF9vZmYsIGlwaC1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgaXBoLVx1MDAzZWRhZGRyLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbDJfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHR0aC1cdTAwM2VjaGVjayA9IH50Y3BfdjZfY2hlY2sobGVuIC0gdGhfb2ZmLCBcdTAwMjZpcDZoLVx1MDAzZXNhZGRyLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZpcDZoLVx1MDAzZWRhZGRyLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcbiYjNDM7XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgPSBpcHY0ID8gU0tCX0dTT19UQ1BWNCA6IFNLQl9HU09fVENQVjY7XG4mIzQzO1x0c2hpbmZvLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XG4mIzQzO1x0c2hpbmZvLVx1MDAzZWdzb19zaXplID0gRElWX1JPVU5EX1VQKGxlbiAtIGRhdGFfb2ZmLCBhZ2dfY291bnQpO1xuJiM0MztcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0aF9vZmY7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuJiM0MztcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcbiB7XG4gXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuLVx0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4tXHRpbnQgZG9uZSA9IDA7XG4mIzQzO1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxLVx1MDAzZXFkbWEtXHUwMDNlcV9yeFswXSwgZG9uZSA9IDA7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXHUwMDNlcWRtYS1cdTAwM2VldGg7XG4gXG4gXHR3aGlsZSAoZG9uZSBcdTAwM2MgYnVkZ2V0KSB7XG4gXHRcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSBcdTAwMjZxLVx1MDAzZWVudHJ5W3EtXHUwMDNldGFpbF07XG5AQCAtNjk2LDcgJiM0Mzs5MTQsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcbiBcdFx0aWYgKElTX0VSUihkZXYpKVxuIFx0XHRcdGdvdG8gZnJlZV9mcmFnO1xuIFxuJiM0MztcdFx0bXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzEpKTtcbiBcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcbiBcdFx0aWYgKCFxLVx1MDAzZXNrYikgeyAvKiBmaXJzdCBidWZmZXIgKi9cbiBcdFx0XHRxLVx1MDAzZXNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLFxuIFx0XHRcdFx0XHRcdHEtXHUwMDNlYnVmX3NpemUpO1xuQEAgLTcwNyw5ICYjNDM7OTI3LDE3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRcdF9fc2tiX3B1dChxLVx1MDAzZXNrYiwgbGVuKTtcbiBcdFx0XHRza2JfbWFya19mb3JfcmVjeWNsZShxLVx1MDAzZXNrYik7XG4gXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlZGV2ID0gbmV0ZGV2O1xuLVx0XHRcdHEtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS1cdTAwM2Vza2IsIG5ldGRldik7XG4gXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXHRcdFx0c2tiX3JlY29yZF9yeF9xdWV1ZShxLVx1MDAzZXNrYiwgcWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHEsIGRlc2MsIG1zZzEsIGxlbikpIHtcbiYjNDM7XHRcdFx0XHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhuZXRkZXYpO1xuJiM0MztcdFx0XHRcdGRldl9rZnJlZV9za2IocS1cdTAwM2Vza2IpO1xuJiM0MztcdFx0XHRcdHEtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVx1MDAzZXNrYiwgbmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHsgLyogc2NhdHRlcmVkIGZyYW1lICovXG4gXHRcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVx1MDAzZXNrYik7XG4gXHRcdFx0aW50IG5yX2ZyYWdzID0gc2hpbmZvLVx1MDAzZW5yX2ZyYWdzO1xuQEAgLTc0Miw3ICYjNDM7OTcwLDYgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZwb3J0LVx1MDAzZWRzYV9tZXRhW3NwdGFnXS1cdTAwM2Vkc3QpO1xuIFx0XHR9XG4gXG4tXHRcdG1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cxKSk7XG4gXHRcdGhhc2ggPSBGSUVMRF9HRVQoQUlST0hBX1JYRDRfRk9FX0VOVFJZLCBtc2cxKTtcbiBcdFx0aWYgKGhhc2ggIT0gQUlST0hBX1JYRDRfRk9FX0VOVFJZKVxuIFx0XHRcdHNrYl9zZXRfaGFzaChxLVx1MDAzZXNrYiwgamhhc2hfMXdvcmQoaGFzaCwgMCksXG5AQCAtODAwLDEyICYjNDM7MTAyNywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XG4gXHRcdC5wb29sX3NpemUgPSAyNTYsXG4gXHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuIFx0XHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcbi1cdFx0Lm1heF9sZW4gPSBQQUdFX1NJWkUsXG4gXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4gXHRcdC5kZXYgPSBxZG1hLVx1MDAzZWV0aC1cdTAwM2VkZXYsXG4gXHRcdC5uYXBpID0gXHUwMDI2cS1cdTAwM2VuYXBpLFxuQEAgLTgxMyw5ICYjNDM7MTAzOCwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiBcdGludCBxaWQgPSBxIC0gXHUwMDI2cWRtYS1cdTAwM2VxX3J4WzBdLCB0aHI7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4mIzQzO1x0bHJvX3EgPSBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSk7XG4gXG4gXHRxLVx1MDAzZWVudHJ5ID0gZGV2bV9remFsbG9jKGV0aC1cdTAwM2VkZXYsIG5kZXNjICogc2l6ZW9mKCpxLVx1MDAzZWVudHJ5KSxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuQEAgLTgyNyw2ICYjNDM7MTA1Myw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0aWYgKCFxLVx1MDAzZWRlc2MpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbiYjNDM7XHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgcHBfcGFyYW1zLm9yZGVyO1xuJiM0MztcbiBcdHEtXHUwMDNlcGFnZV9wb29sID0gcGFnZV9wb29sX2NyZWF0ZShcdTAwMjZwcF9wYXJhbXMpO1xuIFx0aWYgKElTX0VSUihxLVx1MDAzZXBhZ2VfcG9vbCkpIHtcbiBcdFx0aW50IGVyciA9IFBUUl9FUlIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuQEAgLTgzNSw2ICYjNDM7MTA2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdHEtXHUwMDNlYnVmX3NpemUgPSBscm9fcSA/IHBwX3BhcmFtcy5tYXhfbGVuIDogcHBfcGFyYW1zLm1heF9sZW4gLyAyO1xuIFx0cS1cdTAwM2VuZGVzYyA9IG5kZXNjO1xuIFx0bmV0aWZfbmFwaV9hZGQoZXRoLVx1MDAzZW5hcGlfZGV2LCBcdTAwMjZxLVx1MDAzZW5hcGksIGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbCk7XG4gXG5AQCAtODQ4LDcgJiM0MzsxMDc4LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7XG4gXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssXG4gXHRcdFx0RklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS1cdTAwM2VoZWFkKSk7XG4tXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksIFJYX1JJTkdfU0dfRU5fTUFTSyk7XG4mIzQzO1x0aWYgKGxyb19xKVxuJiM0MztcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXG4mIzQzO1x0XHRcdFx0ICBSWF9SSU5HX1NHX0VOX01BU0spO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9xZG1hX3NldChxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbiYjNDM7XHRcdFx0XHRSWF9SSU5HX1NHX0VOX01BU0spO1xuIFxuIFx0YWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTtcbiBcbkBAIC04NzAsNiAmIzQzOzExMDUsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VjdHJsLCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWFkZHIsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlZGF0YSwgMCk7XG5AQCAtMTg5Niw2ICYjNDM7MjEzMiwzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cG9ydC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBldGgtXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRpbnQgajtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUocG9ydC1cdTAwM2VkZXZzKTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtXHUwMDNlZGV2c1tqXTtcbiYjNDM7XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghaXRlcl9kZXYpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTtcbiYjNDM7XHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbkBAIC0xOTEzLDE0ICYjNDM7MjE3NywyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbiBcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IHFkbWFfaWQsIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogTFJPIGlzIGNvbmZpZ3VyZWQgb24gdGhlIFFETUEgYW5kIGl0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbFxuJiM0MztcdCAqIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24gdGhlXG4mIzQzO1x0ICogc2FtZSBRRE1BIGlmIExSTyBpcyBlbmFibGVkIG9uIGFueSBkZXZpY2Ugc2hhcmluZyBpdCBvciBpZlxuJiM0MztcdCAqIHRoaXMgZGV2aWNlIGhhcyBMUk8gZW5hYmxlZCBpbiBpdHMgZmVhdHVyZSBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0cWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZxZG1hLVx1MDAzZWV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLVx1MDAzZWV0aCwgcWRtYV9pZCkgfHxcbiYjNDM7XHRcdFx0XHQobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTykpKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwmIzM0O3JlcXVpcmVkIHRvIGRpc2FibGUgTFJPIG9uIFFETUElZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDYgJiM0MzsyMjE1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgJiM0MzsyMjM1LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTFJPKVxuJiM0MztcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMTE1LDExICYjNDM7MjQwMCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4gXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4mIzQzO1x0aWYgKGN1cl9xZG1hKSB7XG4gXHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuJiM0MztcdH1cbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuJiM0MztcdHFkbWEtXHUwMDNldXNlcnMmIzQzOyYjNDM7O1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCAmIzQzOzI0MjQsMTQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdFx0XHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiBcdH1cbiBcbi1cdGlmIChjdXJfcWRtYSlcbiYjNDM7XHRpZiAoY3VyX3FkbWEpIHtcbiYjNDM7XHRcdGN1cl9xZG1hLVx1MDAzZXVzZXJzLS07XG4gXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWlyb2hhX3VwZGF0ZV9uZXRkZXZfZmVhdHVyZXMoZGV2KTtcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIyODgsNiAmIzQzOzI1ODIsMzIgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiYjNDM7XHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSlcbiYjNDM7XHRcdGZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfTFJPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmVhdHVyZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG5AQCAtMzE5OSw3ICYjNDM7MzUxOSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4gXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbkBAIC0zMjE4LDYgJiM0MzszNTM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0XHQgICBcJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiBcdFx0fVxuIFx0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuQEAgLTMzNDMsNiAmIzQzOzM2NjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wXHRcdD0gYWlyb2hhX2Rldl9zdG9wLFxuIFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gYWlyb2hhX2Rldl9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zZWxlY3RfcXVldWVcdD0gYWlyb2hhX2Rldl9zZWxlY3RfcXVldWUsXG4mIzQzO1x0Lm5kb19maXhfZmVhdHVyZXNcdD0gYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMsXG4mIzQzO1x0Lm5kb19zZXRfZmVhdHVyZXNcdD0gYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBhaXJvaGFfZGV2X3htaXQsXG4gXHQubmRvX2dldF9zdGF0czY0ICAgICAgICA9IGFpcm9oYV9kZXZfZ2V0X3N0YXRzNjQsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBhaXJvaGFfZGV2X3NldF9tYWNhZGRyLFxuQEAgLTM0MzAsMTEgJiM0MzszNzUzLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YWlyb2hhX2V0aHRvb2xfb3BzO1xuIFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBBSVJPSEFfTUFYX01UVTtcbiBcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbi1cdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU082IHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8XG4tXHRcdFx0ICAgICAgTkVUSUZfRl9IV19UQztcbi1cdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG4tXHRuZXRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbiYjNDM7XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVMgfCBORVRJRl9GX0xSTztcbiYjNDM7XHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuJiM0MztcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuIFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtXHUwMDNlZGV2KTtcbiBcbiBcdC8qIHJlc2VydmUgaHcgcXVldWVzIGZvciBIVEIgb2ZmbG9hZGluZyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCA1MjdlMzgzM2UzNmIxLi4yODZmNzNlMmUxZTA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTQ2LDYgJiM0Mzs0NiwxOCBAQFxuIFx0IChfbikgPT0gMTUgPyAxMjggOlx0XHRcXFxuIFx0IChfbikgPT0gIDAgPyAxMDI0IDogMzIpXG4gXG4mIzQzOyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSXHRcdGdldF9vcmRlcihTWl8xNkspXG4mIzQzOyNkZWZpbmUgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFU1x0OFxuJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX0VOX01BU0tcdFx0R0VOTUFTSygzMSwgMjQpXG4mIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVFx0NjRcbiYjNDM7I2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUVcdDEwMFxuJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRVx0MjAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBSVJPSEFfSFdfRkVBVFVSRVNcdFx0XHRcXFxuJiM0MztcdChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8XHRcXFxuJiM0MztcdCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0lQVjZfQ1NVTSB8XHRcXFxuJiM0MztcdCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKVxuJiM0MztcbiAjZGVmaW5lIFBTRV9SU1ZfUEFHRVNcdFx0XHQxMjhcbiAjZGVmaW5lIFBTRV9RVUVVRV9SU1ZfUEFHRVNcdFx0NjRcbiBcbkBAIC01NjEsNiAmIzQzOzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuJiM0MztcdGludCB1c2VycztcbiYjNDM7XG4gXHRzdHJ1Y3QgYWlyb2hhX2lycV9iYW5rIGlycV9iYW5rc1tBSVJPSEFfTUFYX05VTV9JUlFfQkFOS1NdO1xuIFxuIFx0c3RydWN0IGFpcm9oYV90eF9pcnFfcXVldWUgcV90eF9pcnFbQUlST0hBX05VTV9UWF9JUlFdO1xuQEAgLTcxNSw2ICYjNDM7NzI5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4mIzQzO1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1xuJiM0MztcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbiYjNDM7XHRCVUlMRF9CVUdfT04oaHdlaWdodDMyKEFJUk9IQV9SWFFfTFJPX0VOX01BU0spIFx1MDAzZVxuJiM0MztcdFx0ICAgICBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICEhKEFJUk9IQV9SWFFfTFJPX0VOX01BU0sgXHUwMDI2IEJJVChxaWQpKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMDdkZDA0ODU5ZmRlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBAXG4gI2RlZmluZSBDRE1fQ1JTTl9RU0VMX1JFQVNPTl9NQVNLKF9uKVx0XFxcbiBcdEdFTk1BU0soNCAmIzQzOyAoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMyksXHQoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMykpXG4gXG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pIFx1MDAyNiAweDQpKVxuJiM0MzsjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICYjNDM7ICgoKF9uKSBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDgwKVxuJiM0MzsjZGVmaW5lIExST19SWFFfRU5fTUFTS1x0XHRcdEdFTk1BU0soNywgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pXHRcdChDRE1fQkFTRShfbikgJiM0MzsgMHg4NClcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0tcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODgpXG4mIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MztcbiAjZGVmaW5lIFJFR19HRE1fRldEX0NGRyhfbilcdFx0R0RNX0JBU0UoX24pXG4gI2RlZmluZSBHRE1fUEFEX0VOX01BU0tcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBHRE1fRFJPUF9DUkNfRVJSX01BU0tcdFx0QklUKDIzKVxuQEAgLTg4Nyw5ICYjNDM7OTAxLDE2IEBAXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLXHRHRU5NQVNLKDI1LCAyMSlcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0NSU05fTUFTS1x0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19QUEVfRU5UUllfTUFTS1x0R0VOTUFTSygxNSwgMClcbiYjNDM7LyogUlggTVNHMiAqL1xuJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLXHRHRU5NQVNLKDMxLCAyNClcbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTS1x0R0VOTUFTSyg2LCAwKVxuJiM0MzsvKiBSWCBNU0czICovXG4mIzQzOy8qIG1heCBhZ2dyZWdhdGVkIHNpemUgaW4gYnl0ZXMgKi9cbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19BR0dfTEVOX01BU0tcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1x0R0VOTUFTSygxNSwgMClcbiBcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XG4tXHRfX2xlMzIgcnN2O1xuJiM0MztcdF9fbGUzMiB0Y3BfdHNfcmVwbHk7XG4gXHRfX2xlMzIgY3RybDtcbiBcdF9fbGUzMiBhZGRyO1xuIFx0X19sZTMyIGRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxOTQyMDNjOWVkZDg5NmQ0OWYyYzY3NzQ3M2QwNTZmNGIxMDcxMTgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxOTozNDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCmluZGV4IDY0NjE5ZTlhNzA0ZGQuLjIxYWM4MGJkZDA4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtMTAsOCAmIzQzOzEwLDEwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdTY0X3N0YXRzX3N5bmMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0X21ldGFkYXRhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcDZfY2hlY2tzdW0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGFnZV9wb29sL2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9wcHBfZGVmcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Fpcm9oYV9yZWdzLmgmIzM0OwpAQCAtNDkxLDYgJiM0Mzs0OTMsODggQEAgc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2Nyc25fcXNlbF9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCiAJCQkJIENETV9DUlNOX1FTRUxfUTEpKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCwKJiM0MzsJCQkJICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLAomIzQzOwkJCQkgICAgIGludCBidWZfc2l6ZSkKJiM0Mzt7CiYjNDM7CWludCBpZCA9IHFkbWFfaWQgJiM0MzsgMTsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSwKJiM0MzsJCSAgICAgIENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLLAomIzQzOwkJICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19TSVpFX01BU0ssIGJ1Zl9zaXplKSB8CiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX05VTV9NQVNLLAomIzQzOwkJCQkgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVCkpOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLAomIzQzOwkJICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLAomIzQzOwkJICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssCiYjNDM7CQkJCSBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUUpIHwKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfVElNRV9NQVNLLAomIzQzOwkJCQkgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19USU1FKSk7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksCiYjNDM7CQkgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwKJiM0MzsJCSAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7CiYjNDM7CWFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIEJJVChscm9fcXVldWVfaW5kZXgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2ZlX2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkKQomIzQzO3sKJiM0MzsJaW50IGksIGlkID0gcWRtYV9pZCAmIzQzOyAxOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIExST19SWFFfRU5fTUFTSyk7CiYjNDM7CWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSwKJiM0MzsJCQlDRE1fTFJPX0FHR19OVU1fTUFTSyB8IENETV9MUk9fQUdHX1NJWkVfTUFTSyk7CiYjNDM7CWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0FHRV9USU1FKGlkKSwKJiM0MzsJCQlDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSYjNDM7JiM0MzspCiYjNDM7CQlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgJiM0MzsgMSksCiYjNDM7CQkJICAgICBMUk9fUlhRX0VOX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19lbmFibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS0mZ3Q7ZXRoOwomIzQzOwlpbnQgcWRtYV9pZCA9IHFkbWEgLSAmYW1wO2V0aC0mZ3Q7cWRtYVswXTsKJiM0MzsJaW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CWlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocWRtYS0mZ3Q7cV9yeCk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxID0gJmFtcDtxZG1hLSZndDtxX3J4W2ldOwomIzQzOwkJdTMyIHNpemU7CiYjNDM7CiYjNDM7CQlpZiAoIXEtJmd0O25kZXNjKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzaXplID0gU0tCX1dJVEhfT1ZFUkhFQUQoQUlST0hBX1JYX0xFTihxLSZndDtidWZfc2l6ZSkpOwomIzQzOwkJc2l6ZSA9IG1pbl90KHUzMiwgc2l6ZSwgQUlST0hBX01BWF9SWF9TSVpFKTsKJiM0MzsJCWFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShldGgsIHFkbWFfaWQsIGxyb19xdWV1ZV9pbmRleCwgaSwKJiM0MzsJCQkJCSBzaXplKTsKJiM0MzsJCWxyb19xdWV1ZV9pbmRleCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CWludCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwomIzQzOwlpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCiB7CiAJYWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTsKQEAgLTYxNiw2ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCWUtJmd0O2RtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKSAmIzQzOyBvZmZzZXQ7CiAJCWUtJmd0O2RtYV9sZW4gPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtJmd0O2J1Zl9zaXplKSk7CiAKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7dGNwX3RzX3JlcGx5LCAwKTsKIAkJdmFsID0gRklFTERfUFJFUChRRE1BX0RFU0NfTEVOX01BU0ssIGUtJmd0O2RtYV9sZW4pOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2N0cmwsIGNwdV90b19sZTMyKHZhbCkpOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2FkZHIsIGNwdV90b19sZTMyKGUtJmd0O2RtYV9hZGRyKSk7CkBAIC02NTcsMTMgJiM0Mzs3NDIsMTQ2IEBAIGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjKQogCXJldHVybiBwb3J0LSZndDtkZXZzW2RdID8gcG9ydC0mZ3Q7ZGV2c1tkXSA6IEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2xyb19yeF9za2Ioc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKJiM0MzsJCQkJICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYywKJiM0MzsJCQkJICB1MzIgbXNnMSwgdTMyIGxlbikKJiM0Mzt7CiYjNDM7CXUzMiB0aF9vZmYsIHRjcF9hY2tfc2VxLCBkYXRhX29mZiwgYWdnX2NvdW50ID0gMTsKJiM0MzsJdTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMikpOwomIzQzOwlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSBxLSZndDtza2I7CiYjNDM7CXUxNiB0Y3Bfd2luLCBsMl9sZW47CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRoOwomIzQzOwlib29sIGlwdjQsIGlwdjY7CiYjNDM7CiYjNDM7CWlmIChhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpIHsKJiM0MzsJCWFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7CiYjNDM7CQlpZiAoYWdnX2NvdW50ICZndDsgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGlrZWx5KGFnZ19jb3VudCAmbHQ7PSAxKSkgLyogbm90IExSTyAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlwdjQgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA0X01BU0ssIG1zZzEpOwomIzQzOwlpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTsKJiM0MzsJaWYgKCFpcHY0ICZhbXA7JmFtcDsgIWlwdjYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTsKJiM0MzsKJiM0MzsJaWYgKGlwdjQpIHsKJiM0MzsJCXN0cnVjdCBpcGhkciAqaXBoLCBfaXBoOwomIzQzOwomIzQzOwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbDJfbGVuLCBzaXplb2YoKmlwaCksICZhbXA7X2lwaCk7CiYjNDM7CQlpZiAoIWlwaCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChpcGgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKGlwaC0mZ3Q7aWhsICZsdDsgNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCXRoX29mZiA9IGwyX2xlbiAmIzQzOyAoaXBoLSZndDtpaGwgJmx0OyZsdDsgMik7CiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgbDJfbGVuKTsKJiM0MzsJCWlwaC0mZ3Q7dG90X2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIGwyX2xlbik7CiYjNDM7CQlpcGgtJmd0O2NoZWNrID0gMDsKJiM0MzsJCWlwaC0mZ3Q7Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC0mZ3Q7aWhsKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyICppcDZoOwomIzQzOwomIzQzOwkJdGhfb2ZmID0gbDJfbGVuICYjNDM7IHNpemVvZigqaXA2aCk7CiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgbDJfbGVuKTsKJiM0MzsJCWlmIChpcDZoLSZndDtuZXh0aGRyICE9IE5FWFRIRFJfVENQKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaXA2aC0mZ3Q7cGF5bG9hZF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSB0aF9vZmYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhdGFfb2ZmID0gdGhfb2ZmICYjNDM7IHNpemVvZigqdGgpOwomIzQzOwlpZiAobGVuICZsdDsgZGF0YV9vZmYpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgZGF0YV9vZmYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHRoX29mZik7CiYjNDM7CWlmICh0aC0mZ3Q7ZG9mZiAmbHQ7IDUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZGF0YV9vZmYgPSB0aF9vZmYgJiM0MzsgKHRoLSZndDtkb2ZmICZsdDsmbHQ7IDIpOwomIzQzOwlpZiAobGVuICZsdDs9IGRhdGFfb2ZmKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRjcF93aW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLLAomIzQzOwkJCSAgICBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMykpKTsKJiM0MzsJdGNwX2Fja19zZXEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7ZGF0YSkpOwomIzQzOwl0aC0mZ3Q7YWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTsKJiM0MzsJdGgtJmd0O3dpbmRvdyA9IGNwdV90b19iZTE2KHRjcF93aW4pOwomIzQzOwomIzQzOwkvKiBDaGVjayB0Y3AgdGltZXN0YW1wIG9wdGlvbiAqLwomIzQzOwlpZiAodGgtJmd0O2RvZmYgPT0gKHNpemVvZigqdGgpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkgewomIzQzOwkJdTMyIHRvcHQ7CiYjNDM7CiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyB0aF9vZmYpOwomIzQzOwkJdG9wdCA9IGdldF91bmFsaWduZWRfYmUzMih0aCAmIzQzOyAxKTsKJiM0MzsJCWlmICh0b3B0ID09ICgoVENQT1BUX05PUCAmbHQ7Jmx0OyAyNCkgfCAoVENQT1BUX05PUCAmbHQ7Jmx0OyAxNikgfAomIzQzOwkJCSAgICAgKFRDUE9QVF9USU1FU1RBTVAgJmx0OyZsdDsgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCkpIHsKJiM0MzsJCQl1OCAqcHRyID0gKHU4ICopdGggJiM0Mzsgc2l6ZW9mKCp0aCkgJiM0MzsgMiAqIHNpemVvZihfX2JlMzIpOwomIzQzOwkJCV9fbGUzMiB0Y3BfdHNfcmVwbHkgPSBSRUFEX09OQ0UoZGVzYy0mZ3Q7dGNwX3RzX3JlcGx5KTsKJiM0MzsKJiM0MzsJCQkvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsCiYjNDM7CQkJICogc28gYSBub24temVybyB2YWx1ZSBpcyB0aGUgaGFyZHdhcmUgY29uZmlybWluZyB0aGUKJiM0MzsJCQkgKiB0aW1lc3RhbXAgZWNobyByZXBseSBpcyB2YWxpZC4gTGVhdmUgVFNlY3IKJiM0MzsJCQkgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdAomIzQzOwkJCSAqIHBvcHVsYXRlIGl0IGZvciBldmVyeSBhZ2dyZWdhdGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHRjcF90c19yZXBseSkKJiM0MzsJCQkJcHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksCiYjNDM7CQkJCQkJICAgcHRyKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXB2NCkgewomIzQzOwkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBsMl9sZW4pOwomIzQzOwomIzQzOwkJdGgtJmd0O2NoZWNrID0gfnRjcF92NF9jaGVjayhsZW4gLSB0aF9vZmYsIGlwaC0mZ3Q7c2FkZHIsCiYjNDM7CQkJCQkgIGlwaC0mZ3Q7ZGFkZHIsIDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGwyX2xlbik7CiYjNDM7CiYjNDM7CQl0aC0mZ3Q7Y2hlY2sgPSB+dGNwX3Y2X2NoZWNrKGxlbiAtIHRoX29mZiwgJmFtcDtpcDZoLSZndDtzYWRkciwKJiM0MzsJCQkJCSAgJmFtcDtpcDZoLSZndDtkYWRkciwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOwomIzQzOwlzaGluZm8tJmd0O2dzb190eXBlID0gaXB2NCA/IFNLQl9HU09fVENQVjQgOiBTS0JfR1NPX1RDUFY2OwomIzQzOwlzaGluZm8tJmd0O2dzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7CiYjNDM7CXNoaW5mby0mZ3Q7Z3NvX3NpemUgPSBESVZfUk9VTkRfVVAobGVuIC0gZGF0YV9vZmYsIGFnZ19jb3VudCk7CiYjNDM7CXNoaW5mby0mZ3Q7Z3NvX3NlZ3MgPSBhZ2dfY291bnQ7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICYjNDM7IHRoX29mZjsKJiM0MzsJc2tiLSZndDtjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldCkKIHsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS0mZ3Q7cGFnZV9wb29sKTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLSZndDtxZG1hOwotCXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7Ci0JaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF07Ci0JaW50IGRvbmUgPSAwOwomIzQzOwlpbnQgcWlkID0gcSAtICZhbXA7cS0mZ3Q7cWRtYS0mZ3Q7cV9yeFswXSwgZG9uZSA9IDA7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxLSZndDtxZG1hLSZndDtldGg7CiAKIAl3aGlsZSAoZG9uZSAmbHQ7IGJ1ZGdldCkgewogCQlzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplID0gJmFtcDtxLSZndDtlbnRyeVtxLSZndDt0YWlsXTsKQEAgLTY5Niw3ICYjNDM7OTE0LDkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpCiAJCWlmIChJU19FUlIoZGV2KSkKIAkJCWdvdG8gZnJlZV9mcmFnOwogCiYjNDM7CQltc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtJmd0O21zZzEpKTsKIAkJbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwomIzQzOwogCQlpZiAoIXEtJmd0O3NrYikgeyAvKiBmaXJzdCBidWZmZXIgKi8KIAkJCXEtJmd0O3NrYiA9IG5hcGlfYnVpbGRfc2tiKGUtJmd0O2J1ZiAtIEFJUk9IQV9SWF9IRUFEUk9PTSwKIAkJCQkJCXEtJmd0O2J1Zl9zaXplKTsKQEAgLTcwNyw5ICYjNDM7OTI3LDE3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KQogCQkJX19za2JfcHV0KHEtJmd0O3NrYiwgbGVuKTsKIAkJCXNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHEtJmd0O3NrYik7CiAJCQlxLSZndDtza2ItJmd0O2RldiA9IG5ldGRldjsKLQkJCXEtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLSZndDtza2IsIG5ldGRldik7CiAJCQlxLSZndDtza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJc2tiX3JlY29yZF9yeF9xdWV1ZShxLSZndDtza2IsIHFpZCk7CiYjNDM7CiYjNDM7CQkJaWYgKGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgbXNnMSwgbGVuKSkgewomIzQzOwkJCQlkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhuZXRkZXYpOwomIzQzOwkJCQlkZXZfa2ZyZWVfc2tiKHEtJmd0O3NrYik7CiYjNDM7CQkJCXEtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlxLSZndDtza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS0mZ3Q7c2tiLCBuZXRkZXYpOwogCQl9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi8KIAkJCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8ocS0mZ3Q7c2tiKTsKIAkJCWludCBucl9mcmFncyA9IHNoaW5mby0mZ3Q7bnJfZnJhZ3M7CkBAIC03NDIsNyAmIzQzOzk3MCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KQogCQkJCQkJICAmYW1wO3BvcnQtJmd0O2RzYV9tZXRhW3NwdGFnXS0mZ3Q7ZHN0KTsKIAkJfQogCi0JCW1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMSkpOwogCQloYXNoID0gRklFTERfR0VUKEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSwgbXNnMSk7CiAJCWlmIChoYXNoICE9IEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSkKIAkJCXNrYl9zZXRfaGFzaChxLSZndDtza2IsIGpoYXNoXzF3b3JkKGhhc2gsIDApLApAQCAtODAwLDEyICYjNDM7MTAyNywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKIAkJCQkgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKQogewotCWNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHsKLQkJLm9yZGVyID0gMCwKJiM0MzsJc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewogCQkucG9vbF9zaXplID0gMjU2LAogCQkuZmxhZ3MgPSBQUF9GTEFHX0RNQV9NQVAgfCBQUF9GTEFHX0RNQV9TWU5DX0RFViwKIAkJLmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0UsCi0JCS5tYXhfbGVuID0gUEFHRV9TSVpFLAogCQkubmlkID0gTlVNQV9OT19OT0RFLAogCQkuZGV2ID0gcWRtYS0mZ3Q7ZXRoLSZndDtkZXYsCiAJCS5uYXBpID0gJmFtcDtxLSZndDtuYXBpLApAQCAtODEzLDkgJiM0MzsxMDM4LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiAJaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF0sIHRocjsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwlib29sIGxyb19xOwogCi0JcS0mZ3Q7YnVmX3NpemUgPSBQQUdFX1NJWkUgLyAyOwogCXEtJmd0O3FkbWEgPSBxZG1hOwomIzQzOwlscm9fcSA9IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKTsKIAogCXEtJmd0O2VudHJ5ID0gZGV2bV9remFsbG9jKGV0aC0mZ3Q7ZGV2LCBuZGVzYyAqIHNpemVvZigqcS0mZ3Q7ZW50cnkpLAogCQkJCUdGUF9LRVJORUwpOwpAQCAtODI3LDYgJiM0MzsxMDUzLDkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsCiAJaWYgKCFxLSZndDtkZXNjKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlwcF9wYXJhbXMub3JkZXIgPSBscm9fcSA/IEFJUk9IQV9MUk9fUEFHRV9PUkRFUiA6IDA7CiYjNDM7CXBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFICZsdDsmbHQ7IHBwX3BhcmFtcy5vcmRlcjsKJiM0MzsKIAlxLSZndDtwYWdlX3Bvb2wgPSBwYWdlX3Bvb2xfY3JlYXRlKCZhbXA7cHBfcGFyYW1zKTsKIAlpZiAoSVNfRVJSKHEtJmd0O3BhZ2VfcG9vbCkpIHsKIAkJaW50IGVyciA9IFBUUl9FUlIocS0mZ3Q7cGFnZV9wb29sKTsKQEAgLTgzNSw2ICYjNDM7MTA2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCQlyZXR1cm4gZXJyOwogCX0KIAomIzQzOwlxLSZndDtidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7CiAJcS0mZ3Q7bmRlc2MgPSBuZGVzYzsKIAluZXRpZl9uYXBpX2FkZChldGgtJmd0O25hcGlfZGV2LCAmYW1wO3EtJmd0O25hcGksIGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbCk7CiAKQEAgLTg0OCw3ICYjNDM7MTA3OCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKIAkJCUZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7CiAJYWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19SWF9ETUFfSURYKHFpZCksIFJYX1JJTkdfRE1BX0lEWF9NQVNLLAogCQkJRklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS0mZ3Q7aGVhZCkpOwotCWFpcm9oYV9xZG1hX3NldChxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSwgUlhfUklOR19TR19FTl9NQVNLKTsKJiM0MzsJaWYgKGxyb19xKQomIzQzOwkJYWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksCiYjNDM7CQkJCSAgUlhfUklOR19TR19FTl9NQVNLKTsKJiM0MzsJZWxzZQomIzQzOwkJYWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLAomIzQzOwkJCQlSWF9SSU5HX1NHX0VOX01BU0spOwogCiAJYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTsKIApAQCAtODcwLDYgJiM0MzsxMTA1LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfY2xlYW51cF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKQogCQkJCQlwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS0mZ3Q7cGFnZV9wb29sKSk7CiAJCXBhZ2VfcG9vbF9wdXRfZnVsbF9wYWdlKHEtJmd0O3BhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpOwogCQkvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqLwomIzQzOwkJV1JJVEVfT05DRShkZXNjLSZndDt0Y3BfdHNfcmVwbHksIDApOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2N0cmwsIDApOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2FkZHIsIDApOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2RhdGEsIDApOwpAQCAtMTg5Niw2ICYjNDM7MjEzMiwzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXNwaW5fdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7c3RhdHNfbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtJmd0O2V0aDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGV0aC0mZ3Q7cG9ydHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGV0aC0mZ3Q7cG9ydHNbaV07CiYjNDM7CQlpbnQgajsKJiM0MzsKJiM0MzsJCWlmICghcG9ydCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKHBvcnQtJmd0O2RldnMpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LSZndDtkZXZzW2pdOwomIzQzOwkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CQkJaWYgKCFpdGVyX2RldikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihpdGVyX2Rldik7CiYjNDM7CQkJaWYgKG5ldGRldi0mZ3Q7cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF94bWl0X2ZyYW1lX3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0xOTEzLDE0ICYjNDM7MjE3NywyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiAJdTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTsKIAlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7Ci0JaW50IGVycjsKJiM0MzsJaW50IHFkbWFfaWQsIGVycjsKJiM0MzsKJiM0MzsJLyogTFJPIGlzIGNvbmZpZ3VyZWQgb24gdGhlIFFETUEgYW5kIGl0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbAomIzQzOwkgKiB0aGUgZGV2aWNlcyB1c2luZyBpdC4gUmVmdXNlIHRvIG9wZW4gYSBzZWNvbmQgZGV2aWNlIG9uIHRoZQomIzQzOwkgKiBzYW1lIFFETUEgaWYgTFJPIGlzIGVuYWJsZWQgb24gYW55IGRldmljZSBzaGFyaW5nIGl0IG9yIGlmCiYjNDM7CSAqIHRoaXMgZGV2aWNlIGhhcyBMUk8gZW5hYmxlZCBpbiBpdHMgZmVhdHVyZSBzZXQuCiYjNDM7CSAqLwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJcWRtYV9pZCA9IHFkbWEgLSAmYW1wO3FkbWEtJmd0O2V0aC0mZ3Q7cWRtYVswXTsKJiM0MzsKJiM0MzsJaWYgKHFkbWEtJmd0O3VzZXJzICZndDsgMSAmYW1wOyZhbXA7IChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQocWRtYS0mZ3Q7ZXRoLCBxZG1hX2lkKSB8fAomIzQzOwkJCQkobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0xSTykpKSB7CiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsICYjMzQ7cmVxdWlyZWQgdG8gZGlzYWJsZSBMUk8gb24gUURNQSVkXG4mIzM0OywKJiM0MzsJCQkgICAgcWRtYV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAJZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSkKIAkJYWlyb2hhX2ZlX3NldChxZG1hLSZndDtldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC0mZ3Q7aWQpLAogCQkJICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7CkBAIC0xOTM3LDYgJiM0MzsyMjE1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcocWRtYS0mZ3Q7ZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCSAgICBwc2VfcG9ydCk7CiAKJiM0MzsJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9MUk8pCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk1NCw2ICYjNDM7MjIzNSwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LSZndDtldGgsCiAJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCQkgICAgRkVfUFNFX1BPUlRfRFJPUCk7CiYjNDM7CiYjNDM7CWlmIChuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfTFJPKQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yMTE1LDExICYjNDM7MjQwMCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXFkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildOwogCWN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAotCWlmIChjdXJfcWRtYSkKJiM0MzsJaWYgKGN1cl9xZG1hKSB7CiAJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwl9CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKIAluZXRkZXYtJmd0O2lycSA9IHFkbWEtJmd0O2lycV9iYW5rc1swXS5pcnE7CiYjNDM7CXFkbWEtJmd0O3VzZXJzJiM0MzsmIzQzOzsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwpAQCAtMjEzNiw4ICYjNDM7MjQyNCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCQkJYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKIAl9CiAKLQlpZiAoY3VyX3FkbWEpCiYjNDM7CWlmIChjdXJfcWRtYSkgewomIzQzOwkJY3VyX3FkbWEtJmd0O3VzZXJzLS07CiAJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKGRldik7CiYjNDM7CWlmIChuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfTFJPKQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZW5hYmxlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0yMjg4LDYgJiM0MzsyNTgyLDMyIEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJfQogfQogCiYjNDM7c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQkJIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiYjNDM7CiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlpZiAocWRtYS0mZ3Q7dXNlcnMgJmd0OyAxKQomIzQzOwkJZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX0xSTzsKJiM0MzsKJiM0MzsJcmV0dXJuIGZlYXR1cmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9MUk8pCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTMxOTksNyAmIzQzOzM1MTksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7Ci0JaW50IGVyciA9IC1FQlVTWTsKJiM0MzsJaW50IGVycjsKIAogCWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwogCSAgICBwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHsKQEAgLTMyMTgsNiAmIzQzOzM1MzgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgICAgd2FuX2Rldi0mZ3Q7cG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTJfSURYKSB7CiAJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAogCQkJCQkgICAmIzM0O1FvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlJiMzNDspOwomIzQzOwkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gZXJyb3JfdW5sb2NrOwogCQl9CiAJCWFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7CkBAIC0zMzQzLDYgJiM0MzszNjY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhaXJvaGFfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3N0b3AJCT0gYWlyb2hhX2Rldl9zdG9wLAogCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsCiAJLm5kb19zZWxlY3RfcXVldWUJPSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSwKJiM0MzsJLm5kb19maXhfZmVhdHVyZXMJPSBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcywKJiM0MzsJLm5kb19zZXRfZmVhdHVyZXMJPSBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcywKIAkubmRvX3N0YXJ0X3htaXQJCT0gYWlyb2hhX2Rldl94bWl0LAogCS5uZG9fZ2V0X3N0YXRzNjQgICAgICAgID0gYWlyb2hhX2Rldl9nZXRfc3RhdHM2NCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9oYV9kZXZfc2V0X21hY2FkZHIsCkBAIC0zNDMwLDExICYjNDM7Mzc1Myw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAluZXRkZXYtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDthaXJvaGFfZXRodG9vbF9vcHM7CiAJbmV0ZGV2LSZndDttYXhfbXR1ID0gQUlST0hBX01BWF9NVFU7CiAJbmV0ZGV2LSZndDt3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKLQluZXRkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTzYgfAotCQkJICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfAotCQkJICAgICAgTkVUSUZfRl9IV19UQzsKLQluZXRkZXYtJmd0O2ZlYXR1cmVzIHw9IG5ldGRldi0mZ3Q7aHdfZmVhdHVyZXM7Ci0JbmV0ZGV2LSZndDt2bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LSZndDtod19mZWF0dXJlczsKJiM0MzsJbmV0ZGV2LSZndDtod19mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUyB8IE5FVElGX0ZfTFJPOwomIzQzOwluZXRkZXYtJmd0O2ZlYXR1cmVzIHw9IEFJUk9IQV9IV19GRUFUVVJFUzsKJiM0MzsJbmV0ZGV2LSZndDt2bGFuX2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTOwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgZXRoLSZndDtkZXYpOwogCiAJLyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAppbmRleCA1MjdlMzgzM2UzNmIxLi4yODZmNzNlMmUxZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKQEAgLTQ2LDYgJiM0Mzs0NiwxOCBAQAogCSAoX24pID09IDE1ID8gMTI4IDoJCVwKIAkgKF9uKSA9PSAgMCA/IDEwMjQgOiAzMikKIAomIzQzOyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSCQlnZXRfb3JkZXIoU1pfMTZLKQomIzQzOyNkZWZpbmUgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUwk4CiYjNDM7I2RlZmluZSBBSVJPSEFfUlhRX0xST19FTl9NQVNLCQlHRU5NQVNLKDMxLCAyNCkKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQJNjQKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRQkxMDAKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRQkyMDAwCiYjNDM7CiYjNDM7I2RlZmluZSBBSVJPSEFfSFdfRkVBVFVSRVMJCQlcCiYjNDM7CShORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CVwKJiM0MzsJIE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSVBWNl9DU1VNIHwJXAomIzQzOwkgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9IV19UQykKJiM0MzsKICNkZWZpbmUgUFNFX1JTVl9QQUdFUwkJCTEyOAogI2RlZmluZSBQU0VfUVVFVUVfUlNWX1BBR0VTCQk2NAogCkBAIC01NjEsNiAmIzQzOzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKJiM0MzsJaW50IHVzZXJzOwomIzQzOwogCXN0cnVjdCBhaXJvaGFfaXJxX2JhbmsgaXJxX2JhbmtzW0FJUk9IQV9NQVhfTlVNX0lSUV9CQU5LU107CiAKIAlzdHJ1Y3QgYWlyb2hhX3R4X2lycV9xdWV1ZSBxX3R4X2lycVtBSVJPSEFfTlVNX1RYX0lSUV07CkBAIC03MTUsNiAmIzQzOzcyOSwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODMoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIAlyZXR1cm4gZXRoLSZndDtzb2MtJmd0O3ZlcnNpb24gPT0gMHg3NTgzOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS0mZ3Q7cWRtYTsKJiM0MzsJaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF07CiYjNDM7CiYjNDM7CS8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi8KJiM0MzsJQlVJTERfQlVHX09OKGh3ZWlnaHQzMihBSVJPSEFfUlhRX0xST19FTl9NQVNLKSAmZ3Q7CiYjNDM7CQkgICAgIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVMpOwomIzQzOwomIzQzOwlyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyAmYW1wOyBCSVQocWlkKSk7CiYjNDM7fQomIzQzOwogaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsCiAJCQkgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKaW5kZXggNDQyYjQ4YzliOTkxZS4uMDdkZDA0ODU5ZmRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBACiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pCVwKIAlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICUgNCkgJmx0OyZsdDsgMyksCSgoKF9uKSAlIDQpICZsdDsmbHQ7IDMpKQogCiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19SWFEoX24sIF9tKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pICZhbXA7IDB4NCkpCiYjNDM7I2RlZmluZSBMUk9fUlhRX01BU0soX24pCQlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMyksICgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMykKJiM0MzsKJiM0MzsjZGVmaW5lIFJFR19DRE1fTFJPX0VOKF9uKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDgwKQomIzQzOyNkZWZpbmUgTFJPX1JYUV9FTl9NQVNLCQkJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pCQkoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODQpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTSwkJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0sJCUdFTk1BU0soMTUsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19BR0VfVElNRShfbikJKENETV9CQVNFKF9uKSAmIzQzOyAweDg4KQomIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTSwkJR0VOTUFTSygxNSwgMCkKJiM0MzsKICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKQkJR0RNX0JBU0UoX24pCiAjZGVmaW5lIEdETV9QQURfRU5fTUFTSwkJCUJJVCgyOCkKICNkZWZpbmUgR0RNX0RST1BfQ1JDX0VSUl9NQVNLCQlCSVQoMjMpCkBAIC04ODcsOSAmIzQzOzkwMSwxNiBAQAogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLCUdFTk1BU0soMjUsIDIxKQogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0sJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1BQRV9FTlRSWV9NQVNLCUdFTk1BU0soMTUsIDApCiYjNDM7LyogUlggTVNHMiAqLwomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMjQpCiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTSwlHRU5NQVNLKDYsIDApCiYjNDM7LyogUlggTVNHMyAqLwomIzQzOy8qIG1heCBhZ2dyZWdhdGVkIHNpemUgaW4gYnl0ZXMgKi8KJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19MRU5fTUFTSwlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSwlHRU5NQVNLKDE1LCAwKQogCiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7Ci0JX19sZTMyIHJzdjsKJiM0MzsJX19sZTMyIHRjcF90c19yZXBseTsKIAlfX2xlMzIgY3RybDsKIAlfX2xlMzIgYWRkcjsKIAlfX2xlMzIgZGF0YTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2OTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwYXRjaDoKCioqUGF0Y2ggQW5hbHlzaXMgLSBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6ei4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBmaWxlIHBhdGhzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY2AgYW5kIGFzc29jaWF0ZWQgaGVhZGVyIGZpbGVzLiBUaGF0JiMzOTtzIGEgbmV0d29ya2luZyBkcml2ZXIsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBXaGF0IGtpbmQgb2YgaGFyZHdhcmUsIFNvQywgb3Igc3BlY2lmaWMgcGxhdGZvcm0gaXMgdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIGRlc2lnbmVkIGZvcj8gSXMgaXQgYSBjb21tb24gYXJjaGl0ZWN0dXJlPyBEb2VzIGl0IGFwcGVhciBpbiB3aWRlbHkgZGVwbG95ZWQgZGV2aWNlcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwYCBmb3IgcG90ZW50aWFsIGtleXdvcmRzIHdpdGhpbiB0aGUgZHJpdmVyIGZpbGVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gQWx0ZXJuYXRpdmVseSwgSSBjYW4gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIgdG8gc2VlIGlmIHRoYXQgcmV2ZWFscyBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldGVkIGhhcmR3YXJlIG9yIGRldmljZXMsIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgYW5kIGhhcmR3YXJlIGl0IG1pZ2h0IHN1cHBvcnQuIEtub3dpbmcgdGhlIHRhcmdldCBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyBob3cgY3JpdGljYWwgYSBidWcgY291bGQgYmUsIGFuZCB3aGV0aGVyIG91ciBmdXp6aW5nIGVmZm9ydHMgYXJlIGxpa2VseSB0byBmaW5kIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FJUk9IQXxjb25maWcgQUlST0hBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTg9aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxMDpjb25maWcgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxODpjb25maWcgTkVUX0FJUk9IQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjgtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIHNpdHVhdGlvbi4gTXkgZmlyc3QgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyaW5nIG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWF0aW9ucyB0aGlzIGRyaXZlciBzdXBwb3J0cy4gS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBkcml2ZXJzIGZpdCBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBjaGlwIG1vZGVsIGRlc2lnbmF0aW9ucywgYW55IHNwZWNpZmljIGJvYXJkLWxldmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFjY291bnRlZCBmb3IsIGFuZCBvZiBjb3Vyc2UsIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBpdCByZWxpZXMgdXBvbi4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0IHRoaXMgZHJpdmVyICpuZWVkcyogdG8gZnVuY3Rpb24gYW5kIHdoYXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgdGhhdCBzaGFwZSBpdHMgYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIGJlZm9yZSBJIHByb2NlZWQgdG8gYW55IGRlZXBlciBjb2RlIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxuICAgMzpcdFx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdGlmIE5FVF9WRU5ET1JfQUlST0hBXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE5FVF9BSVJPSEFfTlBVXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgTlBVIHN1cHBvcnRcJiMzNDtcbiAgMTI6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICAxMzpcdFx0c2VsZWN0IFJFR01BUF9NTUlPXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NvciAoTlBVKSBhdmFpbGFibGVcbiAgMTY6XHRcdCAgb24gdGhlIEFpcm9oYSBTb2MgZmFtaWx5LlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBORVRfQUlST0hBXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBORVRfRFNBIHx8ICFORVRfRFNBXG4gIDIxOlx0XHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbiAgMjI6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGVcbiAgMjU6XHRcdCAgQWlyb2hhIFNvQyBmYW1pbHkuXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xuICAyODpcdFx0ZGVmYXVsdCB5XG4gIDI5Olx0XHRib29sIFwmIzM0O0Fpcm9oYSBmbG93IHN0YXRzXCYjMzQ7XG4gIDMwOlx0XHRkZXBlbmRzIG9uIE5FVF9BSVJPSEEgXHUwMDI2XHUwMDI2IE5FVF9BSVJPSEFfTlBVXG4gIDMxOlx0XHRoZWxwXG4gIDMyOlx0XHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cbiAgMzM6XHRcbiAgMzQ6XHRlbmRpZiAjTkVUX1ZFTkRPUl9BSVJPSEFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHRleHQmIzM5O3MgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIEFpcm9oYSBTb0MgRHJpdmVyKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkcml2ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEFpcm9oYSBTb0MuIE15IGluaXRpYWwgYXNzZXNzbWVudCBoaW5nZXMgb24gYSBmZXcgY3J1Y2lhbCBwb2ludHMuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmluZyBtZWNoYW5pc20g4oCTIGhvdyBkb2VzIGl0IGFjdHVhbGx5IGRldGVjdCBhbmQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmU/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBkZXZpY2UgSURzLCBwbGF0Zm9ybSBkYXRhLCBvciBzb21lIG90aGVyIG1ldGhvZD8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGZ1bmRhbWVudGFsIHRvIGRldGVybWluaW5nIGl0cyBhcmNoaXRlY3R1cmUuIEFuZCB0aGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgZGV2aWNlIHVzZXMgUGxhdGZvcm0gZHJpdmVycy4gSXMgdGhpcyBkcml2ZXIgYnVpbHQgYXMgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIHNvbWUgb3RoZXIgdHlwZSBvZiBmcmFtZXdvcms/IFVsdGltYXRlbHkgSSBuZWVkIHRvIGtub3cgdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX3Byb2JlfG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJ8YWlyb2hhX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4ODE9c3RhdGljIGludCBhaXJvaGFfcmVnaXN0ZXJfZ2RtX2RldmljZXMoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5MTA6c3RhdGljIGludCBhaXJvaGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkxMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MjczPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2Fpcm9oYV9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI3NjpcdC5wcm9iZSA9IGFpcm9oYV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI3Ny1cdC5yZW1vdmUgPSBhaXJvaGFfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI4Mi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MjgzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFpcm9oYV9ldGguY2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgcHJvYmUgYW5kIG9mX21hdGNoIGZ1bmN0aW9ucyDigJMgYGFpcm9oYV9wcm9iZWAgYW5kIGBvZl9haXJvaGFfbWF0Y2hgLCByZXNwZWN0aXZlbHkuIEkgd2FudCB0byBzZWUgaG93IHRoZSBkcml2ZXIgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdCYjMzk7cyBpZGVudGlmeWluZyBhbmQgYXNzb2NpYXRpbmcgaXRzZWxmIHdpdGggdGhlIHNwZWNpZmljIEFpcm9oYSBoYXJkd2FyZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBzdXBwb3J0LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGVudHJ5IHBvaW50cyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW55IGlzc3VlcyByZWxhdGVkIHRvIGRldmljZSBkZXRlY3Rpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yLCBmcmFua2x5LCBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgYmUgZ29pbmcgd3JvbmcgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIGRyaXZlciYjMzk7cyBsaWZlY3ljbGUuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgaW4gdGhlIGRldmljZSBtYXRjaGluZyBsb2dpYywgcGFydGljdWxhcmx5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkaXNjcmVwYW5jaWVzIGluIHRoZSBleHBlY3RlZCBkZXZpY2UgSURzIG9yIGNvbXBhdGlibGUgc3RyaW5ncy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBtaXNzaW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgZW50cmllcywgd2hpY2ggd291bGQgY2F1c2UgYW4gaW5zdGFudGlhdGlvbiBmYWlsdXJlLCBvciBpbmNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzcyBtYXBwaW5nLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgaW4gbWFraW5nIHN1cmUgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBmdW5jdGlvbnMgYXMgaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX2Fpcm9oYV9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTQyNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBhaXJvaGFfZXRoX3NvY19kYXRhIGFuNzU4M19zb2NfZGF0YSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNjg6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNjktXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MjcyLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNzM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfYWlyb2hhX21hdGNoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9NDI3NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI3OS1cdFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI4MDpcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX21hdGNoLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MjgxLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGFpcm9oYV9wcm9iZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFpcm9oYV9wcm9iZWAgaXMgYWN0dWFsbHkgKmRvaW5nKiB1bmRlciB0aGUgaG9vZCwgcmVzb3VyY2Utd2lzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGRldmljZSB0cmVlLiBXaGF0IG5vZGVzIGlzIGl0IHBhcnNpbmc/IEFyZSB0aGVyZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIGl0JiMzOTtzIGxvb2tpbmcgZm9yPyBUaGVuLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKS4gV2hhdCByZWdpc3RlcnMgaXMgaXQgYWNjZXNzaW5nPyBXaGF0IGFkZHJlc3Nlcz8gQW55IHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGl0JiMzOTtzIHJlcXVlc3Rpbmc/IEFmdGVyIHRoYXQsIEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaG93IGl0IGlzIGhhbmRsaW5nIGNsb2NrcyBhbmQgcmVzZXRzLiBXaGF0IGNsb2NrcyBpcyBpdCBlbmFibGluZyBvciBkaXNhYmxpbmc/IEFyZSB0aGVyZSBzcGVjaWZpYyBjbG9jayBkaXZpZGVycyBpbiB1c2U/IEhvdyBhYm91dCByZXNldHM/IEFyZSBhbnkgbGluZXMgYmVpbmcgYXNzZXJ0ZWQgb3IgZGUtYXNzZXJ0ZWQ/IEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhpcyBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzkxMDpcdHN0YXRpYyBpbnQgYWlyb2hhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4zOTExOlx0e1xuMzkxMjpcdFx0c3RydWN0IHJlc2V0X2NvbnRyb2xfYnVsa19kYXRhICp4c2lfcnN0cztcbjM5MTM6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4zOTE0Olx0XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuMzkxNTpcdFx0aW50IGksIGVycjtcbjM5MTY6XHRcbjM5MTc6XHRcdGV0aCA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpldGgpLCBHRlBfS0VSTkVMKTtcbjM5MTg6XHRcdGlmICghZXRoKVxuMzkxOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjM5MjA6XHRcbjM5MjE6XHRcdGV0aC1cdTAwM2Vzb2MgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMzkyMjpcdFx0aWYgKCFldGgtXHUwMDNlc29jKVxuMzkyMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5MjQ6XHRcbjM5MjU6XHRcdGV0aC1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjM5MjY6XHRcbjM5Mjc6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZXRoLVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4zOTI4Olx0XHRpZiAoZXJyKSB7XG4zOTI5Olx0XHRcdGRldl9lcnIoZXRoLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIGNvbmZpZ3VyaW5nIERNQSBtYXNrXFxuXCYjMzQ7KTtcbjM5MzA6XHRcdFx0cmV0dXJuIGVycjtcbjM5MzE6XHRcdH1cbjM5MzI6XHRcbjM5MzM6XHRcdGV0aC1cdTAwM2VmZV9yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCBcJiMzNDtmZVwmIzM0Oyk7XG4zOTM0Olx0XHRpZiAoSVNfRVJSKGV0aC1cdTAwM2VmZV9yZWdzKSlcbjM5MzU6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXRoLVx1MDAzZWRldiwgUFRSX0VSUihldGgtXHUwMDNlZmVfcmVncyksXG4zOTM2Olx0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBpb21hcCBmZSByZWdzXFxuXCYjMzQ7KTtcbjM5Mzc6XHRcbjM5Mzg6XHRcdGV0aC1cdTAwM2Vyc3RzWzBdLmlkID0gXCYjMzQ7ZmVcJiMzNDs7XG4zOTM5Olx0XHRldGgtXHUwMDNlcnN0c1sxXS5pZCA9IFwmIzM0O3BkbWFcJiMzNDs7XG4zOTQwOlx0XHRldGgtXHUwMDNlcnN0c1syXS5pZCA9IFwmIzM0O3FkbWFcJiMzNDs7XG4zOTQxOlx0XHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cdTAwM2VkZXYsXG4zOTQyOlx0XHRcdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXJzdHMpLFxuMzk0MzpcdFx0XHRcdFx0XHRcdCAgICBldGgtXHUwMDNlcnN0cyk7XG4zOTQ0Olx0XHRpZiAoZXJyKSB7XG4zOTQ1Olx0XHRcdGRldl9lcnIoZXRoLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBidWxrIHJlc2V0IGxpbmVzXFxuXCYjMzQ7KTtcbjM5NDY6XHRcdFx0cmV0dXJuIGVycjtcbjM5NDc6XHRcdH1cbjM5NDg6XHRcbjM5NDk6XHRcdHhzaV9yc3RzID0gZGV2bV9rY2FsbG9jKGV0aC1cdTAwM2VkZXYsXG4zOTUwOlx0XHRcdFx0XHRldGgtXHUwMDNlc29jLVx1MDAzZW51bV94c2lfcnN0cywgc2l6ZW9mKCp4c2lfcnN0cyksXG4zOTUxOlx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbjM5NTI6XHRcdGlmICgheHNpX3JzdHMpXG4zOTUzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzk1NDpcdFxuMzk1NTpcdFx0ZXRoLVx1MDAzZXhzaV9yc3RzID0geHNpX3JzdHM7XG4zOTU2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGgtXHUwMDNlc29jLVx1MDAzZW51bV94c2lfcnN0czsgaSYjNDM7JiM0MzspXG4zOTU3Olx0XHRcdGV0aC1cdTAwM2V4c2lfcnN0c1tpXS5pZCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNleHNpX3JzdHNfbmFtZXNbaV07XG4zOTU4Olx0XG4zOTU5Olx0XHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cdTAwM2VkZXYsXG4zOTYwOlx0XHRcdFx0XHRcdFx0ICAgIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3hzaV9yc3RzLFxuMzk2MTpcdFx0XHRcdFx0XHRcdCAgICBldGgtXHUwMDNleHNpX3JzdHMpO1xuMzk2MjpcdFx0aWYgKGVycikge1xuMzk2MzpcdFx0XHRkZXZfZXJyKGV0aC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBnZXQgYnVsayB4c2kgcmVzZXQgbGluZXNcXG5cJiMzNDspO1xuMzk2NDpcdFx0XHRyZXR1cm4gZXJyO1xuMzk2NTpcdFx0fVxuMzk2NjpcdFxuMzk2NzpcdFx0ZXRoLVx1MDAzZW5hcGlfZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuMzk2ODpcdFx0aWYgKCFldGgtXHUwMDNlbmFwaV9kZXYpXG4zOTY5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzk3MDpcdFxuMzk3MTpcdFx0LyogRW5hYmxlIHRocmVhZGVkIE5BUEkgYnkgZGVmYXVsdCAqL1xuMzk3MjpcdFx0ZXRoLVx1MDAzZW5hcGlfZGV2LVx1MDAzZXRocmVhZGVkID0gdHJ1ZTtcbjM5NzM6XHRcdHN0cnNjcHkoZXRoLVx1MDAzZW5hcGlfZGV2LVx1MDAzZW5hbWUsIFwmIzM0O3FkbWFfZXRoXCYjMzQ7LCBzaXplb2YoZXRoLVx1MDAzZW5hcGlfZGV2LVx1MDAzZW5hbWUpKTtcbjM5NzQ6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGV0aCk7XG4zOTc1Olx0XG4zOTc2Olx0XHRlcnIgPSBhaXJvaGFfaHdfaW5pdChwZGV2LCBldGgpO1xuMzk3NzpcdFx0aWYgKGVycilcbjM5Nzg6XHRcdFx0Z290byBlcnJvcl9uZXRkZXZfZnJlZTtcbjM5Nzk6XHRcbjM5ODA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXFkbWEpOyBpJiM0MzsmIzQzOykge1xuMzk4MTpcdFx0XHRhaXJvaGFfcWRtYV9zdGFydF9uYXBpKFx1MDAyNmV0aC1cdTAwM2VxZG1hW2ldKTtcbjM5ODI6XHRcdFx0YWlyb2hhX3FkbWFfc2V0KFx1MDAyNmV0aC1cdTAwM2VxZG1hW2ldLCBSRUdfUURNQV9HTE9CQUxfQ0ZHLFxuMzk4MzpcdFx0XHRcdFx0R0xPQkFMX0NGR19UWF9ETUFfRU5fTUFTSyB8XG4zOTg0Olx0XHRcdFx0XHRHTE9CQUxfQ0ZHX1JYX0RNQV9FTl9NQVNLKTtcbjM5ODU6XHRcdH1cbjM5ODY6XHRcbjM5ODc6XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUocGRldi1cdTAwM2VkZXYub2Zfbm9kZSwgbnApIHtcbjM5ODg6XHRcdFx0aWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXCYjMzQ7YWlyb2hhLGV0aC1tYWNcJiMzNDspKVxuMzk4OTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA3OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIERyaXZlciYjMzk7cyBUcmlhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB0cmlhZ2UgY3JpdGVyaWEgYXJlIGhpZ2hsaWdodGluZyBhIGNyaXRpY2FsIGlzc3VlOiB0aGlzIGRyaXZlciwgbGV0JiMzOTtzIGNhbGwgaXQgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIsIGZhbGxzIGludG8gYSBjYXRlZ29yeSB0aGF0JiMzOTtzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gU3BlY2lmaWNhbGx5LCB0aGUgdGV4dCBjYWxscyBvdXQgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMg4oCTIHRoaW5ncyB0aGF0IGFyZSAqbm90KiBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBzcGVjaWZpYyBtZW50aW9uIG9mICYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQsJiMzNDsgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgcHJvYmxlbS4KCldlJiMzOTtyZSBkZWFsaW5nIHdpdGggQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DcywgZXNzZW50aWFsbHkgQVJNLWJhc2VkIFNvQ3MgdHlwaWNhbGx5IGZvdW5kIGluIHJvdXRlcnMsIFBPTiBkZXZpY2VzLCBhbmQgZ2F0ZXdheXMuIFRoZSBkcml2ZXIgaXMgbG9va2luZyBmb3IgZGV2aWNlIHRyZWUgbm9kZXM6IGBhaXJvaGEsZW43NTgxLWV0aGAgb3IgYGFpcm9oYSxhbjc1ODMtZXRoYCBvbiB0aGUgcGxhdGZvcm0gYnVzLiBOb3csIHRoZSBrZXkgaXMgdGhlIGNvbnRleHQ6CgoxLiAgKipUYXJnZXQgYXJjaGl0ZWN0dXJlKio6IFdlJiMzOTtyZSBvbiBhbWQ2NCAoeDg2XF82NCkgc3lzdGVtcy4KMi4gICoqSGFyZHdhcmUgRGVwZW5kZW5jeSoqOiBUaGUgZHJpdmVyIGlzIGZvciBBaXJvaGEgU29DICpwbGF0Zm9ybSogZGV2aWNlcy4gSXQgKnJlcXVpcmVzKiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBlbnRyaWVzIGZvciB0aGluZ3MgbGlrZSByZXNldCBjb250cm9sbGVycywgbWVtb3J5LW1hcHBlZCBJL08gcmVnaXN0ZXJzLCBQSFkvTUFDIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgKCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGgmIzM0OykuCjMuICAqKlZpcnR1YWxpemF0aW9uIENvbnN0cmFpbnQqKjogU3RhbmRhcmQgdmlydHVhbGl6YXRpb24gbGlrZSB4ODZcXzY0IFFFTVUgb3IgR0NFICpkb2VzbiYjMzk7dCogaGF2ZSB0aGlzIEFpcm9oYSBoYXJkd2FyZSBvciBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlcy4gQSBwbGF0Zm9ybSBkcml2ZXIgdXNpbmcgYG9mX21hdGNoX3RhYmxlYCAqY2Fubm90KiBwcm9iZSB3aXRob3V0IHRoZXNlIHBsYXRmb3JtLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzLgoKU28sIHRoZSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyIGlzIGF0dGVtcHRpbmcgdG8gcnVuIG9uIHg4NlxfNjQgYnV0IGV4cGVjdHMgQVJNLXNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBlbnRyaWVzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBqdXN0IGlzbiYjMzk7dCB0aGVyZSBpbiBhIHN0YW5kYXJkIHg4NiBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyB3aGVyZSBzeXprYWxsZXIgZnV6emluZyBpcyB0YWtpbmcgcGxhY2UuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIExldCYjMzk7cyBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSYjMzk7cyAqYW55KiB2aXJ0dWFsIGJ1cyBvciBtZWNoYW5pc20gdGhhdCB3b3VsZCBhbGxvdyBgYWlyb2hhX2V0aGAgdG8gZXZlbiBiZSBpbnN0YW50aWF0ZWQgaW4gdGhpcyB4ODZcXzY0IGVudmlyb25tZW50LCBlc3BlY2lhbGx5IGZvciBzeXprYWxsZXIgZnV6emluZy4gSXQgc2VlbXMgdW5saWtlbHksIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBxdWljayBjaGVjay4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBJcyBgQVJDSF9BSVJPSEFgIGV2ZW4geDg2IGNvbXBhdGlibGU/IExldCBtZSBpbW1lZGlhdGVseSBjaGVjayBiZWNhdXNlIHRoZSBkZXNjcmlwdGlvbiBzdWdnZXN0cyB0aGF0IGl0IHRhcmdldHMgQVJNIGFyY2hpdGVjdHVyZXMuIFRoZSB0ZXh0IHNheXMgdG8gYGdyZXAgQVJDSF9BSVJPSEFgIHRocm91Z2ggdGhlIGVudGlyZSBrZXJuZWwgdHJlZSwgYnV0IEkgYWxyZWFkeSBrbm93IHRoYXQgdG8gYmUgdGhlIGNhc2UsIGJ1dCBsZXQgbWUgY29uZmlybSB0aGUgYXJjaGl0ZWN0dXJlIGZvciBBaXJvaGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0FJUk9IQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnLnBsYXRmb3Jtcz01NT1jb25maWcgQVJDSF9WSVJUXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXMtNjUtXG5hcmNoL2FybS9LY29uZmlnLnBsYXRmb3Jtczo2Njpjb25maWcgQVJDSF9BSVJPSEFcbmFyY2gvYXJtL0tjb25maWcucGxhdGZvcm1zLTY3LVx0Ym9vbCBcJiMzNDtBaXJvaGEgU29DIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zPTQ9Y29uZmlnIEFSQ0hfQUNUSU9OU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTAtXG5hcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zOjExOmNvbmZpZyBBUkNIX0FJUk9IQVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0xMi1cdGJvb2wgXCYjMzQ7QWlyb2hhIFNvQyBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjAyCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhhdCBgQVJDSF9BSVJPSEFgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gQVJNIGFuZCBBUk02NCBwbGF0Zm9ybXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBgS2NvbmZpZy5wbGF0Zm9ybXNgIGZpbGVzLiAgT24gYW1kNjQsIHRoZSBgQ09ORklHX05FVF9BSVJPSEFgIGNvbmZpZ3VyYXRpb24gZGVwZW5kcyBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gRXZlbiBpZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB0aGlzIGlzIHN0aWxsIGEgKnBsYXRmb3JtKiBkcml2ZXIuIEl04oCZcyBkZXNpZ25lZCBmb3IgYSB2ZXJ5IHNwZWNpZmljIEFpcm9oYSBTb0MgaGFyZHdhcmUgd2l0aCBkZXBlbmRlbmNpZXMgbGlrZSBEZXZpY2UgVHJlZSBub2RlcyAoYGFpcm9oYSxlbjc1ODEtZXRoYCkgYW5kLCBjcnVjaWFsbHksIHByb3ByaWV0YXJ5IGhhcmR3YXJlIHJlZ2lzdGVycywgcmVzZXQgbGluZXMsIGFuZCBwaHlzLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBmdXp6aW5nIGVudmlyb25tZW50cywgdGhpcyBzaWduYWxzIGEgc2lnbmlmaWNhbnQgcm9hZGJsb2NrLiBUaGlzIGlzbiYjMzk7dCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBvciBHQ0UgaW5zdGFuY2UsIG9yIGV2ZW4gc3lza2FsbGVyLCBhbmQgZXhwZWN0IHRvIHByb2JlIGVmZmVjdGl2ZWx5LgoKSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhZ2FpbnN0IHRoZSBpbnN0cnVjdGlvbnMuIFNlY3Rpb24gMiBjb25maXJtcyBteSBzdXNwaWNpb24sIHRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeS4gU3BlY2lmaWNhbGx5IHRoZSBleGFtcGxlIG9mICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuLi4gcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LgoKTXkgYW5hbHlzaXMgb2YgdGhlIHBhdGNoIGl0c2VsZiBpcyBmdXJ0aGVyIGV2aWRlbmNlLiBUaGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY2AsIGBhaXJvaGFfZXRoLmhgLCBhbmQgYGFpcm9oYV9yZWdzLmhgLiBUaGlzIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGF0IHRoaXMgaXMgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBkZXNpZ25lZCB0byBpbnRlcmFjdCB3aXRoIGEgc3BlY2lmaWMgaGFyZHdhcmUgdGFyZ2V0LCB0aGUgQWlyb2hhIFNvQywgd2hpY2ggaXMgcGFydCBvZiB0aGUgQVJNL0FSTTY0IGVjb3N5c3RlbS4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczoKCiogICAqKldvcnRoRnV6emluZzogZmFsc2UqKiDigJMgVGhlIGFyY2hpdGVjdHVyYWwgYW5kIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBtYWtlIHRoaXMgY29kZSBpbmFjY2Vzc2libGUgZm9yIGZ1enppbmcgaW4gYSBzdGFuZGFyZCBhbWQ2NCBlbnZpcm9ubWVudC4gSXQmIzM5O3MgYSBkZWFkIGVuZCwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLgoqICAgKipGb2N1c1N5bWJvbHM6IFxbIF0qKiDigJMgIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBzeW1ib2xzIEkgd291bGQgbmVlZCB0byB0YXJnZXQuCiogICAqKkVuYWJsZUNvbmZpZ3M6IFxbIF0qKiDigJMgTm8gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCB0byBtYWtlIHRoaXMgZnV6emVyLWFjY2Vzc2libGUuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIEkgd2lsbCBub3cgaW5zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZWZsZWN0IHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQWlyb2hhIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBBaXJvaGEgQVJNL0FSTTY0IFNvQ3MgKEVONzU4MS9BTjc1ODMpIHJlbHlpbmcgb24gU29DLXNwZWNpZmljIERldmljZSBUcmVlIGJpbmRpbmdzIGFuZCBoYXJkd2FyZSBNTUlPL3Jlc2V0cy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIEFSTS9BUk02NCBTb0NzIChFTjc1ODEvQU43NTgzKSByZWx5aW5nIG9uIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBhbmQgaGFyZHdhcmUgTU1JTy9yZXNldHMuIEl0IGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA3Ljk5Mzg4MDk4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjA1OTk2OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA3Ljk5Mzg4NzE5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwODgwMDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE5NDIwM2M5ZWRkODk2ZDQ5ZjJjNjc3NDczZDA1NmY0YjEwNzExODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxOTozNDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDY0NjE5ZTlhNzA0ZGQuLjIxYWM4MGJkZDA4NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcXG5AQCAtMTAsOCArMTAsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJhaXJvaGFfcmVncy5oXFxcIlxcbkBAIC00OTEsNiArNDkzLDg4IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9mZV9jcnNuX3FzZWxfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbiBcXHRcXHRcXHRcXHQgQ0RNX0NSU05fUVNFTF9RMSkpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGxyb19xdWV1ZV9pbmRleCwgaW50IHFpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgYnVmX3NpemUpXFxuK3tcXG4rXFx0aW50IGlkID0gcWRtYV9pZCArIDE7XFxuK1xcbitcXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLFxcbitcXHRcXHQgICAgICBDRE1fTFJPX0FHR19OVU1fTUFTSyB8IENETV9MUk9fQUdHX1NJWkVfTUFTSyxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19TSVpFX01BU0ssIGJ1Zl9zaXplKSB8XFxuK1xcdFxcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKSk7XFxuK1xcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXFxuK1xcdFxcdCAgICAgIENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUUpIHxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUUpKTtcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgbHJvX3F1ZXVlX2luZGV4KSxcXG4rXFx0XFx0ICAgICAgTFJPX1JYUV9NQVNLKGxyb19xdWV1ZV9pbmRleCksXFxuK1xcdFxcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XFxuK1xcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIEJJVChscm9fcXVldWVfaW5kZXgpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkKVxcbit7XFxuK1xcdGludCBpLCBpZCA9IHFkbWFfaWQgKyAxO1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fRU4oaWQpLCBMUk9fUlhRX0VOX01BU0spO1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXFxuK1xcdFxcdFxcdENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTtcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxcbitcXHRcXHRcXHRDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSsrKVxcbitcXHRcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGFpcm9oYV9mZV9nZXQoZXRoLCBSRUdfQ0RNX0xST19FTihxZG1hX2lkICsgMSksXFxuK1xcdFxcdFxcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdGludCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcdGludCBpLCBscm9fcXVldWVfaW5kZXggPSAwO1xcbitcXG4rXFx0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShxZG1hLVxcdTAwM2VxX3J4KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnEgPSBcXHUwMDI2cWRtYS1cXHUwMDNlcV9yeFtpXTtcXG4rXFx0XFx0dTMyIHNpemU7XFxuK1xcbitcXHRcXHRpZiAoIXEtXFx1MDAzZW5kZXNjKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICghYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXFx1MDAzZWJ1Zl9zaXplKSk7XFxuK1xcdFxcdHNpemUgPSBtaW5fdCh1MzIsIHNpemUsIEFJUk9IQV9NQVhfUlhfU0laRSk7XFxuK1xcdFxcdGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShldGgsIHFkbWFfaWQsIGxyb19xdWV1ZV9pbmRleCwgaSxcXG4rXFx0XFx0XFx0XFx0XFx0IHNpemUpO1xcbitcXHRcXHRscm9fcXVldWVfaW5kZXgrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdGludCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcbitcXHRpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfZmVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbiB7XFxuIFxcdGFpcm9oYV9mZV9tYWNjcl9pbml0KGV0aCk7XFxuQEAgLTYxNiw2ICs3MDAsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcXG4gXFx0XFx0ZS1cXHUwMDNlZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpICsgb2Zmc2V0O1xcbiBcXHRcXHRlLVxcdTAwM2VkbWFfbGVuID0gU0tCX1dJVEhfT1ZFUkhFQUQoQUlST0hBX1JYX0xFTihxLVxcdTAwM2VidWZfc2l6ZSkpO1xcbiBcXG4rXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2V0Y3BfdHNfcmVwbHksIDApO1xcbiBcXHRcXHR2YWwgPSBGSUVMRF9QUkVQKFFETUFfREVTQ19MRU5fTUFTSywgZS1cXHUwMDNlZG1hX2xlbik7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlYWRkciwgY3B1X3RvX2xlMzIoZS1cXHUwMDNlZG1hX2FkZHIpKTtcXG5AQCAtNjU3LDEzICs3NDIsMTQ2IEBAIGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjKVxcbiBcXHRyZXR1cm4gcG9ydC1cXHUwMDNlZGV2c1tkXSA/IHBvcnQtXFx1MDAzZWRldnNbZF0gOiBFUlJfUFRSKC1FTk9ERVYpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2xyb19yeF9za2Ioc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgbXNnMSwgdTMyIGxlbilcXG4re1xcbitcXHR1MzIgdGhfb2ZmLCB0Y3BfYWNrX3NlcSwgZGF0YV9vZmYsIGFnZ19jb3VudCA9IDE7XFxuK1xcdHUzMiBtc2cyID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZW1zZzIpKTtcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcS1cXHUwMDNlc2tiO1xcbitcXHR1MTYgdGNwX3dpbiwgbDJfbGVuO1xcbitcXHRzdHJ1Y3QgdGNwaGRyICp0aDtcXG4rXFx0Ym9vbCBpcHY0LCBpcHY2O1xcbitcXG4rXFx0aWYgKGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSkge1xcbitcXHRcXHRhZ2dfY291bnQgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0ssIG1zZzIpO1xcbitcXHRcXHRpZiAoYWdnX2NvdW50IFxcdTAwM2UgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsaWtlbHkoYWdnX2NvdW50IFxcdTAwM2M9IDEpKSAvKiBub3QgTFJPICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XFxuK1xcdGlwdjYgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA2X01BU0ssIG1zZzEpO1xcbitcXHRpZiAoIWlwdjQgXFx1MDAyNlxcdTAwMjYgIWlwdjYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTtcXG4rXFxuK1xcdGlmIChpcHY0KSB7XFxuK1xcdFxcdHN0cnVjdCBpcGhkciAqaXBoLCBfaXBoO1xcbitcXG4rXFx0XFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbDJfbGVuLCBzaXplb2YoKmlwaCksIFxcdTAwMjZfaXBoKTtcXG4rXFx0XFx0aWYgKCFpcGgpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGlwaC1cXHUwMDNlaWhsIFxcdTAwM2MgNSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHR0aF9vZmYgPSBsMl9sZW4gKyAoaXBoLVxcdTAwM2VpaGwgXFx1MDAzY1xcdTAwM2MgMik7XFxuK1xcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHRoX29mZikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBsMl9sZW4pO1xcbitcXHRcXHRpcGgtXFx1MDAzZXRvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pO1xcbitcXHRcXHRpcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4rXFx0XFx0aXBoLVxcdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodm9pZCAqKWlwaCwgaXBoLVxcdTAwM2VpaGwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFxuK1xcdFxcdHRoX29mZiA9IGwyX2xlbiArIHNpemVvZigqaXA2aCk7XFxuK1xcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHRoX29mZikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBsMl9sZW4pO1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBORVhUSERSX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpcDZoLVxcdTAwM2VwYXlsb2FkX2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIHRoX29mZik7XFxuK1xcdH1cXG4rXFxuK1xcdGRhdGFfb2ZmID0gdGhfb2ZmICsgc2l6ZW9mKCp0aCk7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyBkYXRhX29mZilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0aF9vZmYpO1xcbitcXHRpZiAodGgtXFx1MDAzZWRvZmYgXFx1MDAzYyA1KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGRhdGFfb2ZmID0gdGhfb2ZmICsgKHRoLVxcdTAwM2Vkb2ZmIFxcdTAwM2NcXHUwMDNjIDIpO1xcbitcXHRpZiAobGVuIFxcdTAwM2M9IGRhdGFfb2ZmKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHRjcF93aW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLLFxcbitcXHRcXHRcXHQgICAgbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZW1zZzMpKSk7XFxuK1xcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZWRhdGEpKTtcXG4rXFx0dGgtXFx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XFxuK1xcdHRoLVxcdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXFxuK1xcdGlmICh0aC1cXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgKyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSAvIDQpIHtcXG4rXFx0XFx0dTMyIHRvcHQ7XFxuK1xcbitcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0aF9vZmYpO1xcbitcXHRcXHR0b3B0ID0gZ2V0X3VuYWxpZ25lZF9iZTMyKHRoICsgMSk7XFxuK1xcdFxcdGlmICh0b3B0ID09ICgoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAxNikgfFxcbitcXHRcXHRcXHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFxcdTAwM2NcXHUwMDNjIDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7XFxuK1xcdFxcdFxcdHU4ICpwdHIgPSAodTggKil0aCArIHNpemVvZigqdGgpICsgMiAqIHNpemVvZihfX2JlMzIpO1xcbitcXHRcXHRcXHRfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSk7XFxuK1xcbitcXHRcXHRcXHQvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsXFxuK1xcdFxcdFxcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXFxuK1xcdFxcdFxcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxcbitcXHRcXHRcXHQgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdFxcbitcXHRcXHRcXHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHRjcF90c19yZXBseSlcXG4rXFx0XFx0XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlwdjQpIHtcXG4rXFx0XFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIGwyX2xlbik7XFxuK1xcbitcXHRcXHR0aC1cXHUwMDNlY2hlY2sgPSB+dGNwX3Y0X2NoZWNrKGxlbiAtIHRoX29mZiwgaXBoLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBpcGgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgbDJfbGVuKTtcXG4rXFxuK1xcdFxcdHRoLVxcdTAwM2VjaGVjayA9IH50Y3BfdjZfY2hlY2sobGVuIC0gdGhfb2ZmLCBcXHUwMDI2aXA2aC1cXHUwMDNlc2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0c2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbitcXHRzaGluZm8tXFx1MDAzZWdzb190eXBlID0gaXB2NCA/IFNLQl9HU09fVENQVjQgOiBTS0JfR1NPX1RDUFY2O1xcbitcXHRzaGluZm8tXFx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XFxuK1xcdHNoaW5mby1cXHUwMDNlZ3NvX3NpemUgPSBESVZfUk9VTkRfVVAobGVuIC0gZGF0YV9vZmYsIGFnZ19jb3VudCk7XFxuK1xcdHNoaW5mby1cXHUwMDNlZ3NvX3NlZ3MgPSBhZ2dfY291bnQ7XFxuK1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRoX29mZjtcXG4rXFx0c2tiLVxcdTAwM2Vjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcXG4rXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxcbiB7XFxuIFxcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVxcdTAwM2VwYWdlX3Bvb2wpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVxcdTAwM2VxZG1hO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cXHUwMDNlZXRoO1xcbi1cXHRpbnQgcWlkID0gcSAtIFxcdTAwMjZxZG1hLVxcdTAwM2VxX3J4WzBdO1xcbi1cXHRpbnQgZG9uZSA9IDA7XFxuK1xcdGludCBxaWQgPSBxIC0gXFx1MDAyNnEtXFx1MDAzZXFkbWEtXFx1MDAzZXFfcnhbMF0sIGRvbmUgPSAwO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcS1cXHUwMDNlcWRtYS1cXHUwMDNlZXRoO1xcbiBcXG4gXFx0d2hpbGUgKGRvbmUgXFx1MDAzYyBidWRnZXQpIHtcXG4gXFx0XFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSA9IFxcdTAwMjZxLVxcdTAwM2VlbnRyeVtxLVxcdTAwM2V0YWlsXTtcXG5AQCAtNjk2LDcgKzkxNCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxcbiBcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9mcmFnO1xcbiBcXG4rXFx0XFx0bXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cxKSk7XFxuIFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFxuIFxcdFxcdGlmICghcS1cXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xcbiBcXHRcXHRcXHRxLVxcdTAwM2Vza2IgPSBuYXBpX2J1aWxkX3NrYihlLVxcdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHEtXFx1MDAzZWJ1Zl9zaXplKTtcXG5AQCAtNzA3LDkgKzkyNywxNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcXG4gXFx0XFx0XFx0X19za2JfcHV0KHEtXFx1MDAzZXNrYiwgbGVuKTtcXG4gXFx0XFx0XFx0c2tiX21hcmtfZm9yX3JlY3ljbGUocS1cXHUwMDNlc2tiKTtcXG4gXFx0XFx0XFx0cS1cXHUwMDNlc2tiLVxcdTAwM2VkZXYgPSBuZXRkZXY7XFxuLVxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVxcdTAwM2Vza2IsIG5ldGRldik7XFxuIFxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdFxcdFxcdHNrYl9yZWNvcmRfcnhfcXVldWUocS1cXHUwMDNlc2tiLCBxaWQpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgbXNnMSwgbGVuKSkge1xcbitcXHRcXHRcXHRcXHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhuZXRkZXYpO1xcbitcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiKHEtXFx1MDAzZXNrYik7XFxuK1xcdFxcdFxcdFxcdHEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRxLVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS1cXHUwMDNlc2tiLCBuZXRkZXYpO1xcbiBcXHRcXHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cXG4gXFx0XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVxcdTAwM2Vza2IpO1xcbiBcXHRcXHRcXHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXFx1MDAzZW5yX2ZyYWdzO1xcbkBAIC03NDIsNyArOTcwLDYgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBvcnQtXFx1MDAzZWRzYV9tZXRhW3NwdGFnXS1cXHUwMDNlZHN0KTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0bXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cxKSk7XFxuIFxcdFxcdGhhc2ggPSBGSUVMRF9HRVQoQUlST0hBX1JYRDRfRk9FX0VOVFJZLCBtc2cxKTtcXG4gXFx0XFx0aWYgKGhhc2ggIT0gQUlST0hBX1JYRDRfRk9FX0VOVFJZKVxcbiBcXHRcXHRcXHRza2Jfc2V0X2hhc2gocS1cXHUwMDNlc2tiLCBqaGFzaF8xd29yZChoYXNoLCAwKSxcXG5AQCAtODAwLDEyICsxMDI3LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgbmRlc2MpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0ge1xcbi1cXHRcXHQub3JkZXIgPSAwLFxcbitcXHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XFxuIFxcdFxcdC5wb29sX3NpemUgPSAyNTYsXFxuIFxcdFxcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxcbiBcXHRcXHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcXG4tXFx0XFx0Lm1heF9sZW4gPSBQQUdFX1NJWkUsXFxuIFxcdFxcdC5uaWQgPSBOVU1BX05PX05PREUsXFxuIFxcdFxcdC5kZXYgPSBxZG1hLVxcdTAwM2VldGgtXFx1MDAzZWRldixcXG4gXFx0XFx0Lm5hcGkgPSBcXHUwMDI2cS1cXHUwMDNlbmFwaSxcXG5AQCAtODEzLDkgKzEwMzgsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuIFxcdGludCBxaWQgPSBxIC0gXFx1MDAyNnFkbWEtXFx1MDAzZXFfcnhbMF0sIHRocjtcXG4gXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0Ym9vbCBscm9fcTtcXG4gXFxuLVxcdHEtXFx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcXG4gXFx0cS1cXHUwMDNlcWRtYSA9IHFkbWE7XFxuK1xcdGxyb19xID0gYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpO1xcbiBcXG4gXFx0cS1cXHUwMDNlZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLVxcdTAwM2VkZXYsIG5kZXNjICogc2l6ZW9mKCpxLVxcdTAwM2VlbnRyeSksXFxuIFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbkBAIC04MjcsNiArMTA1Myw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbiBcXHRpZiAoIXEtXFx1MDAzZWRlc2MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cHBfcGFyYW1zLm9yZGVyID0gbHJvX3EgPyBBSVJPSEFfTFJPX1BBR0VfT1JERVIgOiAwO1xcbitcXHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBwcF9wYXJhbXMub3JkZXI7XFxuK1xcbiBcXHRxLVxcdTAwM2VwYWdlX3Bvb2wgPSBwYWdlX3Bvb2xfY3JlYXRlKFxcdTAwMjZwcF9wYXJhbXMpO1xcbiBcXHRpZiAoSVNfRVJSKHEtXFx1MDAzZXBhZ2VfcG9vbCkpIHtcXG4gXFx0XFx0aW50IGVyciA9IFBUUl9FUlIocS1cXHUwMDNlcGFnZV9wb29sKTtcXG5AQCAtODM1LDYgKzEwNjQsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4rXFx0cS1cXHUwMDNlYnVmX3NpemUgPSBscm9fcSA/IHBwX3BhcmFtcy5tYXhfbGVuIDogcHBfcGFyYW1zLm1heF9sZW4gLyAyO1xcbiBcXHRxLVxcdTAwM2VuZGVzYyA9IG5kZXNjO1xcbiBcXHRuZXRpZl9uYXBpX2FkZChldGgtXFx1MDAzZW5hcGlfZGV2LCBcXHUwMDI2cS1cXHUwMDNlbmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTtcXG4gXFxuQEAgLTg0OCw3ICsxMDc4LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbiBcXHRcXHRcXHRGSUVMRF9QUkVQKFJYX1JJTkdfVEhSX01BU0ssIHRocikpO1xcbiBcXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssXFxuIFxcdFxcdFxcdEZJRUxEX1BSRVAoUlhfUklOR19ETUFfSURYX01BU0ssIHEtXFx1MDAzZWhlYWQpKTtcXG4tXFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spO1xcbitcXHRpZiAobHJvX3EpXFxuK1xcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxcbitcXHRcXHRcXHRcXHQgIFJYX1JJTkdfU0dfRU5fTUFTSyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxcbitcXHRcXHRcXHRcXHRSWF9SSU5HX1NHX0VOX01BU0spO1xcbiBcXG4gXFx0YWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTtcXG4gXFxuQEAgLTg3MCw2ICsxMTA1LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfY2xlYW51cF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRcXHRcXHRwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cXHUwMDNlcGFnZV9wb29sKSk7XFxuIFxcdFxcdHBhZ2VfcG9vbF9wdXRfZnVsbF9wYWdlKHEtXFx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xcbiBcXHRcXHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSwgMCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlY3RybCwgMCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlYWRkciwgMCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlZGF0YSwgMCk7XFxuQEAgLTE4OTYsNiArMjEzMiwzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShldGgtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBldGgtXFx1MDAzZXBvcnRzW2ldO1xcbitcXHRcXHRpbnQgajtcXG4rXFxuK1xcdFxcdGlmICghcG9ydClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShwb3J0LVxcdTAwM2VkZXZzKTsgaisrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LVxcdTAwM2VkZXZzW2pdO1xcbitcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXG4rXFx0XFx0XFx0aWYgKCFpdGVyX2RldilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTtcXG4rXFx0XFx0XFx0aWYgKG5ldGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMobmV0ZGV2KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5AQCAtMTkxMywxNCArMjE3NywyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbiBcXHR1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuLVxcdGludCBlcnI7XFxuK1xcdGludCBxZG1hX2lkLCBlcnI7XFxuK1xcbitcXHQvKiBMUk8gaXMgY29uZmlndXJlZCBvbiB0aGUgUURNQSBhbmQgaXQgaXMgc2hhcmVkIGJldHdlZW4gYWxsXFxuK1xcdCAqIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24gdGhlXFxuK1xcdCAqIHNhbWUgUURNQSBpZiBMUk8gaXMgZW5hYmxlZCBvbiBhbnkgZGV2aWNlIHNoYXJpbmcgaXQgb3IgaWZcXG4rXFx0ICogdGhpcyBkZXZpY2UgaGFzIExSTyBlbmFibGVkIGluIGl0cyBmZWF0dXJlIHNldC5cXG4rXFx0ICovXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZxZG1hLVxcdTAwM2VldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcbitcXHRpZiAocWRtYS1cXHUwMDNldXNlcnMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQocWRtYS1cXHUwMDNlZXRoLCBxZG1hX2lkKSB8fFxcbitcXHRcXHRcXHRcXHQobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfTFJPKSkpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcXFwicmVxdWlyZWQgdG8gZGlzYWJsZSBMUk8gb24gUURNQSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcWRtYV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4gXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxcbiBcXHRcXHRhaXJvaGFfZmVfc2V0KHFkbWEtXFx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xcbkBAIC0xOTM3LDYgKzIyMTUsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbiBcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbiBcXG4rXFx0aWYgKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xSTylcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZW5hYmxlKGRldik7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTk1NCw2ICsyMjM1LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4rXFxuK1xcdGlmIChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9MUk8pXFxuK1xcdFxcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMTE1LDExICsyNDAwLDE0IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcdHFkbWEgPSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XFxuIFxcdGN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFxuLVxcdGlmIChjdXJfcWRtYSlcXG4rXFx0aWYgKGN1cl9xZG1hKSB7XFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEsIHFkbWEpO1xcbiBcXHRuZXRkZXYtXFx1MDAzZWlycSA9IHFkbWEtXFx1MDAzZWlycV9iYW5rc1swXS5pcnE7XFxuK1xcdHFkbWEtXFx1MDAzZXVzZXJzKys7XFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4gXFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xcbkBAIC0yMTM2LDggKzI0MjQsMTQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0XFx0XFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpIFxcdTAwM2NcXHUwMDNjIDEpICsgMSkpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoY3VyX3FkbWEpXFxuK1xcdGlmIChjdXJfcWRtYSkge1xcbitcXHRcXHRjdXJfcWRtYS1cXHUwMDNldXNlcnMtLTtcXG4gXFx0XFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XFxuK1xcdH1cXG4rXFxuK1xcdGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKGRldik7XFxuK1xcdGlmIChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9MUk8pXFxuK1xcdFxcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbkBAIC0yMjg4LDYgKzI1ODIsMzIgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbitcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdGlmIChxZG1hLVxcdTAwM2V1c2VycyBcXHUwMDNlIDEpXFxuK1xcdFxcdGZlYXR1cmVzIFxcdTAwMjY9IH5ORVRJRl9GX0xSTztcXG4rXFxuK1xcdHJldHVybiBmZWF0dXJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xSTylcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZW5hYmxlKGRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbkBAIC0zMTk5LDcgKzM1MTksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuLVxcdGludCBlcnIgPSAtRUJVU1k7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcXG5AQCAtMzIxOCw2ICszNTM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ICAgIHdhbl9kZXYtXFx1MDAzZXBvcnQtXFx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXFwiUW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbiBcXHRcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xcbkBAIC0zMzQzLDYgKzM2NjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3BcXHRcXHQ9IGFpcm9oYV9kZXZfc3RvcCxcXG4gXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc2VsZWN0X3F1ZXVlXFx0PSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSxcXG4rXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzLFxcbitcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gYWlyb2hhX2Rldl94bWl0LFxcbiBcXHQubmRvX2dldF9zdGF0czY0ICAgICAgICA9IGFpcm9oYV9kZXZfZ2V0X3N0YXRzNjQsXFxuIFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBhaXJvaGFfZGV2X3NldF9tYWNhZGRyLFxcbkBAIC0zNDMwLDExICszNzUzLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmFpcm9oYV9ldGh0b29sX29wcztcXG4gXFx0bmV0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gQUlST0hBX01BWF9NVFU7XFxuIFxcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuLVxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPNiB8XFxuLVxcdFxcdFxcdCAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHxcXG4tXFx0XFx0XFx0ICAgICAgTkVUSUZfRl9IV19UQztcXG4tXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzO1xcbi1cXHRuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzO1xcbitcXHRuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTIHwgTkVUSUZfRl9MUk87XFxuK1xcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTO1xcbitcXHRuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7XFxuIFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgZXRoLVxcdTAwM2VkZXYpO1xcbiBcXG4gXFx0LyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuaW5kZXggNTI3ZTM4MzNlMzZiMS4uMjg2ZjczZTJlMWUwOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbkBAIC00Niw2ICs0NiwxOCBAQFxcbiBcXHQgKF9uKSA9PSAxNSA/IDEyOCA6XFx0XFx0XFxcXFxcbiBcXHQgKF9uKSA9PSAgMCA/IDEwMjQgOiAzMilcXG4gXFxuKyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSXFx0XFx0Z2V0X29yZGVyKFNaXzE2SylcXG4rI2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTXFx0OFxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX0VOX01BU0tcXHRcXHRHRU5NQVNLKDMxLCAyNClcXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UXFx0NjRcXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUVcXHQxMDBcXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUVcXHQyMDAwXFxuK1xcbisjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFU1xcdFxcdFxcdFxcXFxcXG4rXFx0KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHxcXHRcXFxcXFxuK1xcdCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0lQVjZfQ1NVTSB8XFx0XFxcXFxcbitcXHQgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9IV19UQylcXG4rXFxuICNkZWZpbmUgUFNFX1JTVl9QQUdFU1xcdFxcdFxcdDEyOFxcbiAjZGVmaW5lIFBTRV9RVUVVRV9SU1ZfUEFHRVNcXHRcXHQ2NFxcbiBcXG5AQCAtNTYxLDYgKzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XFxuIFxcdHZvaWQgX19pb21lbSAqcmVncztcXG4gXFxuK1xcdGludCB1c2VycztcXG4rXFxuIFxcdHN0cnVjdCBhaXJvaGFfaXJxX2JhbmsgaXJxX2JhbmtzW0FJUk9IQV9NQVhfTlVNX0lSUV9CQU5LU107XFxuIFxcbiBcXHRzdHJ1Y3QgYWlyb2hhX3R4X2lycV9xdWV1ZSBxX3R4X2lycVtBSVJPSEFfTlVNX1RYX0lSUV07XFxuQEAgLTcxNSw2ICs3MjksMTggQEAgc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgzKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIFxcdHJldHVybiBldGgtXFx1MDAzZXNvYy1cXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVxcdTAwM2VxZG1hO1xcbitcXHRpbnQgcWlkID0gcSAtIFxcdTAwMjZxZG1hLVxcdTAwM2VxX3J4WzBdO1xcbitcXG4rXFx0LyogRU43NTgxIFNvQyBzdXBwb3J0cyBhdCBtb3N0IDggTFJPIHJ4IHF1ZXVlcyAqL1xcbitcXHRCVUlMRF9CVUdfT04oaHdlaWdodDMyKEFJUk9IQV9SWFFfTFJPX0VOX01BU0spIFxcdTAwM2VcXG4rXFx0XFx0ICAgICBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTKTtcXG4rXFxuK1xcdHJldHVybiAhIShBSVJPSEFfUlhRX0xST19FTl9NQVNLIFxcdTAwMjYgQklUKHFpZCkpO1xcbit9XFxuK1xcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbmluZGV4IDQ0MmI0OGM5Yjk5MWUuLjA3ZGQwNDg1OWZkZTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbkBAIC0xMjIsNiArMTIyLDIwIEBAXFxuICNkZWZpbmUgQ0RNX0NSU05fUVNFTF9SRUFTT05fTUFTSyhfbilcXHRcXFxcXFxuIFxcdEdFTk1BU0soNCArICgoKF9uKSAlIDQpIFxcdTAwM2NcXHUwMDNjIDMpLFxcdCgoKF9uKSAlIDQpIFxcdTAwM2NcXHUwMDNjIDMpKVxcbiBcXG4rI2RlZmluZSBSRUdfQ0RNX0xST19SWFEoX24sIF9tKVxcdFxcdChDRE1fQkFTRShfbikgKyAweDc4ICsgKChfbSkgXFx1MDAyNiAweDQpKVxcbisjZGVmaW5lIExST19SWFFfTUFTSyhfbilcXHRcXHRHRU5NQVNLKDQgKyAoKChfbikgXFx1MDAyNiAweDMpIFxcdTAwM2NcXHUwMDNjIDMpLCAoKF9uKSBcXHUwMDI2IDB4MykgXFx1MDAzY1xcdTAwM2MgMylcXG4rXFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fRU4oX24pXFx0XFx0KENETV9CQVNFKF9uKSArIDB4ODApXFxuKyNkZWZpbmUgTFJPX1JYUV9FTl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg3LCAwKVxcbitcXG4rI2RlZmluZSBSRUdfQ0RNX0xST19MSU1JVChfbilcXHRcXHQoQ0RNX0JBU0UoX24pICsgMHg4NClcXG4rI2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1xcdFxcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIENETV9MUk9fQUdHX1NJWkVfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDApXFxuK1xcbisjZGVmaW5lIFJFR19DRE1fTFJPX0FHRV9USU1FKF9uKVxcdChDRE1fQkFTRShfbikgKyAweDg4KVxcbisjZGVmaW5lIENETV9MUk9fQUdFX1RJTUVfTUFTS1xcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDApXFxuK1xcbiAjZGVmaW5lIFJFR19HRE1fRldEX0NGRyhfbilcXHRcXHRHRE1fQkFTRShfbilcXG4gI2RlZmluZSBHRE1fUEFEX0VOX01BU0tcXHRcXHRcXHRCSVQoMjgpXFxuICNkZWZpbmUgR0RNX0RST1BfQ1JDX0VSUl9NQVNLXFx0XFx0QklUKDIzKVxcbkBAIC04ODcsOSArOTAxLDE2IEBAXFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfU1BPUlRfTUFTS1xcdEdFTk1BU0soMjUsIDIxKVxcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0NSU05fTUFTS1xcdEdFTk1BU0soMjAsIDE2KVxcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1BQRV9FTlRSWV9NQVNLXFx0R0VOTUFTSygxNSwgMClcXG4rLyogUlggTVNHMiAqL1xcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLXFx0R0VOTUFTSygzMSwgMjQpXFxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0tcXHRHRU5NQVNLKDYsIDApXFxuKy8qIFJYIE1TRzMgKi9cXG4rLyogbWF4IGFnZ3JlZ2F0ZWQgc2l6ZSBpbiBieXRlcyAqL1xcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19MRU5fTUFTS1xcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1xcdEdFTk1BU0soMTUsIDApXFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XFxuLVxcdF9fbGUzMiByc3Y7XFxuK1xcdF9fbGUzMiB0Y3BfdHNfcmVwbHk7XFxuIFxcdF9fbGUzMiBjdHJsO1xcbiBcXHRfX2xlMzIgYWRkcjtcXG4gXFx0X19sZTMyIGRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA5LjcwMzI5NzA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc0OTY1Njg1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQWlyb2hhIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBBaXJvaGEgQVJNL0FSTTY0IFNvQ3MgKEVONzU4MS9BTjc1ODMpIHJlbHlpbmcgb24gU29DLXNwZWNpZmljIERldmljZSBUcmVlIGJpbmRpbmdzIGFuZCBoYXJkd2FyZSBNTUlPL3Jlc2V0cy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE5NDIwM2M5ZWRkODk2ZDQ5ZjJjNjc3NDczZDA1NmY0YjEwNzExODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE5OjM0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDY0NjE5ZTlhNzA0ZGQuLjIxYWM4MGJkZDA4NGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtMTAsOCArMTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BwcF9kZWZzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImFpcm9oYV9yZWdzLmhcIlxuQEAgLTQ5MSw2ICs0OTMsODggQEAgc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2Nyc25fcXNlbF9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gXHRcdFx0XHQgQ0RNX0NSU05fUVNFTF9RMSkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXG4rXHRcdFx0XHQgICAgIGludCBscm9fcXVldWVfaW5kZXgsIGludCBxaWQsXG4rXHRcdFx0XHQgICAgIGludCBidWZfc2l6ZSlcbit7XG4rXHRpbnQgaWQgPSBxZG1hX2lkICsgMTtcbitcbitcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4rXHRcdCAgICAgIENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLLFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcbitcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19OVU1fTUFTSyxcbitcdFx0XHRcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKSk7XG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuK1x0XHQgICAgICBDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0VfVElNRV9NQVNLLFxuK1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1RJTUVfTUFTSyxcbitcdFx0XHRcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUUpKTtcbitcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksXG4rXHRcdCAgICAgIExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLFxuK1x0XHQgICAgICBfX2ZpZWxkX3ByZXAoTFJPX1JYUV9NQVNLKGxyb19xdWV1ZV9pbmRleCksIHFpZCkpO1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4re1xuK1x0aW50IGksIGlkID0gcWRtYV9pZCArIDE7XG4rXG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIExST19SWFFfRU5fTUFTSyk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4rXHRcdFx0Q0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0spO1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuK1x0XHRcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTOyBpKyspXG4rXHRcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgaSksIExST19SWFFfTUFTSyhpKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZClcbit7XG4rXHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgKyAxKSxcbitcdFx0XHQgICAgIExST19SWFFfRU5fTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuK1x0aW50IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4rXHRpbnQgaSwgbHJvX3F1ZXVlX2luZGV4ID0gMDtcbitcbitcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpKyspIHtcbitcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFx1MDAyNnFkbWEtXHUwMDNlcV9yeFtpXTtcbitcdFx0dTMyIHNpemU7XG4rXG4rXHRcdGlmICghcS1cdTAwM2VuZGVzYylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbitcdFx0c2l6ZSA9IG1pbl90KHUzMiwgc2l6ZSwgQUlST0hBX01BWF9SWF9TSVpFKTtcbitcdFx0YWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKGV0aCwgcWRtYV9pZCwgbHJvX3F1ZXVlX2luZGV4LCBpLFxuK1x0XHRcdFx0XHQgc2l6ZSk7XG4rXHRcdGxyb19xdWV1ZV9pbmRleCsrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRpbnQgcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmICghYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpXG4rXHRcdHJldHVybjtcbitcbitcdGFpcm9oYV9mZV9scm9fZGlzYWJsZShldGgsIHFkbWFfaWQpO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4ge1xuIFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcbkBAIC02MTYsNiArNzAwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdGUtXHUwMDNlZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpICsgb2Zmc2V0O1xuIFx0XHRlLVx1MDAzZWRtYV9sZW4gPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbiBcbitcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVx1MDAzZWRtYV9sZW4pO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVx1MDAzZWRtYV9hZGRyKSk7XG5AQCAtNjU3LDEzICs3NDIsMTQ2IEBAIGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjKVxuIFx0cmV0dXJuIHBvcnQtXHUwMDNlZGV2c1tkXSA/IHBvcnQtXHUwMDNlZGV2c1tkXSA6IEVSUl9QVFIoLUVOT0RFVik7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbitcdFx0XHRcdCAgdTMyIG1zZzEsIHUzMiBsZW4pXG4re1xuK1x0dTMyIHRoX29mZiwgdGNwX2Fja19zZXEsIGRhdGFfb2ZmLCBhZ2dfY291bnQgPSAxO1xuK1x0dTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcS1cdTAwM2Vza2I7XG4rXHR1MTYgdGNwX3dpbiwgbDJfbGVuO1xuK1x0c3RydWN0IHRjcGhkciAqdGg7XG4rXHRib29sIGlwdjQsIGlwdjY7XG4rXG4rXHRpZiAoYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKSB7XG4rXHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4rXHRcdGlmIChhZ2dfY291bnQgXHUwMDNlIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAobGlrZWx5KGFnZ19jb3VudCBcdTAwM2M9IDEpKSAvKiBub3QgTFJPICovXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XG4rXHRpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTtcbitcdGlmICghaXB2NCBcdTAwMjZcdTAwMjYgIWlwdjYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTtcbitcbitcdGlmIChpcHY0KSB7XG4rXHRcdHN0cnVjdCBpcGhkciAqaXBoLCBfaXBoO1xuK1xuK1x0XHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsMl9sZW4sIHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4rXHRcdGlmICghaXBoKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZWlobCBcdTAwM2MgNSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0dGhfb2ZmID0gbDJfbGVuICsgKGlwaC1cdTAwM2VpaGwgXHUwMDNjXHUwMDNjIDIpO1xuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgbDJfbGVuKTtcbitcdFx0aXBoLVx1MDAzZXRvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC1cdTAwM2VpaGwpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4rXG4rXHRcdHRoX29mZiA9IGwyX2xlbiArIHNpemVvZigqaXA2aCk7XG4rXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHRoX29mZikpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBsMl9sZW4pO1xuK1x0XHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyICE9IE5FWFRIRFJfVENQKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpcDZoLVx1MDAzZXBheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTtcbitcdH1cbitcbitcdGRhdGFfb2ZmID0gdGhfb2ZmICsgc2l6ZW9mKCp0aCk7XG4rXHRpZiAobGVuIFx1MDAzYyBkYXRhX29mZilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSArIHRoX29mZik7XG4rXHRpZiAodGgtXHUwMDNlZG9mZiBcdTAwM2MgNSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRkYXRhX29mZiA9IHRoX29mZiArICh0aC1cdTAwM2Vkb2ZmIFx1MDAzY1x1MDAzYyAyKTtcbitcdGlmIChsZW4gXHUwMDNjPSBkYXRhX29mZilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSyxcbitcdFx0XHQgICAgbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMykpKTtcbitcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlZGF0YSkpO1xuK1x0dGgtXHUwMDNlYWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTtcbitcdHRoLVx1MDAzZXdpbmRvdyA9IGNwdV90b19iZTE2KHRjcF93aW4pO1xuK1xuK1x0LyogQ2hlY2sgdGNwIHRpbWVzdGFtcCBvcHRpb24gKi9cbitcdGlmICh0aC1cdTAwM2Vkb2ZmID09IChzaXplb2YoKnRoKSArIFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkge1xuK1x0XHR1MzIgdG9wdDtcbitcbitcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgZGF0YV9vZmYpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgdGhfb2ZmKTtcbitcdFx0dG9wdCA9IGdldF91bmFsaWduZWRfYmUzMih0aCArIDEpO1xuK1x0XHRpZiAodG9wdCA9PSAoKFRDUE9QVF9OT1AgXHUwMDNjXHUwMDNjIDI0KSB8IChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAxNikgfFxuK1x0XHRcdCAgICAgKFRDUE9QVF9USU1FU1RBTVAgXHUwMDNjXHUwMDNjIDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7XG4rXHRcdFx0dTggKnB0ciA9ICh1OCAqKXRoICsgc2l6ZW9mKCp0aCkgKyAyICogc2l6ZW9mKF9fYmUzMik7XG4rXHRcdFx0X19sZTMyIHRjcF90c19yZXBseSA9IFJFQURfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSk7XG4rXG4rXHRcdFx0LyogVGhlIGZpZWxkIGlzIHByZS16ZXJvZWQgaW4gdGhlIHBvc3RlZCBkZXNjcmlwdG9yLFxuK1x0XHRcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXG4rXHRcdFx0ICogdGltZXN0YW1wIGVjaG8gcmVwbHkgaXMgdmFsaWQuIExlYXZlIFRTZWNyXG4rXHRcdFx0ICogdW50b3VjaGVkIG90aGVyd2lzZSwgc2luY2UgdGhlIGhhcmR3YXJlIG1heSBub3RcbitcdFx0XHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICh0Y3BfdHNfcmVwbHkpXG4rXHRcdFx0XHRwdXRfdW5hbGlnbmVkX2JlMzIobGUzMl90b19jcHUodGNwX3RzX3JlcGx5KSxcbitcdFx0XHRcdFx0XHQgICBwdHIpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAoaXB2NCkge1xuK1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBsMl9sZW4pO1xuK1xuK1x0XHR0aC1cdTAwM2VjaGVjayA9IH50Y3BfdjRfY2hlY2sobGVuIC0gdGhfb2ZmLCBpcGgtXHUwMDNlc2FkZHIsXG4rXHRcdFx0XHRcdCAgaXBoLVx1MDAzZWRhZGRyLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICsgbDJfbGVuKTtcbitcbitcdFx0dGgtXHUwMDNlY2hlY2sgPSB+dGNwX3Y2X2NoZWNrKGxlbiAtIHRoX29mZiwgXHUwMDI2aXA2aC1cdTAwM2VzYWRkcixcbitcdFx0XHRcdFx0ICBcdTAwMjZpcDZoLVx1MDAzZWRhZGRyLCAwKTtcbitcdH1cbitcbitcdHNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcbitcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSA9IGlwdjQgPyBTS0JfR1NPX1RDUFY0IDogU0tCX0dTT19UQ1BWNjtcbitcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZO1xuK1x0c2hpbmZvLVx1MDAzZWdzb19zaXplID0gRElWX1JPVU5EX1VQKGxlbiAtIGRhdGFfb2ZmLCBhZ2dfY291bnQpO1xuK1x0c2hpbmZvLVx1MDAzZWdzb19zZWdzID0gYWdnX2NvdW50O1xuK1xuK1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRoX29mZjtcbitcdHNrYi1cdTAwM2Vjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbitcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCk7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4tXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4tXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbi1cdGludCBkb25lID0gMDtcbitcdGludCBxaWQgPSBxIC0gXHUwMDI2cS1cdTAwM2VxZG1hLVx1MDAzZXFfcnhbMF0sIGRvbmUgPSAwO1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXHUwMDNlcWRtYS1cdTAwM2VldGg7XG4gXG4gXHR3aGlsZSAoZG9uZSBcdTAwM2MgYnVkZ2V0KSB7XG4gXHRcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSBcdTAwMjZxLVx1MDAzZWVudHJ5W3EtXHUwMDNldGFpbF07XG5AQCAtNjk2LDcgKzkxNCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAoSVNfRVJSKGRldikpXG4gXHRcdFx0Z290byBmcmVlX2ZyYWc7XG4gXG4rXHRcdG1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cxKSk7XG4gXHRcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbitcbiBcdFx0aWYgKCFxLVx1MDAzZXNrYikgeyAvKiBmaXJzdCBidWZmZXIgKi9cbiBcdFx0XHRxLVx1MDAzZXNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLFxuIFx0XHRcdFx0XHRcdHEtXHUwMDNlYnVmX3NpemUpO1xuQEAgLTcwNyw5ICs5MjcsMTcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXG4gXHRcdFx0X19za2JfcHV0KHEtXHUwMDNlc2tiLCBsZW4pO1xuIFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHEtXHUwMDNlc2tiKTtcbiBcdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVx1MDAzZXNrYiwgbmV0ZGV2KTtcbiBcdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHEtXHUwMDNlc2tiLCBxaWQpO1xuK1xuK1x0XHRcdGlmIChhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHEsIGRlc2MsIG1zZzEsIGxlbikpIHtcbitcdFx0XHRcdGRldl9jb3JlX3N0YXRzX3J4X2Ryb3BwZWRfaW5jKG5ldGRldik7XG4rXHRcdFx0XHRkZXZfa2ZyZWVfc2tiKHEtXHUwMDNlc2tiKTtcbitcdFx0XHRcdHEtXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbitcbitcdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHEtXHUwMDNlc2tiLCBuZXRkZXYpO1xuIFx0XHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cbiBcdFx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHEtXHUwMDNlc2tiKTtcbiBcdFx0XHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXHUwMDNlbnJfZnJhZ3M7XG5AQCAtNzQyLDcgKzk3MCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRcdFx0XHRcdCAgXHUwMDI2cG9ydC1cdTAwM2Vkc2FfbWV0YVtzcHRhZ10tXHUwMDNlZHN0KTtcbiBcdFx0fVxuIFxuLVx0XHRtc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMSkpO1xuIFx0XHRoYXNoID0gRklFTERfR0VUKEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSwgbXNnMSk7XG4gXHRcdGlmIChoYXNoICE9IEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSlcbiBcdFx0XHRza2Jfc2V0X2hhc2gocS1cdTAwM2Vza2IsIGpoYXNoXzF3b3JkKGhhc2gsIDApLFxuQEAgLTgwMCwxMiArMTAyNywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbitcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbiBcdFx0LnBvb2xfc2l6ZSA9IDI1NixcbiBcdFx0LmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsXG4gXHRcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxuLVx0XHQubWF4X2xlbiA9IFBBR0VfU0laRSxcbiBcdFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcbiBcdFx0LmRldiA9IHFkbWEtXHUwMDNlZXRoLVx1MDAzZWRldixcbiBcdFx0Lm5hcGkgPSBcdTAwMjZxLVx1MDAzZW5hcGksXG5AQCAtODEzLDkgKzEwMzgsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4gXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXSwgdGhyO1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbitcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4rXHRscm9fcSA9IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKTtcbiBcbiBcdHEtXHUwMDNlZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLVx1MDAzZWRldiwgbmRlc2MgKiBzaXplb2YoKnEtXHUwMDNlZW50cnkpLFxuIFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG5AQCAtODI3LDYgKzEwNTMsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdGlmICghcS1cdTAwM2VkZXNjKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbitcdHBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBwcF9wYXJhbXMub3JkZXI7XG4rXG4gXHRxLVx1MDAzZXBhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbiBcdGlmIChJU19FUlIocS1cdTAwM2VwYWdlX3Bvb2wpKSB7XG4gXHRcdGludCBlcnIgPSBQVFJfRVJSKHEtXHUwMDNlcGFnZV9wb29sKTtcbkBAIC04MzUsNiArMTA2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0cS1cdTAwM2VidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7XG4gXHRxLVx1MDAzZW5kZXNjID0gbmRlc2M7XG4gXHRuZXRpZl9uYXBpX2FkZChldGgtXHUwMDNlbmFwaV9kZXYsIFx1MDAyNnEtXHUwMDNlbmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTtcbiBcbkBAIC04NDgsNyArMTA3OCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdFx0XHRGSUVMRF9QUkVQKFJYX1JJTkdfVEhSX01BU0ssIHRocikpO1xuIFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19SWF9ETUFfSURYKHFpZCksIFJYX1JJTkdfRE1BX0lEWF9NQVNLLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19ETUFfSURYX01BU0ssIHEtXHUwMDNlaGVhZCkpO1xuLVx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spO1xuK1x0aWYgKGxyb19xKVxuK1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbitcdFx0XHRcdCAgUlhfUklOR19TR19FTl9NQVNLKTtcbitcdGVsc2VcbitcdFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxuK1x0XHRcdFx0UlhfUklOR19TR19FTl9NQVNLKTtcbiBcbiBcdGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUocSk7XG4gXG5AQCAtODcwLDYgKzExMDUsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWN0cmwsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlYWRkciwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VkYXRhLCAwKTtcbkBAIC0xODk2LDYgKzIxMzIsMzQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3VwZGF0ZV9od19zdGF0cyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlc3RhdHNfbG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGV0aC1cdTAwM2Vwb3J0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZXRoLVx1MDAzZXBvcnRzW2ldO1xuK1x0XHRpbnQgajtcbitcbitcdFx0aWYgKCFwb3J0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHBvcnQtXHUwMDNlZGV2cyk7IGorKykge1xuK1x0XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LVx1MDAzZWRldnNbal07XG4rXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdFx0XHRpZiAoIWl0ZXJfZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihpdGVyX2Rldik7XG4rXHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTE5MTMsMTQgKzIxNzcsMjggQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiBcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XG4gXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4tXHRpbnQgZXJyO1xuK1x0aW50IHFkbWFfaWQsIGVycjtcbitcbitcdC8qIExSTyBpcyBjb25maWd1cmVkIG9uIHRoZSBRRE1BIGFuZCBpdCBpcyBzaGFyZWQgYmV0d2VlbiBhbGxcbitcdCAqIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24gdGhlXG4rXHQgKiBzYW1lIFFETUEgaWYgTFJPIGlzIGVuYWJsZWQgb24gYW55IGRldmljZSBzaGFyaW5nIGl0IG9yIGlmXG4rXHQgKiB0aGlzIGRldmljZSBoYXMgTFJPIGVuYWJsZWQgaW4gaXRzIGZlYXR1cmUgc2V0LlxuK1x0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2cWRtYS1cdTAwM2VldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmIChxZG1hLVx1MDAzZXVzZXJzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKHFkbWEtXHUwMDNlZXRoLCBxZG1hX2lkKSB8fFxuK1x0XHRcdFx0KG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MUk8pKSkge1xuK1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwicmVxdWlyZWQgdG8gZGlzYWJsZSBMUk8gb24gUURNQSVkXFxuXCIsXG4rXHRcdFx0ICAgIHFkbWFfaWQpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXG4gXHRcdGFpcm9oYV9mZV9zZXQocWRtYS1cdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XG5AQCAtMTkzNyw2ICsyMjE1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTFJPKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgKzIyMzUsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbitcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTFJPKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjExNSwxMSArMjQwMCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4gXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4rXHRpZiAoY3VyX3FkbWEpIHtcbiBcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4rXHRcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcbitcdH1cbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0cWRtYS1cdTAwM2V1c2VycysrO1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCArMjQyNCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4gXHR9XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4rXHRpZiAoY3VyX3FkbWEpIHtcbitcdFx0Y3VyX3FkbWEtXHUwMDNldXNlcnMtLTtcbiBcdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4rXHR9XG4rXG4rXHRhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhkZXYpO1xuK1x0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MUk8pXG4rXHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIyODgsNiArMjU4MiwzMiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuK1xuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSlcbitcdFx0ZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MUk87XG4rXG4rXHRyZXR1cm4gZmVhdHVyZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MUk8pXG4rXHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG5AQCAtMzE5OSw3ICszNTE5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbi1cdGludCBlcnIgPSAtRUJVU1k7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG5AQCAtMzIxOCw2ICszNTM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0XHQgICBcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCIpO1xuK1x0XHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiBcdFx0fVxuIFx0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuQEAgLTMzNDMsNiArMzY2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb2hhX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBhaXJvaGFfZGV2X3N0b3AsXG4gXHQubmRvX2NoYW5nZV9tdHVcdFx0PSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsXG4gXHQubmRvX3NlbGVjdF9xdWV1ZVx0PSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSxcbitcdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzLFxuK1x0Lm5kb19zZXRfZmVhdHVyZXNcdD0gYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBhaXJvaGFfZGV2X3htaXQsXG4gXHQubmRvX2dldF9zdGF0czY0ICAgICAgICA9IGFpcm9oYV9kZXZfZ2V0X3N0YXRzNjQsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBhaXJvaGFfZGV2X3NldF9tYWNhZGRyLFxuQEAgLTM0MzAsMTEgKzM3NTMsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZhaXJvaGFfZXRodG9vbF9vcHM7XG4gXHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IEFJUk9IQV9NQVhfTVRVO1xuIFx0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuLVx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTzYgfFxuLVx0XHRcdCAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0hXX1RDO1xuLVx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbi1cdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzO1xuK1x0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTIHwgTkVUSUZfRl9MUk87XG4rXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuK1x0bmV0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7XG4gXHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIGV0aC1cdTAwM2VkZXYpO1xuIFxuIFx0LyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IDUyN2UzODMzZTM2YjEuLjI4NmY3M2UyZTFlMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNDYsNiArNDYsMTggQEBcbiBcdCAoX24pID09IDE1ID8gMTI4IDpcdFx0XFxcbiBcdCAoX24pID09ICAwID8gMTAyNCA6IDMyKVxuIFxuKyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSXHRcdGdldF9vcmRlcihTWl8xNkspXG4rI2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTXHQ4XG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19FTl9NQVNLXHRcdEdFTk1BU0soMzEsIDI0KVxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVFx0NjRcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRVx0MTAwXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUVcdDIwMDBcbitcbisjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFU1x0XHRcdFxcXG4rXHQoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFx0XFxcbitcdCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0lQVjZfQ1NVTSB8XHRcXFxuK1x0IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSFdfVEMpXG4rXG4gI2RlZmluZSBQU0VfUlNWX1BBR0VTXHRcdFx0MTI4XG4gI2RlZmluZSBQU0VfUVVFVUVfUlNWX1BBR0VTXHRcdDY0XG4gXG5AQCAtNTYxLDYgKzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuK1x0aW50IHVzZXJzO1xuK1xuIFx0c3RydWN0IGFpcm9oYV9pcnFfYmFuayBpcnFfYmFua3NbQUlST0hBX01BWF9OVU1fSVJRX0JBTktTXTtcbiBcbiBcdHN0cnVjdCBhaXJvaGFfdHhfaXJxX3F1ZXVlIHFfdHhfaXJxW0FJUk9IQV9OVU1fVFhfSVJRXTtcbkBAIC03MTUsNiArNzI5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4rXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbitcbitcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbitcdEJVSUxEX0JVR19PTihod2VpZ2h0MzIoQUlST0hBX1JYUV9MUk9fRU5fTUFTSykgXHUwMDNlXG4rXHRcdCAgICAgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUyk7XG4rXG4rXHRyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyBcdTAwMjYgQklUKHFpZCkpO1xuK31cbitcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMDdkZDA0ODU5ZmRlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICsxMjIsMjAgQEBcbiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pXHRcXFxuIFx0R0VOTUFTSyg0ICsgKCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpLFx0KCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpKVxuIFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSArIDB4NzggKyAoKF9tKSBcdTAwMjYgMHg0KSlcbisjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICsgKCgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDI2IDB4MykgXHUwMDNjXHUwMDNjIDMpXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODApXG4rI2RlZmluZSBMUk9fUlhRX0VOX01BU0tcdFx0XHRHRU5NQVNLKDcsIDApXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19MSU1JVChfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODQpXG4rI2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1NJWkVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuKyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICsgMHg4OClcbisjZGVmaW5lIENETV9MUk9fQUdFX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKVx0XHRHRE1fQkFTRShfbilcbiAjZGVmaW5lIEdETV9QQURfRU5fTUFTS1x0XHRcdEJJVCgyOClcbiAjZGVmaW5lIEdETV9EUk9QX0NSQ19FUlJfTUFTS1x0XHRCSVQoMjMpXG5AQCAtODg3LDkgKzkwMSwxNiBAQFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfU1BPUlRfTUFTS1x0R0VOTUFTSygyNSwgMjEpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0tcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfUFBFX0VOVFJZX01BU0tcdEdFTk1BU0soMTUsIDApXG4rLyogUlggTVNHMiAqL1xuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0tcdEdFTk1BU0soMzEsIDI0KVxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0tcdEdFTk1BU0soNiwgMClcbisvKiBSWCBNU0czICovXG4rLyogbWF4IGFnZ3JlZ2F0ZWQgc2l6ZSBpbiBieXRlcyAqL1xuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0xFTl9NQVNLXHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1x0R0VOTUFTSygxNSwgMClcbiBcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XG4tXHRfX2xlMzIgcnN2O1xuK1x0X19sZTMyIHRjcF90c19yZXBseTtcbiBcdF9fbGUzMiBjdHJsO1xuIFx0X19sZTMyIGFkZHI7XG4gXHRfX2xlMzIgZGF0YTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA5LjcwMzI5ODc1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTY2NTg0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwYXRjaDpcblxuKipQYXRjaCBBbmFseXNpcyAtIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGZpbGUgcGF0aHM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jYCBhbmQgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoYXQncyBhIG5ldHdvcmtpbmcgZHJpdmVyLCBzbyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBXaGF0IGtpbmQgb2YgaGFyZHdhcmUsIFNvQywgb3Igc3BlY2lmaWMgcGxhdGZvcm0gaXMgdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIGRlc2lnbmVkIGZvcj8gSXMgaXQgYSBjb21tb24gYXJjaGl0ZWN0dXJlPyBEb2VzIGl0IGFwcGVhciBpbiB3aWRlbHkgZGVwbG95ZWQgZGV2aWNlcz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYGdyZXBgIGZvciBwb3RlbnRpYWwga2V5d29yZHMgd2l0aGluIHRoZSBkcml2ZXIgZmlsZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzLiBBbHRlcm5hdGl2ZWx5LCBJIGNhbiBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciB0byBzZWUgaWYgdGhhdCByZXZlYWxzIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0ZWQgaGFyZHdhcmUgb3IgZGV2aWNlcywgYW5kIHRoZSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBhbmQgaGFyZHdhcmUgaXQgbWlnaHQgc3VwcG9ydC4gS25vd2luZyB0aGUgdGFyZ2V0IGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyBjcml0aWNhbCBhIGJ1ZyBjb3VsZCBiZSwgYW5kIHdoZXRoZXIgb3VyIGZ1enppbmcgZWZmb3J0cyBhcmUgbGlrZWx5IHRvIGZpbmQgc29tZXRoaW5nIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MTIuNTU5OTYwNjg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjI4NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUlST0hBfGNvbmZpZyBBSVJPSEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTg9aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxODpjb25maWcgTkVUX0FJUk9IQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI3OmNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yOC1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MTIuNjIwNTk2NDk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA3ODUzMzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBzaXR1YXRpb24uIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyaW5nIG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWF0aW9ucyB0aGlzIGRyaXZlciBzdXBwb3J0cy4gS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBkcml2ZXJzIGZpdCBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNoaXAgbW9kZWwgZGVzaWduYXRpb25zLCBhbnkgc3BlY2lmaWMgYm9hcmQtbGV2ZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWNjb3VudGVkIGZvciwgYW5kIG9mIGNvdXJzZSwgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGl0IHJlbGllcyB1cG9uLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGRyaXZlciAqbmVlZHMqIHRvIGZ1bmN0aW9uIGFuZCB3aGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlIHRoYXQgc2hhcGUgaXRzIGJlaGF2aW9yLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBwcm9jZWVkIHRvIGFueSBkZWVwZXIgY29kZSBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjE1LjY5OTEzMjczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICAzOlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRpZiBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgTkVUX0FJUk9IQV9OUFVcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gIDEzOlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXFxuICAxNjpcXHRcXHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9BSVJPSEFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcbiAgMjE6XFx0XFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXFxuICAyNTpcXHRcXHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVUX0FJUk9IQV9GTE9XX1NUQVRTXFxuICAyODpcXHRcXHRkZWZhdWx0IHlcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBmbG93IHN0YXRzXFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFxcdTAwMjZcXHUwMDI2IE5FVF9BSVJPSEFfTlBVXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjE1LjY5OTE5MDQ0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzQ5NDU5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSB0ZXh0J3MgcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgQWlyb2hhIFNvQyBEcml2ZXIqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZHJpdmVyIGluIHRoZSBjb250ZXh0IG9mIHRoZSBBaXJvaGEgU29DLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIGEgZmV3IGNydWNpYWwgcG9pbnRzLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZHJpdmVyJ3MgcHJvYmluZyBtZWNoYW5pc20g4oCTIGhvdyBkb2VzIGl0IGFjdHVhbGx5IGRldGVjdCBhbmQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmU/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBkZXZpY2UgSURzLCBwbGF0Zm9ybSBkYXRhLCBvciBzb21lIG90aGVyIG1ldGhvZD8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGZ1bmRhbWVudGFsIHRvIGRldGVybWluaW5nIGl0cyBhcmNoaXRlY3R1cmUuIEFuZCB0aGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgZGV2aWNlIHVzZXMgUGxhdGZvcm0gZHJpdmVycy4gSXMgdGhpcyBkcml2ZXIgYnVpbHQgYXMgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIHNvbWUgb3RoZXIgdHlwZSBvZiBmcmFtZXdvcms/IFVsdGltYXRlbHkgSSBuZWVkIHRvIGtub3cgdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoxNy45NzQxMzk4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ0MTEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFfcHJvYmV8bW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxhaXJvaGFfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4ODE9c3RhdGljIGludCBhaXJvaGFfcmVnaXN0ZXJfZ2RtX2RldmljZXMoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5MTA6c3RhdGljIGludCBhaXJvaGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MjczPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2Fpcm9oYV9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00Mjc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI3NTpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI3NjpcXHQucHJvYmUgPSBhaXJvaGFfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00Mjc3LVxcdC5yZW1vdmUgPSBhaXJvaGFfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MjgyLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MjgzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00Mjg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyMi19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoxOC4wMzA1ODk3OTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ5Mzg0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhaXJvaGFfZXRoLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIHByb2JlIGFuZCBvZl9tYXRjaCBmdW5jdGlvbnMg4oCTIGBhaXJvaGFfcHJvYmVgIGFuZCBgb2ZfYWlyb2hhX21hdGNoYCwgcmVzcGVjdGl2ZWx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBob3cgaXQncyBpZGVudGlmeWluZyBhbmQgYXNzb2NpYXRpbmcgaXRzZWxmIHdpdGggdGhlIHNwZWNpZmljIEFpcm9oYSBoYXJkd2FyZSBpdCdzIGRlc2lnbmVkIHRvIHN1cHBvcnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZW50cnkgcG9pbnRzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2aWNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IsIGZyYW5rbHksIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBnb2luZyB3cm9uZyBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUgZHJpdmVyJ3MgbGlmZWN5Y2xlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgaW4gdGhlIGRldmljZSBtYXRjaGluZyBsb2dpYywgcGFydGljdWxhcmx5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkaXNjcmVwYW5jaWVzIGluIHRoZSBleHBlY3RlZCBkZXZpY2UgSURzIG9yIGNvbXBhdGlibGUgc3RyaW5ncy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBtaXNzaW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgZW50cmllcywgd2hpY2ggd291bGQgY2F1c2UgYW4gaW5zdGFudGlhdGlvbiBmYWlsdXJlLCBvciBpbmNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzcyBtYXBwaW5nLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiBtYWtpbmcgc3VyZSB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoyMC4yNzk5ODI2ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzAxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX2Fpcm9oYV9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MjU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWlyb2hhX2V0aF9zb2NfZGF0YSBhbjc1ODNfc29jX2RhdGEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MjY4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2Fpcm9oYV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI2OS1cXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjc1ODEtZXRoXFxcIiwgLmRhdGEgPSBcXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzItfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNzM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfYWlyb2hhX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00Mjc1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzktXFx0XFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyODA6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX21hdGNoLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI4MS1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoyMC4zNjE2OTA2NTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc4NjcwNDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBhaXJvaGFfcHJvYmVgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFpcm9oYV9wcm9iZWAgaXMgYWN0dWFsbHkgKmRvaW5nKiB1bmRlciB0aGUgaG9vZCwgcmVzb3VyY2Utd2lzZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIGRldmljZSB0cmVlLiBXaGF0IG5vZGVzIGlzIGl0IHBhcnNpbmc/IEFyZSB0aGVyZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIGl0J3MgbG9va2luZyBmb3I/IFRoZW4sIEknbGwgbW92ZSBvbiB0byBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTykuIFdoYXQgcmVnaXN0ZXJzIGlzIGl0IGFjY2Vzc2luZz8gV2hhdCBhZGRyZXNzZXM/IEFueSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBpdCdzIHJlcXVlc3Rpbmc/IEFmdGVyIHRoYXQsIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBob3cgaXQgaXMgaGFuZGxpbmcgY2xvY2tzIGFuZCByZXNldHMuIFdoYXQgY2xvY2tzIGlzIGl0IGVuYWJsaW5nIG9yIGRpc2FibGluZz8gQXJlIHRoZXJlIHNwZWNpZmljIGNsb2NrIGRpdmlkZXJzIGluIHVzZT8gSG93IGFib3V0IHJlc2V0cz8gQXJlIGFueSBsaW5lcyBiZWluZyBhc3NlcnRlZCBvciBkZS1hc3NlcnRlZD8gSSB3aWxsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGlzIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NDYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoyMy4xNDgzOTg5MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkxMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzkxMDpcXHRzdGF0aWMgaW50IGFpcm9oYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjM5MTE6XFx0e1xcbjM5MTI6XFx0XFx0c3RydWN0IHJlc2V0X2NvbnRyb2xfYnVsa19kYXRhICp4c2lfcnN0cztcXG4zOTEzOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuMzkxNDpcXHRcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xcbjM5MTU6XFx0XFx0aW50IGksIGVycjtcXG4zOTE2OlxcdFxcbjM5MTc6XFx0XFx0ZXRoID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqZXRoKSwgR0ZQX0tFUk5FTCk7XFxuMzkxODpcXHRcXHRpZiAoIWV0aClcXG4zOTE5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5MjA6XFx0XFxuMzkyMTpcXHRcXHRldGgtXFx1MDAzZXNvYyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4zOTIyOlxcdFxcdGlmICghZXRoLVxcdTAwM2Vzb2MpXFxuMzkyMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTI0OlxcdFxcbjM5MjU6XFx0XFx0ZXRoLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjM5MjY6XFx0XFxuMzkyNzpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGV0aC1cXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG4zOTI4OlxcdFxcdGlmIChlcnIpIHtcXG4zOTI5OlxcdFxcdFxcdGRldl9lcnIoZXRoLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgY29uZmlndXJpbmcgRE1BIG1hc2tcXFxcblxcXCIpO1xcbjM5MzA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zOTMxOlxcdFxcdH1cXG4zOTMyOlxcdFxcbjM5MzM6XFx0XFx0ZXRoLVxcdTAwM2VmZV9yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCBcXFwiZmVcXFwiKTtcXG4zOTM0OlxcdFxcdGlmIChJU19FUlIoZXRoLVxcdTAwM2VmZV9yZWdzKSlcXG4zOTM1OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGV0aC1cXHUwMDNlZGV2LCBQVFJfRVJSKGV0aC1cXHUwMDNlZmVfcmVncyksXFxuMzkzNjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gaW9tYXAgZmUgcmVnc1xcXFxuXFxcIik7XFxuMzkzNzpcXHRcXG4zOTM4OlxcdFxcdGV0aC1cXHUwMDNlcnN0c1swXS5pZCA9IFxcXCJmZVxcXCI7XFxuMzkzOTpcXHRcXHRldGgtXFx1MDAzZXJzdHNbMV0uaWQgPSBcXFwicGRtYVxcXCI7XFxuMzk0MDpcXHRcXHRldGgtXFx1MDAzZXJzdHNbMl0uaWQgPSBcXFwicWRtYVxcXCI7XFxuMzk0MTpcXHRcXHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cXHUwMDNlZGV2LFxcbjM5NDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoZXRoLVxcdTAwM2Vyc3RzKSxcXG4zOTQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBldGgtXFx1MDAzZXJzdHMpO1xcbjM5NDQ6XFx0XFx0aWYgKGVycikge1xcbjM5NDU6XFx0XFx0XFx0ZGV2X2VycihldGgtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBnZXQgYnVsayByZXNldCBsaW5lc1xcXFxuXFxcIik7XFxuMzk0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM5NDc6XFx0XFx0fVxcbjM5NDg6XFx0XFxuMzk0OTpcXHRcXHR4c2lfcnN0cyA9IGRldm1fa2NhbGxvYyhldGgtXFx1MDAzZWRldixcXG4zOTUwOlxcdFxcdFxcdFxcdFxcdGV0aC1cXHUwMDNlc29jLVxcdTAwM2VudW1feHNpX3JzdHMsIHNpemVvZigqeHNpX3JzdHMpLFxcbjM5NTE6XFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuMzk1MjpcXHRcXHRpZiAoIXhzaV9yc3RzKVxcbjM5NTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzk1NDpcXHRcXG4zOTU1OlxcdFxcdGV0aC1cXHUwMDNleHNpX3JzdHMgPSB4c2lfcnN0cztcXG4zOTU2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGgtXFx1MDAzZXNvYy1cXHUwMDNlbnVtX3hzaV9yc3RzOyBpKyspXFxuMzk1NzpcXHRcXHRcXHRldGgtXFx1MDAzZXhzaV9yc3RzW2ldLmlkID0gZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZXhzaV9yc3RzX25hbWVzW2ldO1xcbjM5NTg6XFx0XFxuMzk1OTpcXHRcXHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cXHUwMDNlZGV2LFxcbjM5NjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGV0aC1cXHUwMDNlc29jLVxcdTAwM2VudW1feHNpX3JzdHMsXFxuMzk2MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZXRoLVxcdTAwM2V4c2lfcnN0cyk7XFxuMzk2MjpcXHRcXHRpZiAoZXJyKSB7XFxuMzk2MzpcXHRcXHRcXHRkZXZfZXJyKGV0aC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGdldCBidWxrIHhzaSByZXNldCBsaW5lc1xcXFxuXFxcIik7XFxuMzk2NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM5NjU6XFx0XFx0fVxcbjM5NjY6XFx0XFxuMzk2NzpcXHRcXHRldGgtXFx1MDAzZW5hcGlfZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbjM5Njg6XFx0XFx0aWYgKCFldGgtXFx1MDAzZW5hcGlfZGV2KVxcbjM5Njk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzk3MDpcXHRcXG4zOTcxOlxcdFxcdC8qIEVuYWJsZSB0aHJlYWRlZCBOQVBJIGJ5IGRlZmF1bHQgKi9cXG4zOTcyOlxcdFxcdGV0aC1cXHUwMDNlbmFwaV9kZXYtXFx1MDAzZXRocmVhZGVkID0gdHJ1ZTtcXG4zOTczOlxcdFxcdHN0cnNjcHkoZXRoLVxcdTAwM2VuYXBpX2Rldi1cXHUwMDNlbmFtZSwgXFxcInFkbWFfZXRoXFxcIiwgc2l6ZW9mKGV0aC1cXHUwMDNlbmFwaV9kZXYtXFx1MDAzZW5hbWUpKTtcXG4zOTc0OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGV0aCk7XFxuMzk3NTpcXHRcXG4zOTc2OlxcdFxcdGVyciA9IGFpcm9oYV9od19pbml0KHBkZXYsIGV0aCk7XFxuMzk3NzpcXHRcXHRpZiAoZXJyKVxcbjM5Nzg6XFx0XFx0XFx0Z290byBlcnJvcl9uZXRkZXZfZnJlZTtcXG4zOTc5OlxcdFxcbjM5ODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVxcdTAwM2VxZG1hKTsgaSsrKSB7XFxuMzk4MTpcXHRcXHRcXHRhaXJvaGFfcWRtYV9zdGFydF9uYXBpKFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbaV0pO1xcbjM5ODI6XFx0XFx0XFx0YWlyb2hhX3FkbWFfc2V0KFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbaV0sIFJFR19RRE1BX0dMT0JBTF9DRkcsXFxuMzk4MzpcXHRcXHRcXHRcXHRcXHRHTE9CQUxfQ0ZHX1RYX0RNQV9FTl9NQVNLIHxcXG4zOTg0OlxcdFxcdFxcdFxcdFxcdEdMT0JBTF9DRkdfUlhfRE1BX0VOX01BU0spO1xcbjM5ODU6XFx0XFx0fVxcbjM5ODY6XFx0XFxuMzk4NzpcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBucCkge1xcbjM5ODg6XFx0XFx0XFx0aWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXFxcImFpcm9oYSxldGgtbWFjXFxcIikpXFxuMzk4OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MjMuMTQ4OTQyNzQ3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDMwODk0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBEcml2ZXIncyBUcmlhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgdHJpYWdlIGNyaXRlcmlhIGFyZSBoaWdobGlnaHRpbmcgYSBjcml0aWNhbCBpc3N1ZTogdGhpcyBkcml2ZXIsIGxldCdzIGNhbGwgaXQgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIsIGZhbGxzIGludG8gYSBjYXRlZ29yeSB0aGF0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBTcGVjaWZpY2FsbHksIHRoZSB0ZXh0IGNhbGxzIG91dCB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhpbmdzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhpcyBpcyBmb2xsb3dlZCBieSBhIHNwZWNpZmljIG1lbnRpb24gb2YgXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCxcIiB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBwcm9ibGVtLlxuXG5XZSdyZSBkZWFsaW5nIHdpdGggQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DcywgZXNzZW50aWFsbHkgQVJNLWJhc2VkIFNvQ3MgdHlwaWNhbGx5IGZvdW5kIGluIHJvdXRlcnMsIFBPTiBkZXZpY2VzLCBhbmQgZ2F0ZXdheXMuIFRoZSBkcml2ZXIgaXMgbG9va2luZyBmb3IgZGV2aWNlIHRyZWUgbm9kZXM6IGBhaXJvaGEsZW43NTgxLWV0aGAgb3IgYGFpcm9oYSxhbjc1ODMtZXRoYCBvbiB0aGUgcGxhdGZvcm0gYnVzLiBOb3csIHRoZSBrZXkgaXMgdGhlIGNvbnRleHQ6XG5cbjEuICAqKlRhcmdldCBhcmNoaXRlY3R1cmUqKjogV2UncmUgb24gYW1kNjQgKHg4NlxcXzY0KSBzeXN0ZW1zLlxuMi4gICoqSGFyZHdhcmUgRGVwZW5kZW5jeSoqOiBUaGUgZHJpdmVyIGlzIGZvciBBaXJvaGEgU29DICpwbGF0Zm9ybSogZGV2aWNlcy4gSXQgKnJlcXVpcmVzKiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBlbnRyaWVzIGZvciB0aGluZ3MgbGlrZSByZXNldCBjb250cm9sbGVycywgbWVtb3J5LW1hcHBlZCBJL08gcmVnaXN0ZXJzLCBQSFkvTUFDIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgKFwiYWlyb2hhLGVuNzU4MS1ldGhcIikuXG4zLiAgKipWaXJ0dWFsaXphdGlvbiBDb25zdHJhaW50Kio6IFN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGxpa2UgeDg2XFxfNjQgUUVNVSBvciBHQ0UgKmRvZXNuJ3QqIGhhdmUgdGhpcyBBaXJvaGEgaGFyZHdhcmUgb3IgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZXMuIEEgcGxhdGZvcm0gZHJpdmVyIHVzaW5nIGBvZl9tYXRjaF90YWJsZWAgKmNhbm5vdCogcHJvYmUgd2l0aG91dCB0aGVzZSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2Rlcy5cblxuU28sIHRoZSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyIGlzIGF0dGVtcHRpbmcgdG8gcnVuIG9uIHg4NlxcXzY0IGJ1dCBleHBlY3RzIEFSTS1zcGVjaWZpYyBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgZW50cmllcy4gSXQncyBlc3NlbnRpYWxseSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBqdXN0IGlzbid0IHRoZXJlIGluIGEgc3RhbmRhcmQgeDg2IFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHdoZXJlIHN5emthbGxlciBmdXp6aW5nIGlzIHRha2luZyBwbGFjZS5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBMZXQncyBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSdzICphbnkqIHZpcnR1YWwgYnVzIG9yIG1lY2hhbmlzbSB0aGF0IHdvdWxkIGFsbG93IGBhaXJvaGFfZXRoYCB0byBldmVuIGJlIGluc3RhbnRpYXRlZCBpbiB0aGlzIHg4NlxcXzY0IGVudmlyb25tZW50LCBlc3BlY2lhbGx5IGZvciBzeXprYWxsZXIgZnV6emluZy4gSXQgc2VlbXMgdW5saWtlbHksIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIHF1aWNrIGNoZWNrLlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogSXMgYEFSQ0hfQUlST0hBYCBldmVuIHg4NiBjb21wYXRpYmxlPyBMZXQgbWUgaW1tZWRpYXRlbHkgY2hlY2sgYmVjYXVzZSB0aGUgZGVzY3JpcHRpb24gc3VnZ2VzdHMgdGhhdCBpdCB0YXJnZXRzIEFSTSBhcmNoaXRlY3R1cmVzLiBUaGUgdGV4dCBzYXlzIHRvIGBncmVwIEFSQ0hfQUlST0hBYCB0aHJvdWdoIHRoZSBlbnRpcmUga2VybmVsIHRyZWUsIGJ1dCBJIGFscmVhZHkga25vdyB0aGF0IHRvIGJlIHRoZSBjYXNlLCBidXQgbGV0IG1lIGNvbmZpcm0gdGhlIGFyY2hpdGVjdHVyZSBmb3IgQWlyb2hhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjI4Ljg1MjAzNTc0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MjgyNDM0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9BSVJPSEFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXM9NTU9Y29uZmlnIEFSQ0hfVklSVFxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXMtNjUtXFxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXM6NjY6Y29uZmlnIEFSQ0hfQUlST0hBXFxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXMtNjctXFx0Ym9vbCBcXFwiQWlyb2hhIFNvQyBTdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcz00PWNvbmZpZyBBUkNIX0FDVElPTlNcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTAtXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczoxMTpjb25maWcgQVJDSF9BSVJPSEFcXG5hcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zLTEyLVxcdGJvb2wgXFxcIkFpcm9oYSBTb0MgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MzEuMzI0ODY0OTc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NzQ5NzY3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBBUkNIX0FJUk9IQWAgaXMgZXhjbHVzaXZlbHkgdGllZCB0byBBUk0gYW5kIEFSTTY0IHBsYXRmb3Jtcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGBLY29uZmlnLnBsYXRmb3Jtc2AgZmlsZXMuICBPbiBhbWQ2NCwgdGhlIGBDT05GSUdfTkVUX0FJUk9IQWAgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIGVpdGhlciBgQVJDSF9BSVJPSEFgIG9yIGBDT01QSUxFX1RFU1RgLiBFdmVuIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIHRoaXMgaXMgc3RpbGwgYSAqcGxhdGZvcm0qIGRyaXZlci4gSXTigJlzIGRlc2lnbmVkIGZvciBhIHZlcnkgc3BlY2lmaWMgQWlyb2hhIFNvQyBoYXJkd2FyZSB3aXRoIGRlcGVuZGVuY2llcyBsaWtlIERldmljZSBUcmVlIG5vZGVzIChgYWlyb2hhLGVuNzU4MS1ldGhgKSBhbmQsIGNydWNpYWxseSwgcHJvcHJpZXRhcnkgaGFyZHdhcmUgcmVnaXN0ZXJzLCByZXNldCBsaW5lcywgYW5kIHBoeXMuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgZnV6emluZyBlbnZpcm9ubWVudHMsIHRoaXMgc2lnbmFscyBhIHNpZ25pZmljYW50IHJvYWRibG9jay4gVGhpcyBpc24ndCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBvciBHQ0UgaW5zdGFuY2UsIG9yIGV2ZW4gc3lza2FsbGVyLCBhbmQgZXhwZWN0IHRvIHByb2JlIGVmZmVjdGl2ZWx5LlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyIGNvbmZpcm1zIG15IHN1c3BpY2lvbiwgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5LiBTcGVjaWZpY2FsbHkgdGhlIGV4YW1wbGUgb2YgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuXG5cbk15IGFuYWx5c2lzIG9mIHRoZSBwYXRjaCBpdHNlbGYgaXMgZnVydGhlciBldmlkZW5jZS4gVGhlIGNoYW5nZXMgYXJlIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNgLCBgYWlyb2hhX2V0aC5oYCwgYW5kIGBhaXJvaGFfcmVncy5oYC4gVGhpcyBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhhdCB0aGlzIGlzIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHNwZWNpZmljIGhhcmR3YXJlIHRhcmdldCwgdGhlIEFpcm9oYSBTb0MsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFSTS9BUk02NCBlY29zeXN0ZW0uXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBmYWxzZSoqIOKAkyBUaGUgYXJjaGl0ZWN0dXJhbCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG1ha2UgdGhpcyBjb2RlIGluYWNjZXNzaWJsZSBmb3IgZnV6emluZyBpbiBhIHN0YW5kYXJkIGFtZDY0IGVudmlyb25tZW50LiBJdCdzIGEgZGVhZCBlbmQsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbIF0qKiDigJMgIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBzeW1ib2xzIEkgd291bGQgbmVlZCB0byB0YXJnZXQuXG4qICAgKipFbmFibGVDb25maWdzOiBcXFsgXSoqIOKAkyBObyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIG1ha2UgdGhpcyBmdXp6ZXItYWNjZXNzaWJsZS5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIEkgd2lsbCBub3cgaW5zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZWZsZWN0IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIwMiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MzcuMTk5ODQzNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIEFSTS9BUk02NCBTb0NzIChFTjc1ODEvQU43NTgzKSByZWx5aW5nIG9uIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBhbmQgaGFyZHdhcmUgTU1JTy9yZXNldHMuIEl0IGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjM3LjE5OTg2Nzg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow76lvd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 19:30:12 +0000 UTC FinishedAt: 2026-09-09 19:34:39 +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+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxOTQyMDNjOWVkZDg5NmQ0OWYyYzY3NzQ3M2QwNTZmNGIxMDcxMTgzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxOTozNDowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggNjQ2MTllOWE3MDRkZC4uMjFhYzgwYmRkMDg0YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC0xMCw4ICYjNDM7MTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbkBAIC00OTEsNiAmIzQzOzQ5Myw4OCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZmVfY3Jzbl9xc2VsX2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiBcdFx0XHRcdCBDRE1fQ1JTTl9RU0VMX1ExKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGJ1Zl9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlkID0gcWRtYV9pZCAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0ssXG4mIzQzO1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpKTtcbiYjNDM7XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuJiM0MztcdFx0ICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxuJiM0MztcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssXG4mIzQzO1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRSkpO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksXG4mIzQzO1x0XHQgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSxcbiYjNDM7XHRcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaSwgaWQgPSBxZG1hX2lkICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTtcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXG4mIzQzO1x0XHRcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgJiM0MzsgMSksXG4mIzQzO1x0XHRcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4mIzQzO1x0aW50IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4mIzQzO1x0aW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFx1MDAyNnFkbWEtXHUwMDNlcV9yeFtpXTtcbiYjNDM7XHRcdHUzMiBzaXplO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcS1cdTAwM2VuZGVzYylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbiYjNDM7XHRcdHNpemUgPSBtaW5fdCh1MzIsIHNpemUsIEFJUk9IQV9NQVhfUlhfU0laRSk7XG4mIzQzO1x0XHRhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoZXRoLCBxZG1hX2lkLCBscm9fcXVldWVfaW5kZXgsIGksXG4mIzQzO1x0XHRcdFx0XHQgc2l6ZSk7XG4mIzQzO1x0XHRscm9fcXVldWVfaW5kZXgmIzQzOyYjNDM7O1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuJiM0MztcdGludCBxZG1hX2lkID0gcWRtYSAtIFx1MDAyNmV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4ge1xuIFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcbkBAIC02MTYsNiAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxuIFx0XHRlLVx1MDAzZWRtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKSAmIzQzOyBvZmZzZXQ7XG4gXHRcdGUtXHUwMDNlZG1hX2xlbiA9IFNLQl9XSVRIX09WRVJIRUFEKEFJUk9IQV9SWF9MRU4ocS1cdTAwM2VidWZfc2l6ZSkpO1xuIFxuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVx1MDAzZWRtYV9sZW4pO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVx1MDAzZWRtYV9hZGRyKSk7XG5AQCAtNjU3LDEzICYjNDM7NzQyLDE0NiBAQCBhaXJvaGFfcWRtYV9nZXRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYylcbiBcdHJldHVybiBwb3J0LVx1MDAzZWRldnNbZF0gPyBwb3J0LVx1MDAzZWRldnNbZF0gOiBFUlJfUFRSKC1FTk9ERVYpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbiYjNDM7XHRcdFx0XHQgIHUzMiBtc2cxLCB1MzIgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHRoX29mZiwgdGNwX2Fja19zZXEsIGRhdGFfb2ZmLCBhZ2dfY291bnQgPSAxO1xuJiM0MztcdHUzMiBtc2cyID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMikpO1xuJiM0MztcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbztcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcS1cdTAwM2Vza2I7XG4mIzQzO1x0dTE2IHRjcF93aW4sIGwyX2xlbjtcbiYjNDM7XHRzdHJ1Y3QgdGNwaGRyICp0aDtcbiYjNDM7XHRib29sIGlwdjQsIGlwdjY7XG4mIzQzO1xuJiM0MztcdGlmIChhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpIHtcbiYjNDM7XHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4mIzQzO1x0XHRpZiAoYWdnX2NvdW50IFx1MDAzZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsaWtlbHkoYWdnX2NvdW50IFx1MDAzYz0gMSkpIC8qIG5vdCBMUk8gKi9cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpcHY0ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNF9NQVNLLCBtc2cxKTtcbiYjNDM7XHRpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTtcbiYjNDM7XHRpZiAoIWlwdjQgXHUwMDI2XHUwMDI2ICFpcHY2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGwyX2xlbiA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTSywgbXNnMik7XG4mIzQzO1xuJiM0MztcdGlmIChpcHY0KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCwgX2lwaDtcbiYjNDM7XG4mIzQzO1x0XHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsMl9sZW4sIHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4mIzQzO1x0XHRpZiAoIWlwaClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2Vwcm90b2NvbCAhPSBJUFBST1RPX1RDUClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlwaC1cdTAwM2VpaGwgXHUwMDNjIDUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHRoX29mZiA9IGwyX2xlbiAmIzQzOyAoaXBoLVx1MDAzZWlobCBcdTAwM2NcdTAwM2MgMik7XG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGwyX2xlbik7XG4mIzQzO1x0XHRpcGgtXHUwMDNldG90X2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIGwyX2xlbik7XG4mIzQzO1x0XHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuJiM0MztcdFx0aXBoLVx1MDAzZWNoZWNrID0gaXBfZmFzdF9jc3VtKCh2b2lkICopaXBoLCBpcGgtXHUwMDNlaWhsKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4mIzQzO1xuJiM0MztcdFx0dGhfb2ZmID0gbDJfbGVuICYjNDM7IHNpemVvZigqaXA2aCk7XG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IGwyX2xlbik7XG4mIzQzO1x0XHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyICE9IE5FWFRIRFJfVENQKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRpcDZoLVx1MDAzZXBheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRhdGFfb2ZmID0gdGhfb2ZmICYjNDM7IHNpemVvZigqdGgpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjIGRhdGFfb2ZmKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIGRhdGFfb2ZmKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICYjNDM7IHRoX29mZik7XG4mIzQzO1x0aWYgKHRoLVx1MDAzZWRvZmYgXHUwMDNjIDUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0ZGF0YV9vZmYgPSB0aF9vZmYgJiM0MzsgKHRoLVx1MDAzZWRvZmYgXHUwMDNjXHUwMDNjIDIpO1xuJiM0MztcdGlmIChsZW4gXHUwMDNjPSBkYXRhX29mZilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSyxcbiYjNDM7XHRcdFx0ICAgIGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzMpKSk7XG4mIzQzO1x0dGNwX2Fja19zZXEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2VkYXRhKSk7XG4mIzQzO1x0dGgtXHUwMDNlYWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTtcbiYjNDM7XHR0aC1cdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcbiYjNDM7XG4mIzQzO1x0LyogQ2hlY2sgdGNwIHRpbWVzdGFtcCBvcHRpb24gKi9cbiYjNDM7XHRpZiAodGgtXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgJiM0MzsgVENQT0xFTl9UU1RBTVBfQUxJR05FRCkgLyA0KSB7XG4mIzQzO1x0XHR1MzIgdG9wdDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgdGhfb2ZmKTtcbiYjNDM7XHRcdHRvcHQgPSBnZXRfdW5hbGlnbmVkX2JlMzIodGggJiM0MzsgMSk7XG4mIzQzO1x0XHRpZiAodG9wdCA9PSAoKFRDUE9QVF9OT1AgXHUwMDNjXHUwMDNjIDI0KSB8IChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAxNikgfFxuJiM0MztcdFx0XHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFx1MDAzY1x1MDAzYyA4KSB8IFRDUE9MRU5fVElNRVNUQU1QKSkge1xuJiM0MztcdFx0XHR1OCAqcHRyID0gKHU4ICopdGggJiM0Mzsgc2l6ZW9mKCp0aCkgJiM0MzsgMiAqIHNpemVvZihfX2JlMzIpO1xuJiM0MztcdFx0XHRfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5KTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIFRoZSBmaWVsZCBpcyBwcmUtemVyb2VkIGluIHRoZSBwb3N0ZWQgZGVzY3JpcHRvcixcbiYjNDM7XHRcdFx0ICogc28gYSBub24temVybyB2YWx1ZSBpcyB0aGUgaGFyZHdhcmUgY29uZmlybWluZyB0aGVcbiYjNDM7XHRcdFx0ICogdGltZXN0YW1wIGVjaG8gcmVwbHkgaXMgdmFsaWQuIExlYXZlIFRTZWNyXG4mIzQzO1x0XHRcdCAqIHVudG91Y2hlZCBvdGhlcndpc2UsIHNpbmNlIHRoZSBoYXJkd2FyZSBtYXkgbm90XG4mIzQzO1x0XHRcdCAqIHBvcHVsYXRlIGl0IGZvciBldmVyeSBhZ2dyZWdhdGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAodGNwX3RzX3JlcGx5KVxuJiM0MztcdFx0XHRcdHB1dF91bmFsaWduZWRfYmUzMihsZTMyX3RvX2NwdSh0Y3BfdHNfcmVwbHkpLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwdHIpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlwdjQpIHtcbiYjNDM7XHRcdHN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItXHUwMDNlZGF0YSAmIzQzOyBsMl9sZW4pO1xuJiM0MztcbiYjNDM7XHRcdHRoLVx1MDAzZWNoZWNrID0gfnRjcF92NF9jaGVjayhsZW4gLSB0aF9vZmYsIGlwaC1cdTAwM2VzYWRkcixcbiYjNDM7XHRcdFx0XHRcdCAgaXBoLVx1MDAzZWRhZGRyLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgJiM0MzsgbDJfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHR0aC1cdTAwM2VjaGVjayA9IH50Y3BfdjZfY2hlY2sobGVuIC0gdGhfb2ZmLCBcdTAwMjZpcDZoLVx1MDAzZXNhZGRyLFxuJiM0MztcdFx0XHRcdFx0ICBcdTAwMjZpcDZoLVx1MDAzZWRhZGRyLCAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcbiYjNDM7XHRzaGluZm8tXHUwMDNlZ3NvX3R5cGUgPSBpcHY0ID8gU0tCX0dTT19UQ1BWNCA6IFNLQl9HU09fVENQVjY7XG4mIzQzO1x0c2hpbmZvLVx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XG4mIzQzO1x0c2hpbmZvLVx1MDAzZWdzb19zaXplID0gRElWX1JPVU5EX1VQKGxlbiAtIGRhdGFfb2ZmLCBhZ2dfY291bnQpO1xuJiM0MztcdHNoaW5mby1cdTAwM2Vnc29fc2VncyA9IGFnZ19jb3VudDtcbiYjNDM7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSAmIzQzOyB0aF9vZmY7XG4mIzQzO1x0c2tiLVx1MDAzZWNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spO1xuJiM0MztcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcbiB7XG4gXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuLVx0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4tXHRpbnQgZG9uZSA9IDA7XG4mIzQzO1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxLVx1MDAzZXFkbWEtXHUwMDNlcV9yeFswXSwgZG9uZSA9IDA7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXHUwMDNlcWRtYS1cdTAwM2VldGg7XG4gXG4gXHR3aGlsZSAoZG9uZSBcdTAwM2MgYnVkZ2V0KSB7XG4gXHRcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSBcdTAwMjZxLVx1MDAzZWVudHJ5W3EtXHUwMDNldGFpbF07XG5AQCAtNjk2LDcgJiM0Mzs5MTQsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcbiBcdFx0aWYgKElTX0VSUihkZXYpKVxuIFx0XHRcdGdvdG8gZnJlZV9mcmFnO1xuIFxuJiM0MztcdFx0bXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVx1MDAzZW1zZzEpKTtcbiBcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcbiBcdFx0aWYgKCFxLVx1MDAzZXNrYikgeyAvKiBmaXJzdCBidWZmZXIgKi9cbiBcdFx0XHRxLVx1MDAzZXNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLFxuIFx0XHRcdFx0XHRcdHEtXHUwMDNlYnVmX3NpemUpO1xuQEAgLTcwNyw5ICYjNDM7OTI3LDE3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRcdF9fc2tiX3B1dChxLVx1MDAzZXNrYiwgbGVuKTtcbiBcdFx0XHRza2JfbWFya19mb3JfcmVjeWNsZShxLVx1MDAzZXNrYik7XG4gXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlZGV2ID0gbmV0ZGV2O1xuLVx0XHRcdHEtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS1cdTAwM2Vza2IsIG5ldGRldik7XG4gXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XG4gXHRcdFx0c2tiX3JlY29yZF9yeF9xdWV1ZShxLVx1MDAzZXNrYiwgcWlkKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHEsIGRlc2MsIG1zZzEsIGxlbikpIHtcbiYjNDM7XHRcdFx0XHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhuZXRkZXYpO1xuJiM0MztcdFx0XHRcdGRldl9rZnJlZV9za2IocS1cdTAwM2Vza2IpO1xuJiM0MztcdFx0XHRcdHEtXHUwMDNlc2tiID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVx1MDAzZXNrYiwgbmV0ZGV2KTtcbiBcdFx0fSBlbHNlIHsgLyogc2NhdHRlcmVkIGZyYW1lICovXG4gXHRcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVx1MDAzZXNrYik7XG4gXHRcdFx0aW50IG5yX2ZyYWdzID0gc2hpbmZvLVx1MDAzZW5yX2ZyYWdzO1xuQEAgLTc0Miw3ICYjNDM7OTcwLDYgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZwb3J0LVx1MDAzZWRzYV9tZXRhW3NwdGFnXS1cdTAwM2Vkc3QpO1xuIFx0XHR9XG4gXG4tXHRcdG1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cxKSk7XG4gXHRcdGhhc2ggPSBGSUVMRF9HRVQoQUlST0hBX1JYRDRfRk9FX0VOVFJZLCBtc2cxKTtcbiBcdFx0aWYgKGhhc2ggIT0gQUlST0hBX1JYRDRfRk9FX0VOVFJZKVxuIFx0XHRcdHNrYl9zZXRfaGFzaChxLVx1MDAzZXNrYiwgamhhc2hfMXdvcmQoaGFzaCwgMCksXG5AQCAtODAwLDEyICYjNDM7MTAyNywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbiYjNDM7XHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XG4gXHRcdC5wb29sX3NpemUgPSAyNTYsXG4gXHRcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxuIFx0XHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcbi1cdFx0Lm1heF9sZW4gPSBQQUdFX1NJWkUsXG4gXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG4gXHRcdC5kZXYgPSBxZG1hLVx1MDAzZWV0aC1cdTAwM2VkZXYsXG4gXHRcdC5uYXBpID0gXHUwMDI2cS1cdTAwM2VuYXBpLFxuQEAgLTgxMyw5ICYjNDM7MTAzOCwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiBcdGludCBxaWQgPSBxIC0gXHUwMDI2cWRtYS1cdTAwM2VxX3J4WzBdLCB0aHI7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4mIzQzO1x0bHJvX3EgPSBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSk7XG4gXG4gXHRxLVx1MDAzZWVudHJ5ID0gZGV2bV9remFsbG9jKGV0aC1cdTAwM2VkZXYsIG5kZXNjICogc2l6ZW9mKCpxLVx1MDAzZWVudHJ5KSxcbiBcdFx0XHRcdEdGUF9LRVJORUwpO1xuQEAgLTgyNyw2ICYjNDM7MTA1Myw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0aWYgKCFxLVx1MDAzZWRlc2MpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbiYjNDM7XHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcdTAwM2NcdTAwM2MgcHBfcGFyYW1zLm9yZGVyO1xuJiM0MztcbiBcdHEtXHUwMDNlcGFnZV9wb29sID0gcGFnZV9wb29sX2NyZWF0ZShcdTAwMjZwcF9wYXJhbXMpO1xuIFx0aWYgKElTX0VSUihxLVx1MDAzZXBhZ2VfcG9vbCkpIHtcbiBcdFx0aW50IGVyciA9IFBUUl9FUlIocS1cdTAwM2VwYWdlX3Bvb2wpO1xuQEAgLTgzNSw2ICYjNDM7MTA2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuJiM0MztcdHEtXHUwMDNlYnVmX3NpemUgPSBscm9fcSA/IHBwX3BhcmFtcy5tYXhfbGVuIDogcHBfcGFyYW1zLm1heF9sZW4gLyAyO1xuIFx0cS1cdTAwM2VuZGVzYyA9IG5kZXNjO1xuIFx0bmV0aWZfbmFwaV9hZGQoZXRoLVx1MDAzZW5hcGlfZGV2LCBcdTAwMjZxLVx1MDAzZW5hcGksIGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbCk7XG4gXG5AQCAtODQ4LDcgJiM0MzsxMDc4LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7XG4gXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssXG4gXHRcdFx0RklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS1cdTAwM2VoZWFkKSk7XG4tXHRhaXJvaGFfcWRtYV9zZXQocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksIFJYX1JJTkdfU0dfRU5fTUFTSyk7XG4mIzQzO1x0aWYgKGxyb19xKVxuJiM0MztcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksXG4mIzQzO1x0XHRcdFx0ICBSWF9SSU5HX1NHX0VOX01BU0spO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9xZG1hX3NldChxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbiYjNDM7XHRcdFx0XHRSWF9SSU5HX1NHX0VOX01BU0spO1xuIFxuIFx0YWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTtcbiBcbkBAIC04NzAsNiAmIzQzOzExMDUsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuJiM0MztcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VjdHJsLCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWFkZHIsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlZGF0YSwgMCk7XG5AQCAtMTg5Niw2ICYjNDM7MjEzMiwzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cG9ydC1cdTAwM2VzdGF0c19sb2NrKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBldGgtXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0XHRpbnQgajtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUocG9ydC1cdTAwM2VkZXZzKTsgaiYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICppdGVyX2RldiA9IHBvcnQtXHUwMDNlZGV2c1tqXTtcbiYjNDM7XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghaXRlcl9kZXYpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTtcbiYjNDM7XHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbkBAIC0xOTEzLDE0ICYjNDM7MjE3NywyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0dTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTtcbiBcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbi1cdGludCBlcnI7XG4mIzQzO1x0aW50IHFkbWFfaWQsIGVycjtcbiYjNDM7XG4mIzQzO1x0LyogTFJPIGlzIGNvbmZpZ3VyZWQgb24gdGhlIFFETUEgYW5kIGl0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbFxuJiM0MztcdCAqIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24gdGhlXG4mIzQzO1x0ICogc2FtZSBRRE1BIGlmIExSTyBpcyBlbmFibGVkIG9uIGFueSBkZXZpY2Ugc2hhcmluZyBpdCBvciBpZlxuJiM0MztcdCAqIHRoaXMgZGV2aWNlIGhhcyBMUk8gZW5hYmxlZCBpbiBpdHMgZmVhdHVyZSBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4mIzQzO1x0cWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZxZG1hLVx1MDAzZWV0aC1cdTAwM2VxZG1hWzBdO1xuJiM0MztcbiYjNDM7XHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSBcdTAwMjZcdTAwMjYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChxZG1hLVx1MDAzZWV0aCwgcWRtYV9pZCkgfHxcbiYjNDM7XHRcdFx0XHQobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTykpKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwmIzM0O3JlcXVpcmVkIHRvIGRpc2FibGUgTFJPIG9uIFFETUElZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHFkbWFfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FQlVTWTtcbiYjNDM7XHR9XG4gXG4gXHRuZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7XG4gXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSlcbiBcdFx0YWlyb2hhX2ZlX3NldChxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVx1MDAzZWlkKSxcbiBcdFx0XHQgICAgICBHRE1fU1RBR19FTl9NQVNLKTtcbkBAIC0xOTM3LDYgJiM0MzsyMjE1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgJiM0MzsyMjM1LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuIFx0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTFJPKVxuJiM0MztcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0yMTE1LDExICYjNDM7MjQwMCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4gXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4mIzQzO1x0aWYgKGN1cl9xZG1hKSB7XG4gXHRcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xuJiM0MztcdH1cbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuJiM0MztcdHFkbWEtXHUwMDNldXNlcnMmIzQzOyYjNDM7O1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCAmIzQzOzI0MjQsMTQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdFx0XHRhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoKGkgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiBcdH1cbiBcbi1cdGlmIChjdXJfcWRtYSlcbiYjNDM7XHRpZiAoY3VyX3FkbWEpIHtcbiYjNDM7XHRcdGN1cl9xZG1hLVx1MDAzZXVzZXJzLS07XG4gXHRcdG5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YWlyb2hhX3VwZGF0ZV9uZXRkZXZfZmVhdHVyZXMoZGV2KTtcbiYjNDM7XHRpZiAobmV0ZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIyODgsNiAmIzQzOzI1ODIsMzIgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBuZXRkZXZfZmVhdHVyZXNfdCBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcbiYjNDM7XHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiYjNDM7XHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSlcbiYjNDM7XHRcdGZlYXR1cmVzIFx1MDAyNj0gfk5FVElGX0ZfTFJPO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmVhdHVyZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0xSTylcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG5AQCAtMzE5OSw3ICYjNDM7MzUxOSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4tXHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4gXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbkBAIC0zMjE4LDYgJiM0MzszNTM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0XHQgICBcJiMzNDtRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiBcdFx0fVxuIFx0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuQEAgLTMzNDMsNiAmIzQzOzM2NjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19zdG9wXHRcdD0gYWlyb2hhX2Rldl9zdG9wLFxuIFx0Lm5kb19jaGFuZ2VfbXR1XHRcdD0gYWlyb2hhX2Rldl9jaGFuZ2VfbXR1LFxuIFx0Lm5kb19zZWxlY3RfcXVldWVcdD0gYWlyb2hhX2Rldl9zZWxlY3RfcXVldWUsXG4mIzQzO1x0Lm5kb19maXhfZmVhdHVyZXNcdD0gYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMsXG4mIzQzO1x0Lm5kb19zZXRfZmVhdHVyZXNcdD0gYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBhaXJvaGFfZGV2X3htaXQsXG4gXHQubmRvX2dldF9zdGF0czY0ICAgICAgICA9IGFpcm9oYV9kZXZfZ2V0X3N0YXRzNjQsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBhaXJvaGFfZGV2X3NldF9tYWNhZGRyLFxuQEAgLTM0MzAsMTEgJiM0MzszNzUzLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0bmV0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2YWlyb2hhX2V0aHRvb2xfb3BzO1xuIFx0bmV0ZGV2LVx1MDAzZW1heF9tdHUgPSBBSVJPSEFfTUFYX01UVTtcbiBcdG5ldGRldi1cdTAwM2V3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjtcbi1cdG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcyA9IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9UU082IHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8XG4tXHRcdFx0ICAgICAgTkVUSUZfRl9IV19UQztcbi1cdG5ldGRldi1cdTAwM2VmZWF0dXJlcyB8PSBuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXM7XG4tXHRuZXRkZXYtXHUwMDNldmxhbl9mZWF0dXJlcyA9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbiYjNDM7XHRuZXRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVMgfCBORVRJRl9GX0xSTztcbiYjNDM7XHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuJiM0MztcdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuIFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBldGgtXHUwMDNlZGV2KTtcbiBcbiBcdC8qIHJlc2VydmUgaHcgcXVldWVzIGZvciBIVEIgb2ZmbG9hZGluZyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCA1MjdlMzgzM2UzNmIxLi4yODZmNzNlMmUxZTA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxuQEAgLTQ2LDYgJiM0Mzs0NiwxOCBAQFxuIFx0IChfbikgPT0gMTUgPyAxMjggOlx0XHRcXFxuIFx0IChfbikgPT0gIDAgPyAxMDI0IDogMzIpXG4gXG4mIzQzOyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSXHRcdGdldF9vcmRlcihTWl8xNkspXG4mIzQzOyNkZWZpbmUgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFU1x0OFxuJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX0VOX01BU0tcdFx0R0VOTUFTSygzMSwgMjQpXG4mIzQzOyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVFx0NjRcbiYjNDM7I2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUVcdDEwMFxuJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRVx0MjAwMFxuJiM0MztcbiYjNDM7I2RlZmluZSBBSVJPSEFfSFdfRkVBVFVSRVNcdFx0XHRcXFxuJiM0MztcdChORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8XHRcXFxuJiM0MztcdCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0lQVjZfQ1NVTSB8XHRcXFxuJiM0MztcdCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfCBORVRJRl9GX0hXX1RDKVxuJiM0MztcbiAjZGVmaW5lIFBTRV9SU1ZfUEFHRVNcdFx0XHQxMjhcbiAjZGVmaW5lIFBTRV9RVUVVRV9SU1ZfUEFHRVNcdFx0NjRcbiBcbkBAIC01NjEsNiAmIzQzOzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuJiM0MztcdGludCB1c2VycztcbiYjNDM7XG4gXHRzdHJ1Y3QgYWlyb2hhX2lycV9iYW5rIGlycV9iYW5rc1tBSVJPSEFfTUFYX05VTV9JUlFfQkFOS1NdO1xuIFxuIFx0c3RydWN0IGFpcm9oYV90eF9pcnFfcXVldWUgcV90eF9pcnFbQUlST0hBX05VTV9UWF9JUlFdO1xuQEAgLTcxNSw2ICYjNDM7NzI5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4mIzQzO1x0aW50IHFpZCA9IHEgLSBcdTAwMjZxZG1hLVx1MDAzZXFfcnhbMF07XG4mIzQzO1xuJiM0MztcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbiYjNDM7XHRCVUlMRF9CVUdfT04oaHdlaWdodDMyKEFJUk9IQV9SWFFfTFJPX0VOX01BU0spIFx1MDAzZVxuJiM0MztcdFx0ICAgICBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICEhKEFJUk9IQV9SWFFfTFJPX0VOX01BU0sgXHUwMDI2IEJJVChxaWQpKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMDdkZDA0ODU5ZmRlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBAXG4gI2RlZmluZSBDRE1fQ1JTTl9RU0VMX1JFQVNPTl9NQVNLKF9uKVx0XFxcbiBcdEdFTk1BU0soNCAmIzQzOyAoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMyksXHQoKChfbikgJSA0KSBcdTAwM2NcdTAwM2MgMykpXG4gXG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pIFx1MDAyNiAweDQpKVxuJiM0MzsjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICYjNDM7ICgoKF9uKSBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMyksICgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKVxuJiM0MztcbiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSAmIzQzOyAweDgwKVxuJiM0MzsjZGVmaW5lIExST19SWFFfRU5fTUFTS1x0XHRcdEdFTk1BU0soNywgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pXHRcdChDRE1fQkFTRShfbikgJiM0MzsgMHg4NClcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0tcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODgpXG4mIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MztcbiAjZGVmaW5lIFJFR19HRE1fRldEX0NGRyhfbilcdFx0R0RNX0JBU0UoX24pXG4gI2RlZmluZSBHRE1fUEFEX0VOX01BU0tcdFx0XHRCSVQoMjgpXG4gI2RlZmluZSBHRE1fRFJPUF9DUkNfRVJSX01BU0tcdFx0QklUKDIzKVxuQEAgLTg4Nyw5ICYjNDM7OTAxLDE2IEBAXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLXHRHRU5NQVNLKDI1LCAyMSlcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0NSU05fTUFTS1x0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19QUEVfRU5UUllfTUFTS1x0R0VOTUFTSygxNSwgMClcbiYjNDM7LyogUlggTVNHMiAqL1xuJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLXHRHRU5NQVNLKDMxLCAyNClcbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTS1x0R0VOTUFTSyg2LCAwKVxuJiM0MzsvKiBSWCBNU0czICovXG4mIzQzOy8qIG1heCBhZ2dyZWdhdGVkIHNpemUgaW4gYnl0ZXMgKi9cbiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19BR0dfTEVOX01BU0tcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1x0R0VOTUFTSygxNSwgMClcbiBcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XG4tXHRfX2xlMzIgcnN2O1xuJiM0MztcdF9fbGUzMiB0Y3BfdHNfcmVwbHk7XG4gXHRfX2xlMzIgY3RybDtcbiBcdF9fbGUzMiBhZGRyO1xuIFx0X19sZTMyIGRhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxOTQyMDNjOWVkZDg5NmQ0OWYyYzY3NzQ3M2QwNTZmNGIxMDcxMTgzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgOSAxOTozNDowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jCmluZGV4IDY0NjE5ZTlhNzA0ZGQuLjIxYWM4MGJkZDA4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtMTAsOCAmIzQzOzEwLDEwIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdTY0X3N0YXRzX3N5bmMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0X21ldGFkYXRhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcDZfY2hlY2tzdW0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGFnZV9wb29sL2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvcGt0X2Nscy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9wcHBfZGVmcy5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O2Fpcm9oYV9yZWdzLmgmIzM0OwpAQCAtNDkxLDYgJiM0Mzs0OTMsODggQEAgc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2Nyc25fcXNlbF9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCiAJCQkJIENETV9DUlNOX1FTRUxfUTEpKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZCwKJiM0MzsJCQkJICAgICBpbnQgbHJvX3F1ZXVlX2luZGV4LCBpbnQgcWlkLAomIzQzOwkJCQkgICAgIGludCBidWZfc2l6ZSkKJiM0Mzt7CiYjNDM7CWludCBpZCA9IHFkbWFfaWQgJiM0MzsgMTsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSwKJiM0MzsJCSAgICAgIENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLLAomIzQzOwkJICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19TSVpFX01BU0ssIGJ1Zl9zaXplKSB8CiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX05VTV9NQVNLLAomIzQzOwkJCQkgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVCkpOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLAomIzQzOwkJICAgICAgQ0RNX0xST19BR0VfVElNRV9NQVNLIHwgQ0RNX0xST19BR0dfVElNRV9NQVNLLAomIzQzOwkJICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssCiYjNDM7CQkJCSBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUUpIHwKJiM0MzsJCSAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfVElNRV9NQVNLLAomIzQzOwkJCQkgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19USU1FKSk7CiYjNDM7CWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksCiYjNDM7CQkgICAgICBMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwKJiM0MzsJCSAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7CiYjNDM7CWFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIEJJVChscm9fcXVldWVfaW5kZXgpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2ZlX2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkKQomIzQzO3sKJiM0MzsJaW50IGksIGlkID0gcWRtYV9pZCAmIzQzOyAxOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIExST19SWFFfRU5fTUFTSyk7CiYjNDM7CWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0xJTUlUKGlkKSwKJiM0MzsJCQlDRE1fTFJPX0FHR19OVU1fTUFTSyB8IENETV9MUk9fQUdHX1NJWkVfTUFTSyk7CiYjNDM7CWFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX0FHRV9USU1FKGlkKSwKJiM0MzsJCQlDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSYjNDM7JiM0MzspCiYjNDM7CQlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgJiM0MzsgMSksCiYjNDM7CQkJICAgICBMUk9fUlhRX0VOX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19lbmFibGUoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS0mZ3Q7ZXRoOwomIzQzOwlpbnQgcWRtYV9pZCA9IHFkbWEgLSAmYW1wO2V0aC0mZ3Q7cWRtYVswXTsKJiM0MzsJaW50IGksIGxyb19xdWV1ZV9pbmRleCA9IDA7CiYjNDM7CiYjNDM7CWlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocWRtYS0mZ3Q7cV9yeCk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxID0gJmFtcDtxZG1hLSZndDtxX3J4W2ldOwomIzQzOwkJdTMyIHNpemU7CiYjNDM7CiYjNDM7CQlpZiAoIXEtJmd0O25kZXNjKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzaXplID0gU0tCX1dJVEhfT1ZFUkhFQUQoQUlST0hBX1JYX0xFTihxLSZndDtidWZfc2l6ZSkpOwomIzQzOwkJc2l6ZSA9IG1pbl90KHUzMiwgc2l6ZSwgQUlST0hBX01BWF9SWF9TSVpFKTsKJiM0MzsJCWFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShldGgsIHFkbWFfaWQsIGxyb19xdWV1ZV9pbmRleCwgaSwKJiM0MzsJCQkJCSBzaXplKTsKJiM0MzsJCWxyb19xdWV1ZV9pbmRleCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZGlzYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiYjNDM7CWludCBxZG1hX2lkID0gcWRtYSAtICZhbXA7ZXRoLSZndDtxZG1hWzBdOwomIzQzOwomIzQzOwlpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCiB7CiAJYWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTsKQEAgLTYxNiw2ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCWUtJmd0O2RtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihwYWdlKSAmIzQzOyBvZmZzZXQ7CiAJCWUtJmd0O2RtYV9sZW4gPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtJmd0O2J1Zl9zaXplKSk7CiAKJiM0MzsJCVdSSVRFX09OQ0UoZGVzYy0mZ3Q7dGNwX3RzX3JlcGx5LCAwKTsKIAkJdmFsID0gRklFTERfUFJFUChRRE1BX0RFU0NfTEVOX01BU0ssIGUtJmd0O2RtYV9sZW4pOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2N0cmwsIGNwdV90b19sZTMyKHZhbCkpOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2FkZHIsIGNwdV90b19sZTMyKGUtJmd0O2RtYV9hZGRyKSk7CkBAIC02NTcsMTMgJiM0Mzs3NDIsMTQ2IEBAIGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjKQogCXJldHVybiBwb3J0LSZndDtkZXZzW2RdID8gcG9ydC0mZ3Q7ZGV2c1tkXSA6IEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2xyb19yeF9za2Ioc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKJiM0MzsJCQkJICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYywKJiM0MzsJCQkJICB1MzIgbXNnMSwgdTMyIGxlbikKJiM0Mzt7CiYjNDM7CXUzMiB0aF9vZmYsIHRjcF9hY2tfc2VxLCBkYXRhX29mZiwgYWdnX2NvdW50ID0gMTsKJiM0MzsJdTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMikpOwomIzQzOwlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IgPSBxLSZndDtza2I7CiYjNDM7CXUxNiB0Y3Bfd2luLCBsMl9sZW47CiYjNDM7CXN0cnVjdCB0Y3BoZHIgKnRoOwomIzQzOwlib29sIGlwdjQsIGlwdjY7CiYjNDM7CiYjNDM7CWlmIChhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpIHsKJiM0MzsJCWFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7CiYjNDM7CQlpZiAoYWdnX2NvdW50ICZndDsgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGlrZWx5KGFnZ19jb3VudCAmbHQ7PSAxKSkgLyogbm90IExSTyAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlwdjQgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA0X01BU0ssIG1zZzEpOwomIzQzOwlpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTsKJiM0MzsJaWYgKCFpcHY0ICZhbXA7JmFtcDsgIWlwdjYpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTsKJiM0MzsKJiM0MzsJaWYgKGlwdjQpIHsKJiM0MzsJCXN0cnVjdCBpcGhkciAqaXBoLCBfaXBoOwomIzQzOwomIzQzOwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbDJfbGVuLCBzaXplb2YoKmlwaCksICZhbXA7X2lwaCk7CiYjNDM7CQlpZiAoIWlwaCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWlmIChpcGgtJmd0O3Byb3RvY29sICE9IElQUFJPVE9fVENQKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKGlwaC0mZ3Q7aWhsICZsdDsgNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCXRoX29mZiA9IGwyX2xlbiAmIzQzOyAoaXBoLSZndDtpaGwgJmx0OyZsdDsgMik7CiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgbDJfbGVuKTsKJiM0MzsJCWlwaC0mZ3Q7dG90X2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIGwyX2xlbik7CiYjNDM7CQlpcGgtJmd0O2NoZWNrID0gMDsKJiM0MzsJCWlwaC0mZ3Q7Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC0mZ3Q7aWhsKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXN0cnVjdCBpcHY2aGRyICppcDZoOwomIzQzOwomIzQzOwkJdGhfb2ZmID0gbDJfbGVuICYjNDM7IHNpemVvZigqaXA2aCk7CiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItJmd0O2RhdGEgJiM0MzsgbDJfbGVuKTsKJiM0MzsJCWlmIChpcDZoLSZndDtuZXh0aGRyICE9IE5FWFRIRFJfVENQKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaXA2aC0mZ3Q7cGF5bG9hZF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSB0aF9vZmYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRhdGFfb2ZmID0gdGhfb2ZmICYjNDM7IHNpemVvZigqdGgpOwomIzQzOwlpZiAobGVuICZsdDsgZGF0YV9vZmYpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgZGF0YV9vZmYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IHRoX29mZik7CiYjNDM7CWlmICh0aC0mZ3Q7ZG9mZiAmbHQ7IDUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZGF0YV9vZmYgPSB0aF9vZmYgJiM0MzsgKHRoLSZndDtkb2ZmICZsdDsmbHQ7IDIpOwomIzQzOwlpZiAobGVuICZsdDs9IGRhdGFfb2ZmKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRjcF93aW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLLAomIzQzOwkJCSAgICBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMykpKTsKJiM0MzsJdGNwX2Fja19zZXEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7ZGF0YSkpOwomIzQzOwl0aC0mZ3Q7YWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTsKJiM0MzsJdGgtJmd0O3dpbmRvdyA9IGNwdV90b19iZTE2KHRjcF93aW4pOwomIzQzOwomIzQzOwkvKiBDaGVjayB0Y3AgdGltZXN0YW1wIG9wdGlvbiAqLwomIzQzOwlpZiAodGgtJmd0O2RvZmYgPT0gKHNpemVvZigqdGgpICYjNDM7IFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkgewomIzQzOwkJdTMyIHRvcHQ7CiYjNDM7CiYjNDM7CQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyB0aF9vZmYpOwomIzQzOwkJdG9wdCA9IGdldF91bmFsaWduZWRfYmUzMih0aCAmIzQzOyAxKTsKJiM0MzsJCWlmICh0b3B0ID09ICgoVENQT1BUX05PUCAmbHQ7Jmx0OyAyNCkgfCAoVENQT1BUX05PUCAmbHQ7Jmx0OyAxNikgfAomIzQzOwkJCSAgICAgKFRDUE9QVF9USU1FU1RBTVAgJmx0OyZsdDsgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCkpIHsKJiM0MzsJCQl1OCAqcHRyID0gKHU4ICopdGggJiM0Mzsgc2l6ZW9mKCp0aCkgJiM0MzsgMiAqIHNpemVvZihfX2JlMzIpOwomIzQzOwkJCV9fbGUzMiB0Y3BfdHNfcmVwbHkgPSBSRUFEX09OQ0UoZGVzYy0mZ3Q7dGNwX3RzX3JlcGx5KTsKJiM0MzsKJiM0MzsJCQkvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsCiYjNDM7CQkJICogc28gYSBub24temVybyB2YWx1ZSBpcyB0aGUgaGFyZHdhcmUgY29uZmlybWluZyB0aGUKJiM0MzsJCQkgKiB0aW1lc3RhbXAgZWNobyByZXBseSBpcyB2YWxpZC4gTGVhdmUgVFNlY3IKJiM0MzsJCQkgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdAomIzQzOwkJCSAqIHBvcHVsYXRlIGl0IGZvciBldmVyeSBhZ2dyZWdhdGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKHRjcF90c19yZXBseSkKJiM0MzsJCQkJcHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksCiYjNDM7CQkJCQkJICAgcHRyKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaXB2NCkgewomIzQzOwkJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBsMl9sZW4pOwomIzQzOwomIzQzOwkJdGgtJmd0O2NoZWNrID0gfnRjcF92NF9jaGVjayhsZW4gLSB0aF9vZmYsIGlwaC0mZ3Q7c2FkZHIsCiYjNDM7CQkJCQkgIGlwaC0mZ3Q7ZGFkZHIsIDApOwomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLSZndDtkYXRhICYjNDM7IGwyX2xlbik7CiYjNDM7CiYjNDM7CQl0aC0mZ3Q7Y2hlY2sgPSB+dGNwX3Y2X2NoZWNrKGxlbiAtIHRoX29mZiwgJmFtcDtpcDZoLSZndDtzYWRkciwKJiM0MzsJCQkJCSAgJmFtcDtpcDZoLSZndDtkYWRkciwgMCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpOwomIzQzOwlzaGluZm8tJmd0O2dzb190eXBlID0gaXB2NCA/IFNLQl9HU09fVENQVjQgOiBTS0JfR1NPX1RDUFY2OwomIzQzOwlzaGluZm8tJmd0O2dzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7CiYjNDM7CXNoaW5mby0mZ3Q7Z3NvX3NpemUgPSBESVZfUk9VTkRfVVAobGVuIC0gZGF0YV9vZmYsIGFnZ19jb3VudCk7CiYjNDM7CXNoaW5mby0mZ3Q7Z3NvX3NlZ3MgPSBhZ2dfY291bnQ7CiYjNDM7CiYjNDM7CXNrYi0mZ3Q7Y3N1bV9zdGFydCA9IHNrYl9oZWFkcm9vbShza2IpICYjNDM7IHRoX29mZjsKJiM0MzsJc2tiLSZndDtjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKJiM0MzsJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldCkKIHsKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS0mZ3Q7cGFnZV9wb29sKTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLSZndDtxZG1hOwotCXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7Ci0JaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF07Ci0JaW50IGRvbmUgPSAwOwomIzQzOwlpbnQgcWlkID0gcSAtICZhbXA7cS0mZ3Q7cWRtYS0mZ3Q7cV9yeFswXSwgZG9uZSA9IDA7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxLSZndDtxZG1hLSZndDtldGg7CiAKIAl3aGlsZSAoZG9uZSAmbHQ7IGJ1ZGdldCkgewogCQlzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplID0gJmFtcDtxLSZndDtlbnRyeVtxLSZndDt0YWlsXTsKQEAgLTY5Niw3ICYjNDM7OTE0LDkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpCiAJCWlmIChJU19FUlIoZGV2KSkKIAkJCWdvdG8gZnJlZV9mcmFnOwogCiYjNDM7CQltc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtJmd0O21zZzEpKTsKIAkJbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpOwomIzQzOwogCQlpZiAoIXEtJmd0O3NrYikgeyAvKiBmaXJzdCBidWZmZXIgKi8KIAkJCXEtJmd0O3NrYiA9IG5hcGlfYnVpbGRfc2tiKGUtJmd0O2J1ZiAtIEFJUk9IQV9SWF9IRUFEUk9PTSwKIAkJCQkJCXEtJmd0O2J1Zl9zaXplKTsKQEAgLTcwNyw5ICYjNDM7OTI3LDE3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KQogCQkJX19za2JfcHV0KHEtJmd0O3NrYiwgbGVuKTsKIAkJCXNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHEtJmd0O3NrYik7CiAJCQlxLSZndDtza2ItJmd0O2RldiA9IG5ldGRldjsKLQkJCXEtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLSZndDtza2IsIG5ldGRldik7CiAJCQlxLSZndDtza2ItJmd0O2lwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJc2tiX3JlY29yZF9yeF9xdWV1ZShxLSZndDtza2IsIHFpZCk7CiYjNDM7CiYjNDM7CQkJaWYgKGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgbXNnMSwgbGVuKSkgewomIzQzOwkJCQlkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhuZXRkZXYpOwomIzQzOwkJCQlkZXZfa2ZyZWVfc2tiKHEtJmd0O3NrYik7CiYjNDM7CQkJCXEtJmd0O3NrYiA9IE5VTEw7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlxLSZndDtza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS0mZ3Q7c2tiLCBuZXRkZXYpOwogCQl9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi8KIAkJCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8ocS0mZ3Q7c2tiKTsKIAkJCWludCBucl9mcmFncyA9IHNoaW5mby0mZ3Q7bnJfZnJhZ3M7CkBAIC03NDIsNyAmIzQzOzk3MCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KQogCQkJCQkJICAmYW1wO3BvcnQtJmd0O2RzYV9tZXRhW3NwdGFnXS0mZ3Q7ZHN0KTsKIAkJfQogCi0JCW1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy0mZ3Q7bXNnMSkpOwogCQloYXNoID0gRklFTERfR0VUKEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSwgbXNnMSk7CiAJCWlmIChoYXNoICE9IEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSkKIAkJCXNrYl9zZXRfaGFzaChxLSZndDtza2IsIGpoYXNoXzF3b3JkKGhhc2gsIDApLApAQCAtODAwLDEyICYjNDM7MTAyNywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKIAkJCQkgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKQogewotCWNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHsKLQkJLm9yZGVyID0gMCwKJiM0MzsJc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0gewogCQkucG9vbF9zaXplID0gMjU2LAogCQkuZmxhZ3MgPSBQUF9GTEFHX0RNQV9NQVAgfCBQUF9GTEFHX0RNQV9TWU5DX0RFViwKIAkJLmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0UsCi0JCS5tYXhfbGVuID0gUEFHRV9TSVpFLAogCQkubmlkID0gTlVNQV9OT19OT0RFLAogCQkuZGV2ID0gcWRtYS0mZ3Q7ZXRoLSZndDtkZXYsCiAJCS5uYXBpID0gJmFtcDtxLSZndDtuYXBpLApAQCAtODEzLDkgJiM0MzsxMDM4LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLSZndDtldGg7CiAJaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF0sIHRocjsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwlib29sIGxyb19xOwogCi0JcS0mZ3Q7YnVmX3NpemUgPSBQQUdFX1NJWkUgLyAyOwogCXEtJmd0O3FkbWEgPSBxZG1hOwomIzQzOwlscm9fcSA9IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKTsKIAogCXEtJmd0O2VudHJ5ID0gZGV2bV9remFsbG9jKGV0aC0mZ3Q7ZGV2LCBuZGVzYyAqIHNpemVvZigqcS0mZ3Q7ZW50cnkpLAogCQkJCUdGUF9LRVJORUwpOwpAQCAtODI3LDYgJiM0MzsxMDUzLDkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsCiAJaWYgKCFxLSZndDtkZXNjKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlwcF9wYXJhbXMub3JkZXIgPSBscm9fcSA/IEFJUk9IQV9MUk9fUEFHRV9PUkRFUiA6IDA7CiYjNDM7CXBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFICZsdDsmbHQ7IHBwX3BhcmFtcy5vcmRlcjsKJiM0MzsKIAlxLSZndDtwYWdlX3Bvb2wgPSBwYWdlX3Bvb2xfY3JlYXRlKCZhbXA7cHBfcGFyYW1zKTsKIAlpZiAoSVNfRVJSKHEtJmd0O3BhZ2VfcG9vbCkpIHsKIAkJaW50IGVyciA9IFBUUl9FUlIocS0mZ3Q7cGFnZV9wb29sKTsKQEAgLTgzNSw2ICYjNDM7MTA2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLAogCQlyZXR1cm4gZXJyOwogCX0KIAomIzQzOwlxLSZndDtidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7CiAJcS0mZ3Q7bmRlc2MgPSBuZGVzYzsKIAluZXRpZl9uYXBpX2FkZChldGgtJmd0O25hcGlfZGV2LCAmYW1wO3EtJmd0O25hcGksIGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbCk7CiAKQEAgLTg0OCw3ICYjNDM7MTA3OCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwKIAkJCUZJRUxEX1BSRVAoUlhfUklOR19USFJfTUFTSywgdGhyKSk7CiAJYWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19SWF9ETUFfSURYKHFpZCksIFJYX1JJTkdfRE1BX0lEWF9NQVNLLAogCQkJRklFTERfUFJFUChSWF9SSU5HX0RNQV9JRFhfTUFTSywgcS0mZ3Q7aGVhZCkpOwotCWFpcm9oYV9xZG1hX3NldChxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSwgUlhfUklOR19TR19FTl9NQVNLKTsKJiM0MzsJaWYgKGxyb19xKQomIzQzOwkJYWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1JYX1NDQVRURVJfQ0ZHKHFpZCksCiYjNDM7CQkJCSAgUlhfUklOR19TR19FTl9NQVNLKTsKJiM0MzsJZWxzZQomIzQzOwkJYWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLAomIzQzOwkJCQlSWF9SSU5HX1NHX0VOX01BU0spOwogCiAJYWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTsKIApAQCAtODcwLDYgJiM0MzsxMTA1LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfY2xlYW51cF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKQogCQkJCQlwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS0mZ3Q7cGFnZV9wb29sKSk7CiAJCXBhZ2VfcG9vbF9wdXRfZnVsbF9wYWdlKHEtJmd0O3BhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpOwogCQkvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqLwomIzQzOwkJV1JJVEVfT05DRShkZXNjLSZndDt0Y3BfdHNfcmVwbHksIDApOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2N0cmwsIDApOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2FkZHIsIDApOwogCQlXUklURV9PTkNFKGRlc2MtJmd0O2RhdGEsIDApOwpAQCAtMTg5Niw2ICYjNDM7MjEzMiwzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXNwaW5fdW5sb2NrKCZhbXA7cG9ydC0mZ3Q7c3RhdHNfbG9jayk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtJmd0O2V0aDsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGV0aC0mZ3Q7cG9ydHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGV0aC0mZ3Q7cG9ydHNbaV07CiYjNDM7CQlpbnQgajsKJiM0MzsKJiM0MzsJCWlmICghcG9ydCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKHBvcnQtJmd0O2RldnMpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LSZndDtkZXZzW2pdOwomIzQzOwkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiYjNDM7CiYjNDM7CQkJaWYgKCFpdGVyX2RldikKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihpdGVyX2Rldik7CiYjNDM7CQkJaWYgKG5ldGRldi0mZ3Q7cmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF94bWl0X2ZyYW1lX3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0xOTEzLDE0ICYjNDM7MjE3NywyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7CiAJdTMyIHBzZV9wb3J0ID0gRkVfUFNFX1BPUlRfUFBFMTsKIAlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7Ci0JaW50IGVycjsKJiM0MzsJaW50IHFkbWFfaWQsIGVycjsKJiM0MzsKJiM0MzsJLyogTFJPIGlzIGNvbmZpZ3VyZWQgb24gdGhlIFFETUEgYW5kIGl0IGlzIHNoYXJlZCBiZXR3ZWVuIGFsbAomIzQzOwkgKiB0aGUgZGV2aWNlcyB1c2luZyBpdC4gUmVmdXNlIHRvIG9wZW4gYSBzZWNvbmQgZGV2aWNlIG9uIHRoZQomIzQzOwkgKiBzYW1lIFFETUEgaWYgTFJPIGlzIGVuYWJsZWQgb24gYW55IGRldmljZSBzaGFyaW5nIGl0IG9yIGlmCiYjNDM7CSAqIHRoaXMgZGV2aWNlIGhhcyBMUk8gZW5hYmxlZCBpbiBpdHMgZmVhdHVyZSBzZXQuCiYjNDM7CSAqLwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJcWRtYV9pZCA9IHFkbWEgLSAmYW1wO3FkbWEtJmd0O2V0aC0mZ3Q7cWRtYVswXTsKJiM0MzsKJiM0MzsJaWYgKHFkbWEtJmd0O3VzZXJzICZndDsgMSAmYW1wOyZhbXA7IChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQocWRtYS0mZ3Q7ZXRoLCBxZG1hX2lkKSB8fAomIzQzOwkJCQkobmV0ZGV2LSZndDtmZWF0dXJlcyAmYW1wOyBORVRJRl9GX0xSTykpKSB7CiYjNDM7CQluZXRkZXZfd2FybihuZXRkZXYsICYjMzQ7cmVxdWlyZWQgdG8gZGlzYWJsZSBMUk8gb24gUURNQSVkXG4mIzM0OywKJiM0MzsJCQkgICAgcWRtYV9pZCk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAJZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmIChuZXRkZXZfdXNlc19kc2EobmV0ZGV2KSkKIAkJYWlyb2hhX2ZlX3NldChxZG1hLSZndDtldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC0mZ3Q7aWQpLAogCQkJICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7CkBAIC0xOTM3LDYgJiM0MzsyMjE1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcocWRtYS0mZ3Q7ZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCSAgICBwc2VfcG9ydCk7CiAKJiM0MzsJaWYgKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9MUk8pCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk1NCw2ICYjNDM7MjIzNSwxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LSZndDtldGgsCiAJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCQkgICAgRkVfUFNFX1BPUlRfRFJPUCk7CiYjNDM7CiYjNDM7CWlmIChuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfTFJPKQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0yMTE1LDExICYjNDM7MjQwMCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXFkbWEgPSAmYW1wO2V0aC0mZ3Q7cWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildOwogCWN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAotCWlmIChjdXJfcWRtYSkKJiM0MzsJaWYgKGN1cl9xZG1hKSB7CiAJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwl9CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LSZndDtxZG1hLCBxZG1hKTsKIAluZXRkZXYtJmd0O2lycSA9IHFkbWEtJmd0O2lycV9iYW5rc1swXS5pcnE7CiYjNDM7CXFkbWEtJmd0O3VzZXJzJiM0MzsmIzQzOzsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwpAQCAtMjEzNiw4ICYjNDM7MjQyNCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCQkJYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpICZsdDsmbHQ7IDEpICYjNDM7IDEpKTsKIAl9CiAKLQlpZiAoY3VyX3FkbWEpCiYjNDM7CWlmIChjdXJfcWRtYSkgewomIzQzOwkJY3VyX3FkbWEtJmd0O3VzZXJzLS07CiAJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKGRldik7CiYjNDM7CWlmIChuZXRkZXYtJmd0O2ZlYXR1cmVzICZhbXA7IE5FVElGX0ZfTFJPKQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZW5hYmxlKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0yMjg4LDYgJiM0MzsyNTgyLDMyIEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiAJfQogfQogCiYjNDM7c3RhdGljIG5ldGRldl9mZWF0dXJlc190IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQkJIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiYjNDM7CiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwomIzQzOwlpZiAocWRtYS0mZ3Q7dXNlcnMgJmd0OyAxKQomIzQzOwkJZmVhdHVyZXMgJmFtcDs9IH5ORVRJRl9GX0xSTzsKJiM0MzsKJiM0MzsJcmV0dXJuIGZlYXR1cmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9kZXZfc2V0X2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwomIzQzOwlpZiAoZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9MUk8pCiYjNDM7CQlhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJYWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKQEAgLTMxOTksNyAmIzQzOzM1MTksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKIAlzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LSZndDtldGg7Ci0JaW50IGVyciA9IC1FQlVTWTsKJiM0MzsJaW50IGVycjsKIAogCWlmIChwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNM19JRFggJmFtcDsmYW1wOwogCSAgICBwb3J0LSZndDtpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHsKQEAgLTMyMTgsNiAmIzQzOzM1MzgsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkgICAgd2FuX2Rldi0mZ3Q7cG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTJfSURYKSB7CiAJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAogCQkJCQkgICAmIzM0O1FvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlJiMzNDspOwomIzQzOwkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gZXJyb3JfdW5sb2NrOwogCQl9CiAJCWFpcm9oYV9kaXNhYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2X2Zyb21fcHJpdih3YW5fZGV2KSk7CkBAIC0zMzQzLDYgJiM0MzszNjY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhaXJvaGFfbmV0ZGV2X29wcyA9IHsKIAkubmRvX3N0b3AJCT0gYWlyb2hhX2Rldl9zdG9wLAogCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsCiAJLm5kb19zZWxlY3RfcXVldWUJPSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSwKJiM0MzsJLm5kb19maXhfZmVhdHVyZXMJPSBhaXJvaGFfZGV2X2ZpeF9mZWF0dXJlcywKJiM0MzsJLm5kb19zZXRfZmVhdHVyZXMJPSBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcywKIAkubmRvX3N0YXJ0X3htaXQJCT0gYWlyb2hhX2Rldl94bWl0LAogCS5uZG9fZ2V0X3N0YXRzNjQgICAgICAgID0gYWlyb2hhX2Rldl9nZXRfc3RhdHM2NCwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9oYV9kZXZfc2V0X21hY2FkZHIsCkBAIC0zNDMwLDExICYjNDM7Mzc1Myw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2FsbG9jX2dkbV9kZXZpY2Uoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAluZXRkZXYtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDthaXJvaGFfZXRodG9vbF9vcHM7CiAJbmV0ZGV2LSZndDttYXhfbXR1ID0gQUlST0hBX01BWF9NVFU7CiAJbmV0ZGV2LSZndDt3YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKLQluZXRkZXYtJmd0O2h3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTzYgfAotCQkJICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1NHIHwgTkVUSUZfRl9UU08gfAotCQkJICAgICAgTkVUSUZfRl9IV19UQzsKLQluZXRkZXYtJmd0O2ZlYXR1cmVzIHw9IG5ldGRldi0mZ3Q7aHdfZmVhdHVyZXM7Ci0JbmV0ZGV2LSZndDt2bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LSZndDtod19mZWF0dXJlczsKJiM0MzsJbmV0ZGV2LSZndDtod19mZWF0dXJlcyA9IEFJUk9IQV9IV19GRUFUVVJFUyB8IE5FVElGX0ZfTFJPOwomIzQzOwluZXRkZXYtJmd0O2ZlYXR1cmVzIHw9IEFJUk9IQV9IV19GRUFUVVJFUzsKJiM0MzsJbmV0ZGV2LSZndDt2bGFuX2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTOwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgZXRoLSZndDtkZXYpOwogCiAJLyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAppbmRleCA1MjdlMzgzM2UzNmIxLi4yODZmNzNlMmUxZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKQEAgLTQ2LDYgJiM0Mzs0NiwxOCBAQAogCSAoX24pID09IDE1ID8gMTI4IDoJCVwKIAkgKF9uKSA9PSAgMCA/IDEwMjQgOiAzMikKIAomIzQzOyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSCQlnZXRfb3JkZXIoU1pfMTZLKQomIzQzOyNkZWZpbmUgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUwk4CiYjNDM7I2RlZmluZSBBSVJPSEFfUlhRX0xST19FTl9NQVNLCQlHRU5NQVNLKDMxLCAyNCkKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQJNjQKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRQkxMDAKJiM0MzsjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRQkyMDAwCiYjNDM7CiYjNDM7I2RlZmluZSBBSVJPSEFfSFdfRkVBVFVSRVMJCQlcCiYjNDM7CShORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8CVwKJiM0MzsJIE5FVElGX0ZfVFNPNiB8IE5FVElGX0ZfSVBWNl9DU1VNIHwJXAomIzQzOwkgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9IV19UQykKJiM0MzsKICNkZWZpbmUgUFNFX1JTVl9QQUdFUwkJCTEyOAogI2RlZmluZSBQU0VfUVVFVUVfUlNWX1BBR0VTCQk2NAogCkBAIC01NjEsNiAmIzQzOzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aDsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAKJiM0MzsJaW50IHVzZXJzOwomIzQzOwogCXN0cnVjdCBhaXJvaGFfaXJxX2JhbmsgaXJxX2JhbmtzW0FJUk9IQV9NQVhfTlVNX0lSUV9CQU5LU107CiAKIAlzdHJ1Y3QgYWlyb2hhX3R4X2lycV9xdWV1ZSBxX3R4X2lycVtBSVJPSEFfTlVNX1RYX0lSUV07CkBAIC03MTUsNiAmIzQzOzcyOSwxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODMoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIAlyZXR1cm4gZXRoLSZndDtzb2MtJmd0O3ZlcnNpb24gPT0gMHg3NTgzOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gcS0mZ3Q7cWRtYTsKJiM0MzsJaW50IHFpZCA9IHEgLSAmYW1wO3FkbWEtJmd0O3FfcnhbMF07CiYjNDM7CiYjNDM7CS8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi8KJiM0MzsJQlVJTERfQlVHX09OKGh3ZWlnaHQzMihBSVJPSEFfUlhRX0xST19FTl9NQVNLKSAmZ3Q7CiYjNDM7CQkgICAgIEFJUk9IQV9NQVhfTlVNX0xST19RVUVVRVMpOwomIzQzOwomIzQzOwlyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyAmYW1wOyBCSVQocWlkKSk7CiYjNDM7fQomIzQzOwogaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7CiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsCiAJCQkgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKaW5kZXggNDQyYjQ4YzliOTkxZS4uMDdkZDA0ODU5ZmRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTEyMiw2ICYjNDM7MTIyLDIwIEBACiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pCVwKIAlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICUgNCkgJmx0OyZsdDsgMyksCSgoKF9uKSAlIDQpICZsdDsmbHQ7IDMpKQogCiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19SWFEoX24sIF9tKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDc4ICYjNDM7ICgoX20pICZhbXA7IDB4NCkpCiYjNDM7I2RlZmluZSBMUk9fUlhRX01BU0soX24pCQlHRU5NQVNLKDQgJiM0MzsgKCgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMyksICgoX24pICZhbXA7IDB4MykgJmx0OyZsdDsgMykKJiM0MzsKJiM0MzsjZGVmaW5lIFJFR19DRE1fTFJPX0VOKF9uKQkJKENETV9CQVNFKF9uKSAmIzQzOyAweDgwKQomIzQzOyNkZWZpbmUgTFJPX1JYUV9FTl9NQVNLCQkJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgUkVHX0NETV9MUk9fTElNSVQoX24pCQkoQ0RNX0JBU0UoX24pICYjNDM7IDB4ODQpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTSwkJR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBDRE1fTFJPX0FHR19TSVpFX01BU0sJCUdFTk1BU0soMTUsIDApCiYjNDM7CiYjNDM7I2RlZmluZSBSRUdfQ0RNX0xST19BR0VfVElNRShfbikJKENETV9CQVNFKF9uKSAmIzQzOyAweDg4KQomIzQzOyNkZWZpbmUgQ0RNX0xST19BR0VfVElNRV9NQVNLCQlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTSwkJR0VOTUFTSygxNSwgMCkKJiM0MzsKICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKQkJR0RNX0JBU0UoX24pCiAjZGVmaW5lIEdETV9QQURfRU5fTUFTSwkJCUJJVCgyOCkKICNkZWZpbmUgR0RNX0RST1BfQ1JDX0VSUl9NQVNLCQlCSVQoMjMpCkBAIC04ODcsOSAmIzQzOzkwMSwxNiBAQAogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19TUE9SVF9NQVNLCUdFTk1BU0soMjUsIDIxKQogI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0sJR0VOTUFTSygyMCwgMTYpCiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1BQRV9FTlRSWV9NQVNLCUdFTk1BU0soMTUsIDApCiYjNDM7LyogUlggTVNHMiAqLwomIzQzOyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMjQpCiYjNDM7I2RlZmluZSBRRE1BX0VUSF9SWE1TR19MMl9MRU5fTUFTSwlHRU5NQVNLKDYsIDApCiYjNDM7LyogUlggTVNHMyAqLwomIzQzOy8qIG1heCBhZ2dyZWdhdGVkIHNpemUgaW4gYnl0ZXMgKi8KJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19MRU5fTUFTSwlHRU5NQVNLKDMxLCAxNikKJiM0MzsjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSwlHRU5NQVNLKDE1LCAwKQogCiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7Ci0JX19sZTMyIHJzdjsKJiM0MzsJX19sZTMyIHRjcF90c19yZXBseTsKIAlfX2xlMzIgY3RybDsKIAlfX2xlMzIgYWRkcjsKIAlfX2xlMzIgZGF0YTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2OTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwYXRjaDoKCioqUGF0Y2ggQW5hbHlzaXMgLSBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6ei4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBmaWxlIHBhdGhzOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY2AgYW5kIGFzc29jaWF0ZWQgaGVhZGVyIGZpbGVzLiBUaGF0JiMzOTtzIGEgbmV0d29ya2luZyBkcml2ZXIsIHNvIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBXaGF0IGtpbmQgb2YgaGFyZHdhcmUsIFNvQywgb3Igc3BlY2lmaWMgcGxhdGZvcm0gaXMgdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIGRlc2lnbmVkIGZvcj8gSXMgaXQgYSBjb21tb24gYXJjaGl0ZWN0dXJlPyBEb2VzIGl0IGFwcGVhciBpbiB3aWRlbHkgZGVwbG95ZWQgZGV2aWNlcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgd2l0aCBhIHF1aWNrIGBncmVwYCBmb3IgcG90ZW50aWFsIGtleXdvcmRzIHdpdGhpbiB0aGUgZHJpdmVyIGZpbGVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gQWx0ZXJuYXRpdmVseSwgSSBjYW4gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkcml2ZXIgdG8gc2VlIGlmIHRoYXQgcmV2ZWFscyBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldGVkIGhhcmR3YXJlIG9yIGRldmljZXMsIGFuZCB0aGUgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgYW5kIGhhcmR3YXJlIGl0IG1pZ2h0IHN1cHBvcnQuIEtub3dpbmcgdGhlIHRhcmdldCBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyBob3cgY3JpdGljYWwgYSBidWcgY291bGQgYmUsIGFuZCB3aGV0aGVyIG91ciBmdXp6aW5nIGVmZm9ydHMgYXJlIGxpa2VseSB0byBmaW5kIHNvbWV0aGluZyBpbnRlcmVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FJUk9IQXxjb25maWcgQUlST0hBJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTg9aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxMDpjb25maWcgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTExLVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMTctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxODpjb25maWcgTkVUX0FJUk9IQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTI2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjgtXHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIHNpdHVhdGlvbi4gTXkgZmlyc3QgbW92ZSBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyaW5nIG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWF0aW9ucyB0aGlzIGRyaXZlciBzdXBwb3J0cy4gS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBkcml2ZXJzIGZpdCBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBjaGlwIG1vZGVsIGRlc2lnbmF0aW9ucywgYW55IHNwZWNpZmljIGJvYXJkLWxldmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGFjY291bnRlZCBmb3IsIGFuZCBvZiBjb3Vyc2UsIHdoYXQgb3RoZXIgbW9kdWxlcyBvciBmZWF0dXJlcyBpdCByZWxpZXMgdXBvbi4gRXNzZW50aWFsbHksIEkmIzM5O20gYWltaW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB3aGF0IHRoaXMgZHJpdmVyICpuZWVkcyogdG8gZnVuY3Rpb24gYW5kIHdoYXQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBhcmUgdGhhdCBzaGFwZSBpdHMgYmVoYXZpb3IuIFVuZGVyc3RhbmRpbmcgdGhlIEtjb25maWcgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIGJlZm9yZSBJIHByb2NlZWQgdG8gYW55IGRlZXBlciBjb2RlIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBORVRfVkVORE9SX0FJUk9IQVxuICAgMzpcdFx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxuICAgNzpcdFxuICAgODpcdGlmIE5FVF9WRU5ET1JfQUlST0hBXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIE5FVF9BSVJPSEFfTlBVXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgTlBVIHN1cHBvcnRcJiMzNDtcbiAgMTI6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICAxMzpcdFx0c2VsZWN0IFJFR01BUF9NTUlPXG4gIDE0Olx0XHRoZWxwXG4gIDE1Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NvciAoTlBVKSBhdmFpbGFibGVcbiAgMTY6XHRcdCAgb24gdGhlIEFpcm9oYSBTb2MgZmFtaWx5LlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBORVRfQUlST0hBXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBORVRfRFNBIHx8ICFORVRfRFNBXG4gIDIxOlx0XHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbiAgMjI6XHRcdHNlbGVjdCBQQUdFX1BPT0xcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGVcbiAgMjU6XHRcdCAgQWlyb2hhIFNvQyBmYW1pbHkuXG4gIDI2Olx0XG4gIDI3Olx0Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xuICAyODpcdFx0ZGVmYXVsdCB5XG4gIDI5Olx0XHRib29sIFwmIzM0O0Fpcm9oYSBmbG93IHN0YXRzXCYjMzQ7XG4gIDMwOlx0XHRkZXBlbmRzIG9uIE5FVF9BSVJPSEEgXHUwMDI2XHUwMDI2IE5FVF9BSVJPSEFfTlBVXG4gIDMxOlx0XHRoZWxwXG4gIDMyOlx0XHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cbiAgMzM6XHRcbiAgMzQ6XHRlbmRpZiAjTkVUX1ZFTkRPUl9BSVJPSEFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHRleHQmIzM5O3MgcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIEFpcm9oYSBTb0MgRHJpdmVyKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBkcml2ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEFpcm9oYSBTb0MuIE15IGluaXRpYWwgYXNzZXNzbWVudCBoaW5nZXMgb24gYSBmZXcgY3J1Y2lhbCBwb2ludHMuIEkgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBkcml2ZXImIzM5O3MgcHJvYmluZyBtZWNoYW5pc20g4oCTIGhvdyBkb2VzIGl0IGFjdHVhbGx5IGRldGVjdCBhbmQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmU/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBkZXZpY2UgSURzLCBwbGF0Zm9ybSBkYXRhLCBvciBzb21lIG90aGVyIG1ldGhvZD8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGZ1bmRhbWVudGFsIHRvIGRldGVybWluaW5nIGl0cyBhcmNoaXRlY3R1cmUuIEFuZCB0aGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgZGV2aWNlIHVzZXMgUGxhdGZvcm0gZHJpdmVycy4gSXMgdGhpcyBkcml2ZXIgYnVpbHQgYXMgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIHNvbWUgb3RoZXIgdHlwZSBvZiBmcmFtZXdvcms/IFVsdGltYXRlbHkgSSBuZWVkIHRvIGtub3cgdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWlyb2hhX3Byb2JlfG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJ8YWlyb2hhX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4ODE9c3RhdGljIGludCBhaXJvaGFfcmVnaXN0ZXJfZ2RtX2RldmljZXMoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MDktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5MTA6c3RhdGljIGludCBhaXJvaGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkxMS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MjczPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2Fpcm9oYV9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNzU6c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI3NjpcdC5wcm9iZSA9IGFpcm9oYV9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI3Ny1cdC5yZW1vdmUgPSBhaXJvaGFfcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI4Mi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MjgzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyODQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGFpcm9oYV9ldGguY2AuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgcHJvYmUgYW5kIG9mX21hdGNoIGZ1bmN0aW9ucyDigJMgYGFpcm9oYV9wcm9iZWAgYW5kIGBvZl9haXJvaGFfbWF0Y2hgLCByZXNwZWN0aXZlbHkuIEkgd2FudCB0byBzZWUgaG93IHRoZSBkcml2ZXIgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGhvdyBpdCYjMzk7cyBpZGVudGlmeWluZyBhbmQgYXNzb2NpYXRpbmcgaXRzZWxmIHdpdGggdGhlIHNwZWNpZmljIEFpcm9oYSBoYXJkd2FyZSBpdCYjMzk7cyBkZXNpZ25lZCB0byBzdXBwb3J0LiBVbmRlcnN0YW5kaW5nIHRoZXNlIGVudHJ5IHBvaW50cyBpcyBjcnVjaWFsIGZvciB0cm91Ymxlc2hvb3RpbmcgYW55IGlzc3VlcyByZWxhdGVkIHRvIGRldmljZSBkZXRlY3Rpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIG9yLCBmcmFua2x5LCBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgYmUgZ29pbmcgd3JvbmcgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIGRyaXZlciYjMzk7cyBsaWZlY3ljbGUuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgaW4gdGhlIGRldmljZSBtYXRjaGluZyBsb2dpYywgcGFydGljdWxhcmx5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkaXNjcmVwYW5jaWVzIGluIHRoZSBleHBlY3RlZCBkZXZpY2UgSURzIG9yIGNvbXBhdGlibGUgc3RyaW5ncy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBtaXNzaW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgZW50cmllcywgd2hpY2ggd291bGQgY2F1c2UgYW4gaW5zdGFudGlhdGlvbiBmYWlsdXJlLCBvciBpbmNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzcyBtYXBwaW5nLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHN0ZXAgaW4gbWFraW5nIHN1cmUgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBmdW5jdGlvbnMgYXMgaW50ZW5kZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX2Fpcm9oYV9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTQyNTY9c3RhdGljIGNvbnN0IHN0cnVjdCBhaXJvaGFfZXRoX3NvY19kYXRhIGFuNzU4M19zb2NfZGF0YSA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNjg6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNjktXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MjcyLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNzM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfYWlyb2hhX21hdGNoKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI3NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9NDI3NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI3OS1cdFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI4MDpcdFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX21hdGNoLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MjgxLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0NDYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGFpcm9oYV9wcm9iZWAqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFpcm9oYV9wcm9iZWAgaXMgYWN0dWFsbHkgKmRvaW5nKiB1bmRlciB0aGUgaG9vZCwgcmVzb3VyY2Utd2lzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIGRldmljZSB0cmVlLiBXaGF0IG5vZGVzIGlzIGl0IHBhcnNpbmc/IEFyZSB0aGVyZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIGl0JiMzOTtzIGxvb2tpbmcgZm9yPyBUaGVuLCBJJiMzOTtsbCBtb3ZlIG9uIHRvIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKS4gV2hhdCByZWdpc3RlcnMgaXMgaXQgYWNjZXNzaW5nPyBXaGF0IGFkZHJlc3Nlcz8gQW55IHNwZWNpZmljIG1lbW9yeSByZWdpb25zIGl0JiMzOTtzIHJlcXVlc3Rpbmc/IEFmdGVyIHRoYXQsIEkmIzM5O2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgaG93IGl0IGlzIGhhbmRsaW5nIGNsb2NrcyBhbmQgcmVzZXRzLiBXaGF0IGNsb2NrcyBpcyBpdCBlbmFibGluZyBvciBkaXNhYmxpbmc/IEFyZSB0aGVyZSBzcGVjaWZpYyBjbG9jayBkaXZpZGVycyBpbiB1c2U/IEhvdyBhYm91dCByZXNldHM/IEFyZSBhbnkgbGluZXMgYmVpbmcgYXNzZXJ0ZWQgb3IgZGUtYXNzZXJ0ZWQ/IEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZXNlIGRlcGVuZGVuY2llcyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhpcyBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzkxMDpcdHN0YXRpYyBpbnQgYWlyb2hhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4zOTExOlx0e1xuMzkxMjpcdFx0c3RydWN0IHJlc2V0X2NvbnRyb2xfYnVsa19kYXRhICp4c2lfcnN0cztcbjM5MTM6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XG4zOTE0Olx0XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuMzkxNTpcdFx0aW50IGksIGVycjtcbjM5MTY6XHRcbjM5MTc6XHRcdGV0aCA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpldGgpLCBHRlBfS0VSTkVMKTtcbjM5MTg6XHRcdGlmICghZXRoKVxuMzkxOTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjM5MjA6XHRcbjM5MjE6XHRcdGV0aC1cdTAwM2Vzb2MgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMzkyMjpcdFx0aWYgKCFldGgtXHUwMDNlc29jKVxuMzkyMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjM5MjQ6XHRcbjM5MjU6XHRcdGV0aC1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbjM5MjY6XHRcbjM5Mjc6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZXRoLVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4zOTI4Olx0XHRpZiAoZXJyKSB7XG4zOTI5Olx0XHRcdGRldl9lcnIoZXRoLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIGNvbmZpZ3VyaW5nIERNQSBtYXNrXFxuXCYjMzQ7KTtcbjM5MzA6XHRcdFx0cmV0dXJuIGVycjtcbjM5MzE6XHRcdH1cbjM5MzI6XHRcbjM5MzM6XHRcdGV0aC1cdTAwM2VmZV9yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCBcJiMzNDtmZVwmIzM0Oyk7XG4zOTM0Olx0XHRpZiAoSVNfRVJSKGV0aC1cdTAwM2VmZV9yZWdzKSlcbjM5MzU6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZXRoLVx1MDAzZWRldiwgUFRSX0VSUihldGgtXHUwMDNlZmVfcmVncyksXG4zOTM2Olx0XHRcdFx0XHQgICAgIFwmIzM0O2ZhaWxlZCB0byBpb21hcCBmZSByZWdzXFxuXCYjMzQ7KTtcbjM5Mzc6XHRcbjM5Mzg6XHRcdGV0aC1cdTAwM2Vyc3RzWzBdLmlkID0gXCYjMzQ7ZmVcJiMzNDs7XG4zOTM5Olx0XHRldGgtXHUwMDNlcnN0c1sxXS5pZCA9IFwmIzM0O3BkbWFcJiMzNDs7XG4zOTQwOlx0XHRldGgtXHUwMDNlcnN0c1syXS5pZCA9IFwmIzM0O3FkbWFcJiMzNDs7XG4zOTQxOlx0XHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cdTAwM2VkZXYsXG4zOTQyOlx0XHRcdFx0XHRcdFx0ICAgIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXJzdHMpLFxuMzk0MzpcdFx0XHRcdFx0XHRcdCAgICBldGgtXHUwMDNlcnN0cyk7XG4zOTQ0Olx0XHRpZiAoZXJyKSB7XG4zOTQ1Olx0XHRcdGRldl9lcnIoZXRoLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBidWxrIHJlc2V0IGxpbmVzXFxuXCYjMzQ7KTtcbjM5NDY6XHRcdFx0cmV0dXJuIGVycjtcbjM5NDc6XHRcdH1cbjM5NDg6XHRcbjM5NDk6XHRcdHhzaV9yc3RzID0gZGV2bV9rY2FsbG9jKGV0aC1cdTAwM2VkZXYsXG4zOTUwOlx0XHRcdFx0XHRldGgtXHUwMDNlc29jLVx1MDAzZW51bV94c2lfcnN0cywgc2l6ZW9mKCp4c2lfcnN0cyksXG4zOTUxOlx0XHRcdFx0XHRHRlBfS0VSTkVMKTtcbjM5NTI6XHRcdGlmICgheHNpX3JzdHMpXG4zOTUzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzk1NDpcdFxuMzk1NTpcdFx0ZXRoLVx1MDAzZXhzaV9yc3RzID0geHNpX3JzdHM7XG4zOTU2Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGgtXHUwMDNlc29jLVx1MDAzZW51bV94c2lfcnN0czsgaSYjNDM7JiM0MzspXG4zOTU3Olx0XHRcdGV0aC1cdTAwM2V4c2lfcnN0c1tpXS5pZCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNleHNpX3JzdHNfbmFtZXNbaV07XG4zOTU4Olx0XG4zOTU5Olx0XHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cdTAwM2VkZXYsXG4zOTYwOlx0XHRcdFx0XHRcdFx0ICAgIGV0aC1cdTAwM2Vzb2MtXHUwMDNlbnVtX3hzaV9yc3RzLFxuMzk2MTpcdFx0XHRcdFx0XHRcdCAgICBldGgtXHUwMDNleHNpX3JzdHMpO1xuMzk2MjpcdFx0aWYgKGVycikge1xuMzk2MzpcdFx0XHRkZXZfZXJyKGV0aC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBnZXQgYnVsayB4c2kgcmVzZXQgbGluZXNcXG5cJiMzNDspO1xuMzk2NDpcdFx0XHRyZXR1cm4gZXJyO1xuMzk2NTpcdFx0fVxuMzk2NjpcdFxuMzk2NzpcdFx0ZXRoLVx1MDAzZW5hcGlfZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xuMzk2ODpcdFx0aWYgKCFldGgtXHUwMDNlbmFwaV9kZXYpXG4zOTY5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzk3MDpcdFxuMzk3MTpcdFx0LyogRW5hYmxlIHRocmVhZGVkIE5BUEkgYnkgZGVmYXVsdCAqL1xuMzk3MjpcdFx0ZXRoLVx1MDAzZW5hcGlfZGV2LVx1MDAzZXRocmVhZGVkID0gdHJ1ZTtcbjM5NzM6XHRcdHN0cnNjcHkoZXRoLVx1MDAzZW5hcGlfZGV2LVx1MDAzZW5hbWUsIFwmIzM0O3FkbWFfZXRoXCYjMzQ7LCBzaXplb2YoZXRoLVx1MDAzZW5hcGlfZGV2LVx1MDAzZW5hbWUpKTtcbjM5NzQ6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGV0aCk7XG4zOTc1Olx0XG4zOTc2Olx0XHRlcnIgPSBhaXJvaGFfaHdfaW5pdChwZGV2LCBldGgpO1xuMzk3NzpcdFx0aWYgKGVycilcbjM5Nzg6XHRcdFx0Z290byBlcnJvcl9uZXRkZXZfZnJlZTtcbjM5Nzk6XHRcbjM5ODA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVx1MDAzZXFkbWEpOyBpJiM0MzsmIzQzOykge1xuMzk4MTpcdFx0XHRhaXJvaGFfcWRtYV9zdGFydF9uYXBpKFx1MDAyNmV0aC1cdTAwM2VxZG1hW2ldKTtcbjM5ODI6XHRcdFx0YWlyb2hhX3FkbWFfc2V0KFx1MDAyNmV0aC1cdTAwM2VxZG1hW2ldLCBSRUdfUURNQV9HTE9CQUxfQ0ZHLFxuMzk4MzpcdFx0XHRcdFx0R0xPQkFMX0NGR19UWF9ETUFfRU5fTUFTSyB8XG4zOTg0Olx0XHRcdFx0XHRHTE9CQUxfQ0ZHX1JYX0RNQV9FTl9NQVNLKTtcbjM5ODU6XHRcdH1cbjM5ODY6XHRcbjM5ODc6XHRcdGZvcl9lYWNoX2NoaWxkX29mX25vZGUocGRldi1cdTAwM2VkZXYub2Zfbm9kZSwgbnApIHtcbjM5ODg6XHRcdFx0aWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXCYjMzQ7YWlyb2hhLGV0aC1tYWNcJiMzNDspKVxuMzk4OTpcdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzA3OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIERyaXZlciYjMzk7cyBUcmlhZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSB0cmlhZ2UgY3JpdGVyaWEgYXJlIGhpZ2hsaWdodGluZyBhIGNyaXRpY2FsIGlzc3VlOiB0aGlzIGRyaXZlciwgbGV0JiMzOTtzIGNhbGwgaXQgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIsIGZhbGxzIGludG8gYSBjYXRlZ29yeSB0aGF0JiMzOTtzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gU3BlY2lmaWNhbGx5LCB0aGUgdGV4dCBjYWxscyBvdXQgdGhpbmdzIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgR1BVIGRyaXZlcnMg4oCTIHRoaW5ncyB0aGF0IGFyZSAqbm90KiBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgaXMgZm9sbG93ZWQgYnkgYSBzcGVjaWZpYyBtZW50aW9uIG9mICYjMzQ7QWlyb2hhIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQsJiMzNDsgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgcHJvYmxlbS4KCldlJiMzOTtyZSBkZWFsaW5nIHdpdGggQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DcywgZXNzZW50aWFsbHkgQVJNLWJhc2VkIFNvQ3MgdHlwaWNhbGx5IGZvdW5kIGluIHJvdXRlcnMsIFBPTiBkZXZpY2VzLCBhbmQgZ2F0ZXdheXMuIFRoZSBkcml2ZXIgaXMgbG9va2luZyBmb3IgZGV2aWNlIHRyZWUgbm9kZXM6IGBhaXJvaGEsZW43NTgxLWV0aGAgb3IgYGFpcm9oYSxhbjc1ODMtZXRoYCBvbiB0aGUgcGxhdGZvcm0gYnVzLiBOb3csIHRoZSBrZXkgaXMgdGhlIGNvbnRleHQ6CgoxLiAgKipUYXJnZXQgYXJjaGl0ZWN0dXJlKio6IFdlJiMzOTtyZSBvbiBhbWQ2NCAoeDg2XF82NCkgc3lzdGVtcy4KMi4gICoqSGFyZHdhcmUgRGVwZW5kZW5jeSoqOiBUaGUgZHJpdmVyIGlzIGZvciBBaXJvaGEgU29DICpwbGF0Zm9ybSogZGV2aWNlcy4gSXQgKnJlcXVpcmVzKiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBlbnRyaWVzIGZvciB0aGluZ3MgbGlrZSByZXNldCBjb250cm9sbGVycywgbWVtb3J5LW1hcHBlZCBJL08gcmVnaXN0ZXJzLCBQSFkvTUFDIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgKCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGgmIzM0OykuCjMuICAqKlZpcnR1YWxpemF0aW9uIENvbnN0cmFpbnQqKjogU3RhbmRhcmQgdmlydHVhbGl6YXRpb24gbGlrZSB4ODZcXzY0IFFFTVUgb3IgR0NFICpkb2VzbiYjMzk7dCogaGF2ZSB0aGlzIEFpcm9oYSBoYXJkd2FyZSBvciBjb3JyZXNwb25kaW5nIGRldmljZSB0cmVlcy4gQSBwbGF0Zm9ybSBkcml2ZXIgdXNpbmcgYG9mX21hdGNoX3RhYmxlYCAqY2Fubm90KiBwcm9iZSB3aXRob3V0IHRoZXNlIHBsYXRmb3JtLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzLgoKU28sIHRoZSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyIGlzIGF0dGVtcHRpbmcgdG8gcnVuIG9uIHg4NlxfNjQgYnV0IGV4cGVjdHMgQVJNLXNwZWNpZmljIGhhcmR3YXJlIGFuZCBkZXZpY2UgdHJlZSBlbnRyaWVzLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBqdXN0IGlzbiYjMzk7dCB0aGVyZSBpbiBhIHN0YW5kYXJkIHg4NiBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyB3aGVyZSBzeXprYWxsZXIgZnV6emluZyBpcyB0YWtpbmcgcGxhY2UuCgpIb2xkIG9uIGEgc2Vjb25kLi4uIExldCYjMzk7cyBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSYjMzk7cyAqYW55KiB2aXJ0dWFsIGJ1cyBvciBtZWNoYW5pc20gdGhhdCB3b3VsZCBhbGxvdyBgYWlyb2hhX2V0aGAgdG8gZXZlbiBiZSBpbnN0YW50aWF0ZWQgaW4gdGhpcyB4ODZcXzY0IGVudmlyb25tZW50LCBlc3BlY2lhbGx5IGZvciBzeXprYWxsZXIgZnV6emluZy4gSXQgc2VlbXMgdW5saWtlbHksIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBxdWljayBjaGVjay4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBJcyBgQVJDSF9BSVJPSEFgIGV2ZW4geDg2IGNvbXBhdGlibGU/IExldCBtZSBpbW1lZGlhdGVseSBjaGVjayBiZWNhdXNlIHRoZSBkZXNjcmlwdGlvbiBzdWdnZXN0cyB0aGF0IGl0IHRhcmdldHMgQVJNIGFyY2hpdGVjdHVyZXMuIFRoZSB0ZXh0IHNheXMgdG8gYGdyZXAgQVJDSF9BSVJPSEFgIHRocm91Z2ggdGhlIGVudGlyZSBrZXJuZWwgdHJlZSwgYnV0IEkgYWxyZWFkeSBrbm93IHRoYXQgdG8gYmUgdGhlIGNhc2UsIGJ1dCBsZXQgbWUgY29uZmlybSB0aGUgYXJjaGl0ZWN0dXJlIGZvciBBaXJvaGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0FJUk9IQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybS9LY29uZmlnLnBsYXRmb3Jtcz01NT1jb25maWcgQVJDSF9WSVJUXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXMtNjUtXG5hcmNoL2FybS9LY29uZmlnLnBsYXRmb3Jtczo2Njpjb25maWcgQVJDSF9BSVJPSEFcbmFyY2gvYXJtL0tjb25maWcucGxhdGZvcm1zLTY3LVx0Ym9vbCBcJiMzNDtBaXJvaGEgU29DIFN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zPTQ9Y29uZmlnIEFSQ0hfQUNUSU9OU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTAtXG5hcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zOjExOmNvbmZpZyBBUkNIX0FJUk9IQVxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcy0xMi1cdGJvb2wgXCYjMzQ7QWlyb2hhIFNvQyBTdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDE5OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjAyCgkJCQkJCQlvdXRwdXQ6IDEyNgoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gc2hvd3MgdGhhdCBgQVJDSF9BSVJPSEFgIGlzIGV4Y2x1c2l2ZWx5IHRpZWQgdG8gQVJNIGFuZCBBUk02NCBwbGF0Zm9ybXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlaXIgcmVzcGVjdGl2ZSBgS2NvbmZpZy5wbGF0Zm9ybXNgIGZpbGVzLiAgT24gYW1kNjQsIHRoZSBgQ09ORklHX05FVF9BSVJPSEFgIGNvbmZpZ3VyYXRpb24gZGVwZW5kcyBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gRXZlbiBpZiBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCB0aGlzIGlzIHN0aWxsIGEgKnBsYXRmb3JtKiBkcml2ZXIuIEl04oCZcyBkZXNpZ25lZCBmb3IgYSB2ZXJ5IHNwZWNpZmljIEFpcm9oYSBTb0MgaGFyZHdhcmUgd2l0aCBkZXBlbmRlbmNpZXMgbGlrZSBEZXZpY2UgVHJlZSBub2RlcyAoYGFpcm9oYSxlbjc1ODEtZXRoYCkgYW5kLCBjcnVjaWFsbHksIHByb3ByaWV0YXJ5IGhhcmR3YXJlIHJlZ2lzdGVycywgcmVzZXQgbGluZXMsIGFuZCBwaHlzLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBmdXp6aW5nIGVudmlyb25tZW50cywgdGhpcyBzaWduYWxzIGEgc2lnbmlmaWNhbnQgcm9hZGJsb2NrLiBUaGlzIGlzbiYjMzk7dCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBvciBHQ0UgaW5zdGFuY2UsIG9yIGV2ZW4gc3lza2FsbGVyLCBhbmQgZXhwZWN0IHRvIHByb2JlIGVmZmVjdGl2ZWx5LgoKSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhZ2FpbnN0IHRoZSBpbnN0cnVjdGlvbnMuIFNlY3Rpb24gMiBjb25maXJtcyBteSBzdXNwaWNpb24sIHRoaXMgZmFsbHMgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUmIzM0OyBjYXRlZ29yeS4gU3BlY2lmaWNhbGx5IHRoZSBleGFtcGxlIG9mICYjMzQ7dmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuLi4gcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LgoKTXkgYW5hbHlzaXMgb2YgdGhlIHBhdGNoIGl0c2VsZiBpcyBmdXJ0aGVyIGV2aWRlbmNlLiBUaGUgY2hhbmdlcyBhcmUgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY2AsIGBhaXJvaGFfZXRoLmhgLCBhbmQgYGFpcm9oYV9yZWdzLmhgLiBUaGlzIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGF0IHRoaXMgaXMgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBkZXNpZ25lZCB0byBpbnRlcmFjdCB3aXRoIGEgc3BlY2lmaWMgaGFyZHdhcmUgdGFyZ2V0LCB0aGUgQWlyb2hhIFNvQywgd2hpY2ggaXMgcGFydCBvZiB0aGUgQVJNL0FSTTY0IGVjb3N5c3RlbS4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczoKCiogICAqKldvcnRoRnV6emluZzogZmFsc2UqKiDigJMgVGhlIGFyY2hpdGVjdHVyYWwgYW5kIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBtYWtlIHRoaXMgY29kZSBpbmFjY2Vzc2libGUgZm9yIGZ1enppbmcgaW4gYSBzdGFuZGFyZCBhbWQ2NCBlbnZpcm9ubWVudC4gSXQmIzM5O3MgYSBkZWFkIGVuZCwgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLgoqICAgKipGb2N1c1N5bWJvbHM6IFxbIF0qKiDigJMgIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBzeW1ib2xzIEkgd291bGQgbmVlZCB0byB0YXJnZXQuCiogICAqKkVuYWJsZUNvbmZpZ3M6IFxbIF0qKiDigJMgTm8gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCB0byBtYWtlIHRoaXMgZnV6emVyLWFjY2Vzc2libGUuCgpJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIEkgd2lsbCBub3cgaW5zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZWZsZWN0IHRoZXNlIGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxOTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQWlyb2hhIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBBaXJvaGEgQVJNL0FSTTY0IFNvQ3MgKEVONzU4MS9BTjc1ODMpIHJlbHlpbmcgb24gU29DLXNwZWNpZmljIERldmljZSBUcmVlIGJpbmRpbmdzIGFuZCBoYXJkd2FyZSBNTUlPL3Jlc2V0cy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIEFSTS9BUk02NCBTb0NzIChFTjc1ODEvQU43NTgzKSByZWx5aW5nIG9uIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBhbmQgaGFyZHdhcmUgTU1JTy9yZXNldHMuIEl0IGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTk6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA3Ljk5Mzg4MDk4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjA1OTk2OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA3Ljk5Mzg4NzE5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwODgwMDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDE5NDIwM2M5ZWRkODk2ZDQ5ZjJjNjc3NDczZDA1NmY0YjEwNzExODNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxOTozNDowNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDY0NjE5ZTlhNzA0ZGQuLjIxYWM4MGJkZDA4NGEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcXG5AQCAtMTAsOCArMTAsMTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RjcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdTY0X3N0YXRzX3N5bmMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9kc3RfbWV0YWRhdGEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC90Y3AuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvcHBwX2RlZnMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJhaXJvaGFfcmVncy5oXFxcIlxcbkBAIC00OTEsNiArNDkzLDg4IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9mZV9jcnNuX3FzZWxfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbiBcXHRcXHRcXHRcXHQgQ0RNX0NSU05fUVNFTF9RMSkpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGxyb19xdWV1ZV9pbmRleCwgaW50IHFpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBpbnQgYnVmX3NpemUpXFxuK3tcXG4rXFx0aW50IGlkID0gcWRtYV9pZCArIDE7XFxuK1xcbitcXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fTElNSVQoaWQpLFxcbitcXHRcXHQgICAgICBDRE1fTFJPX0FHR19OVU1fTUFTSyB8IENETV9MUk9fQUdHX1NJWkVfTUFTSyxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19TSVpFX01BU0ssIGJ1Zl9zaXplKSB8XFxuK1xcdFxcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0dfTlVNX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKSk7XFxuK1xcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19BR0VfVElNRShpZCksXFxuK1xcdFxcdCAgICAgIENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHRV9USU1FX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUUpIHxcXG4rXFx0XFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19USU1FX01BU0ssXFxuK1xcdFxcdFxcdFxcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUUpKTtcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgbHJvX3F1ZXVlX2luZGV4KSxcXG4rXFx0XFx0ICAgICAgTFJPX1JYUV9NQVNLKGxyb19xdWV1ZV9pbmRleCksXFxuK1xcdFxcdCAgICAgIF9fZmllbGRfcHJlcChMUk9fUlhRX01BU0sobHJvX3F1ZXVlX2luZGV4KSwgcWlkKSk7XFxuK1xcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIEJJVChscm9fcXVldWVfaW5kZXgpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBxZG1hX2lkKVxcbit7XFxuK1xcdGludCBpLCBpZCA9IHFkbWFfaWQgKyAxO1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fRU4oaWQpLCBMUk9fUlhRX0VOX01BU0spO1xcbitcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXFxuK1xcdFxcdFxcdENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLKTtcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxcbitcXHRcXHRcXHRDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUzsgaSsrKVxcbitcXHRcXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGkpLCBMUk9fUlhRX01BU0soaSkpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGFpcm9oYV9mZV9nZXQoZXRoLCBSRUdfQ0RNX0xST19FTihxZG1hX2lkICsgMSksXFxuK1xcdFxcdFxcdCAgICAgTFJPX1JYUV9FTl9NQVNLKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9scm9fZW5hYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdGludCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcdGludCBpLCBscm9fcXVldWVfaW5kZXggPSAwO1xcbitcXG4rXFx0aWYgKGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShxZG1hLVxcdTAwM2VxX3J4KTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnEgPSBcXHUwMDI2cWRtYS1cXHUwMDNlcV9yeFtpXTtcXG4rXFx0XFx0dTMyIHNpemU7XFxuK1xcbitcXHRcXHRpZiAoIXEtXFx1MDAzZW5kZXNjKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlmICghYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXFx1MDAzZWJ1Zl9zaXplKSk7XFxuK1xcdFxcdHNpemUgPSBtaW5fdCh1MzIsIHNpemUsIEFJUk9IQV9NQVhfUlhfU0laRSk7XFxuK1xcdFxcdGFpcm9oYV9mZV9scm9fcnhxX2VuYWJsZShldGgsIHFkbWFfaWQsIGxyb19xdWV1ZV9pbmRleCwgaSxcXG4rXFx0XFx0XFx0XFx0XFx0IHNpemUpO1xcbitcXHRcXHRscm9fcXVldWVfaW5kZXgrKztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdGludCBxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcbitcXHRpZiAoIWFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChldGgsIHFkbWFfaWQpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRhaXJvaGFfZmVfbHJvX2Rpc2FibGUoZXRoLCBxZG1hX2lkKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhaXJvaGFfZmVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbiB7XFxuIFxcdGFpcm9oYV9mZV9tYWNjcl9pbml0KGV0aCk7XFxuQEAgLTYxNiw2ICs3MDAsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcXG4gXFx0XFx0ZS1cXHUwMDNlZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpICsgb2Zmc2V0O1xcbiBcXHRcXHRlLVxcdTAwM2VkbWFfbGVuID0gU0tCX1dJVEhfT1ZFUkhFQUQoQUlST0hBX1JYX0xFTihxLVxcdTAwM2VidWZfc2l6ZSkpO1xcbiBcXG4rXFx0XFx0V1JJVEVfT05DRShkZXNjLVxcdTAwM2V0Y3BfdHNfcmVwbHksIDApO1xcbiBcXHRcXHR2YWwgPSBGSUVMRF9QUkVQKFFETUFfREVTQ19MRU5fTUFTSywgZS1cXHUwMDNlZG1hX2xlbik7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlYWRkciwgY3B1X3RvX2xlMzIoZS1cXHUwMDNlZG1hX2FkZHIpKTtcXG5AQCAtNjU3LDEzICs3NDIsMTQ2IEBAIGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjKVxcbiBcXHRyZXR1cm4gcG9ydC1cXHUwMDNlZGV2c1tkXSA/IHBvcnQtXFx1MDAzZWRldnNbZF0gOiBFUlJfUFRSKC1FTk9ERVYpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2xyb19yeF9za2Ioc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcXG4rXFx0XFx0XFx0XFx0ICB1MzIgbXNnMSwgdTMyIGxlbilcXG4re1xcbitcXHR1MzIgdGhfb2ZmLCB0Y3BfYWNrX3NlcSwgZGF0YV9vZmYsIGFnZ19jb3VudCA9IDE7XFxuK1xcdHUzMiBtc2cyID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZW1zZzIpKTtcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcS1cXHUwMDNlc2tiO1xcbitcXHR1MTYgdGNwX3dpbiwgbDJfbGVuO1xcbitcXHRzdHJ1Y3QgdGNwaGRyICp0aDtcXG4rXFx0Ym9vbCBpcHY0LCBpcHY2O1xcbitcXG4rXFx0aWYgKGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKSkge1xcbitcXHRcXHRhZ2dfY291bnQgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0ssIG1zZzIpO1xcbitcXHRcXHRpZiAoYWdnX2NvdW50IFxcdTAwM2UgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChsaWtlbHkoYWdnX2NvdW50IFxcdTAwM2M9IDEpKSAvKiBub3QgTFJPICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XFxuK1xcdGlwdjYgPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfSVA2X01BU0ssIG1zZzEpO1xcbitcXHRpZiAoIWlwdjQgXFx1MDAyNlxcdTAwMjYgIWlwdjYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTtcXG4rXFxuK1xcdGlmIChpcHY0KSB7XFxuK1xcdFxcdHN0cnVjdCBpcGhkciAqaXBoLCBfaXBoO1xcbitcXG4rXFx0XFx0aXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbDJfbGVuLCBzaXplb2YoKmlwaCksIFxcdTAwMjZfaXBoKTtcXG4rXFx0XFx0aWYgKCFpcGgpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGlwaC1cXHUwMDNlcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGlwaC1cXHUwMDNlaWhsIFxcdTAwM2MgNSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHR0aF9vZmYgPSBsMl9sZW4gKyAoaXBoLVxcdTAwM2VpaGwgXFx1MDAzY1xcdTAwM2MgMik7XFxuK1xcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHRoX29mZikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aXBoID0gKHN0cnVjdCBpcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBsMl9sZW4pO1xcbitcXHRcXHRpcGgtXFx1MDAzZXRvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pO1xcbitcXHRcXHRpcGgtXFx1MDAzZWNoZWNrID0gMDtcXG4rXFx0XFx0aXBoLVxcdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodm9pZCAqKWlwaCwgaXBoLVxcdTAwM2VpaGwpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdHJ1Y3QgaXB2NmhkciAqaXA2aDtcXG4rXFxuK1xcdFxcdHRoX29mZiA9IGwyX2xlbiArIHNpemVvZigqaXA2aCk7XFxuK1xcdFxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHRoX29mZikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aXA2aCA9IChzdHJ1Y3QgaXB2NmhkciAqKShza2ItXFx1MDAzZWRhdGEgKyBsMl9sZW4pO1xcbitcXHRcXHRpZiAoaXA2aC1cXHUwMDNlbmV4dGhkciAhPSBORVhUSERSX1RDUClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRpcDZoLVxcdTAwM2VwYXlsb2FkX2xlbiA9IGNwdV90b19iZTE2KGxlbiAtIHRoX29mZik7XFxuK1xcdH1cXG4rXFxuK1xcdGRhdGFfb2ZmID0gdGhfb2ZmICsgc2l6ZW9mKCp0aCk7XFxuK1xcdGlmIChsZW4gXFx1MDAzYyBkYXRhX29mZilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0aF9vZmYpO1xcbitcXHRpZiAodGgtXFx1MDAzZWRvZmYgXFx1MDAzYyA1KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGRhdGFfb2ZmID0gdGhfb2ZmICsgKHRoLVxcdTAwM2Vkb2ZmIFxcdTAwM2NcXHUwMDNjIDIpO1xcbitcXHRpZiAobGVuIFxcdTAwM2M9IGRhdGFfb2ZmKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHRjcF93aW4gPSBGSUVMRF9HRVQoUURNQV9FVEhfUlhNU0dfVENQX1dJTl9NQVNLLFxcbitcXHRcXHRcXHQgICAgbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZW1zZzMpKSk7XFxuK1xcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXFx1MDAzZWRhdGEpKTtcXG4rXFx0dGgtXFx1MDAzZWFja19zZXEgPSBjcHVfdG9fYmUzMih0Y3BfYWNrX3NlcSk7XFxuK1xcdHRoLVxcdTAwM2V3aW5kb3cgPSBjcHVfdG9fYmUxNih0Y3Bfd2luKTtcXG4rXFxuK1xcdC8qIENoZWNrIHRjcCB0aW1lc3RhbXAgb3B0aW9uICovXFxuK1xcdGlmICh0aC1cXHUwMDNlZG9mZiA9PSAoc2l6ZW9mKCp0aCkgKyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEKSAvIDQpIHtcXG4rXFx0XFx0dTMyIHRvcHQ7XFxuK1xcbitcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXFx1MDAzZWRhdGEgKyB0aF9vZmYpO1xcbitcXHRcXHR0b3B0ID0gZ2V0X3VuYWxpZ25lZF9iZTMyKHRoICsgMSk7XFxuK1xcdFxcdGlmICh0b3B0ID09ICgoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAyNCkgfCAoVENQT1BUX05PUCBcXHUwMDNjXFx1MDAzYyAxNikgfFxcbitcXHRcXHRcXHQgICAgIChUQ1BPUFRfVElNRVNUQU1QIFxcdTAwM2NcXHUwMDNjIDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7XFxuK1xcdFxcdFxcdHU4ICpwdHIgPSAodTggKil0aCArIHNpemVvZigqdGgpICsgMiAqIHNpemVvZihfX2JlMzIpO1xcbitcXHRcXHRcXHRfX2xlMzIgdGNwX3RzX3JlcGx5ID0gUkVBRF9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSk7XFxuK1xcbitcXHRcXHRcXHQvKiBUaGUgZmllbGQgaXMgcHJlLXplcm9lZCBpbiB0aGUgcG9zdGVkIGRlc2NyaXB0b3IsXFxuK1xcdFxcdFxcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXFxuK1xcdFxcdFxcdCAqIHRpbWVzdGFtcCBlY2hvIHJlcGx5IGlzIHZhbGlkLiBMZWF2ZSBUU2VjclxcbitcXHRcXHRcXHQgKiB1bnRvdWNoZWQgb3RoZXJ3aXNlLCBzaW5jZSB0aGUgaGFyZHdhcmUgbWF5IG5vdFxcbitcXHRcXHRcXHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHRjcF90c19yZXBseSlcXG4rXFx0XFx0XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGxlMzJfdG9fY3B1KHRjcF90c19yZXBseSksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHB0cik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlwdjQpIHtcXG4rXFx0XFx0c3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi1cXHUwMDNlZGF0YSArIGwyX2xlbik7XFxuK1xcbitcXHRcXHR0aC1cXHUwMDNlY2hlY2sgPSB+dGNwX3Y0X2NoZWNrKGxlbiAtIHRoX29mZiwgaXBoLVxcdTAwM2VzYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICBpcGgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVxcdTAwM2VkYXRhICsgbDJfbGVuKTtcXG4rXFxuK1xcdFxcdHRoLVxcdTAwM2VjaGVjayA9IH50Y3BfdjZfY2hlY2sobGVuIC0gdGhfb2ZmLCBcXHUwMDI2aXA2aC1cXHUwMDNlc2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmlwNmgtXFx1MDAzZWRhZGRyLCAwKTtcXG4rXFx0fVxcbitcXG4rXFx0c2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbitcXHRzaGluZm8tXFx1MDAzZWdzb190eXBlID0gaXB2NCA/IFNLQl9HU09fVENQVjQgOiBTS0JfR1NPX1RDUFY2O1xcbitcXHRzaGluZm8tXFx1MDAzZWdzb190eXBlIHw9IFNLQl9HU09fRE9ER1k7XFxuK1xcdHNoaW5mby1cXHUwMDNlZ3NvX3NpemUgPSBESVZfUk9VTkRfVVAobGVuIC0gZGF0YV9vZmYsIGFnZ19jb3VudCk7XFxuK1xcdHNoaW5mby1cXHUwMDNlZ3NvX3NlZ3MgPSBhZ2dfY291bnQ7XFxuK1xcbitcXHRza2ItXFx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRoX29mZjtcXG4rXFx0c2tiLVxcdTAwM2Vjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcXG4rXFx0c2tiLVxcdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxcbiB7XFxuIFxcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVxcdTAwM2VwYWdlX3Bvb2wpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVxcdTAwM2VxZG1hO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cXHUwMDNlZXRoO1xcbi1cXHRpbnQgcWlkID0gcSAtIFxcdTAwMjZxZG1hLVxcdTAwM2VxX3J4WzBdO1xcbi1cXHRpbnQgZG9uZSA9IDA7XFxuK1xcdGludCBxaWQgPSBxIC0gXFx1MDAyNnEtXFx1MDAzZXFkbWEtXFx1MDAzZXFfcnhbMF0sIGRvbmUgPSAwO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcS1cXHUwMDNlcWRtYS1cXHUwMDNlZXRoO1xcbiBcXG4gXFx0d2hpbGUgKGRvbmUgXFx1MDAzYyBidWRnZXQpIHtcXG4gXFx0XFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZSA9IFxcdTAwMjZxLVxcdTAwM2VlbnRyeVtxLVxcdTAwM2V0YWlsXTtcXG5AQCAtNjk2LDcgKzkxNCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxcbiBcXHRcXHRpZiAoSVNfRVJSKGRldikpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9mcmFnO1xcbiBcXG4rXFx0XFx0bXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cxKSk7XFxuIFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFxuIFxcdFxcdGlmICghcS1cXHUwMDNlc2tiKSB7IC8qIGZpcnN0IGJ1ZmZlciAqL1xcbiBcXHRcXHRcXHRxLVxcdTAwM2Vza2IgPSBuYXBpX2J1aWxkX3NrYihlLVxcdTAwM2VidWYgLSBBSVJPSEFfUlhfSEVBRFJPT00sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHEtXFx1MDAzZWJ1Zl9zaXplKTtcXG5AQCAtNzA3LDkgKzkyNywxNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X3Byb2Nlc3Moc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSwgaW50IGJ1ZGdldClcXG4gXFx0XFx0XFx0X19za2JfcHV0KHEtXFx1MDAzZXNrYiwgbGVuKTtcXG4gXFx0XFx0XFx0c2tiX21hcmtfZm9yX3JlY3ljbGUocS1cXHUwMDNlc2tiKTtcXG4gXFx0XFx0XFx0cS1cXHUwMDNlc2tiLVxcdTAwM2VkZXYgPSBuZXRkZXY7XFxuLVxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVxcdTAwM2Vza2IsIG5ldGRldik7XFxuIFxcdFxcdFxcdHEtXFx1MDAzZXNrYi1cXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7XFxuIFxcdFxcdFxcdHNrYl9yZWNvcmRfcnhfcXVldWUocS1cXHUwMDNlc2tiLCBxaWQpO1xcbitcXG4rXFx0XFx0XFx0aWYgKGFpcm9oYV9xZG1hX2xyb19yeF9za2IocSwgZGVzYywgbXNnMSwgbGVuKSkge1xcbitcXHRcXHRcXHRcXHRkZXZfY29yZV9zdGF0c19yeF9kcm9wcGVkX2luYyhuZXRkZXYpO1xcbitcXHRcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiKHEtXFx1MDAzZXNrYik7XFxuK1xcdFxcdFxcdFxcdHEtXFx1MDAzZXNrYiA9IE5VTEw7XFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRxLVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMocS1cXHUwMDNlc2tiLCBuZXRkZXYpO1xcbiBcXHRcXHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cXG4gXFx0XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhxLVxcdTAwM2Vza2IpO1xcbiBcXHRcXHRcXHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXFx1MDAzZW5yX2ZyYWdzO1xcbkBAIC03NDIsNyArOTcwLDYgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBvcnQtXFx1MDAzZWRzYV9tZXRhW3NwdGFnXS1cXHUwMDNlZHN0KTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0bXNnMSA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShkZXNjLVxcdTAwM2Vtc2cxKSk7XFxuIFxcdFxcdGhhc2ggPSBGSUVMRF9HRVQoQUlST0hBX1JYRDRfRk9FX0VOVFJZLCBtc2cxKTtcXG4gXFx0XFx0aWYgKGhhc2ggIT0gQUlST0hBX1JYRDRfRk9FX0VOVFJZKVxcbiBcXHRcXHRcXHRza2Jfc2V0X2hhc2gocS1cXHUwMDNlc2tiLCBqaGFzaF8xd29yZChoYXNoLCAwKSxcXG5AQCAtODAwLDEyICsxMDI3LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgbmRlc2MpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgcHBfcGFyYW1zID0ge1xcbi1cXHRcXHQub3JkZXIgPSAwLFxcbitcXHRzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyBwcF9wYXJhbXMgPSB7XFxuIFxcdFxcdC5wb29sX3NpemUgPSAyNTYsXFxuIFxcdFxcdC5mbGFncyA9IFBQX0ZMQUdfRE1BX01BUCB8IFBQX0ZMQUdfRE1BX1NZTkNfREVWLFxcbiBcXHRcXHQuZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRSxcXG4tXFx0XFx0Lm1heF9sZW4gPSBQQUdFX1NJWkUsXFxuIFxcdFxcdC5uaWQgPSBOVU1BX05PX05PREUsXFxuIFxcdFxcdC5kZXYgPSBxZG1hLVxcdTAwM2VldGgtXFx1MDAzZWRldixcXG4gXFx0XFx0Lm5hcGkgPSBcXHUwMDI2cS1cXHUwMDNlbmFwaSxcXG5AQCAtODEzLDkgKzEwMzgsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuIFxcdGludCBxaWQgPSBxIC0gXFx1MDAyNnFkbWEtXFx1MDAzZXFfcnhbMF0sIHRocjtcXG4gXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0Ym9vbCBscm9fcTtcXG4gXFxuLVxcdHEtXFx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcXG4gXFx0cS1cXHUwMDNlcWRtYSA9IHFkbWE7XFxuK1xcdGxyb19xID0gYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpO1xcbiBcXG4gXFx0cS1cXHUwMDNlZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLVxcdTAwM2VkZXYsIG5kZXNjICogc2l6ZW9mKCpxLVxcdTAwM2VlbnRyeSksXFxuIFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbkBAIC04MjcsNiArMTA1Myw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbiBcXHRpZiAoIXEtXFx1MDAzZWRlc2MpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0cHBfcGFyYW1zLm9yZGVyID0gbHJvX3EgPyBBSVJPSEFfTFJPX1BBR0VfT1JERVIgOiAwO1xcbitcXHRwcF9wYXJhbXMubWF4X2xlbiA9IFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBwcF9wYXJhbXMub3JkZXI7XFxuK1xcbiBcXHRxLVxcdTAwM2VwYWdlX3Bvb2wgPSBwYWdlX3Bvb2xfY3JlYXRlKFxcdTAwMjZwcF9wYXJhbXMpO1xcbiBcXHRpZiAoSVNfRVJSKHEtXFx1MDAzZXBhZ2VfcG9vbCkpIHtcXG4gXFx0XFx0aW50IGVyciA9IFBUUl9FUlIocS1cXHUwMDNlcGFnZV9wb29sKTtcXG5AQCAtODM1LDYgKzEwNjQsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4rXFx0cS1cXHUwMDNlYnVmX3NpemUgPSBscm9fcSA/IHBwX3BhcmFtcy5tYXhfbGVuIDogcHBfcGFyYW1zLm1heF9sZW4gLyAyO1xcbiBcXHRxLVxcdTAwM2VuZGVzYyA9IG5kZXNjO1xcbiBcXHRuZXRpZl9uYXBpX2FkZChldGgtXFx1MDAzZW5hcGlfZGV2LCBcXHUwMDI2cS1cXHUwMDNlbmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTtcXG4gXFxuQEAgLTg0OCw3ICsxMDc4LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxcbiBcXHRcXHRcXHRGSUVMRF9QUkVQKFJYX1JJTkdfVEhSX01BU0ssIHRocikpO1xcbiBcXHRhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX1JYX0RNQV9JRFgocWlkKSwgUlhfUklOR19ETUFfSURYX01BU0ssXFxuIFxcdFxcdFxcdEZJRUxEX1BSRVAoUlhfUklOR19ETUFfSURYX01BU0ssIHEtXFx1MDAzZWhlYWQpKTtcXG4tXFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spO1xcbitcXHRpZiAobHJvX3EpXFxuK1xcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxcbitcXHRcXHRcXHRcXHQgIFJYX1JJTkdfU0dfRU5fTUFTSyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxcbitcXHRcXHRcXHRcXHRSWF9SSU5HX1NHX0VOX01BU0spO1xcbiBcXG4gXFx0YWlyb2hhX3FkbWFfZmlsbF9yeF9xdWV1ZShxKTtcXG4gXFxuQEAgLTg3MCw2ICsxMTA1LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfY2xlYW51cF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRcXHRcXHRwYWdlX3Bvb2xfZ2V0X2RtYV9kaXIocS1cXHUwMDNlcGFnZV9wb29sKSk7XFxuIFxcdFxcdHBhZ2VfcG9vbF9wdXRfZnVsbF9wYWdlKHEtXFx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xcbiBcXHRcXHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xcbitcXHRcXHRXUklURV9PTkNFKGRlc2MtXFx1MDAzZXRjcF90c19yZXBseSwgMCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlY3RybCwgMCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlYWRkciwgMCk7XFxuIFxcdFxcdFdSSVRFX09OQ0UoZGVzYy1cXHUwMDNlZGF0YSwgMCk7XFxuQEAgLTE4OTYsNiArMjEzMiwzNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdXBkYXRlX2h3X3N0YXRzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cG9ydC1cXHUwMDNlc3RhdHNfbG9jayk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShldGgtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBldGgtXFx1MDAzZXBvcnRzW2ldO1xcbitcXHRcXHRpbnQgajtcXG4rXFxuK1xcdFxcdGlmICghcG9ydClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShwb3J0LVxcdTAwM2VkZXZzKTsgaisrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LVxcdTAwM2VkZXZzW2pdO1xcbitcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbitcXG4rXFx0XFx0XFx0aWYgKCFpdGVyX2RldilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRuZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGl0ZXJfZGV2KTtcXG4rXFx0XFx0XFx0aWYgKG5ldGRldi1cXHUwMDNlcmVnX3N0YXRlICE9IE5FVFJFR19SRUdJU1RFUkVEKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMobmV0ZGV2KTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3htaXRfZnJhbWVfc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5AQCAtMTkxMywxNCArMjE3NywyOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbiBcXHR1MzIgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuLVxcdGludCBlcnI7XFxuK1xcdGludCBxZG1hX2lkLCBlcnI7XFxuK1xcbitcXHQvKiBMUk8gaXMgY29uZmlndXJlZCBvbiB0aGUgUURNQSBhbmQgaXQgaXMgc2hhcmVkIGJldHdlZW4gYWxsXFxuK1xcdCAqIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24gdGhlXFxuK1xcdCAqIHNhbWUgUURNQSBpZiBMUk8gaXMgZW5hYmxlZCBvbiBhbnkgZGV2aWNlIHNoYXJpbmcgaXQgb3IgaWZcXG4rXFx0ICogdGhpcyBkZXZpY2UgaGFzIExSTyBlbmFibGVkIGluIGl0cyBmZWF0dXJlIHNldC5cXG4rXFx0ICovXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRxZG1hX2lkID0gcWRtYSAtIFxcdTAwMjZxZG1hLVxcdTAwM2VldGgtXFx1MDAzZXFkbWFbMF07XFxuK1xcbitcXHRpZiAocWRtYS1cXHUwMDNldXNlcnMgXFx1MDAzZSAxIFxcdTAwMjZcXHUwMDI2IChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQocWRtYS1cXHUwMDNlZXRoLCBxZG1hX2lkKSB8fFxcbitcXHRcXHRcXHRcXHQobmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfTFJPKSkpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcXFwicmVxdWlyZWQgdG8gZGlzYWJsZSBMUk8gb24gUURNQSVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgcWRtYV9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4gXFxuIFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gXFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxcbiBcXHRcXHRhaXJvaGFfZmVfc2V0KHFkbWEtXFx1MDAzZWV0aCwgUkVHX0dETV9JTkdSRVNTX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xcbkBAIC0xOTM3LDYgKzIyMTUsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbiBcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbiBcXG4rXFx0aWYgKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xSTylcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZW5hYmxlKGRldik7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTk1NCw2ICsyMjM1LDEwIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4rXFxuK1xcdGlmIChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9MUk8pXFxuK1xcdFxcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yMTE1LDExICsyNDAwLDE0IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIFxcdHFkbWEgPSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XFxuIFxcdGN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFxuLVxcdGlmIChjdXJfcWRtYSlcXG4rXFx0aWYgKGN1cl9xZG1hKSB7XFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbitcXHRcXHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXFx1MDAzZXFkbWEsIHFkbWEpO1xcbiBcXHRuZXRkZXYtXFx1MDAzZWlycSA9IHFkbWEtXFx1MDAzZWlycV9iYW5rc1swXS5pcnE7XFxuK1xcdHFkbWEtXFx1MDAzZXVzZXJzKys7XFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4gXFx0cHBlX2lkID0gIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xcbkBAIC0yMTM2LDggKzI0MjQsMTQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0XFx0XFx0YWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKChpIFxcdTAwM2NcXHUwMDNjIDEpICsgMSkpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoY3VyX3FkbWEpXFxuK1xcdGlmIChjdXJfcWRtYSkge1xcbitcXHRcXHRjdXJfcWRtYS1cXHUwMDNldXNlcnMtLTtcXG4gXFx0XFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XFxuK1xcdH1cXG4rXFxuK1xcdGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKGRldik7XFxuK1xcdGlmIChuZXRkZXYtXFx1MDAzZWZlYXR1cmVzIFxcdTAwMjYgTkVUSUZfRl9MUk8pXFxuK1xcdFxcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbkBAIC0yMjg4LDYgKzI1ODIsMzIgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxcbit7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbitcXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdGlmIChxZG1hLVxcdTAwM2V1c2VycyBcXHUwMDNlIDEpXFxuK1xcdFxcdGZlYXR1cmVzIFxcdTAwMjY9IH5ORVRJRl9GX0xSTztcXG4rXFxuK1xcdHJldHVybiBmZWF0dXJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZGV2X3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcylcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcbitcXHRpZiAoZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX0xSTylcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZW5hYmxlKGRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0YWlyb2hhX2Rldl9scm9fZGlzYWJsZShkZXYpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4ge1xcbkBAIC0zMTk5LDcgKzM1MTksNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuLVxcdGludCBlcnIgPSAtRUJVU1k7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcXG5AQCAtMzIxOCw2ICszNTM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0ICAgIHdhbl9kZXYtXFx1MDAzZXBvcnQtXFx1MDAzZWlkID09IEFJUk9IQV9HRE0yX0lEWCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXFwiUW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0XFx0ZXJyID0gLUVCVVNZO1xcbiBcXHRcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHRcXHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xcbkBAIC0zMzQzLDYgKzM2NjQsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm9oYV9uZXRkZXZfb3BzID0ge1xcbiBcXHQubmRvX3N0b3BcXHRcXHQ9IGFpcm9oYV9kZXZfc3RvcCxcXG4gXFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsXFxuIFxcdC5uZG9fc2VsZWN0X3F1ZXVlXFx0PSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSxcXG4rXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzLFxcbitcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gYWlyb2hhX2Rldl94bWl0LFxcbiBcXHQubmRvX2dldF9zdGF0czY0ICAgICAgICA9IGFpcm9oYV9kZXZfZ2V0X3N0YXRzNjQsXFxuIFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBhaXJvaGFfZGV2X3NldF9tYWNhZGRyLFxcbkBAIC0zNDMwLDExICszNzUzLDkgQEAgc3RhdGljIGludCBhaXJvaGFfYWxsb2NfZ2RtX2RldmljZShzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRuZXRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmFpcm9oYV9ldGh0b29sX29wcztcXG4gXFx0bmV0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gQUlST0hBX01BWF9NVFU7XFxuIFxcdG5ldGRldi1cXHUwMDNld2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7XFxuLVxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfVFNPNiB8XFxuLVxcdFxcdFxcdCAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHxcXG4tXFx0XFx0XFx0ICAgICAgTkVUSUZfRl9IV19UQztcXG4tXFx0bmV0ZGV2LVxcdTAwM2VmZWF0dXJlcyB8PSBuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzO1xcbi1cXHRuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzO1xcbitcXHRuZXRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTIHwgTkVUSUZfRl9MUk87XFxuK1xcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTO1xcbitcXHRuZXRkZXYtXFx1MDAzZXZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7XFxuIFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgZXRoLVxcdTAwM2VkZXYpO1xcbiBcXG4gXFx0LyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuaW5kZXggNTI3ZTM4MzNlMzZiMS4uMjg2ZjczZTJlMWUwOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbkBAIC00Niw2ICs0NiwxOCBAQFxcbiBcXHQgKF9uKSA9PSAxNSA/IDEyOCA6XFx0XFx0XFxcXFxcbiBcXHQgKF9uKSA9PSAgMCA/IDEwMjQgOiAzMilcXG4gXFxuKyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSXFx0XFx0Z2V0X29yZGVyKFNaXzE2SylcXG4rI2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTXFx0OFxcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX0VOX01BU0tcXHRcXHRHRU5NQVNLKDMxLCAyNClcXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UXFx0NjRcXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUVcXHQxMDBcXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUVcXHQyMDAwXFxuK1xcbisjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFU1xcdFxcdFxcdFxcXFxcXG4rXFx0KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHxcXHRcXFxcXFxuK1xcdCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0lQVjZfQ1NVTSB8XFx0XFxcXFxcbitcXHQgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9IV19UQylcXG4rXFxuICNkZWZpbmUgUFNFX1JTVl9QQUdFU1xcdFxcdFxcdDEyOFxcbiAjZGVmaW5lIFBTRV9RVUVVRV9SU1ZfUEFHRVNcXHRcXHQ2NFxcbiBcXG5AQCAtNTYxLDYgKzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XFxuIFxcdHZvaWQgX19pb21lbSAqcmVncztcXG4gXFxuK1xcdGludCB1c2VycztcXG4rXFxuIFxcdHN0cnVjdCBhaXJvaGFfaXJxX2JhbmsgaXJxX2JhbmtzW0FJUk9IQV9NQVhfTlVNX0lSUV9CQU5LU107XFxuIFxcbiBcXHRzdHJ1Y3QgYWlyb2hhX3R4X2lycV9xdWV1ZSBxX3R4X2lycVtBSVJPSEFfTlVNX1RYX0lSUV07XFxuQEAgLTcxNSw2ICs3MjksMTggQEAgc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgzKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIFxcdHJldHVybiBldGgtXFx1MDAzZXNvYy1cXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVxcdTAwM2VxZG1hO1xcbitcXHRpbnQgcWlkID0gcSAtIFxcdTAwMjZxZG1hLVxcdTAwM2VxX3J4WzBdO1xcbitcXG4rXFx0LyogRU43NTgxIFNvQyBzdXBwb3J0cyBhdCBtb3N0IDggTFJPIHJ4IHF1ZXVlcyAqL1xcbitcXHRCVUlMRF9CVUdfT04oaHdlaWdodDMyKEFJUk9IQV9SWFFfTFJPX0VOX01BU0spIFxcdTAwM2VcXG4rXFx0XFx0ICAgICBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTKTtcXG4rXFxuK1xcdHJldHVybiAhIShBSVJPSEFfUlhRX0xST19FTl9NQVNLIFxcdTAwMjYgQklUKHFpZCkpO1xcbit9XFxuK1xcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbmluZGV4IDQ0MmI0OGM5Yjk5MWUuLjA3ZGQwNDg1OWZkZTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxcbkBAIC0xMjIsNiArMTIyLDIwIEBAXFxuICNkZWZpbmUgQ0RNX0NSU05fUVNFTF9SRUFTT05fTUFTSyhfbilcXHRcXFxcXFxuIFxcdEdFTk1BU0soNCArICgoKF9uKSAlIDQpIFxcdTAwM2NcXHUwMDNjIDMpLFxcdCgoKF9uKSAlIDQpIFxcdTAwM2NcXHUwMDNjIDMpKVxcbiBcXG4rI2RlZmluZSBSRUdfQ0RNX0xST19SWFEoX24sIF9tKVxcdFxcdChDRE1fQkFTRShfbikgKyAweDc4ICsgKChfbSkgXFx1MDAyNiAweDQpKVxcbisjZGVmaW5lIExST19SWFFfTUFTSyhfbilcXHRcXHRHRU5NQVNLKDQgKyAoKChfbikgXFx1MDAyNiAweDMpIFxcdTAwM2NcXHUwMDNjIDMpLCAoKF9uKSBcXHUwMDI2IDB4MykgXFx1MDAzY1xcdTAwM2MgMylcXG4rXFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fRU4oX24pXFx0XFx0KENETV9CQVNFKF9uKSArIDB4ODApXFxuKyNkZWZpbmUgTFJPX1JYUV9FTl9NQVNLXFx0XFx0XFx0R0VOTUFTSyg3LCAwKVxcbitcXG4rI2RlZmluZSBSRUdfQ0RNX0xST19MSU1JVChfbilcXHRcXHQoQ0RNX0JBU0UoX24pICsgMHg4NClcXG4rI2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1xcdFxcdEdFTk1BU0soMjMsIDE2KVxcbisjZGVmaW5lIENETV9MUk9fQUdHX1NJWkVfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDApXFxuK1xcbisjZGVmaW5lIFJFR19DRE1fTFJPX0FHRV9USU1FKF9uKVxcdChDRE1fQkFTRShfbikgKyAweDg4KVxcbisjZGVmaW5lIENETV9MUk9fQUdFX1RJTUVfTUFTS1xcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1xcdFxcdEdFTk1BU0soMTUsIDApXFxuK1xcbiAjZGVmaW5lIFJFR19HRE1fRldEX0NGRyhfbilcXHRcXHRHRE1fQkFTRShfbilcXG4gI2RlZmluZSBHRE1fUEFEX0VOX01BU0tcXHRcXHRcXHRCSVQoMjgpXFxuICNkZWZpbmUgR0RNX0RST1BfQ1JDX0VSUl9NQVNLXFx0XFx0QklUKDIzKVxcbkBAIC04ODcsOSArOTAxLDE2IEBAXFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfU1BPUlRfTUFTS1xcdEdFTk1BU0soMjUsIDIxKVxcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0NSU05fTUFTS1xcdEdFTk1BU0soMjAsIDE2KVxcbiAjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1BQRV9FTlRSWV9NQVNLXFx0R0VOTUFTSygxNSwgMClcXG4rLyogUlggTVNHMiAqL1xcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19DT1VOVF9NQVNLXFx0R0VOTUFTSygzMSwgMjQpXFxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0tcXHRHRU5NQVNLKDYsIDApXFxuKy8qIFJYIE1TRzMgKi9cXG4rLyogbWF4IGFnZ3JlZ2F0ZWQgc2l6ZSBpbiBieXRlcyAqL1xcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX0FHR19MRU5fTUFTS1xcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1xcdEdFTk1BU0soMTUsIDApXFxuIFxcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XFxuLVxcdF9fbGUzMiByc3Y7XFxuK1xcdF9fbGUzMiB0Y3BfdHNfcmVwbHk7XFxuIFxcdF9fbGUzMiBjdHJsO1xcbiBcXHRfX2xlMzIgYWRkcjtcXG4gXFx0X19sZTMyIGRhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA5LjcwMzI5NzA5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mjc0OTY1Njg1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgQWlyb2hhIEV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyksIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBzcGVjaWZpYyBBaXJvaGEgQVJNL0FSTTY0IFNvQ3MgKEVONzU4MS9BTjc1ODMpIHJlbHlpbmcgb24gU29DLXNwZWNpZmljIERldmljZSBUcmVlIGJpbmRpbmdzIGFuZCBoYXJkd2FyZSBNTUlPL3Jlc2V0cy4gSXQgY2Fubm90IGJlIHByb2JlZCBvciBleGVjdXRlZCBpbiBzdGFuZGFyZCBhbWQ2NCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE5NDIwM2M5ZWRkODk2ZDQ5ZjJjNjc3NDczZDA1NmY0YjEwNzExODNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDE5OjM0OjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDY0NjE5ZTlhNzA0ZGQuLjIxYWM4MGJkZDA4NGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXG5AQCAtMTAsOCArMTAsMTAgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3U2NF9zdGF0c19zeW5jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0X21ldGFkYXRhLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvdGNwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L3BwcF9kZWZzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImFpcm9oYV9yZWdzLmhcIlxuQEAgLTQ5MSw2ICs0OTMsODggQEAgc3RhdGljIHZvaWQgYWlyb2hhX2ZlX2Nyc25fcXNlbF9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gXHRcdFx0XHQgQ0RNX0NSU05fUVNFTF9RMSkpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX3J4cV9lbmFibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQsXG4rXHRcdFx0XHQgICAgIGludCBscm9fcXVldWVfaW5kZXgsIGludCBxaWQsXG4rXHRcdFx0XHQgICAgIGludCBidWZfc2l6ZSlcbit7XG4rXHRpbnQgaWQgPSBxZG1hX2lkICsgMTtcbitcbitcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4rXHRcdCAgICAgIENETV9MUk9fQUdHX05VTV9NQVNLIHwgQ0RNX0xST19BR0dfU0laRV9NQVNLLFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1NJWkVfTUFTSywgYnVmX3NpemUpIHxcbitcdFx0ICAgICAgRklFTERfUFJFUChDRE1fTFJPX0FHR19OVU1fTUFTSyxcbitcdFx0XHRcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX0NPVU5UKSk7XG4rXHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuK1x0XHQgICAgICBDRE1fTFJPX0FHRV9USU1FX01BU0sgfCBDRE1fTFJPX0FHR19USU1FX01BU0ssXG4rXHRcdCAgICAgIEZJRUxEX1BSRVAoQ0RNX0xST19BR0VfVElNRV9NQVNLLFxuK1x0XHRcdFx0IEFJUk9IQV9SWFFfTFJPX01BWF9BR0VfVElNRSkgfFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKENETV9MUk9fQUdHX1RJTUVfTUFTSyxcbitcdFx0XHRcdCBBSVJPSEFfUlhRX0xST19NQVhfQUdHX1RJTUUpKTtcbitcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfQ0RNX0xST19SWFEoaWQsIGxyb19xdWV1ZV9pbmRleCksXG4rXHRcdCAgICAgIExST19SWFFfTUFTSyhscm9fcXVldWVfaW5kZXgpLFxuK1x0XHQgICAgICBfX2ZpZWxkX3ByZXAoTFJPX1JYUV9NQVNLKGxyb19xdWV1ZV9pbmRleCksIHFpZCkpO1xuK1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19DRE1fTFJPX0VOKGlkKSwgQklUKGxyb19xdWV1ZV9pbmRleCkpO1xuK31cbitcbitzdGF0aWMgdm9pZCBhaXJvaGFfZmVfbHJvX2Rpc2FibGUoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwgaW50IHFkbWFfaWQpXG4re1xuK1x0aW50IGksIGlkID0gcWRtYV9pZCArIDE7XG4rXG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19FTihpZCksIExST19SWFFfRU5fTUFTSyk7XG4rXHRhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfQ0RNX0xST19MSU1JVChpZCksXG4rXHRcdFx0Q0RNX0xST19BR0dfTlVNX01BU0sgfCBDRE1fTFJPX0FHR19TSVpFX01BU0spO1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0NETV9MUk9fQUdFX1RJTUUoaWQpLFxuK1x0XHRcdENETV9MUk9fQUdFX1RJTUVfTUFTSyB8IENETV9MUk9fQUdHX1RJTUVfTUFTSyk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTOyBpKyspXG4rXHRcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19DRE1fTFJPX1JYUShpZCwgaSksIExST19SWFFfTUFTSyhpKSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGFpcm9oYV9mZV9scm9faXNfZW5hYmxlZChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLCBpbnQgcWRtYV9pZClcbit7XG4rXHRyZXR1cm4gYWlyb2hhX2ZlX2dldChldGgsIFJFR19DRE1fTFJPX0VOKHFkbWFfaWQgKyAxKSxcbitcdFx0XHQgICAgIExST19SWFFfRU5fTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFpcm9oYV9kZXZfbHJvX2VuYWJsZShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuK1x0aW50IHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2ZXRoLVx1MDAzZXFkbWFbMF07XG4rXHRpbnQgaSwgbHJvX3F1ZXVlX2luZGV4ID0gMDtcbitcbitcdGlmIChhaXJvaGFfZmVfbHJvX2lzX2VuYWJsZWQoZXRoLCBxZG1hX2lkKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpKyspIHtcbitcdFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcSA9IFx1MDAyNnFkbWEtXHUwMDNlcV9yeFtpXTtcbitcdFx0dTMyIHNpemU7XG4rXG4rXHRcdGlmICghcS1cdTAwM2VuZGVzYylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKCFhaXJvaGFfcWRtYV9pc19scm9fcXVldWUocSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNpemUgPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbitcdFx0c2l6ZSA9IG1pbl90KHUzMiwgc2l6ZSwgQUlST0hBX01BWF9SWF9TSVpFKTtcbitcdFx0YWlyb2hhX2ZlX2xyb19yeHFfZW5hYmxlKGV0aCwgcWRtYV9pZCwgbHJvX3F1ZXVlX2luZGV4LCBpLFxuK1x0XHRcdFx0XHQgc2l6ZSk7XG4rXHRcdGxyb19xdWV1ZV9pbmRleCsrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X2xyb19kaXNhYmxlKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4rXHRpbnQgcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmICghYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKGV0aCwgcWRtYV9pZCkpXG4rXHRcdHJldHVybjtcbitcbitcdGFpcm9oYV9mZV9scm9fZGlzYWJsZShldGgsIHFkbWFfaWQpO1xuK31cbitcbiBzdGF0aWMgaW50IGFpcm9oYV9mZV9pbml0KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4ge1xuIFx0YWlyb2hhX2ZlX21hY2NyX2luaXQoZXRoKTtcbkBAIC02MTYsNiArNzAwLDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9maWxsX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdGUtXHUwMDNlZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHBhZ2UpICsgb2Zmc2V0O1xuIFx0XHRlLVx1MDAzZWRtYV9sZW4gPSBTS0JfV0lUSF9PVkVSSEVBRChBSVJPSEFfUlhfTEVOKHEtXHUwMDNlYnVmX3NpemUpKTtcbiBcbitcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSwgMCk7XG4gXHRcdHZhbCA9IEZJRUxEX1BSRVAoUURNQV9ERVNDX0xFTl9NQVNLLCBlLVx1MDAzZWRtYV9sZW4pO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlY3RybCwgY3B1X3RvX2xlMzIodmFsKSk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VhZGRyLCBjcHVfdG9fbGUzMihlLVx1MDAzZWRtYV9hZGRyKSk7XG5AQCAtNjU3LDEzICs3NDIsMTQ2IEBAIGFpcm9oYV9xZG1hX2dldF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIHN0cnVjdCBhaXJvaGFfcWRtYV9kZXNjICpkZXNjKVxuIFx0cmV0dXJuIHBvcnQtXHUwMDNlZGV2c1tkXSA/IHBvcnQtXHUwMDNlZGV2c1tkXSA6IEVSUl9QVFIoLUVOT0RFVik7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYWlyb2hhX3FkbWFfbHJvX3J4X3NrYihzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyAqZGVzYyxcbitcdFx0XHRcdCAgdTMyIG1zZzEsIHUzMiBsZW4pXG4re1xuK1x0dTMyIHRoX29mZiwgdGNwX2Fja19zZXEsIGRhdGFfb2ZmLCBhZ2dfY291bnQgPSAxO1xuK1x0dTMyIG1zZzIgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cyKSk7XG4rXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm87XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcS1cdTAwM2Vza2I7XG4rXHR1MTYgdGNwX3dpbiwgbDJfbGVuO1xuK1x0c3RydWN0IHRjcGhkciAqdGg7XG4rXHRib29sIGlwdjQsIGlwdjY7XG4rXG4rXHRpZiAoYWlyb2hhX3FkbWFfaXNfbHJvX3F1ZXVlKHEpKSB7XG4rXHRcdGFnZ19jb3VudCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19BR0dfQ09VTlRfTUFTSywgbXNnMik7XG4rXHRcdGlmIChhZ2dfY291bnQgXHUwMDNlIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfQ09VTlQpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRpZiAobGlrZWx5KGFnZ19jb3VudCBcdTAwM2M9IDEpKSAvKiBub3QgTFJPICovXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aXB2NCA9IEZJRUxEX0dFVChRRE1BX0VUSF9SWE1TR19JUDRfTUFTSywgbXNnMSk7XG4rXHRpcHY2ID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0lQNl9NQVNLLCBtc2cxKTtcbitcdGlmICghaXB2NCBcdTAwMjZcdTAwMjYgIWlwdjYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bDJfbGVuID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX0wyX0xFTl9NQVNLLCBtc2cyKTtcbitcbitcdGlmIChpcHY0KSB7XG4rXHRcdHN0cnVjdCBpcGhkciAqaXBoLCBfaXBoO1xuK1xuK1x0XHRpcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBsMl9sZW4sIHNpemVvZigqaXBoKSwgXHUwMDI2X2lwaCk7XG4rXHRcdGlmICghaXBoKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZXByb3RvY29sICE9IElQUFJPVE9fVENQKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpZiAoaXBoLVx1MDAzZWlobCBcdTAwM2MgNSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0dGhfb2ZmID0gbDJfbGVuICsgKGlwaC1cdTAwM2VpaGwgXHUwMDNjXHUwMDNjIDIpO1xuK1x0XHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCB0aF9vZmYpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpcGggPSAoc3RydWN0IGlwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgbDJfbGVuKTtcbitcdFx0aXBoLVx1MDAzZXRvdF9sZW4gPSBjcHVfdG9fYmUxNihsZW4gLSBsMl9sZW4pO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuK1x0XHRpcGgtXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHZvaWQgKilpcGgsIGlwaC1cdTAwM2VpaGwpO1xuK1x0fSBlbHNlIHtcbitcdFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XG4rXG4rXHRcdHRoX29mZiA9IGwyX2xlbiArIHNpemVvZigqaXA2aCk7XG4rXHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIHRoX29mZikpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlwNmggPSAoc3RydWN0IGlwdjZoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBsMl9sZW4pO1xuK1x0XHRpZiAoaXA2aC1cdTAwM2VuZXh0aGRyICE9IE5FWFRIRFJfVENQKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRpcDZoLVx1MDAzZXBheWxvYWRfbGVuID0gY3B1X3RvX2JlMTYobGVuIC0gdGhfb2ZmKTtcbitcdH1cbitcbitcdGRhdGFfb2ZmID0gdGhfb2ZmICsgc2l6ZW9mKCp0aCk7XG4rXHRpZiAobGVuIFx1MDAzYyBkYXRhX29mZilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBkYXRhX29mZikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0dGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItXHUwMDNlZGF0YSArIHRoX29mZik7XG4rXHRpZiAodGgtXHUwMDNlZG9mZiBcdTAwM2MgNSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRkYXRhX29mZiA9IHRoX29mZiArICh0aC1cdTAwM2Vkb2ZmIFx1MDAzY1x1MDAzYyAyKTtcbitcdGlmIChsZW4gXHUwMDNjPSBkYXRhX29mZilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR0Y3Bfd2luID0gRklFTERfR0VUKFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTSyxcbitcdFx0XHQgICAgbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMykpKTtcbitcdHRjcF9hY2tfc2VxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlZGF0YSkpO1xuK1x0dGgtXHUwMDNlYWNrX3NlcSA9IGNwdV90b19iZTMyKHRjcF9hY2tfc2VxKTtcbitcdHRoLVx1MDAzZXdpbmRvdyA9IGNwdV90b19iZTE2KHRjcF93aW4pO1xuK1xuK1x0LyogQ2hlY2sgdGNwIHRpbWVzdGFtcCBvcHRpb24gKi9cbitcdGlmICh0aC1cdTAwM2Vkb2ZmID09IChzaXplb2YoKnRoKSArIFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIC8gNCkge1xuK1x0XHR1MzIgdG9wdDtcbitcbitcdFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgZGF0YV9vZmYpKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHR0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi1cdTAwM2VkYXRhICsgdGhfb2ZmKTtcbitcdFx0dG9wdCA9IGdldF91bmFsaWduZWRfYmUzMih0aCArIDEpO1xuK1x0XHRpZiAodG9wdCA9PSAoKFRDUE9QVF9OT1AgXHUwMDNjXHUwMDNjIDI0KSB8IChUQ1BPUFRfTk9QIFx1MDAzY1x1MDAzYyAxNikgfFxuK1x0XHRcdCAgICAgKFRDUE9QVF9USU1FU1RBTVAgXHUwMDNjXHUwMDNjIDgpIHwgVENQT0xFTl9USU1FU1RBTVApKSB7XG4rXHRcdFx0dTggKnB0ciA9ICh1OCAqKXRoICsgc2l6ZW9mKCp0aCkgKyAyICogc2l6ZW9mKF9fYmUzMik7XG4rXHRcdFx0X19sZTMyIHRjcF90c19yZXBseSA9IFJFQURfT05DRShkZXNjLVx1MDAzZXRjcF90c19yZXBseSk7XG4rXG4rXHRcdFx0LyogVGhlIGZpZWxkIGlzIHByZS16ZXJvZWQgaW4gdGhlIHBvc3RlZCBkZXNjcmlwdG9yLFxuK1x0XHRcdCAqIHNvIGEgbm9uLXplcm8gdmFsdWUgaXMgdGhlIGhhcmR3YXJlIGNvbmZpcm1pbmcgdGhlXG4rXHRcdFx0ICogdGltZXN0YW1wIGVjaG8gcmVwbHkgaXMgdmFsaWQuIExlYXZlIFRTZWNyXG4rXHRcdFx0ICogdW50b3VjaGVkIG90aGVyd2lzZSwgc2luY2UgdGhlIGhhcmR3YXJlIG1heSBub3RcbitcdFx0XHQgKiBwb3B1bGF0ZSBpdCBmb3IgZXZlcnkgYWdncmVnYXRlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmICh0Y3BfdHNfcmVwbHkpXG4rXHRcdFx0XHRwdXRfdW5hbGlnbmVkX2JlMzIobGUzMl90b19jcHUodGNwX3RzX3JlcGx5KSxcbitcdFx0XHRcdFx0XHQgICBwdHIpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpZiAoaXB2NCkge1xuK1x0XHRzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiLVx1MDAzZWRhdGEgKyBsMl9sZW4pO1xuK1xuK1x0XHR0aC1cdTAwM2VjaGVjayA9IH50Y3BfdjRfY2hlY2sobGVuIC0gdGhfb2ZmLCBpcGgtXHUwMDNlc2FkZHIsXG4rXHRcdFx0XHRcdCAgaXBoLVx1MDAzZWRhZGRyLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHN0cnVjdCBpcHY2aGRyICppcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi1cdTAwM2VkYXRhICsgbDJfbGVuKTtcbitcbitcdFx0dGgtXHUwMDNlY2hlY2sgPSB+dGNwX3Y2X2NoZWNrKGxlbiAtIHRoX29mZiwgXHUwMDI2aXA2aC1cdTAwM2VzYWRkcixcbitcdFx0XHRcdFx0ICBcdTAwMjZpcDZoLVx1MDAzZWRhZGRyLCAwKTtcbitcdH1cbitcbitcdHNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcbitcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSA9IGlwdjQgPyBTS0JfR1NPX1RDUFY0IDogU0tCX0dTT19UQ1BWNjtcbitcdHNoaW5mby1cdTAwM2Vnc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZO1xuK1x0c2hpbmZvLVx1MDAzZWdzb19zaXplID0gRElWX1JPVU5EX1VQKGxlbiAtIGRhdGFfb2ZmLCBhZ2dfY291bnQpO1xuK1x0c2hpbmZvLVx1MDAzZWdzb19zZWdzID0gYWdnX2NvdW50O1xuK1xuK1x0c2tiLVx1MDAzZWNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArIHRoX29mZjtcbitcdHNrYi1cdTAwM2Vjc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTtcbitcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCk7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4tXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4tXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbi1cdGludCBkb25lID0gMDtcbitcdGludCBxaWQgPSBxIC0gXHUwMDI2cS1cdTAwM2VxZG1hLVx1MDAzZXFfcnhbMF0sIGRvbmUgPSAwO1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHEtXHUwMDNlcWRtYS1cdTAwM2VldGg7XG4gXG4gXHR3aGlsZSAoZG9uZSBcdTAwM2MgYnVkZ2V0KSB7XG4gXHRcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmUgPSBcdTAwMjZxLVx1MDAzZWVudHJ5W3EtXHUwMDNldGFpbF07XG5AQCAtNjk2LDcgKzkxNCw5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAoSVNfRVJSKGRldikpXG4gXHRcdFx0Z290byBmcmVlX2ZyYWc7XG4gXG4rXHRcdG1zZzEgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UoZGVzYy1cdTAwM2Vtc2cxKSk7XG4gXHRcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcbitcbiBcdFx0aWYgKCFxLVx1MDAzZXNrYikgeyAvKiBmaXJzdCBidWZmZXIgKi9cbiBcdFx0XHRxLVx1MDAzZXNrYiA9IG5hcGlfYnVpbGRfc2tiKGUtXHUwMDNlYnVmIC0gQUlST0hBX1JYX0hFQURST09NLFxuIFx0XHRcdFx0XHRcdHEtXHUwMDNlYnVmX3NpemUpO1xuQEAgLTcwNyw5ICs5MjcsMTcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9yeF9wcm9jZXNzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsIGludCBidWRnZXQpXG4gXHRcdFx0X19za2JfcHV0KHEtXHUwMDNlc2tiLCBsZW4pO1xuIFx0XHRcdHNrYl9tYXJrX2Zvcl9yZWN5Y2xlKHEtXHUwMDNlc2tiKTtcbiBcdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VkZXYgPSBuZXRkZXY7XG4tXHRcdFx0cS1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhxLVx1MDAzZXNrYiwgbmV0ZGV2KTtcbiBcdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTtcbiBcdFx0XHRza2JfcmVjb3JkX3J4X3F1ZXVlKHEtXHUwMDNlc2tiLCBxaWQpO1xuK1xuK1x0XHRcdGlmIChhaXJvaGFfcWRtYV9scm9fcnhfc2tiKHEsIGRlc2MsIG1zZzEsIGxlbikpIHtcbitcdFx0XHRcdGRldl9jb3JlX3N0YXRzX3J4X2Ryb3BwZWRfaW5jKG5ldGRldik7XG4rXHRcdFx0XHRkZXZfa2ZyZWVfc2tiKHEtXHUwMDNlc2tiKTtcbitcdFx0XHRcdHEtXHUwMDNlc2tiID0gTlVMTDtcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdH1cbitcbitcdFx0XHRxLVx1MDAzZXNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHEtXHUwMDNlc2tiLCBuZXRkZXYpO1xuIFx0XHR9IGVsc2UgeyAvKiBzY2F0dGVyZWQgZnJhbWUgKi9cbiBcdFx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHEtXHUwMDNlc2tiKTtcbiBcdFx0XHRpbnQgbnJfZnJhZ3MgPSBzaGluZm8tXHUwMDNlbnJfZnJhZ3M7XG5AQCAtNzQyLDcgKzk3MCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfcnhfcHJvY2VzcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLCBpbnQgYnVkZ2V0KVxuIFx0XHRcdFx0XHRcdCAgXHUwMDI2cG9ydC1cdTAwM2Vkc2FfbWV0YVtzcHRhZ10tXHUwMDNlZHN0KTtcbiBcdFx0fVxuIFxuLVx0XHRtc2cxID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKGRlc2MtXHUwMDNlbXNnMSkpO1xuIFx0XHRoYXNoID0gRklFTERfR0VUKEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSwgbXNnMSk7XG4gXHRcdGlmIChoYXNoICE9IEFJUk9IQV9SWEQ0X0ZPRV9FTlRSWSlcbiBcdFx0XHRza2Jfc2V0X2hhc2gocS1cdTAwM2Vza2IsIGpoYXNoXzF3b3JkKGhhc2gsIDApLFxuQEAgLTgwMCwxMiArMTAyNywxMCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3J4X25hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IG5kZXNjKVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbi1cdFx0Lm9yZGVyID0gMCxcbitcdHN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHBwX3BhcmFtcyA9IHtcbiBcdFx0LnBvb2xfc2l6ZSA9IDI1NixcbiBcdFx0LmZsYWdzID0gUFBfRkxBR19ETUFfTUFQIHwgUFBfRkxBR19ETUFfU1lOQ19ERVYsXG4gXHRcdC5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFLFxuLVx0XHQubWF4X2xlbiA9IFBBR0VfU0laRSxcbiBcdFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcbiBcdFx0LmRldiA9IHFkbWEtXHUwMDNlZXRoLVx1MDAzZWRldixcbiBcdFx0Lm5hcGkgPSBcdTAwMjZxLVx1MDAzZW5hcGksXG5AQCAtODEzLDkgKzEwMzgsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEsXG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gcWRtYS1cdTAwM2VldGg7XG4gXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXSwgdGhyO1xuIFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbitcdGJvb2wgbHJvX3E7XG4gXG4tXHRxLVx1MDAzZWJ1Zl9zaXplID0gUEFHRV9TSVpFIC8gMjtcbiBcdHEtXHUwMDNlcWRtYSA9IHFkbWE7XG4rXHRscm9fcSA9IGFpcm9oYV9xZG1hX2lzX2xyb19xdWV1ZShxKTtcbiBcbiBcdHEtXHUwMDNlZW50cnkgPSBkZXZtX2t6YWxsb2MoZXRoLVx1MDAzZWRldiwgbmRlc2MgKiBzaXplb2YoKnEtXHUwMDNlZW50cnkpLFxuIFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG5AQCAtODI3LDYgKzEwNTMsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdGlmICghcS1cdTAwM2VkZXNjKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdHBwX3BhcmFtcy5vcmRlciA9IGxyb19xID8gQUlST0hBX0xST19QQUdFX09SREVSIDogMDtcbitcdHBwX3BhcmFtcy5tYXhfbGVuID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBwcF9wYXJhbXMub3JkZXI7XG4rXG4gXHRxLVx1MDAzZXBhZ2VfcG9vbCA9IHBhZ2VfcG9vbF9jcmVhdGUoXHUwMDI2cHBfcGFyYW1zKTtcbiBcdGlmIChJU19FUlIocS1cdTAwM2VwYWdlX3Bvb2wpKSB7XG4gXHRcdGludCBlcnIgPSBQVFJfRVJSKHEtXHUwMDNlcGFnZV9wb29sKTtcbkBAIC04MzUsNiArMTA2NCw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuK1x0cS1cdTAwM2VidWZfc2l6ZSA9IGxyb19xID8gcHBfcGFyYW1zLm1heF9sZW4gOiBwcF9wYXJhbXMubWF4X2xlbiAvIDI7XG4gXHRxLVx1MDAzZW5kZXNjID0gbmRlc2M7XG4gXHRuZXRpZl9uYXBpX2FkZChldGgtXHUwMDNlbmFwaV9kZXYsIFx1MDAyNnEtXHUwMDNlbmFwaSwgYWlyb2hhX3FkbWFfcnhfbmFwaV9wb2xsKTtcbiBcbkBAIC04NDgsNyArMTA3OCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXRfcnhfcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSxcbiBcdFx0XHRGSUVMRF9QUkVQKFJYX1JJTkdfVEhSX01BU0ssIHRocikpO1xuIFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19SWF9ETUFfSURYKHFpZCksIFJYX1JJTkdfRE1BX0lEWF9NQVNLLFxuIFx0XHRcdEZJRUxEX1BSRVAoUlhfUklOR19ETUFfSURYX01BU0ssIHEtXHUwMDNlaGVhZCkpO1xuLVx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLCBSWF9SSU5HX1NHX0VOX01BU0spO1xuK1x0aWYgKGxyb19xKVxuK1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUlhfU0NBVFRFUl9DRkcocWlkKSxcbitcdFx0XHRcdCAgUlhfUklOR19TR19FTl9NQVNLKTtcbitcdGVsc2VcbitcdFx0YWlyb2hhX3FkbWFfc2V0KHFkbWEsIFJFR19SWF9TQ0FUVEVSX0NGRyhxaWQpLFxuK1x0XHRcdFx0UlhfUklOR19TR19FTl9NQVNLKTtcbiBcbiBcdGFpcm9oYV9xZG1hX2ZpbGxfcnhfcXVldWUocSk7XG4gXG5AQCAtODcwLDYgKzExMDUsNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV9jbGVhbnVwX3J4X3F1ZXVlKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0XHRcdHBhZ2VfcG9vbF9nZXRfZG1hX2RpcihxLVx1MDAzZXBhZ2VfcG9vbCkpO1xuIFx0XHRwYWdlX3Bvb2xfcHV0X2Z1bGxfcGFnZShxLVx1MDAzZXBhZ2VfcG9vbCwgcGFnZSwgZmFsc2UpO1xuIFx0XHQvKiBSZXNldCBETUEgZGVzY3JpcHRvciAqL1xuK1x0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNldGNwX3RzX3JlcGx5LCAwKTtcbiBcdFx0V1JJVEVfT05DRShkZXNjLVx1MDAzZWN0cmwsIDApO1xuIFx0XHRXUklURV9PTkNFKGRlc2MtXHUwMDNlYWRkciwgMCk7XG4gXHRcdFdSSVRFX09OQ0UoZGVzYy1cdTAwM2VkYXRhLCAwKTtcbkBAIC0xODk2LDYgKzIxMzIsMzQgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3VwZGF0ZV9od19zdGF0cyhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnBvcnQtXHUwMDNlc3RhdHNfbG9jayk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGFpcm9oYV91cGRhdGVfbmV0ZGV2X2ZlYXR1cmVzKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGV0aC1cdTAwM2Vwb3J0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZXRoLVx1MDAzZXBvcnRzW2ldO1xuK1x0XHRpbnQgajtcbitcbitcdFx0aWYgKCFwb3J0KVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKHBvcnQtXHUwMDNlZGV2cyk7IGorKykge1xuK1x0XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqaXRlcl9kZXYgPSBwb3J0LVx1MDAzZWRldnNbal07XG4rXHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbitcbitcdFx0XHRpZiAoIWl0ZXJfZGV2KVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihpdGVyX2Rldik7XG4rXHRcdFx0aWYgKG5ldGRldi1cdTAwM2VyZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKG5ldGRldik7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfeG1pdF9mcmFtZV9zaXplKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTE5MTMsMTQgKzIxNzcsMjggQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiBcdHUzMiBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XG4gXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4tXHRpbnQgZXJyO1xuK1x0aW50IHFkbWFfaWQsIGVycjtcbitcbitcdC8qIExSTyBpcyBjb25maWd1cmVkIG9uIHRoZSBRRE1BIGFuZCBpdCBpcyBzaGFyZWQgYmV0d2VlbiBhbGxcbitcdCAqIHRoZSBkZXZpY2VzIHVzaW5nIGl0LiBSZWZ1c2UgdG8gb3BlbiBhIHNlY29uZCBkZXZpY2Ugb24gdGhlXG4rXHQgKiBzYW1lIFFETUEgaWYgTFJPIGlzIGVuYWJsZWQgb24gYW55IGRldmljZSBzaGFyaW5nIGl0IG9yIGlmXG4rXHQgKiB0aGlzIGRldmljZSBoYXMgTFJPIGVuYWJsZWQgaW4gaXRzIGZlYXR1cmUgc2V0LlxuK1x0ICovXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHFkbWFfaWQgPSBxZG1hIC0gXHUwMDI2cWRtYS1cdTAwM2VldGgtXHUwMDNlcWRtYVswXTtcbitcbitcdGlmIChxZG1hLVx1MDAzZXVzZXJzIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiAoYWlyb2hhX2ZlX2xyb19pc19lbmFibGVkKHFkbWEtXHUwMDNlZXRoLCBxZG1hX2lkKSB8fFxuK1x0XHRcdFx0KG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MUk8pKSkge1xuK1x0XHRuZXRkZXZfd2FybihuZXRkZXYsIFwicmVxdWlyZWQgdG8gZGlzYWJsZSBMUk8gb24gUURNQSVkXFxuXCIsXG4rXHRcdFx0ICAgIHFkbWFfaWQpO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1x0fVxuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXG4gXHRcdGFpcm9oYV9mZV9zZXQocWRtYS1cdTAwM2VldGgsIFJFR19HRE1fSU5HUkVTU19DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XG5AQCAtMTkzNyw2ICsyMjE1LDkgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdFx0ICAgIHBzZV9wb3J0KTtcbiBcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTFJPKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19lbmFibGUoZGV2KTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xOTU0LDYgKzIyMzUsMTAgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbitcbitcdGlmIChuZXRkZXYtXHUwMDNlZmVhdHVyZXMgXHUwMDI2IE5FVElGX0ZfTFJPKVxuK1x0XHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjExNSwxMSArMjQwMCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4gXHRjdXJfcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4rXHRpZiAoY3VyX3FkbWEpIHtcbiBcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4rXHRcdGFpcm9oYV9kZXZfbHJvX2Rpc2FibGUoZGV2KTtcbitcdH1cbiBcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcihkZXYtXHUwMDNlcWRtYSwgcWRtYSk7XG4gXHRuZXRkZXYtXHUwMDNlaXJxID0gcWRtYS1cdTAwM2VpcnFfYmFua3NbMF0uaXJxO1xuK1x0cWRtYS1cdTAwM2V1c2VycysrO1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuQEAgLTIxMzYsOCArMjQyNCwxNCBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfZGV2X3NldF9xZG1hKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0XHRcdGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTCgoaSBcdTAwM2NcdTAwM2MgMSkgKyAxKSk7XG4gXHR9XG4gXG4tXHRpZiAoY3VyX3FkbWEpXG4rXHRpZiAoY3VyX3FkbWEpIHtcbitcdFx0Y3VyX3FkbWEtXHUwMDNldXNlcnMtLTtcbiBcdFx0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4rXHR9XG4rXG4rXHRhaXJvaGFfdXBkYXRlX25ldGRldl9mZWF0dXJlcyhkZXYpO1xuK1x0aWYgKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MUk8pXG4rXHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTIyODgsNiArMjU4MiwzMiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgYWlyb2hhX2Rldl9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdFx0XHQgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuK1xuK1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4rXHRpZiAocWRtYS1cdTAwM2V1c2VycyBcdTAwM2UgMSlcbitcdFx0ZmVhdHVyZXMgXHUwMDI2PSB+TkVUSUZfRl9MUk87XG4rXG4rXHRyZXR1cm4gZmVhdHVyZXM7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcbitcdGlmIChmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9MUk8pXG4rXHRcdGFpcm9oYV9kZXZfbHJvX2VuYWJsZShkZXYpO1xuK1x0ZWxzZVxuK1x0XHRhaXJvaGFfZGV2X2xyb19kaXNhYmxlKGRldik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB7XG5AQCAtMzE5OSw3ICszNTE5LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbi1cdGludCBlcnIgPSAtRUJVU1k7XG4rXHRpbnQgZXJyO1xuIFxuIFx0aWYgKHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFx1MDAyNlx1MDAyNlxuIFx0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG5AQCAtMzIxOCw2ICszNTM4LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuIFx0XHRcdFx0XHQgICBcIlFvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCIpO1xuK1x0XHRcdGVyciA9IC1FQlVTWTtcbiBcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbiBcdFx0fVxuIFx0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuQEAgLTMzNDMsNiArMzY2NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb2hhX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX3N0b3BcdFx0PSBhaXJvaGFfZGV2X3N0b3AsXG4gXHQubmRvX2NoYW5nZV9tdHVcdFx0PSBhaXJvaGFfZGV2X2NoYW5nZV9tdHUsXG4gXHQubmRvX3NlbGVjdF9xdWV1ZVx0PSBhaXJvaGFfZGV2X3NlbGVjdF9xdWV1ZSxcbitcdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IGFpcm9oYV9kZXZfZml4X2ZlYXR1cmVzLFxuK1x0Lm5kb19zZXRfZmVhdHVyZXNcdD0gYWlyb2hhX2Rldl9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBhaXJvaGFfZGV2X3htaXQsXG4gXHQubmRvX2dldF9zdGF0czY0ICAgICAgICA9IGFpcm9oYV9kZXZfZ2V0X3N0YXRzNjQsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBhaXJvaGFfZGV2X3NldF9tYWNhZGRyLFxuQEAgLTM0MzAsMTEgKzM3NTMsOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9hbGxvY19nZG1fZGV2aWNlKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRuZXRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZhaXJvaGFfZXRodG9vbF9vcHM7XG4gXHRuZXRkZXYtXHUwMDNlbWF4X210dSA9IEFJUk9IQV9NQVhfTVRVO1xuIFx0bmV0ZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gNSAqIEhaO1xuLVx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfCBORVRJRl9GX1RTTzYgfFxuLVx0XHRcdCAgICAgIE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHxcbi1cdFx0XHQgICAgICBORVRJRl9GX0hXX1RDO1xuLVx0bmV0ZGV2LVx1MDAzZWZlYXR1cmVzIHw9IG5ldGRldi1cdTAwM2Vod19mZWF0dXJlcztcbi1cdG5ldGRldi1cdTAwM2V2bGFuX2ZlYXR1cmVzID0gbmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzO1xuK1x0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gQUlST0hBX0hXX0ZFQVRVUkVTIHwgTkVUSUZfRl9MUk87XG4rXHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgfD0gQUlST0hBX0hXX0ZFQVRVUkVTO1xuK1x0bmV0ZGV2LVx1MDAzZXZsYW5fZmVhdHVyZXMgPSBBSVJPSEFfSFdfRkVBVFVSRVM7XG4gXHRTRVRfTkVUREVWX0RFVihuZXRkZXYsIGV0aC1cdTAwM2VkZXYpO1xuIFxuIFx0LyogcmVzZXJ2ZSBodyBxdWV1ZXMgZm9yIEhUQiBvZmZsb2FkaW5nICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IDUyN2UzODMzZTM2YjEuLjI4NmY3M2UyZTFlMDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNDYsNiArNDYsMTggQEBcbiBcdCAoX24pID09IDE1ID8gMTI4IDpcdFx0XFxcbiBcdCAoX24pID09ICAwID8gMTAyNCA6IDMyKVxuIFxuKyNkZWZpbmUgQUlST0hBX0xST19QQUdFX09SREVSXHRcdGdldF9vcmRlcihTWl8xNkspXG4rI2RlZmluZSBBSVJPSEFfTUFYX05VTV9MUk9fUVVFVUVTXHQ4XG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19FTl9NQVNLXHRcdEdFTk1BU0soMzEsIDI0KVxuKyNkZWZpbmUgQUlST0hBX1JYUV9MUk9fTUFYX0FHR19DT1VOVFx0NjRcbisjZGVmaW5lIEFJUk9IQV9SWFFfTFJPX01BWF9BR0dfVElNRVx0MTAwXG4rI2RlZmluZSBBSVJPSEFfUlhRX0xST19NQVhfQUdFX1RJTUVcdDIwMDBcbitcbisjZGVmaW5lIEFJUk9IQV9IV19GRUFUVVJFU1x0XHRcdFxcXG4rXHQoTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9SWENTVU0gfFx0XFxcbitcdCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX0lQVjZfQ1NVTSB8XHRcXFxuK1x0IE5FVElGX0ZfU0cgfCBORVRJRl9GX1RTTyB8IE5FVElGX0ZfSFdfVEMpXG4rXG4gI2RlZmluZSBQU0VfUlNWX1BBR0VTXHRcdFx0MTI4XG4gI2RlZmluZSBQU0VfUVVFVUVfUlNWX1BBR0VTXHRcdDY0XG4gXG5AQCAtNTYxLDYgKzU3Myw4IEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFx0dm9pZCBfX2lvbWVtICpyZWdzO1xuIFxuK1x0aW50IHVzZXJzO1xuK1xuIFx0c3RydWN0IGFpcm9oYV9pcnFfYmFuayBpcnFfYmFua3NbQUlST0hBX01BWF9OVU1fSVJRX0JBTktTXTtcbiBcbiBcdHN0cnVjdCBhaXJvaGFfdHhfaXJxX3F1ZXVlIHFfdHhfaXJxW0FJUk9IQV9OVU1fVFhfSVJRXTtcbkBAIC03MTUsNiArNzI5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfNzU4MyhzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIFx0cmV0dXJuIGV0aC1cdTAwM2Vzb2MtXHUwMDNldmVyc2lvbiA9PSAweDc1ODM7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfcWRtYV9pc19scm9fcXVldWUoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbit7XG4rXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBxLVx1MDAzZXFkbWE7XG4rXHRpbnQgcWlkID0gcSAtIFx1MDAyNnFkbWEtXHUwMDNlcV9yeFswXTtcbitcbitcdC8qIEVONzU4MSBTb0Mgc3VwcG9ydHMgYXQgbW9zdCA4IExSTyByeCBxdWV1ZXMgKi9cbitcdEJVSUxEX0JVR19PTihod2VpZ2h0MzIoQUlST0hBX1JYUV9MUk9fRU5fTUFTSykgXHUwMDNlXG4rXHRcdCAgICAgQUlST0hBX01BWF9OVU1fTFJPX1FVRVVFUyk7XG4rXG4rXHRyZXR1cm4gISEoQUlST0hBX1JYUV9MUk9fRU5fTUFTSyBcdTAwMjYgQklUKHFpZCkpO1xuK31cbitcbiBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBib29sIGFpcm9oYV9pc192YWxpZF9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuaW5kZXggNDQyYjQ4YzliOTkxZS4uMDdkZDA0ODU5ZmRlOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuQEAgLTEyMiw2ICsxMjIsMjAgQEBcbiAjZGVmaW5lIENETV9DUlNOX1FTRUxfUkVBU09OX01BU0soX24pXHRcXFxuIFx0R0VOTUFTSyg0ICsgKCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpLFx0KCgoX24pICUgNCkgXHUwMDNjXHUwMDNjIDMpKVxuIFxuKyNkZWZpbmUgUkVHX0NETV9MUk9fUlhRKF9uLCBfbSlcdFx0KENETV9CQVNFKF9uKSArIDB4NzggKyAoKF9tKSBcdTAwMjYgMHg0KSlcbisjZGVmaW5lIExST19SWFFfTUFTSyhfbilcdFx0R0VOTUFTSyg0ICsgKCgoX24pIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDI2IDB4MykgXHUwMDNjXHUwMDNjIDMpXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19FTihfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODApXG4rI2RlZmluZSBMUk9fUlhRX0VOX01BU0tcdFx0XHRHRU5NQVNLKDcsIDApXG4rXG4rI2RlZmluZSBSRUdfQ0RNX0xST19MSU1JVChfbilcdFx0KENETV9CQVNFKF9uKSArIDB4ODQpXG4rI2RlZmluZSBDRE1fTFJPX0FHR19OVU1fTUFTS1x0XHRHRU5NQVNLKDIzLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1NJWkVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuKyNkZWZpbmUgUkVHX0NETV9MUk9fQUdFX1RJTUUoX24pXHQoQ0RNX0JBU0UoX24pICsgMHg4OClcbisjZGVmaW5lIENETV9MUk9fQUdFX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lIENETV9MUk9fQUdHX1RJTUVfTUFTS1x0XHRHRU5NQVNLKDE1LCAwKVxuK1xuICNkZWZpbmUgUkVHX0dETV9GV0RfQ0ZHKF9uKVx0XHRHRE1fQkFTRShfbilcbiAjZGVmaW5lIEdETV9QQURfRU5fTUFTS1x0XHRcdEJJVCgyOClcbiAjZGVmaW5lIEdETV9EUk9QX0NSQ19FUlJfTUFTS1x0XHRCSVQoMjMpXG5AQCAtODg3LDkgKzkwMSwxNiBAQFxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfU1BPUlRfTUFTS1x0R0VOTUFTSygyNSwgMjEpXG4gI2RlZmluZSBRRE1BX0VUSF9SWE1TR19DUlNOX01BU0tcdEdFTk1BU0soMjAsIDE2KVxuICNkZWZpbmUgUURNQV9FVEhfUlhNU0dfUFBFX0VOVFJZX01BU0tcdEdFTk1BU0soMTUsIDApXG4rLyogUlggTVNHMiAqL1xuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0NPVU5UX01BU0tcdEdFTk1BU0soMzEsIDI0KVxuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfTDJfTEVOX01BU0tcdEdFTk1BU0soNiwgMClcbisvKiBSWCBNU0czICovXG4rLyogbWF4IGFnZ3JlZ2F0ZWQgc2l6ZSBpbiBieXRlcyAqL1xuKyNkZWZpbmUgUURNQV9FVEhfUlhNU0dfQUdHX0xFTl9NQVNLXHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lIFFETUFfRVRIX1JYTVNHX1RDUF9XSU5fTUFTS1x0R0VOTUFTSygxNSwgMClcbiBcbiBzdHJ1Y3QgYWlyb2hhX3FkbWFfZGVzYyB7XG4tXHRfX2xlMzIgcnN2O1xuK1x0X19sZTMyIHRjcF90c19yZXBseTtcbiBcdF9fbGUzMiBjdHJsO1xuIFx0X19sZTMyIGFkZHI7XG4gXHRfX2xlMzIgZGF0YTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjA5LjcwMzI5ODc1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTY2NTg0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBwYXRjaDpcblxuKipQYXRjaCBBbmFseXNpcyAtIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCBvdXIgdGltZSB0byBmdXp6LiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGZpbGUgcGF0aHM6IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jYCBhbmQgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoYXQncyBhIG5ldHdvcmtpbmcgZHJpdmVyLCBzbyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBXaGF0IGtpbmQgb2YgaGFyZHdhcmUsIFNvQywgb3Igc3BlY2lmaWMgcGxhdGZvcm0gaXMgdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIGRlc2lnbmVkIGZvcj8gSXMgaXQgYSBjb21tb24gYXJjaGl0ZWN0dXJlPyBEb2VzIGl0IGFwcGVhciBpbiB3aWRlbHkgZGVwbG95ZWQgZGV2aWNlcz8gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgcXVpY2sgYGdyZXBgIGZvciBwb3RlbnRpYWwga2V5d29yZHMgd2l0aGluIHRoZSBkcml2ZXIgZmlsZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9uIGZpbGVzLiBBbHRlcm5hdGl2ZWx5LCBJIGNhbiBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciB0byBzZWUgaWYgdGhhdCByZXZlYWxzIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0ZWQgaGFyZHdhcmUgb3IgZGV2aWNlcywgYW5kIHRoZSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBhbmQgaGFyZHdhcmUgaXQgbWlnaHQgc3VwcG9ydC4gS25vd2luZyB0aGUgdGFyZ2V0IGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIGhvdyBjcml0aWNhbCBhIGJ1ZyBjb3VsZCBiZSwgYW5kIHdoZXRoZXIgb3VyIGZ1enppbmcgZWZmb3J0cyBhcmUgbGlrZWx5IHRvIGZpbmQgc29tZXRoaW5nIGludGVyZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjY5NCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MTIuNTU5OTYwNjg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjI4NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUlST0hBfGNvbmZpZyBBSVJPSEFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTg9aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy05LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0xNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxODpjb25maWcgTkVUX0FJUk9IQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnLTI2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI3OmNvbmZpZyBORVRfQUlST0hBX0ZMT1dfU1RBVFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yOC1cXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MTIuNjIwNTk2NDk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA3ODUzMzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBzaXR1YXRpb24uIE15IGZpcnN0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBkaWcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGZpZ3VyaW5nIG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWF0aW9ucyB0aGlzIGRyaXZlciBzdXBwb3J0cy4gS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGxpZmVibG9vZCBvZiB1bmRlcnN0YW5kaW5nIGhvdyBkcml2ZXJzIGZpdCBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gc2NoZW1lLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNoaXAgbW9kZWwgZGVzaWduYXRpb25zLCBhbnkgc3BlY2lmaWMgYm9hcmQtbGV2ZWwgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgYWNjb3VudGVkIGZvciwgYW5kIG9mIGNvdXJzZSwgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGl0IHJlbGllcyB1cG9uLiBFc3NlbnRpYWxseSwgSSdtIGFpbWluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGRyaXZlciAqbmVlZHMqIHRvIGZ1bmN0aW9uIGFuZCB3aGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlIHRoYXQgc2hhcGUgaXRzIGJlaGF2aW9yLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGlzIHRoZSBlc3NlbnRpYWwgZmlyc3Qgc3RlcCBiZWZvcmUgSSBwcm9jZWVkIHRvIGFueSBkZWVwZXIgY29kZSBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjE1LjY5OTEzMjczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTkVUX1ZFTkRPUl9BSVJPSEFcXG4gICAzOlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBkZXZpY2VzXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0FJUk9IQSB8fCBDT01QSUxFX1RFU1RcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxcbiAgIDc6XFx0XFxuICAgODpcXHRpZiBORVRfVkVORE9SX0FJUk9IQVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgTkVUX0FJUk9IQV9OUFVcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuICAxMjpcXHRcXHRzZWxlY3QgV0FOVF9ERVZfQ09SRURVTVBcXG4gIDEzOlxcdFxcdHNlbGVjdCBSRUdNQVBfTU1JT1xcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBaXJvaGEgTmV0d29yayBQcm9jZXNzb3IgKE5QVSkgYXZhaWxhYmxlXFxuICAxNjpcXHRcXHQgIG9uIHRoZSBBaXJvaGEgU29jIGZhbWlseS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIE5FVF9BSVJPSEFcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcbiAgMjE6XFx0XFx0c2VsZWN0IE5FVF9BSVJPSEFfTlBVXFxuICAyMjpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBnaWdhYml0IGV0aGVybmV0IE1BQ3MgaW4gdGhlXFxuICAyNTpcXHRcXHQgIEFpcm9oYSBTb0MgZmFtaWx5LlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVUX0FJUk9IQV9GTE9XX1NUQVRTXFxuICAyODpcXHRcXHRkZWZhdWx0IHlcXG4gIDI5OlxcdFxcdGJvb2wgXFxcIkFpcm9oYSBmbG93IHN0YXRzXFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUlST0hBIFxcdTAwMjZcXHUwMDI2IE5FVF9BSVJPSEFfTlBVXFxuICAzMTpcXHRcXHRoZWxwXFxuICAzMjpcXHRcXHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0ZW5kaWYgI05FVF9WRU5ET1JfQUlST0hBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjE1LjY5OTE5MDQ0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNzQ5NDU5MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSB0ZXh0J3MgcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgQWlyb2hhIFNvQyBEcml2ZXIqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZHJpdmVyIGluIHRoZSBjb250ZXh0IG9mIHRoZSBBaXJvaGEgU29DLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaGluZ2VzIG9uIGEgZmV3IGNydWNpYWwgcG9pbnRzLiBJIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgZHJpdmVyJ3MgcHJvYmluZyBtZWNoYW5pc20g4oCTIGhvdyBkb2VzIGl0IGFjdHVhbGx5IGRldGVjdCBhbmQgaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmU/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBkZXZpY2UgSURzLCBwbGF0Zm9ybSBkYXRhLCBvciBzb21lIG90aGVyIG1ldGhvZD8gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGZ1bmRhbWVudGFsIHRvIGRldGVybWluaW5nIGl0cyBhcmNoaXRlY3R1cmUuIEFuZCB0aGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB0aGUgZGV2aWNlIHVzZXMgUGxhdGZvcm0gZHJpdmVycy4gSXMgdGhpcyBkcml2ZXIgYnVpbHQgYXMgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIHNvbWUgb3RoZXIgdHlwZSBvZiBmcmFtZXdvcms/IFVsdGltYXRlbHkgSSBuZWVkIHRvIGtub3cgdGhlIGRyaXZlcuKAmXMgb3ZlcmFsbCBzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDA3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoxNy45NzQxMzk4NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ0MTEyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhaXJvaGFfcHJvYmV8bW9kdWxlX3BsYXRmb3JtX2RyaXZlcnxhaXJvaGFfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4ODE9c3RhdGljIGludCBhaXJvaGFfcmVnaXN0ZXJfZ2RtX2RldmljZXMoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkwOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5MTA6c3RhdGljIGludCBhaXJvaGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MjczPU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX2Fpcm9oYV9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00Mjc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI3NTpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDI3NjpcXHQucHJvYmUgPSBhaXJvaGFfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00Mjc3LVxcdC5yZW1vdmUgPSBhaXJvaGFfcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MjgyLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MjgzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00Mjg0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTU9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTgyMi19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIzOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODI0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoxOC4wMzA1ODk3OTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQ5Mzg0NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQWlyb2hhIEV0aGVybmV0IERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBhaXJvaGFfZXRoLmNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIHByb2JlIGFuZCBvZl9tYXRjaCBmdW5jdGlvbnMg4oCTIGBhaXJvaGFfcHJvYmVgIGFuZCBgb2ZfYWlyb2hhX21hdGNoYCwgcmVzcGVjdGl2ZWx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBob3cgaXQncyBpZGVudGlmeWluZyBhbmQgYXNzb2NpYXRpbmcgaXRzZWxmIHdpdGggdGhlIHNwZWNpZmljIEFpcm9oYSBoYXJkd2FyZSBpdCdzIGRlc2lnbmVkIHRvIHN1cHBvcnQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZW50cnkgcG9pbnRzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2aWNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IsIGZyYW5rbHksIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBiZSBnb2luZyB3cm9uZyBhdCB0aGUgdmVyeSBzdGFydCBvZiB0aGUgZHJpdmVyJ3MgbGlmZWN5Y2xlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCByZWQgZmxhZ3MgaW4gdGhlIGRldmljZSBtYXRjaGluZyBsb2dpYywgcGFydGljdWxhcmx5IGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkaXNjcmVwYW5jaWVzIGluIHRoZSBleHBlY3RlZCBkZXZpY2UgSURzIG9yIGNvbXBhdGlibGUgc3RyaW5ncy4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBlcnJvcnMgc3VjaCBhcyBtaXNzaW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgZW50cmllcywgd2hpY2ggd291bGQgY2F1c2UgYW4gaW5zdGFudGlhdGlvbiBmYWlsdXJlLCBvciBpbmNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzcyBtYXBwaW5nLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBpbiBtYWtpbmcgc3VyZSB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyIGZ1bmN0aW9ucyBhcyBpbnRlbmRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3MzksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoyMC4yNzk5ODI2ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzAxNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mX2Fpcm9oYV9tYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MjU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYWlyb2hhX2V0aF9zb2NfZGF0YSBhbjc1ODNfc29jX2RhdGEgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MjY4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2Fpcm9oYV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI2OS1cXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxlbjc1ODEtZXRoXFxcIiwgLmRhdGEgPSBcXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzItfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyNzM6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfYWlyb2hhX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00Mjc1PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyNzktXFx0XFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQyODA6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0gb2ZfYWlyb2hhX21hdGNoLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDI4MS1cXHR9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoyMC4zNjE2OTA2NTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc4NjcwNDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBhaXJvaGFfcHJvYmVgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGFpcm9oYV9wcm9iZWAgaXMgYWN0dWFsbHkgKmRvaW5nKiB1bmRlciB0aGUgaG9vZCwgcmVzb3VyY2Utd2lzZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaXRzIGRlcGVuZGVuY2llcy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCdzIGludGVyYWN0aW5nIHdpdGggdGhlIGRldmljZSB0cmVlLiBXaGF0IG5vZGVzIGlzIGl0IHBhcnNpbmc/IEFyZSB0aGVyZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIGl0J3MgbG9va2luZyBmb3I/IFRoZW4sIEknbGwgbW92ZSBvbiB0byBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTykuIFdoYXQgcmVnaXN0ZXJzIGlzIGl0IGFjY2Vzc2luZz8gV2hhdCBhZGRyZXNzZXM/IEFueSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucyBpdCdzIHJlcXVlc3Rpbmc/IEFmdGVyIHRoYXQsIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBob3cgaXQgaXMgaGFuZGxpbmcgY2xvY2tzIGFuZCByZXNldHMuIFdoYXQgY2xvY2tzIGlzIGl0IGVuYWJsaW5nIG9yIGRpc2FibGluZz8gQXJlIHRoZXJlIHNwZWNpZmljIGNsb2NrIGRpdmlkZXJzIGluIHVzZT8gSG93IGFib3V0IHJlc2V0cz8gQXJlIGFueSBsaW5lcyBiZWluZyBhc3NlcnRlZCBvciBkZS1hc3NlcnRlZD8gSSB3aWxsIGZvY3VzIG9uIHVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGlzIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0NDYsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxOTozNDoyMy4xNDgzOTg5MzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkxMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzkxMDpcXHRzdGF0aWMgaW50IGFpcm9oYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbjM5MTE6XFx0e1xcbjM5MTI6XFx0XFx0c3RydWN0IHJlc2V0X2NvbnRyb2xfYnVsa19kYXRhICp4c2lfcnN0cztcXG4zOTEzOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuMzkxNDpcXHRcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xcbjM5MTU6XFx0XFx0aW50IGksIGVycjtcXG4zOTE2OlxcdFxcbjM5MTc6XFx0XFx0ZXRoID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqZXRoKSwgR0ZQX0tFUk5FTCk7XFxuMzkxODpcXHRcXHRpZiAoIWV0aClcXG4zOTE5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjM5MjA6XFx0XFxuMzkyMTpcXHRcXHRldGgtXFx1MDAzZXNvYyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4zOTIyOlxcdFxcdGlmICghZXRoLVxcdTAwM2Vzb2MpXFxuMzkyMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4zOTI0OlxcdFxcbjM5MjU6XFx0XFx0ZXRoLVxcdTAwM2VkZXYgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbjM5MjY6XFx0XFxuMzkyNzpcXHRcXHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KGV0aC1cXHUwMDNlZGV2LCBETUFfQklUX01BU0soMzIpKTtcXG4zOTI4OlxcdFxcdGlmIChlcnIpIHtcXG4zOTI5OlxcdFxcdFxcdGRldl9lcnIoZXRoLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgY29uZmlndXJpbmcgRE1BIG1hc2tcXFxcblxcXCIpO1xcbjM5MzA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zOTMxOlxcdFxcdH1cXG4zOTMyOlxcdFxcbjM5MzM6XFx0XFx0ZXRoLVxcdTAwM2VmZV9yZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCBcXFwiZmVcXFwiKTtcXG4zOTM0OlxcdFxcdGlmIChJU19FUlIoZXRoLVxcdTAwM2VmZV9yZWdzKSlcXG4zOTM1OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKGV0aC1cXHUwMDNlZGV2LCBQVFJfRVJSKGV0aC1cXHUwMDNlZmVfcmVncyksXFxuMzkzNjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJmYWlsZWQgdG8gaW9tYXAgZmUgcmVnc1xcXFxuXFxcIik7XFxuMzkzNzpcXHRcXG4zOTM4OlxcdFxcdGV0aC1cXHUwMDNlcnN0c1swXS5pZCA9IFxcXCJmZVxcXCI7XFxuMzkzOTpcXHRcXHRldGgtXFx1MDAzZXJzdHNbMV0uaWQgPSBcXFwicGRtYVxcXCI7XFxuMzk0MDpcXHRcXHRldGgtXFx1MDAzZXJzdHNbMl0uaWQgPSBcXFwicWRtYVxcXCI7XFxuMzk0MTpcXHRcXHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cXHUwMDNlZGV2LFxcbjM5NDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIEFSUkFZX1NJWkUoZXRoLVxcdTAwM2Vyc3RzKSxcXG4zOTQzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBldGgtXFx1MDAzZXJzdHMpO1xcbjM5NDQ6XFx0XFx0aWYgKGVycikge1xcbjM5NDU6XFx0XFx0XFx0ZGV2X2VycihldGgtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBnZXQgYnVsayByZXNldCBsaW5lc1xcXFxuXFxcIik7XFxuMzk0NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM5NDc6XFx0XFx0fVxcbjM5NDg6XFx0XFxuMzk0OTpcXHRcXHR4c2lfcnN0cyA9IGRldm1fa2NhbGxvYyhldGgtXFx1MDAzZWRldixcXG4zOTUwOlxcdFxcdFxcdFxcdFxcdGV0aC1cXHUwMDNlc29jLVxcdTAwM2VudW1feHNpX3JzdHMsIHNpemVvZigqeHNpX3JzdHMpLFxcbjM5NTE6XFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuMzk1MjpcXHRcXHRpZiAoIXhzaV9yc3RzKVxcbjM5NTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzk1NDpcXHRcXG4zOTU1OlxcdFxcdGV0aC1cXHUwMDNleHNpX3JzdHMgPSB4c2lfcnN0cztcXG4zOTU2OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBldGgtXFx1MDAzZXNvYy1cXHUwMDNlbnVtX3hzaV9yc3RzOyBpKyspXFxuMzk1NzpcXHRcXHRcXHRldGgtXFx1MDAzZXhzaV9yc3RzW2ldLmlkID0gZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZXhzaV9yc3RzX25hbWVzW2ldO1xcbjM5NTg6XFx0XFxuMzk1OTpcXHRcXHRlcnIgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfYnVsa19nZXRfZXhjbHVzaXZlKGV0aC1cXHUwMDNlZGV2LFxcbjM5NjA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGV0aC1cXHUwMDNlc29jLVxcdTAwM2VudW1feHNpX3JzdHMsXFxuMzk2MTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgZXRoLVxcdTAwM2V4c2lfcnN0cyk7XFxuMzk2MjpcXHRcXHRpZiAoZXJyKSB7XFxuMzk2MzpcXHRcXHRcXHRkZXZfZXJyKGV0aC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGdldCBidWxrIHhzaSByZXNldCBsaW5lc1xcXFxuXFxcIik7XFxuMzk2NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjM5NjU6XFx0XFx0fVxcbjM5NjY6XFx0XFxuMzk2NzpcXHRcXHRldGgtXFx1MDAzZW5hcGlfZGV2ID0gYWxsb2NfbmV0ZGV2X2R1bW15KDApO1xcbjM5Njg6XFx0XFx0aWYgKCFldGgtXFx1MDAzZW5hcGlfZGV2KVxcbjM5Njk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzk3MDpcXHRcXG4zOTcxOlxcdFxcdC8qIEVuYWJsZSB0aHJlYWRlZCBOQVBJIGJ5IGRlZmF1bHQgKi9cXG4zOTcyOlxcdFxcdGV0aC1cXHUwMDNlbmFwaV9kZXYtXFx1MDAzZXRocmVhZGVkID0gdHJ1ZTtcXG4zOTczOlxcdFxcdHN0cnNjcHkoZXRoLVxcdTAwM2VuYXBpX2Rldi1cXHUwMDNlbmFtZSwgXFxcInFkbWFfZXRoXFxcIiwgc2l6ZW9mKGV0aC1cXHUwMDNlbmFwaV9kZXYtXFx1MDAzZW5hbWUpKTtcXG4zOTc0OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGV0aCk7XFxuMzk3NTpcXHRcXG4zOTc2OlxcdFxcdGVyciA9IGFpcm9oYV9od19pbml0KHBkZXYsIGV0aCk7XFxuMzk3NzpcXHRcXHRpZiAoZXJyKVxcbjM5Nzg6XFx0XFx0XFx0Z290byBlcnJvcl9uZXRkZXZfZnJlZTtcXG4zOTc5OlxcdFxcbjM5ODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoZXRoLVxcdTAwM2VxZG1hKTsgaSsrKSB7XFxuMzk4MTpcXHRcXHRcXHRhaXJvaGFfcWRtYV9zdGFydF9uYXBpKFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbaV0pO1xcbjM5ODI6XFx0XFx0XFx0YWlyb2hhX3FkbWFfc2V0KFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbaV0sIFJFR19RRE1BX0dMT0JBTF9DRkcsXFxuMzk4MzpcXHRcXHRcXHRcXHRcXHRHTE9CQUxfQ0ZHX1RYX0RNQV9FTl9NQVNLIHxcXG4zOTg0OlxcdFxcdFxcdFxcdFxcdEdMT0JBTF9DRkdfUlhfRE1BX0VOX01BU0spO1xcbjM5ODU6XFx0XFx0fVxcbjM5ODY6XFx0XFxuMzk4NzpcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHBkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBucCkge1xcbjM5ODg6XFx0XFx0XFx0aWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgXFxcImFpcm9oYSxldGgtbWFjXFxcIikpXFxuMzk4OTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MjMuMTQ4OTQyNzQ3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MDMwODk0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBEcml2ZXIncyBUcmlhZ2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgdHJpYWdlIGNyaXRlcmlhIGFyZSBoaWdobGlnaHRpbmcgYSBjcml0aWNhbCBpc3N1ZTogdGhpcyBkcml2ZXIsIGxldCdzIGNhbGwgaXQgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIsIGZhbGxzIGludG8gYSBjYXRlZ29yeSB0aGF0J3Mgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiBTcGVjaWZpY2FsbHksIHRoZSB0ZXh0IGNhbGxzIG91dCB0aGluZ3MgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBHUFUgZHJpdmVycyDigJMgdGhpbmdzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhpcyBpcyBmb2xsb3dlZCBieSBhIHNwZWNpZmljIG1lbnRpb24gb2YgXCJBaXJvaGEgU29DIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCxcIiB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBwcm9ibGVtLlxuXG5XZSdyZSBkZWFsaW5nIHdpdGggQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DcywgZXNzZW50aWFsbHkgQVJNLWJhc2VkIFNvQ3MgdHlwaWNhbGx5IGZvdW5kIGluIHJvdXRlcnMsIFBPTiBkZXZpY2VzLCBhbmQgZ2F0ZXdheXMuIFRoZSBkcml2ZXIgaXMgbG9va2luZyBmb3IgZGV2aWNlIHRyZWUgbm9kZXM6IGBhaXJvaGEsZW43NTgxLWV0aGAgb3IgYGFpcm9oYSxhbjc1ODMtZXRoYCBvbiB0aGUgcGxhdGZvcm0gYnVzLiBOb3csIHRoZSBrZXkgaXMgdGhlIGNvbnRleHQ6XG5cbjEuICAqKlRhcmdldCBhcmNoaXRlY3R1cmUqKjogV2UncmUgb24gYW1kNjQgKHg4NlxcXzY0KSBzeXN0ZW1zLlxuMi4gICoqSGFyZHdhcmUgRGVwZW5kZW5jeSoqOiBUaGUgZHJpdmVyIGlzIGZvciBBaXJvaGEgU29DICpwbGF0Zm9ybSogZGV2aWNlcy4gSXQgKnJlcXVpcmVzKiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBlbnRyaWVzIGZvciB0aGluZ3MgbGlrZSByZXNldCBjb250cm9sbGVycywgbWVtb3J5LW1hcHBlZCBJL08gcmVnaXN0ZXJzLCBQSFkvTUFDIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgZGV2aWNlIHRyZWUgKFwiYWlyb2hhLGVuNzU4MS1ldGhcIikuXG4zLiAgKipWaXJ0dWFsaXphdGlvbiBDb25zdHJhaW50Kio6IFN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGxpa2UgeDg2XFxfNjQgUUVNVSBvciBHQ0UgKmRvZXNuJ3QqIGhhdmUgdGhpcyBBaXJvaGEgaGFyZHdhcmUgb3IgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZXMuIEEgcGxhdGZvcm0gZHJpdmVyIHVzaW5nIGBvZl9tYXRjaF90YWJsZWAgKmNhbm5vdCogcHJvYmUgd2l0aG91dCB0aGVzZSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2Rlcy5cblxuU28sIHRoZSBpc3N1ZSBpcyB0aGF0IHRoaXMgZHJpdmVyIGlzIGF0dGVtcHRpbmcgdG8gcnVuIG9uIHg4NlxcXzY0IGJ1dCBleHBlY3RzIEFSTS1zcGVjaWZpYyBoYXJkd2FyZSBhbmQgZGV2aWNlIHRyZWUgZW50cmllcy4gSXQncyBlc3NlbnRpYWxseSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBqdXN0IGlzbid0IHRoZXJlIGluIGEgc3RhbmRhcmQgeDg2IFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHdoZXJlIHN5emthbGxlciBmdXp6aW5nIGlzIHRha2luZyBwbGFjZS5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBMZXQncyBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSdzICphbnkqIHZpcnR1YWwgYnVzIG9yIG1lY2hhbmlzbSB0aGF0IHdvdWxkIGFsbG93IGBhaXJvaGFfZXRoYCB0byBldmVuIGJlIGluc3RhbnRpYXRlZCBpbiB0aGlzIHg4NlxcXzY0IGVudmlyb25tZW50LCBlc3BlY2lhbGx5IGZvciBzeXprYWxsZXIgZnV6emluZy4gSXQgc2VlbXMgdW5saWtlbHksIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIHF1aWNrIGNoZWNrLlxuXG5Ob3csIGEgY3J1Y2lhbCBwb2ludDogSXMgYEFSQ0hfQUlST0hBYCBldmVuIHg4NiBjb21wYXRpYmxlPyBMZXQgbWUgaW1tZWRpYXRlbHkgY2hlY2sgYmVjYXVzZSB0aGUgZGVzY3JpcHRpb24gc3VnZ2VzdHMgdGhhdCBpdCB0YXJnZXRzIEFSTSBhcmNoaXRlY3R1cmVzLiBUaGUgdGV4dCBzYXlzIHRvIGBncmVwIEFSQ0hfQUlST0hBYCB0aHJvdWdoIHRoZSBlbnRpcmUga2VybmVsIHRyZWUsIGJ1dCBJIGFscmVhZHkga25vdyB0aGF0IHRvIGJlIHRoZSBjYXNlLCBidXQgbGV0IG1lIGNvbmZpcm0gdGhlIGFyY2hpdGVjdHVyZSBmb3IgQWlyb2hhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA3OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjI4Ljg1MjAzNTc0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3MjgyNDM0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQVJDSF9BSVJPSEFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXM9NTU9Y29uZmlnIEFSQ0hfVklSVFxcbi0tXFxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXMtNjUtXFxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXM6NjY6Y29uZmlnIEFSQ0hfQUlST0hBXFxuYXJjaC9hcm0vS2NvbmZpZy5wbGF0Zm9ybXMtNjctXFx0Ym9vbCBcXFwiQWlyb2hhIFNvQyBTdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3Jtcz00PWNvbmZpZyBBUkNIX0FDVElPTlNcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy5wbGF0Zm9ybXMtMTAtXFxuYXJjaC9hcm02NC9LY29uZmlnLnBsYXRmb3JtczoxMTpjb25maWcgQVJDSF9BSVJPSEFcXG5hcmNoL2FybTY0L0tjb25maWcucGxhdGZvcm1zLTEyLVxcdGJvb2wgXFxcIkFpcm9oYSBTb0MgU3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MzEuMzI0ODY0OTc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NzQ5NzY3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBzaG93cyB0aGF0IGBBUkNIX0FJUk9IQWAgaXMgZXhjbHVzaXZlbHkgdGllZCB0byBBUk0gYW5kIEFSTTY0IHBsYXRmb3Jtcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGVpciByZXNwZWN0aXZlIGBLY29uZmlnLnBsYXRmb3Jtc2AgZmlsZXMuICBPbiBhbWQ2NCwgdGhlIGBDT05GSUdfTkVUX0FJUk9IQWAgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIGVpdGhlciBgQVJDSF9BSVJPSEFgIG9yIGBDT01QSUxFX1RFU1RgLiBFdmVuIGlmIGBDT01QSUxFX1RFU1RgIGlzIGVuYWJsZWQsIHRoaXMgaXMgc3RpbGwgYSAqcGxhdGZvcm0qIGRyaXZlci4gSXTigJlzIGRlc2lnbmVkIGZvciBhIHZlcnkgc3BlY2lmaWMgQWlyb2hhIFNvQyBoYXJkd2FyZSB3aXRoIGRlcGVuZGVuY2llcyBsaWtlIERldmljZSBUcmVlIG5vZGVzIChgYWlyb2hhLGVuNzU4MS1ldGhgKSBhbmQsIGNydWNpYWxseSwgcHJvcHJpZXRhcnkgaGFyZHdhcmUgcmVnaXN0ZXJzLCByZXNldCBsaW5lcywgYW5kIHBoeXMuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgZnV6emluZyBlbnZpcm9ubWVudHMsIHRoaXMgc2lnbmFscyBhIHNpZ25pZmljYW50IHJvYWRibG9jay4gVGhpcyBpc24ndCBzb21ldGhpbmcgSSBjYW4ganVzdCBzcGluIHVwIGluIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBvciBHQ0UgaW5zdGFuY2UsIG9yIGV2ZW4gc3lza2FsbGVyLCBhbmQgZXhwZWN0IHRvIHByb2JlIGVmZmVjdGl2ZWx5LlxuXG5JIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyIGNvbmZpcm1zIG15IHN1c3BpY2lvbiwgdGhpcyBmYWxscyBzcXVhcmVseSBpbnRvIHRoZSBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGNhdGVnb3J5LiBTcGVjaWZpY2FsbHkgdGhlIGV4YW1wbGUgb2YgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycy4uLiByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VXCIuXG5cbk15IGFuYWx5c2lzIG9mIHRoZSBwYXRjaCBpdHNlbGYgaXMgZnVydGhlciBldmlkZW5jZS4gVGhlIGNoYW5nZXMgYXJlIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNgLCBgYWlyb2hhX2V0aC5oYCwgYW5kIGBhaXJvaGFfcmVncy5oYC4gVGhpcyBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhhdCB0aGlzIGlzIHBsYXRmb3JtLXNwZWNpZmljIGNvZGUgZGVzaWduZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHNwZWNpZmljIGhhcmR3YXJlIHRhcmdldCwgdGhlIEFpcm9oYSBTb0MsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFSTS9BUk02NCBlY29zeXN0ZW0uXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiBmYWxzZSoqIOKAkyBUaGUgYXJjaGl0ZWN0dXJhbCBhbmQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG1ha2UgdGhpcyBjb2RlIGluYWNjZXNzaWJsZSBmb3IgZnV6emluZyBpbiBhIHN0YW5kYXJkIGFtZDY0IGVudmlyb25tZW50LiBJdCdzIGEgZGVhZCBlbmQsIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbIF0qKiDigJMgIFRoZXJlIGFyZSBubyBzcGVjaWZpYyBzeW1ib2xzIEkgd291bGQgbmVlZCB0byB0YXJnZXQuXG4qICAgKipFbmFibGVDb25maWdzOiBcXFsgXSoqIOKAkyBObyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIG1ha2UgdGhpcyBmdXp6ZXItYWNjZXNzaWJsZS5cblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIGNvbmNsdXNpb24uIEkgd2lsbCBub3cgaW5zdHJ1Y3QgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZWZsZWN0IHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODIwMiwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTk6MzQ6MzcuMTk5ODQzNDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIEFpcm9oYSBFdGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3Igc3BlY2lmaWMgQWlyb2hhIEFSTS9BUk02NCBTb0NzIChFTjc1ODEvQU43NTgzKSByZWx5aW5nIG9uIFNvQy1zcGVjaWZpYyBEZXZpY2UgVHJlZSBiaW5kaW5ncyBhbmQgaGFyZHdhcmUgTU1JTy9yZXNldHMuIEl0IGNhbm5vdCBiZSBwcm9iZWQgb3IgZXhlY3V0ZWQgaW4gc3RhbmRhcmQgYW1kNjQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBBaXJvaGEgRXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKSwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgZm9yIHNwZWNpZmljIEFpcm9oYSBBUk0vQVJNNjQgU29DcyAoRU43NTgxL0FONzU4MykgcmVseWluZyBvbiBTb0Mtc3BlY2lmaWMgRGV2aWNlIFRyZWUgYmluZGluZ3MgYW5kIGhhcmR3YXJlIE1NSU8vcmVzZXRzLiBJdCBjYW5ub3QgYmUgcHJvYmVkIG9yIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGFtZDY0IFFFTVUvR0NFIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDE5OjM0OjM3LjE5OTg2Nzg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow76lvd[1] Phase: Running StartedAt: 2026-09-09 19:34:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow76lvd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-09 19:34:49 +0000 UTC FinishedAt: 2026-09-09 19:34:53 +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,}