Name: series-workflowxdcjh Phase: Failed StartedAt: 2026-08-13 09:04:59 +0000 UTC FinishedAt: 2026-08-13 09:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdcjh[0] Phase: Succeeded StartedAt: 2026-08-13 09:04:59 +0000 UTC FinishedAt: 2026-08-13 09:52:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdcjh[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 09:04:59 +0000 UTC FinishedAt: 2026-08-13 09:52:45 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0YzE3MDRiYWNmOGEyZmIzMDY5MmUxZTQ4N2VmMzVmNTRiYWE5Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwOTo1MjowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5iNmQ4ZWU3ZTJkNGMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE0LDYgJiM0Mzs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7Nzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbiYjNDM7XHRcdFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xuJiM0MztcdFx0XHQgKiBwYXJlbnRzIGV2ZXJ5IE1EUSB1bmRlciB0aGUgc2FtZSBUTDQgd2l0aCBzY2hlZHVsZVxuJiM0MztcdFx0XHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxuJiM0MztcdFx0XHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xuJiM0MztcdFx0XHQgKiB0b2RheSBhbmQgdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYyxcbiYjNDM7XHRcdFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXG4mIzQzO1x0XHRcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG5AQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTQ4Myw2ICYjNDM7NDgzLDEzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG90eDJfbXFwcmlvIHtcbiYjNDM7XHR1MzJcdGZsYWdzO1xuJiM0MztcdHU2NFx0Km1pbl9yYXRlO1xuJiM0MztcdHU2NFx0Km1heF9yYXRlO1xuJiM0MztcdGJvb2xcdHJhdGVfbGltaXQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgJiM0Mzs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4mIzQzO1x0c3RydWN0IG90eDJfbXFwcmlvXHRtcXByaW87XG4mIzQzO1x0Ym9vbFx0XHRcdG1xcHJpb19yZXBsYWNlX3BlbmRpbmc7XG4mIzQzO1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuJiM0MztcbiBcdHN0cnVjdCBicGZfcHJvZ1x0XHQqeGRwX3Byb2c7XG4gXHRzdHJ1Y3Qgb3R4Ml9xc2V0XHRxc2V0O1xuIFx0c3RydWN0IG90eDJfaHdcdFx0aHc7XG5AQCAtMTI0Niw2ICYjNDM7MTI1NywxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4mIzQzO1x0XHRcdFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcbiBcdFx0XHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG4gXHR1OCBvbGRfcGZjX2VuO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0b2xkX3BmY19lbiA9IHBmdmYtXHUwMDNlcGZjX2VuO1xuIFx0cGZ2Zi1cdTAwM2VwZmNfZW4gPSBwZmMtXHUwMDNlcGZjX2VuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuaW5kZXggYTAzNDBmMzQyMmJmOS4uODM3ZDI5MDI0OTgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5AQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICYjNDM7MTk4MCwxNiBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHQvKiBUT0RPOiBvdHgyX21xcHJpb191cCgpIGZhaWx1cmUgaGVyZSBhYm9ydHMgdGhlIGVudGlyZSBuZG9fb3BlbigpXG4mIzQzO1x0ICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC5cbiYjNDM7XHQgKiBSb3V0aW5lIGlwIGxpbmsgc2V0IHVwIG9yIGRyaXZlciByZXNldCB3aXRoIGFjdGl2ZSBtcXByaW8gb2ZmbG9hZFxuJiM0MztcdCAqIGNhbiBsZWF2ZSB0aGUgaW50ZXJmYWNlIHN0dWNrIGRvd24gdW50aWwgdGhlIHFkaXNjIGlzIHJlbW92ZWQgYW5kXG4mIzQzO1x0ICogcmVhcHBsaWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9odztcbiYjNDM7XG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIxNDAsNiAmIzQzOzIxNTAsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuJiM0MztlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjg0Niw2ICYjNDM7Mjg1NywxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuJiM0MztcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi5mYzk2NzdlMzQwNjU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTMxLDYgJiM0MzszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4mIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDksNTk2IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBvdHgyX21xcHJpb19mcmVlX2NhY2hlKCkgaGVyZSBkcm9wcyB0aGUgY29tbWl0dGVkIHJhdGUgY2FjaGVcbiYjNDM7XHQgKiBvbiB0YyBxZGlzYyByZXBsYWNlIGJlZm9yZSB0aGUgbmV3IG1hcHBpbmcgaXMgY29tcGxldGUuIFN0YWdlIHRoZVxuJiM0MztcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cbiYjNDM7XHQgKiBhIGZhaWx1cmUgYWZ0ZXIgbmV0ZGV2IHJlc3RhcnQgY2FuIHJvbGwgYmFjayBmcm9tIHRoZSBwcmlvciBjYWNoZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGx2bCwgaWR4O1xuJiM0MztcbiYjNDM7XHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuJiM0MzsgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpXG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG1xcHJpb19kb3duKCkgY2xlYXJzIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsXG4mIzQzO1x0ICogYW5kIHRoZSByYXRlIGNhY2hlIGV2ZW4gd2hlbiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBmYWlsc1xuJiM0MztcdCAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhc1xuJiM0MztcdCAqIGluYWN0aXZlIHdoaWxlIHNvbWUgcXVldWVzIG1heSByZXRhaW4gcHJvZ3JhbW1lZCBDSVIvUElSLCBzbyBhIGxhdGVyXG4mIzQzO1x0ICogbXFwcmlvX3VwKCkgb3IgcmUtc2V0dXAgY2FuIHNoYXBlIHdpdGggdGhlIHdyb25nIGVmZmVjdGl2ZSByYXRlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1pbl9yYXRlIFx1MDAyNlx1MDAyNiAhbWF4X3JhdGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0eHEsIGVycik7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXG4mIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xuJiM0MzsgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4mIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4mIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxuJiM0MzsgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0Ym9vbCB1cCA9IG5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsIGFuZCBkZWxldGUgcnVucyBhIGZ1bGwgbmRvX3N0b3AoKS9cbiYjNDM7XHQgKiBuZG9fb3BlbigpIGN5Y2xlIChjYXJyaWVyIGRyb3AsIElSUS9OQVBJIHRlYXJkb3duLCBpbi1mbGlnaHQgdHJhZmZpY1xuJiM0MztcdCAqIGxvc3MpIHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyLiBJZiBuZG9fb3BlbigpIGZhaWxzIHRoZVxuJiM0MztcdCAqIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biAoT1RYMl9GTEFHX0lOVEZfRE9XTikgdW50aWxcbiYjNDM7XHQgKiBtYW51YWwgcmVjb3ZlcnkuIEV4cGxvcmUgbGl2ZSByZXByb2dyYW1taW5nIHdpdGhvdXQgYm91bmNpbmcgdGhlXG4mIzQzO1x0ICogbmV0ZGV2LlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9pbmZvKG5ldGRldixcbiYjNDM7XHRcdCAgICBcJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICh1cClcbiYjNDM7XHRcdGRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9hY3RpdmF0ZTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXG4mIzQzO1x0aWYgKHJhdGVfbGltaXQpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aW50IGRvd25fZXJyO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZG93bl9lcnIpXG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4mIzQzO1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbiYjNDM7XHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbiYjNDM7XHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuJiM0MztcdFx0c21wX3dtYigpO1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X2FjdGl2YXRlOlxuJiM0MztcdGlmICh1cCBcdTAwMjZcdTAwMjYgIWVycilcbiYjNDM7XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXRlIHx8IHFjb3VudCBcdTAwM2M9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmF0ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxIHx8IHJhdGUgXHUwMDNlPSBxY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBuYW1lLCByYXRlLCB0YywgcWNvdW50KTtcbiYjNDM7XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSAlbGx1IGZvciB0YyAlZCB0b28gc21hbGwgZm9yICV1IHF1ZXVlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIG51bV90eHEpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuJiM0MztcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHQvKiBUT0RPOiBPbiBmYWlsZWQgdGMgcWRpc2MgcmVwbGFjZSByZXN0b3JlIHRoZSBwcmlvciByYXRlIGNhY2hlLFxuJiM0MztcdCAqIG5ldGRldiBUQyBtYXBwaW5nLCBhbmQgaGFyZHdhcmUgc2hhcGVycyBmcm9tIGEgc25hcHNob3QgdGFrZW4gYmVmb3JlXG4mIzQzO1x0ICogcmVwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUgd2hpbGVcbiYjNDM7XHQgKiB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgdGhlIGdyYWZ0ZWQgcm9vdCBxZGlzYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGV4dGFjaylcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IGRvd25fZXJyLCBlcnI7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXG4mIzQzO1x0ICogb25lLiBtcXByaW9fc2tpcF90ZWFyZG93biBpcyBhcm1lZCBmcm9tIFRDX1JPT1RfR1JBRlQgc28gdGVhcmRvd25cbiYjNDM7XHQgKiBmcm9tIHRoZSByZXBsYWNlZCBxZGlzYyBpcyBpZ25vcmVkIGFmdGVyIHRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXNcbiYjNDM7XHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93bikge1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIE5VTEwpO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcW9wdC1cdTAwM2VodylcbiYjNDM7XHRcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlmX3VwKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cJiMzNDssIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21pblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttYXhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgICAgcWNvdW50KSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU1cbiYjNDM7XHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cbiYjNDM7XHQgKiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBvciBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkpXG4mIzQzO1x0ICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsXG4mIzQzO1x0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxuJiM0MztcdCAqIGNhY2hlLCBvciBwYXJ0aWFsbHkgcmVwcm9ncmFtbWVkIGhhcmR3YXJlIHNoYXBlcnMuIFJlc3RvcmUgdGhlIHByaW9yXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuJiM0MztcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4mIzQzO1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLCBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0LyogQ2xlYXIgaGFyZHdhcmUgb2ZmbG9hZCBvbiB0aGlzIHJlamVjdGVkIHJlcXVlc3Qgc28gYSBmYWlsZWQgcmVwbGFjZVxuJiM0MztcdCAqIGRvZXMgbm90IGxlYXZlIHRjIHJlcG9ydGluZyBvZmZsb2FkIGZvciBkcml2ZXIgc3RhdGUgdGhhdCB3YXMgdG9yblxuJiM0MztcdCAqIGRvd24gd2hpbGUgdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKG5ldGRldiwgZXh0YWNrKTtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0fVxuJiM0MztcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdGNhc2UgVENfUk9PVF9HUkFGVDpcbiYjNDM7XHRcdGlmIChyb290LVx1MDAzZWluZ3Jlc3MpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4mIzQzO1xuJiM0MztcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuJiM0MztcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfUVVFUllfQ0FQUzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4mIzQzO1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4mIzQzO1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbiYjNDM7XHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSYjNDM7JiM0Mzs7XG5AQCAtMTcyOSwxMSAmIzQzOzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcbiB9XG4gXG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpXG4ge1xuIFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgcmVzO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xuIFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRjMTcwNGJhY2Y4YTJmYjMwNjkyZTFlNDg3ZWYzNWY1NGJhYTljZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA5OjUyOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IGNhNzNhOTRkYjc5NDMuLmI2ZDhlZTdlMmQ0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTQsNiAmIzQzOzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUwLDcgJiM0Mzs3ODYsMjAgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KSB7CiYjNDM7CQkJLyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJTwomIzQzOwkJCSAqIHBhcmVudHMgZXZlcnkgTURRIHVuZGVyIHRoZSBzYW1lIFRMNCB3aXRoIHNjaGVkdWxlCiYjNDM7CQkJICogcHJpb3JpdHkgMCwgc28gc2libGluZyBhcmJpdHJhdGlvbiBkZXBlbmRzIG9uIHRoZSBUTDQKJiM0MzsJCQkgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpcwomIzQzOwkJCSAqIHRvZGF5IGFuZCB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLAomIzQzOwkJCSAqIHNvIGEgVEw0IHJldXNlZCBhZnRlciBIVEIgdGVhcmRvd24gY2FuIHJldGFpbiBzdGFsZQomIzQzOwkJCSAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJfQomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLjY3ZDRhYWU5NDQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC00ODMsNiAmIzQzOzQ4MywxMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG90eDJfbmljIHsKIAl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwpAQCAtNTE1LDYgJiM0Mzs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHsKIAl1NjQJCQlmbGFnczsKIAl1NjQJCQkqY3Ffb3BfYWRkcjsKIAomIzQzOwlzdHJ1Y3Qgb3R4Ml9tcXByaW8JbXFwcmlvOwomIzQzOwlib29sCQkJbXFwcmlvX3JlcGxhY2VfcGVuZGluZzsKJiM0MzsJYm9vbAkJCW1xcHJpb19za2lwX3RlYXJkb3duOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjU3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsgcGZjLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCW9sZF9wZmNfZW4gPSBwZnZmLSZndDtwZmNfZW47CiAJcGZ2Zi0mZ3Q7cGZjX2VuID0gcGZjLSZndDtwZmNfZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwppbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi4wNmNiNDRlNzI2M2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTYgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CS8qIFRPRE86IG90eDJfbXFwcmlvX3VwKCkgZmFpbHVyZSBoZXJlIGFib3J0cyB0aGUgZW50aXJlIG5kb19vcGVuKCkKJiM0MzsJICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC4KJiM0MzsJICogUm91dGluZSBpcCBsaW5rIHNldCB1cCBvciBkcml2ZXIgcmVzZXQgd2l0aCBhY3RpdmUgbXFwcmlvIG9mZmxvYWQKJiM0MzsJICogY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2Ugc3R1Y2sgZG93biB1bnRpbCB0aGUgcWRpc2MgaXMgcmVtb3ZlZCBhbmQKJiM0MzsJICogcmVhcHBsaWVkLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9odzsKJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjE0MCw2ICYjNDM7MjE1MCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmcmVlX2lycSh2ZWMsIHBmKTsKIGVycl9kaXNhYmxlX25hcGk6CiAJb3R4Ml9kaXNhYmxlX25hcGkocGYpOwomIzQzO2Vycl9mcmVlX2h3OgogCW90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpOwogZXJyX2ZyZWVfbWVtOgogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CkBAIC0yODQ2LDYgJiM0MzsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLmZjOTY3N2UzNDA2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDU5NiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwomIzQzOwkvKiBUT0RPOiBvdHgyX21xcHJpb19mcmVlX2NhY2hlKCkgaGVyZSBkcm9wcyB0aGUgY29tbWl0dGVkIHJhdGUgY2FjaGUKJiM0MzsJICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGUKJiM0MzsJICogaW5jb21pbmcgcmF0ZXMgc2VwYXJhdGVseSBhbmQgY29tbWl0IG9ubHkgYWZ0ZXIgcmVwbGFjZSBzdWNjZWVkcyBzbwomIzQzOwkgKiBhIGZhaWx1cmUgYWZ0ZXIgbmV0ZGV2IHJlc3RhcnQgY2FuIHJvbGwgYmFjayBmcm9tIHRoZSBwcmlvciBjYWNoZS4KJiM0MzsJICovCiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWludCBsdmwsIGlkeDsKJiM0MzsKJiM0MzsJZm9yIChsdmwgPSAwOyBsdmwgJmx0OyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpZHggPSAwOyBpZHggJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W2x2bF07IGlkeCYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAocGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLAomIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uCiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb24KJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS4KJiM0MzsgKi8KJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKQomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLAomIzQzOwkgKiBhbmQgdGhlIHJhdGUgY2FjaGUgZXZlbiB3aGVuIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIGZhaWxzCiYjNDM7CSAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhcwomIzQzOwkgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlcgomIzQzOwkgKiBtcXByaW9fdXAoKSBvciByZS1zZXR1cCBjYW4gc2hhcGUgd2l0aCB0aGUgd3JvbmcgZWZmZWN0aXZlIHJhdGVzLgomIzQzOwkgKi8KJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApOwomIzQzOwlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IHR4cSwgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yICh0eHEgPSAwOyB0eHEgJmx0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdOwomIzQzOwomIzQzOwkJaWYgKCFtaW5fcmF0ZSAmYW1wOyZhbXA7ICFtYXhfcmF0ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkgICBtYXhfcmF0ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICB0eHEsIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvCiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpCiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuCiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFycwomIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHQKJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93bgomIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieQomIzQzOyAqIHRoZSBvcGVuIGVycm9yIHBhdGguCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi0mZ3Q7bmV0ZGV2X29wczsKJiM0MzsJYm9vbCB1cCA9IG5ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBUT0RPOiBFdmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLCBhbmQgZGVsZXRlIHJ1bnMgYSBmdWxsIG5kb19zdG9wKCkvCiYjNDM7CSAqIG5kb19vcGVuKCkgY3ljbGUgKGNhcnJpZXIgZHJvcCwgSVJRL05BUEkgdGVhcmRvd24sIGluLWZsaWdodCB0cmFmZmljCiYjNDM7CSAqIGxvc3MpIHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyLiBJZiBuZG9fb3BlbigpIGZhaWxzIHRoZQomIzQzOwkgKiBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd24gKE9UWDJfRkxBR19JTlRGX0RPV04pIHVudGlsCiYjNDM7CSAqIG1hbnVhbCByZWNvdmVyeS4gRXhwbG9yZSBsaXZlIHJlcHJvZ3JhbW1pbmcgd2l0aG91dCBib3VuY2luZyB0aGUKJiM0MzsJICogbmV0ZGV2LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2luZm8obmV0ZGV2LAomIzQzOwkJICAgICYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHVwKQomIzQzOwkJZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfYWN0aXZhdGU7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpbnQgZG93bl9lcnI7CiYjNDM7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWlmIChkb3duX2VycikKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgZG93bl9lcnIpOwomIzQzOwkJLyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvCiYjNDM7CQkgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWUKJiM0MzsJCSAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suCiYjNDM7CQkgKi8KJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CQkvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi8KJiM0MzsJCXNtcF93bWIoKTsKJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X2FjdGl2YXRlOgomIzQzOwlpZiAodXAgJmFtcDsmYW1wOyAhZXJyKQomIzQzOwkJZGV2X2FjdGl2YXRlKG5ldGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1NjQgb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUodTY0IHJhdGUsIHUzMiBxY291bnQpCiYjNDM7ewomIzQzOwlpZiAoIXJhdGUgfHwgcWNvdW50ICZsdDs9IDEpCiYjNDM7CQlyZXR1cm4gcmF0ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCQl1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLAomIzQzOwkJCQkJY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSB8fCByYXRlICZndDs9IHFjb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCSAgICYjMzQ7bXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXG4mIzM0OywKJiM0MzsJCSAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpOwomIzQzOwlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDttcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXMmIzM0OywKJiM0MzsJCQkgICAgICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG51bV90eHEgJmd0OyBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodHhxICZndDs9IG51bV90eHEpIHsKJiM0MzsJCQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxuJiMzNDssCiYjNDM7CQkJCQkgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXUmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmbHQ7IE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIGlsb2cyKG1icHMgLyAyKSAmbHQ7PSBNQVhfUkFURV9FWFBPTkVOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwkvKiBUT0RPOiBPbiBmYWlsZWQgdGMgcWRpc2MgcmVwbGFjZSByZXN0b3JlIHRoZSBwcmlvciByYXRlIGNhY2hlLAomIzQzOwkgKiBuZXRkZXYgVEMgbWFwcGluZywgYW5kIGhhcmR3YXJlIHNoYXBlcnMgZnJvbSBhIHNuYXBzaG90IHRha2VuIGJlZm9yZQomIzQzOwkgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZQomIzQzOwkgKiB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgdGhlIGdyYWZ0ZWQgcm9vdCBxZGlzYy4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcbiYjMzQ7KTsKJiM0MzsJaWYgKGV4dGFjaykKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9IHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0OwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZAomIzQzOwkgKiBvbmUuIG1xcHJpb19za2lwX3RlYXJkb3duIGlzIGFybWVkIGZyb20gVENfUk9PVF9HUkFGVCBzbyB0ZWFyZG93bgomIzQzOwkgKiBmcm9tIHRoZSByZXBsYWNlZCBxZGlzYyBpcyBpZ25vcmVkIGFmdGVyIHRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMKJiM0MzsJICogcmVwcm9ncmFtbWVkIGhhcmR3YXJlIGFuZCBzZXQgbXFwcmlvX3JhdGVfbGltaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3NraXBfdGVhcmRvd24pIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZykgewomIzQzOwkJb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKG5ldGRldiwgTlVMTCk7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwomIzQzOwlpZiAoaWZfdXApIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkb3duX2VycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby0mZ3Q7ZXh0YWNrOwomIzQzOwlib29sIHJlcGxhY2luZyA9IHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgdGMsIHR4cSwgZXJyLCBpOwomIzQzOwomIzQzOwlpZiAoIXFvcHQtJmd0O2h3KQomIzQzOwkJcmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CiYjNDM7CWlmICghaWZfdXApIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtcXByaW8tJmd0O3NoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XG4mIzM0OywgbXFwcmlvLSZndDtzaGFwZXIpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3gmIzM0OywKJiM0MzsJCQkJICAgICAgIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsICZhbXA7cGZ2Zi0mZ3Q7aHcuY2FwX2ZsYWcpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlzX290eDJfc2RwX3JlcChwZnZmLSZndDtwZGV2KSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG90eDJfcW9zX2h0Yl9hY3RpdmUocGZ2ZikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDt4ZHBfcHJvZykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21pbiYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttYXgmIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtaW5fcmF0ZSwKJiM0MzsJCQkJCQkJCSAgICAgICBxY291bnQpKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWF4X3JhdGUsCiYjNDM7CQkJCQkJCQkgICAgICAgcWNvdW50KSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU0KJiM0MzsJICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tCiYjNDM7CSAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSkKJiM0MzsJICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsCiYjNDM7CSAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGUKJiM0MzsJICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3IKJiM0MzsJICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGUKJiM0MzsJICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gbXFwcmlvLSZndDtmbGFnczsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQkvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFEKJiM0MzsJCSAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZQomIzQzOwkJICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdLAomIzQzOwkJCQkJCQkgICAgICBxY291bnQpOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21heF9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcbiYjMzQ7LAomIzQzOwkJCQkgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsKJiM0MzsJCQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwKJiM0MzsJCQkJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcpCiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJLyogQ2xlYXIgaGFyZHdhcmUgb2ZmbG9hZCBvbiB0aGlzIHJlamVjdGVkIHJlcXVlc3Qgc28gYSBmYWlsZWQgcmVwbGFjZQomIzQzOwkgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm4KJiM0MzsJICogZG93biB3aGlsZSB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZC4KJiM0MzsJICovCiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsJaWYgKHJlcGxhY2luZykgewomIzQzOwkJb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKG5ldGRldiwgZXh0YWNrKTsKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCXJldHVybiBlcnIgPyBlcnIgOiAtRUlPOwomIzQzOwl9CiYjNDM7CW90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHJvb3QtJmd0O2NvbW1hbmQpIHsKJiM0MzsJY2FzZSBUQ19ST09UX0dSQUZUOgomIzQzOwkJaWYgKHJvb3QtJmd0O2luZ3Jlc3MpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZykgewomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsJCQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7CiYjNDM7CiYjNDM7CWlmIChiYXNlLSZndDt0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJY2FwcyA9IGJhc2UtJmd0O2NhcHM7CiYjNDM7CWNhcHMtJmd0O3ZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCQkgIHZvaWQgKnR5cGVfZGF0YSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19RVUVSWV9DQVBTOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX1FESVNDX0hUQjoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKQogCW90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTsKIH0KIAomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpCiB7CiAJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgaHRiLSZndDtjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoaHRiLSZndDtleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoIChodGItJmd0O2NvbW1hbmQpIHsKIAljYXNlIFRDX0hUQl9DUkVBVEU6CiAJCXJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItJmd0O3BhcmVudF9jbGFzc2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHsKIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpOwogCiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpOwomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogaW50IG90eDJfcW9zX2dldF9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7CiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBtcXByaW8gT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgTXVsdGktUXVldWUgUHJpb3JpdHkgKG1xcHJpbykgYmFuZHdpZHRoIG9mZmxvYWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiwgaW52b2x2aW5nIHRoZSB1c3VhbCBtb2RpZmljYXRpb25zIHRvIHNldHVwIGZ1bmN0aW9ucyBhbmQgb3RoZXIgTklDLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBjaGFuZ2VzIHRvIGBvdHgyX3NldHVwX3RjX21xcHJpb2AsIGBvdHgyX3NldHVwX3RjYCwgdGhlIFRYIHNjaGVkdWxlciBjb25maWd1cmF0aW9ucyAoYG90eDJfdHhzY2hxX2NvbmZpZ2AsIGBvdHgyX3R4c2NoX2FsbG9jYCksIERDQiBjb25maWd1cmF0aW9ucywgY2hhbm5lbCBzZXR1cCwgYW5kIGV2ZW4gWERQLXJlbGF0ZWQgZnVuY3Rpb25zLiBQcmV0dHkgc3RhbmRhcmQgZmFyZSBmb3IgZW5hYmxpbmcgYSBmZWF0dXJlIGxpa2UgdGhpcy4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nPWZhbHNlLiBUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyB0byBza2lwIHBhdGNoZXMgdGhhdCBhcmUgdmVuZG9yLXNwZWNpZmljIGNvZGUgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZS4gQW5kIGhlcmUsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMi4gVGhhdCYjMzk7cyBhIGRlZGljYXRlZCBoYXJkd2FyZSBOSUMuIEl0JiMzOTtzIG5vdCBsaWtlIGl0JiMzOTtzIGEgZ2VuZXJpYyBOSUMgdGhhdCBRRU1VIGNvdWxkIGVhc2lseSBlbXVsYXRlLgoKU28gbXkga2V5IHF1ZXN0aW9uIGlzOiBJcyB0aGlzIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBraW5kcyBvZiBkZXZpY2VzLCBPY3Rlb25UWDIgKG9yIHJhdGhlciwgdGhlIFJWVSBvciBOSVggcGFydHMgb2YgaXQpIGlzIGFsbW9zdCBhbHdheXMgYSBwaHlzaWNhbCBOSUMgZm91bmQgaW4gTWFydmVsbCBTb0NzLiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGdvb2QgZW11bGF0aW9uIGZvciBpdCBpbiBzdGFuZGFyZCBRRU1VLCBiZWNhdXNlIG9mIGl0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVzaWduLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIElmIG15IG1lbW9yeSBpcyByaWdodCwgYW5kIHRoaXMgKmlzbiYjMzk7dCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlbiBJIHdpbGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhpcyBmYWxscyB1bmRlciB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHJ1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2N0ZW9udHgyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjg6I2RlZmluZSBERUJVR0ZTX0RJUl9OQU1FIFwmIzM0O29jdGVvbnR4MlwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTQwMTM9c3RhdGljIGNvbnN0IGNoYXIgKnJ2dV9nZXRfZGJnX2Rpcl9uYW1lKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTQwMjAtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjQwMjE6XHRcdHJldHVybiBcJiMzNDtvY3Rlb250eDJcJiMzNDs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTQwMjItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZXZsaW5rLmMtMTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jOjE2OiNkZWZpbmUgRFJWX05BTUUgXCYjMzQ7b2N0ZW9udHgyLWFmXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZT0xOD1ydnVfbmljcGYtJChDT05GSUdfWEZSTV9PRkZMT0FEKSAmIzQzOz0gY24xMGtfaXBzZWMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjIwOmNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTctI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6MTg6I2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmM9MTExOD1zdGF0aWMgaW50IG90eDJfcW9zX3ZhbGlkYXRlX3F1YW50dW0oc3RydWN0IG90eDJfbmljICpwZnZmLCB1MzIgcXVhbnR1bSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMtMTEyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYzoxMTIzOlx0LyogTWF4IFJvdW5kIHJvYmluIHdlaWdodCBzdXBwb3J0ZWQgYnkgb2N0ZW9udHgyIGFuZCBDTjEwS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjQtXHQgKiBpcyBkaWZmZXJlbnQuIFZhbGlkYXRlIGFjY29yZGluZ2x5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczODEKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBkcml2ZXIsIHRoZSBvbmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBhIHBoeXNpY2FsLCBkZWRpY2F0ZWQgTmV0d29yayBJbnRlcmZhY2UgQ2FyZCAoTklDKS4gVGhpcyBpcyByZWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBBbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgaGVyZSwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSwgdGhpcyBkcml2ZXIgaXMgbm90IGEgZ29vZCBmaXQgZm9yIFdvcnRoRnV6emluZy4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgbWVudGlvbnMgZHJpdmVycyBpbiB0aGUgcmVhbG0gb2YgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHdoaWNoIGRlcGVuZCBvbiAqYWN0dWFsKiBQQ0llIGhhcmR3YXJlLCBub3QgdGhlIGVtdWxhdGVkIGtpbmQgeW91JiMzOTtkIGZpbmQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGlzIGRyaXZlciBkZWZpbml0ZWx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSSYjMzk7bSBzZWVpbmcgJiMzNDtwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsgaW4gYm90aCB0aGUgZHJpdmVyIGNoYXJhY3RlcmlzdGljcyBhbmQgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0JiMzOTtzIGp1c3Qgbm90IGFwcHJvcHJpYXRlIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjowMi42MjI1MTM0NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NjczODQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjUyOjAyLjYyMjUxODYzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MzExNDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0YzE3MDRiYWNmOGEyZmIzMDY5MmUxZTQ4N2VmMzVmNTRiYWE5Y2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6NTI6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5iNmQ4ZWU3ZTJkNGMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtNjE0LDYgKzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xcbiBcXG4rc3RhdGljIGludFxcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IGNudDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xcbitcXHRcXHRzbXEgPSBwZnZmLVxcdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdGlmIChjbnQgXFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRjbnQgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY250KSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rZmFpbDpcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xcbitcXHR1NjQgcmVnX2FkZHJbMl07XFxuK1xcdHU2NCByZWdfdmFsWzJdO1xcbitcXHR1NjQgcmF0ZTtcXG4rXFxuK1xcdGlmICghbWF4cmF0ZSBcXHUwMDI2XFx1MDAyNiAhbWlucmF0ZSkge1xcbitcXHRcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcdFxcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMF0gPSAwO1xcbitcXHRcXHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzFdID0gMDtcXG4rXFx0XFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHR9XFxuK1xcbitcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcbitcXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXFxuK1xcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcXG4rXFx0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xcbitcXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcXG4rXFx0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXFxuK1xcdCAqIGhhcmR3YXJlIGNhcC5cXG4rXFx0ICpcXG4rXFx0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcXG4rXFx0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cXG4rXFx0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxcbitcXHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0aWYgKG1heHJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFxuK1xcdC8qIENJUitQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdGlmIChtaW5yYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBuO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXFxuIHtcXG4gXFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcXG5AQCAtNjUwLDcgKzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxcbiBcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWh3LVxcdTAwM2VzbXFfbGlua190eXBlKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbiBcXHRcXHQvKiBNRFEgY29uZmlnICovXFxuLVxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRcXHQvKiBUT0RPOiBQcm9ncmFtIE5JWF9BRl9UTDRYX1RPUE9MT0dZIG9uIFRMNFswXS4gTVFQUklPXFxuK1xcdFxcdFxcdCAqIHBhcmVudHMgZXZlcnkgTURRIHVuZGVyIHRoZSBzYW1lIFRMNCB3aXRoIHNjaGVkdWxlXFxuK1xcdFxcdFxcdCAqIHByaW9yaXR5IDAsIHNvIHNpYmxpbmcgYXJiaXRyYXRpb24gZGVwZW5kcyBvbiB0aGUgVEw0XFxuK1xcdFxcdFxcdCAqIHRvcG9sb2d5IHJlZ2lzdGVyLiBPbmx5IHRoZSBIVEIgcGF0aCBwcm9ncmFtcyB0aGlzXFxuK1xcdFxcdFxcdCAqIHRvZGF5IGFuZCB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLFxcbitcXHRcXHRcXHQgKiBzbyBhIFRMNCByZXVzZWQgYWZ0ZXIgSFRCIHRlYXJkb3duIGNhbiByZXRhaW4gc3RhbGVcXG4rXFx0XFx0XFx0ICogUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlIHNvbWUgVFggcXVldWVzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFxcdTAwM2NcXHUwMDNjIDE2O1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuQEAgLTc3OCw2ICs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcbiBcXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuQEAgLTQ4Myw2ICs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcXG4gXFx0aW50IG1kZXZzO1xcbiB9O1xcbiBcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC01MTUsNiArNTIyLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHN0cnVjdCBvdHgyX21xcHJpb1xcdG1xcHJpbztcXG4rXFx0Ym9vbFxcdFxcdFxcdG1xcHJpb19yZXBsYWNlX3BlbmRpbmc7XFxuK1xcdGJvb2xcXHRcXHRcXHRtcXByaW9fc2tpcF90ZWFyZG93bjtcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCp4ZHBfcHJvZztcXG4gXFx0c3RydWN0IG90eDJfcXNldFxcdHFzZXQ7XFxuIFxcdHN0cnVjdCBvdHgyX2h3XFx0XFx0aHc7XFxuQEAgLTEyNDYsNiArMTI1NywxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XFxuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcXG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxcbitcXHRcXHRcXHRcXHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcXG4gXFx0XFx0XFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcXG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5AQCAtNDEzLDYgKzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuIFxcdHU4IG9sZF9wZmNfZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjYgcGZjLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0b2xkX3BmY19lbiA9IHBmdmYtXFx1MDAzZXBmY19lbjtcXG4gXFx0cGZ2Zi1cXHUwMDNlcGZjX2VuID0gcGZjLVxcdTAwM2VwZmNfZW47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHQvKiBUT0RPOiBvdHgyX21xcHJpb191cCgpIGZhaWx1cmUgaGVyZSBhYm9ydHMgdGhlIGVudGlyZSBuZG9fb3BlbigpXFxuK1xcdCAqIHBhdGggZXZlbiB0aG91Z2ggbXFwcmlvX3JhdGVfbGltaXQgYW5kIHRoZSByYXRlIGNhY2hlIHJlbWFpbiBzZXQuXFxuK1xcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXFxuK1xcdCAqIGNhbiBsZWF2ZSB0aGUgaW50ZXJmYWNlIHN0dWNrIGRvd24gdW50aWwgdGhlIHFkaXNjIGlzIHJlbW92ZWQgYW5kXFxuK1xcdCAqIHJlYXBwbGllZC5cXG4rXFx0ICovXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9odztcXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMTQwLDYgKzIxNTAsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yODQ2LDYgKzI4NTcsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbiBcXG4rXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgcGYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbXR1IFxcdTAwM2UgTUFYX1hEUF9NVFUpIHtcXG4gXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmZjOTY3N2UzNDA2NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5AQCAtMTYsNiArMTYsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNuMTBrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJvdHgyX2NvbW1vbi5oXFxcIlxcbkBAIC0zMSw2ICszMywxMCBAQFxcbiBcXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFxcdFxcdCgtMVUpXFxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXFx0XFx0OFxcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1xcdDI1MDAwMFVMTFxcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXFxuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxcbiBcXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRcXHRcXHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcXG5AQCAtNjEsNiArNjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxcbitcXHRcXHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xcbiBcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XFxuIFxcdH1cXG5AQCAtMTYwMCwxNCArMTYwOSw1OTYgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xcbiB9XFxuIFxcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0LyogVE9ETzogb3R4Ml9tcXByaW9fZnJlZV9jYWNoZSgpIGhlcmUgZHJvcHMgdGhlIGNvbW1pdHRlZCByYXRlIGNhY2hlXFxuK1xcdCAqIG9uIHRjIHFkaXNjIHJlcGxhY2UgYmVmb3JlIHRoZSBuZXcgbWFwcGluZyBpcyBjb21wbGV0ZS4gU3RhZ2UgdGhlXFxuK1xcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cXG4rXFx0ICogYSBmYWlsdXJlIGFmdGVyIG5ldGRldiByZXN0YXJ0IGNhbiByb2xsIGJhY2sgZnJvbSB0aGUgcHJpb3IgY2FjaGUuXFxuK1xcdCAqL1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXFx1MDAzZWRldiwgbnVtX3R4cSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRpbnQgbHZsLCBpZHg7XFxuK1xcbitcXHRmb3IgKGx2bCA9IDA7IGx2bCBcXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xcbitcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcXG4rXFx0XFx0XFx0aWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1baWR4XSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdC8qIFRPRE86IG1xcHJpb19kb3duKCkgY2xlYXJzIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsXFxuK1xcdCAqIGFuZCB0aGUgcmF0ZSBjYWNoZSBldmVuIHdoZW4gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgZmFpbHNcXG4rXFx0ICogcGFydHdheSB0aHJvdWdoIHRoZSBNRFEgYmF0Y2guIFNvZnR3YXJlIHRoZW4gcmVwb3J0cyBvZmZsb2FkIGFzXFxuK1xcdCAqIGluYWN0aXZlIHdoaWxlIHNvbWUgcXVldWVzIG1heSByZXRhaW4gcHJvZ3JhbW1lZCBDSVIvUElSLCBzbyBhIGxhdGVyXFxuK1xcdCAqIG1xcHJpb191cCgpIG9yIHJlLXNldHVwIGNhbiBzaGFwZSB3aXRoIHRoZSB3cm9uZyBlZmZlY3RpdmUgcmF0ZXMuXFxuK1xcdCAqL1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGJvb2wgdXAgPSBuZXRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LyogVE9ETzogRXZlcnkgbXFwcmlvIGFkZCwgcmVwbGFjZSwgYW5kIGRlbGV0ZSBydW5zIGEgZnVsbCBuZG9fc3RvcCgpL1xcbitcXHQgKiBuZG9fb3BlbigpIGN5Y2xlIChjYXJyaWVyIGRyb3AsIElSUS9OQVBJIHRlYXJkb3duLCBpbi1mbGlnaHQgdHJhZmZpY1xcbitcXHQgKiBsb3NzKSB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlci4gSWYgbmRvX29wZW4oKSBmYWlscyB0aGVcXG4rXFx0ICogaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIChPVFgyX0ZMQUdfSU5URl9ET1dOKSB1bnRpbFxcbitcXHQgKiBtYW51YWwgcmVjb3ZlcnkuIEV4cGxvcmUgbGl2ZSByZXByb2dyYW1taW5nIHdpdGhvdXQgYm91bmNpbmcgdGhlXFxuK1xcdCAqIG5ldGRldi5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAodXApXFxuK1xcdFxcdGRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2FjdGl2YXRlO1xcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXFxuK1xcdGlmIChyYXRlX2xpbWl0KVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aW50IGRvd25fZXJyO1xcbitcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFx0XFx0aWYgKGRvd25fZXJyKVxcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGRvd25fZXJyKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXFxuK1xcdFxcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxcbitcXHRcXHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcXG4rXFx0XFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXFxuK1xcdFxcdHNtcF93bWIoKTtcXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rb3V0X2FjdGl2YXRlOlxcbitcXHRpZiAodXAgXFx1MDAyNlxcdTAwMjYgIWVycilcXG4rXFx0XFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxcbit7XFxuK1xcdGlmICghcmF0ZSB8fCBxY291bnQgXFx1MDAzYz0gMSlcXG4rXFx0XFx0cmV0dXJuIHJhdGU7XFxuK1xcbitcXHRyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSB8fCBxY291bnQgXFx1MDAzYz0gMSB8fCByYXRlIFxcdTAwM2U9IHFjb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSAlbGx1IGZvciB0YyAlZCB0b28gc21hbGwgZm9yICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSAlbGx1IGZvciB0YyAlZCB0b28gc21hbGwgZm9yICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCByYXRlLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHE7XFxuK1xcbitcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgbnVtX3R4cSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcW9wdC1cXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobnVtX3R4cSBcXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBudW1fdHhxKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcXG4re1xcbitcXHR1NjQgbWJwcztcXG4rXFxuK1xcdGlmICghcmF0ZV9ieXRlc19wcylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcXG4rXFx0cmV0dXJuIGlsb2cyKG1icHMgLyAyKSBcXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHQvKiBUT0RPOiBPbiBmYWlsZWQgdGMgcWRpc2MgcmVwbGFjZSByZXN0b3JlIHRoZSBwcmlvciByYXRlIGNhY2hlLFxcbitcXHQgKiBuZXRkZXYgVEMgbWFwcGluZywgYW5kIGhhcmR3YXJlIHNoYXBlcnMgZnJvbSBhIHNuYXBzaG90IHRha2VuIGJlZm9yZVxcbitcXHQgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZVxcbitcXHQgKiB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgdGhlIGdyYWZ0ZWQgcm9vdCBxZGlzYy5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290XFxcXG5cXFwiKTtcXG4rXFx0aWYgKGV4dGFjaylcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IGRvd25fZXJyLCBlcnI7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXFxuK1xcdCAqIG9uZS4gbXFwcmlvX3NraXBfdGVhcmRvd24gaXMgYXJtZWQgZnJvbSBUQ19ST09UX0dSQUZUIHNvIHRlYXJkb3duXFxuK1xcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xcbitcXHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93bikge1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xcbitcXHRcXHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBOVUxMKTtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGRvd25fZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuK1xcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCB0YywgdHhxLCBlcnIsIGk7XFxuK1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZWh3KVxcbitcXHRcXHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFxuK1xcdGlmICghaWZfdXApIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFxcdTAwMjZwZnZmLVxcdTAwM2Vody5jYXBfZmxhZykpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cXHUwMDNlcGRldikpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHFjb3VudCwgdGMsIFxcXCJtaW5cXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1heFxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHFjb3VudCkpKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWF4X3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBxY291bnQpKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0LyogVE9ETzogRmFpbHVyZXMgZnJvbSBoZXJlIHRocm91Z2ggdGhlIGVuZCBvZiBpbml0KCkgKGUuZy4gLUVOT01FTVxcbitcXHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cXG4rXFx0ICogb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgb3Igb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpKVxcbitcXHQgKiByZWFjaCBjbGVhbnVwLiBPbiB0YyBxZGlzYyByZXBsYWNlIHRoZSBvbGQgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZCxcXG4rXFx0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxcbitcXHQgKiBjYWNoZSwgb3IgcGFydGlhbGx5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBzaGFwZXJzLiBSZXN0b3JlIHRoZSBwcmlvclxcbitcXHQgKiBjb25maWd1cmF0aW9uIGluc3RlYWQgb2YgY2FsbGluZyBvdHgyX21xcHJpb19kb3duKCkgYW5kIGJvdW5jaW5nIHRoZVxcbitcXHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cXG4rXFx0ICovXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xcbitcXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xcbitcXHQgKiBtYXBwaW5nIHNvIHF1ZXVlcyBkcm9wcGVkIGZyb20gdGhlIFRDIGxheW91dCBkbyBub3Qga2VlcCBzdGFsZVxcbitcXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcWNvdW50KTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcWNvdW50KTtcXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xcbitcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XFxuK1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgaSsrKVxcbitcXHRcXHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cXHUwMDNlY291bnRbaV0sIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbnVwOlxcbitcXHQvKiBDbGVhciBoYXJkd2FyZSBvZmZsb2FkIG9uIHRoaXMgcmVqZWN0ZWQgcmVxdWVzdCBzbyBhIGZhaWxlZCByZXBsYWNlXFxuK1xcdCAqIGRvZXMgbm90IGxlYXZlIHRjIHJlcG9ydGluZyBvZmZsb2FkIGZvciBkcml2ZXIgc3RhdGUgdGhhdCB3YXMgdG9yblxcbitcXHQgKiBkb3duIHdoaWxlIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyBncmFmdGVkLlxcbitcXHQgKi9cXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHJvb3QtXFx1MDAzZWluZ3Jlc3MpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmNmMDAyMTc4ODM1NjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5AQCAtMTcyOSwxMSArMTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XFxuIH1cXG4gXFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0aW50IHJlcztcXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaHRiLVxcdTAwM2Vjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChodGItXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdHN3aXRjaCAoaHRiLVxcdTAwM2Vjb21tYW5kKSB7XFxuIFxcdGNhc2UgVENfSFRCX0NSRUFURTpcXG4gXFx0XFx0cmV0dXJuIG90eDJfcW9zX3Jvb3RfYWRkKHBmdmYsIGh0Yi1cXHUwMDNlcGFyZW50X2NsYXNzaWQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuQEAgLTIzLDYgKzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcXG4gXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjowMy45MDYzOTI3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTM4Mjg0MTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRjMTcwNGJhY2Y4YTJmYjMwNjkyZTFlNDg3ZWYzNWY1NGJhYTljZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjUyOjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmI2ZDhlZTdlMmQ0YzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiArNjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUwLDcgKzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4rXHRcdFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xuK1x0XHRcdCAqIHBhcmVudHMgZXZlcnkgTURRIHVuZGVyIHRoZSBzYW1lIFRMNCB3aXRoIHNjaGVkdWxlXG4rXHRcdFx0ICogcHJpb3JpdHkgMCwgc28gc2libGluZyBhcmJpdHJhdGlvbiBkZXBlbmRzIG9uIHRoZSBUTDRcbitcdFx0XHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xuK1x0XHRcdCAqIHRvZGF5IGFuZCB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLFxuK1x0XHRcdCAqIHNvIGEgVEw0IHJldXNlZCBhZnRlciBIVEIgdGVhcmRvd24gY2FuIHJldGFpbiBzdGFsZVxuK1x0XHRcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cbitcdFx0XHQgKi9cbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdH1cbitcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuQEAgLTc3OCw2ICs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTQ4Myw2ICs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4rXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbitcdGJvb2xcdFx0XHRtcXByaW9fcmVwbGFjZV9wZW5kaW5nO1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0LyogVE9ETzogb3R4Ml9tcXByaW9fdXAoKSBmYWlsdXJlIGhlcmUgYWJvcnRzIHRoZSBlbnRpcmUgbmRvX29wZW4oKVxuK1x0ICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC5cbitcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXG4rXHQgKiBjYW4gbGVhdmUgdGhlIGludGVyZmFjZSBzdHVjayBkb3duIHVudGlsIHRoZSBxZGlzYyBpcyByZW1vdmVkIGFuZFxuK1x0ICogcmVhcHBsaWVkLlxuK1x0ICovXG4rXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICsyMTUwLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbitlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjg0Niw2ICsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uZmM5Njc3ZTM0MDY1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCArMTYwOSw1OTYgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxuK1x0ICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGVcbitcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cbitcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxuK1x0ICovXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGx2bCwgaWR4O1xuK1xuK1x0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XG4rXHRcdFx0aWYgKHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbisgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuKyAqL1xuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxuK1x0ICogYW5kIHRoZSByYXRlIGNhY2hlIGV2ZW4gd2hlbiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBmYWlsc1xuK1x0ICogcGFydHdheSB0aHJvdWdoIHRoZSBNRFEgYmF0Y2guIFNvZnR3YXJlIHRoZW4gcmVwb3J0cyBvZmZsb2FkIGFzXG4rXHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxuK1x0ICogbXFwcmlvX3VwKCkgb3IgcmUtc2V0dXAgY2FuIHNoYXBlIHdpdGggdGhlIHdyb25nIGVmZmVjdGl2ZSByYXRlcy5cbitcdCAqL1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd25cbisgKiB3aXRob3V0IGNhbGxpbmcgbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnlcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0Ym9vbCB1cCA9IG5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsIGFuZCBkZWxldGUgcnVucyBhIGZ1bGwgbmRvX3N0b3AoKS9cbitcdCAqIG5kb19vcGVuKCkgY3ljbGUgKGNhcnJpZXIgZHJvcCwgSVJRL05BUEkgdGVhcmRvd24sIGluLWZsaWdodCB0cmFmZmljXG4rXHQgKiBsb3NzKSB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlci4gSWYgbmRvX29wZW4oKSBmYWlscyB0aGVcbitcdCAqIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biAoT1RYMl9GTEFHX0lOVEZfRE9XTikgdW50aWxcbitcdCAqIG1hbnVhbCByZWNvdmVyeS4gRXhwbG9yZSBsaXZlIHJlcHJvZ3JhbW1pbmcgd2l0aG91dCBib3VuY2luZyB0aGVcbitcdCAqIG5ldGRldi5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGlmICh1cClcbitcdFx0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfYWN0aXZhdGU7XG4rXG4rXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4gKi9cbitcdGlmIChyYXRlX2xpbWl0KVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpbnQgZG93bl9lcnI7XG4rXG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuK1x0XHRpZiAoZG93bl9lcnIpXG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cIixcbitcdFx0XHRcdCAgIGRvd25fZXJyKTtcbitcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4rXHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuK1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuK1x0XHQgKi9cbitcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0XHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cbitcdFx0c21wX3dtYigpO1xuK1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK291dF9hY3RpdmF0ZTpcbitcdGlmICh1cCBcdTAwMjZcdTAwMjYgIWVycilcbitcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gcmF0ZTtcbitcbitcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlIHx8IHFjb3VudCBcdTAwM2M9IDEgfHwgcmF0ZSBcdTAwM2U9IHFjb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0ICAgXCJtcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXNcXG5cIixcbitcdFx0ICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XG4rXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJtcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXNcIixcbitcdFx0XHQgICAgICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cTtcbitcbitcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVwiLFxuK1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuK1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCIsXG4rXHRcdFx0XHRcdCAgIHR4cSwgbnVtX3R4cSk7XG4rXHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcIixcbitcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4re1xuK1x0dTY0IG1icHM7XG4rXG4rXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XG4rXHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0LyogVE9ETzogT24gZmFpbGVkIHRjIHFkaXNjIHJlcGxhY2UgcmVzdG9yZSB0aGUgcHJpb3IgcmF0ZSBjYWNoZSxcbitcdCAqIG5ldGRldiBUQyBtYXBwaW5nLCBhbmQgaGFyZHdhcmUgc2hhcGVycyBmcm9tIGEgc25hcHNob3QgdGFrZW4gYmVmb3JlXG4rXHQgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZVxuK1x0ICogdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIHRoZSBncmFmdGVkIHJvb3QgcWRpc2MuXG4rXHQgKi9cbitcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcblwiKTtcbitcdGlmIChleHRhY2spXG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFwiKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZG93bl9lcnIsIGVycjtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSAwO1xuK1xuK1x0LyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZFxuK1x0ICogb25lLiBtcXByaW9fc2tpcF90ZWFyZG93biBpcyBhcm1lZCBmcm9tIFRDX1JPT1RfR1JBRlQgc28gdGVhcmRvd25cbitcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xuK1x0ICogcmVwcm9ncmFtbWVkIGhhcmR3YXJlIGFuZCBzZXQgbXFwcmlvX3JhdGVfbGltaXQuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xuK1x0XHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBOVUxMKTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBkb3duX2Vycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuK1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuK1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCB0YywgdHhxLCBlcnIsIGk7XG4rXG4rXHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4rXHRcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1xuK1x0aWYgKCFpZl91cCkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCIsIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFwiLFxuK1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFx1MDAyNnBmdmYtXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2VwZmNfZW4pIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXhkcF9wcm9nKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4rXG4rXHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1pblwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCJtYXhcIik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHQvKiBUT0RPOiBGYWlsdXJlcyBmcm9tIGhlcmUgdGhyb3VnaCB0aGUgZW5kIG9mIGluaXQoKSAoZS5nLiAtRU5PTUVNXG4rXHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cbitcdCAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSlcbitcdCAqIHJlYWNoIGNsZWFudXAuIE9uIHRjIHFkaXNjIHJlcGxhY2UgdGhlIG9sZCBtcXByaW8gcmVtYWlucyBncmFmdGVkLFxuK1x0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxuK1x0ICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3JcbitcdCAqIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBjYWxsaW5nIG90eDJfbXFwcmlvX2Rvd24oKSBhbmQgYm91bmNpbmcgdGhlXG4rXHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cbitcdCAqL1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXHUwMDNlY291bnRbaV0sIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRpZiAocmVwbGFjaW5nKVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2xlYW51cDpcbitcdC8qIENsZWFyIGhhcmR3YXJlIG9mZmxvYWQgb24gdGhpcyByZWplY3RlZCByZXF1ZXN0IHNvIGEgZmFpbGVkIHJlcGxhY2VcbitcdCAqIGRvZXMgbm90IGxlYXZlIHRjIHJlcG9ydGluZyBvZmZsb2FkIGZvciBkcml2ZXIgc3RhdGUgdGhhdCB3YXMgdG9yblxuK1x0ICogZG93biB3aGlsZSB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZC5cbitcdCAqL1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbitcdH1cbitcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxuK3tcbitcdHN3aXRjaCAocm9vdC1cdTAwM2Vjb21tYW5kKSB7XG4rXHRjYXNlIFRDX1JPT1RfR1JBRlQ6XG4rXHRcdGlmIChyb290LVx1MDAzZWluZ3Jlc3MpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4rXG4rXHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmNmMDAyMTc4ODM1NjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuK1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4rXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuK1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykrKztcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcbiB7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCByZXM7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdCAgIFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKGh0Yi1cdTAwM2Vjb21tYW5kKSB7XG4gXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4gXHRcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXHUwMDNlcGFyZW50X2NsYXNzaWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbkBAIC0yMyw2ICsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcbiBcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NTI6MDMuOTA2MzkzNzc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyODg2NTQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBtcXByaW8gT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIE11bHRpLVF1ZXVlIFByaW9yaXR5IChtcXByaW8pIGJhbmR3aWR0aCBvZmZsb2FkLiBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24sIGludm9sdmluZyB0aGUgdXN1YWwgbW9kaWZpY2F0aW9ucyB0byBzZXR1cCBmdW5jdGlvbnMgYW5kIG90aGVyIE5JQy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSBzZWUgY2hhbmdlcyB0byBgb3R4Ml9zZXR1cF90Y19tcXByaW9gLCBgb3R4Ml9zZXR1cF90Y2AsIHRoZSBUWCBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMgKGBvdHgyX3R4c2NocV9jb25maWdgLCBgb3R4Ml90eHNjaF9hbGxvY2ApLCBEQ0IgY29uZmlndXJhdGlvbnMsIGNoYW5uZWwgc2V0dXAsIGFuZCBldmVuIFhEUC1yZWxhdGVkIGZ1bmN0aW9ucy4gUHJldHR5IHN0YW5kYXJkIGZhcmUgZm9yIGVuYWJsaW5nIGEgZmVhdHVyZSBsaWtlIHRoaXMuXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIHByb21wdCdzIGNyaXRlcmlhIGZvciBXb3J0aEZ1enppbmc9ZmFsc2UuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHNraXAgcGF0Y2hlcyB0aGF0IGFyZSB2ZW5kb3Itc3BlY2lmaWMgY29kZSB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLiBBbmQgaGVyZSwgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgTWFydmVsbCBPY3Rlb25UWDIuIFRoYXQncyBhIGRlZGljYXRlZCBoYXJkd2FyZSBOSUMuIEl0J3Mgbm90IGxpa2UgaXQncyBhIGdlbmVyaWMgTklDIHRoYXQgUUVNVSBjb3VsZCBlYXNpbHkgZW11bGF0ZS5cblxuU28gbXkga2V5IHF1ZXN0aW9uIGlzOiBJcyB0aGlzIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBraW5kcyBvZiBkZXZpY2VzLCBPY3Rlb25UWDIgKG9yIHJhdGhlciwgdGhlIFJWVSBvciBOSVggcGFydHMgb2YgaXQpIGlzIGFsbW9zdCBhbHdheXMgYSBwaHlzaWNhbCBOSUMgZm91bmQgaW4gTWFydmVsbCBTb0NzLiBJIGRvbid0IHJlY2FsbCBzZWVpbmcgZ29vZCBlbXVsYXRpb24gZm9yIGl0IGluIHN0YW5kYXJkIFFFTVUsIGJlY2F1c2Ugb2YgaXRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXNpZ24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBJZiBteSBtZW1vcnkgaXMgcmlnaHQsIGFuZCB0aGlzICppc24ndCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlbiBJIHdpbGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhpcyBmYWxscyB1bmRlciB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHJ1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQ0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NTI6MTAuOTM1MjYyMTE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU0MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jdGVvbnR4MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjg6I2RlZmluZSBERUJVR0ZTX0RJUl9OQU1FIFxcXCJvY3Rlb250eDJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9NDAxMz1zdGF0aWMgY29uc3QgY2hhciAqcnZ1X2dldF9kYmdfZGlyX25hbWUoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy00MDIwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjQwMjE6XFx0XFx0cmV0dXJuIFxcXCJvY3Rlb250eDJcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtNDAyMi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZXZsaW5rLmM6MTY6I2RlZmluZSBEUlZfTkFNRSBcXFwib2N0ZW9udHgyLWFmXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZXZsaW5rLmMtMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU9MTg9cnZ1X25pY3BmLSQoQ09ORklHX1hGUk1fT0ZGTE9BRCkgKz0gY24xMGtfaXBzZWMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS0xOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6MjA6Y2NmbGFncy15ICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6MTg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L21hY3NlYy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jPTExMTg9c3RhdGljIGludCBvdHgyX3Fvc192YWxpZGF0ZV9xdWFudHVtKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTMyIHF1YW50dW0pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMtMTEyMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmM6MTEyMzpcXHQvKiBNYXggUm91bmQgcm9iaW4gd2VpZ2h0IHN1cHBvcnRlZCBieSBvY3Rlb250eDIgYW5kIENOMTBLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjQtXFx0ICogaXMgZGlmZmVyZW50LiBWYWxpZGF0ZSBhY2NvcmRpbmdseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjoxMC45ODIyMjUzMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA2OTc5NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIE1hcnZlbGwgT2N0ZW9uVFgyIGRyaXZlciwgdGhlIG9uZSB3ZSdyZSBkZWFsaW5nIHdpdGgsIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggYSBwaHlzaWNhbCwgZGVkaWNhdGVkIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgKE5JQykuIFRoaXMgaXMgcmVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gQW5kIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgaGVyZSwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSwgdGhpcyBkcml2ZXIgaXMgbm90IGEgZ29vZCBmaXQgZm9yIFdvcnRoRnV6emluZy4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgbWVudGlvbnMgZHJpdmVycyBpbiB0aGUgcmVhbG0gb2YgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIHdoaWNoIGRlcGVuZCBvbiAqYWN0dWFsKiBQQ0llIGhhcmR3YXJlLCBub3QgdGhlIGVtdWxhdGVkIGtpbmQgeW91J2QgZmluZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgZHJpdmVyIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBJJ20gc2VlaW5nIFwicGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIGluIGJvdGggdGhlIGRyaXZlciBjaGFyYWN0ZXJpc3RpY3MgYW5kIHRoZSBleGNsdXNpb24gY3JpdGVyaWEuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0J3MganVzdCBub3QgYXBwcm9wcmlhdGUgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczODEsIk91dHB1dFRva2VucyI6ODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NTI6MTUuMjg5MjA4MTc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjoxNS4yODkyMzg2NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdcjh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 09:04:59 +0000 UTC FinishedAt: 2026-08-13 09:52:16 +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+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU0YzE3MDRiYWNmOGEyZmIzMDY5MmUxZTQ4N2VmMzVmNTRiYWE5Y2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwOTo1MjowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguY1xuQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4mIzQzO1x0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpIHtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQocnZ1LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7cGNpZnVuYyAleCBtYXAgcGNpZnVuYyAleCBub3QgZXF1YWwsIGx2bD0ldSBzY2hxPSV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5iNmQ4ZWU3ZTJkNGMyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXG5AQCAtNjE0LDYgJiM0Mzs2MTQsMTQyIEBAIHZvaWQgb3R4Ml9nZXRfbWFjX2Zyb21fYWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiB9XG4gRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7XG4gXG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sXG4mIzQzO1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBpLCBlcnI7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IGNudDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4mIzQzO1x0dTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbiYjNDM7XHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBmdmYtXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzbXEgPSBwZnZmLVx1MDAzZWh3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTtcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4mIzQzO1x0XHRyZWdfdmFsW2NudF0gPSAwO1xuJiM0MztcdFx0Y250JiM0MzsmIzQzOztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoY250IFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bXFfcmVnX3dyaXRlKHBmdmYsIGNudCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVnX2FkZHIsIHJlZ192YWwpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBmYWlsO1xuJiM0MztcdFx0Y250ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjbnQpIHtcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuJiM0MztcdFx0XHRcdFx0ICAgICByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGZhaWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7ZmFpbDpcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYm94ICptYm94ID0gXHUwMDI2cGZ2Zi1cdTAwM2VtYm94O1xuJiM0MztcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuJiM0MztcdGludCBlcnIsIHNtcSwgbiA9IDA7XG4mIzQzO1x0dTY0IHJlZ19hZGRyWzJdO1xuJiM0MztcdHU2NCByZWdfdmFsWzJdO1xuJiM0MztcdHU2NCByYXRlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4mIzQzO1x0XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1x0XHRyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFswXSA9IDA7XG4mIzQzO1x0XHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xuJiM0MztcdFx0cmVnX3ZhbFsxXSA9IDA7XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuJiM0MztcbiYjNDM7XHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXG4mIzQzO1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuJiM0MztcdCAqIGVuY29kaW5nIHN1cHBvcnRzIChDTjEwS19NQVhfQlVSU1RfU0laRSBvbiBDTjEwSykuICBUaGlzIGRpZmZlcnNcbiYjNDM7XHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcbiYjNDM7XHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbiYjNDM7XHQgKiBoYXJkd2FyZSBjYXAuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuJiM0MztcdCAqIHdoaWNoIHJlc2V0cyBNRFEgc2hhcGVycyB0byB6ZXJvLiAgUHJvZ3JhbSBib3RoIFBJUiBhbmQgQ0lSIG9uXG4mIzQzO1x0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxuJiM0MztcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVxLVx1MDAzZXJlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpO1xuJiM0MztcdGlmIChtYXhyYXRlKSB7XG4mIzQzO1x0XHRyYXRlID0gb3R4Ml9jb252ZXJ0X3JhdGUobWF4cmF0ZSk7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIHJhdGUsIDApO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXEtXHUwMDNlcmVndmFsW25dID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0biYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdC8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqL1xuJiM0MztcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbiYjNDM7XHRpZiAobWlucmF0ZSkge1xuJiM0MztcdFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpO1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcdG4mIzQzOyYjNDM7O1xuJiM0MztcdHJlcS1cdTAwM2VudW1fcmVncyA9IG47XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYylcbiB7XG4gXHR1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdO1xuQEAgLTY1MCw3ICYjNDM7Nzg2LDIwIEBAIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yXG4gXHRcdFx0XHRcdFx0KHU2NClody1cdTAwM2VzbXFfbGlua190eXBlKTtcbiBcdFx0cmVxLVx1MDAzZW51bV9yZWdzJiM0MzsmIzQzOztcbiBcdFx0LyogTURRIGNvbmZpZyAqL1xuLVx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbiYjNDM7XHRcdFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xuJiM0MztcdFx0XHQgKiBwYXJlbnRzIGV2ZXJ5IE1EUSB1bmRlciB0aGUgc2FtZSBUTDQgd2l0aCBzY2hlZHVsZVxuJiM0MztcdFx0XHQgKiBwcmlvcml0eSAwLCBzbyBzaWJsaW5nIGFyYml0cmF0aW9uIGRlcGVuZHMgb24gdGhlIFRMNFxuJiM0MztcdFx0XHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xuJiM0MztcdFx0XHQgKiB0b2RheSBhbmQgdGhlIEFGIGRvZXMgbm90IHJlc2V0IGl0IG9uIHNjaHEgcmVhbGxvYyxcbiYjNDM7XHRcdFx0ICogc28gYSBUTDQgcmV1c2VkIGFmdGVyIEhUQiB0ZWFyZG93biBjYW4gcmV0YWluIHN0YWxlXG4mIzQzO1x0XHRcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bMF07XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncyYjNDM7JiM0Mzs7XG5AQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmVxLVx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbiYjNDM7XG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTQ4Myw2ICYjNDM7NDgzLDEzIEBAIHN0cnVjdCBwZl9pcnFfZGF0YSB7XG4gXHRpbnQgbWRldnM7XG4gfTtcbiBcbiYjNDM7c3RydWN0IG90eDJfbXFwcmlvIHtcbiYjNDM7XHR1MzJcdGZsYWdzO1xuJiM0MztcdHU2NFx0Km1pbl9yYXRlO1xuJiM0MztcdHU2NFx0Km1heF9yYXRlO1xuJiM0MztcdGJvb2xcdHJhdGVfbGltaXQ7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBvdHgyX25pYyB7XG4gXHR2b2lkIF9faW9tZW1cdFx0KnJlZ19iYXNlO1xuIFx0c3RydWN0IG5ldF9kZXZpY2VcdCpuZXRkZXY7XG5AQCAtNTE1LDYgJiM0Mzs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4mIzQzO1x0c3RydWN0IG90eDJfbXFwcmlvXHRtcXByaW87XG4mIzQzO1x0Ym9vbFx0XHRcdG1xcHJpb19yZXBsYWNlX3BlbmRpbmc7XG4mIzQzO1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuJiM0MztcbiBcdHN0cnVjdCBicGZfcHJvZ1x0XHQqeGRwX3Byb2c7XG4gXHRzdHJ1Y3Qgb3R4Ml9xc2V0XHRxc2V0O1xuIFx0c3RydWN0IG90eDJfaHdcdFx0aHc7XG5AQCAtMTI0Niw2ICYjNDM7MTI1NywxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4gXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pO1xuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcbiBpbnQgb3R4Ml9yZWFkX2ZyZWVfc3FlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTE2IHFpZHgpO1xuJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4mIzQzO1x0XHRcdFx0IHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSk7XG4mIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcbiBcdFx0XHRpbnQgZmlyc3QsIGludCBtZGV2cywgdTY0IGludHIpO1xuIGludCBvdHgyX2RlbF9tY2FtX2Zsb3dfZW50cnkoc3RydWN0IG90eDJfbmljICpuaWMsIHUxNiBlbnRyeSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuaW5kZXggZjExMGRmYTQyMzYwNS4uNGE3MGFiYzIzMGJlYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcbkBAIC00MTMsNiAmIzQzOzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXG4gXHR1OCBvbGRfcGZjX2VuO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1BGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0b2xkX3BmY19lbiA9IHBmdmYtXHUwMDNlcGZjX2VuO1xuIFx0cGZ2Zi1cdTAwM2VwZmNfZW4gPSBwZmMtXHUwMDNlcGZjX2VuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuaW5kZXggYTAzNDBmMzQyMmJmOS4uODM3ZDI5MDI0OTgxYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5AQCAtMjg3LDYgJiM0MzsyODcsMTQgQEAgc3RhdGljIGludCBvdHgyX3NldF9jaGFubmVscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKGNoYW5uZWwtXHUwMDNldHhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody50eF9xdWV1ZXMgfHxcbiYjNDM7XHQgICAgIGNoYW5uZWwtXHUwMDNlcnhfY291bnQgIT0gcGZ2Zi1cdTAwM2Vody5yeF9xdWV1ZXMpKSB7XG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICYjNDM7MTk4MCwxNiBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9mcmVlX21lbTtcbiBcbiYjNDM7XHQvKiBUT0RPOiBvdHgyX21xcHJpb191cCgpIGZhaWx1cmUgaGVyZSBhYm9ydHMgdGhlIGVudGlyZSBuZG9fb3BlbigpXG4mIzQzO1x0ICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC5cbiYjNDM7XHQgKiBSb3V0aW5lIGlwIGxpbmsgc2V0IHVwIG9yIGRyaXZlciByZXNldCB3aXRoIGFjdGl2ZSBtcXByaW8gb2ZmbG9hZFxuJiM0MztcdCAqIGNhbiBsZWF2ZSB0aGUgaW50ZXJmYWNlIHN0dWNrIGRvd24gdW50aWwgdGhlIHFkaXNjIGlzIHJlbW92ZWQgYW5kXG4mIzQzO1x0ICogcmVhcHBsaWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9odztcbiYjNDM7XG4gXHQvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi9cbiBcdGZvciAocWlkeCA9IDA7IHFpZHggXHUwMDNjIHBmLVx1MDAzZWh3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykge1xuIFx0XHRjcV9wb2xsID0gXHUwMDI2cXNldC1cdTAwM2VuYXBpW3FpZHhdO1xuQEAgLTIxNDAsNiAmIzQzOzIxNTAsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmcmVlX2lycSh2ZWMsIHBmKTtcbiBlcnJfZGlzYWJsZV9uYXBpOlxuIFx0b3R4Ml9kaXNhYmxlX25hcGkocGYpO1xuJiM0MztlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjg0Niw2ICYjNDM7Mjg1NywxMiBAQCBzdGF0aWMgaW50IG90eDJfeGRwX3NldHVwKHN0cnVjdCBvdHgyX25pYyAqcGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiBcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVx1MDAzZW5ldGRldik7XG4gXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xuIFxuJiM0MztcdGlmIChwcm9nIFx1MDAyNlx1MDAyNiBwZi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1hEUDogY2Fubm90IGF0dGFjaCB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jXG5pbmRleCAwMzlmZDQ3ZWJmNTIyLi5mYzk2NzdlMzQwNjU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuQEAgLTE2LDYgJiM0MzsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L3NjaF9nZW5lcmljLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtjbjEway5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7b3R4Ml9jb21tb24uaFwmIzM0O1xuQEAgLTMxLDYgJiM0MzszMywxMCBAQFxuIFxuICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlBcdFx0KC0xVSlcbiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUU1x0XHQ4XG4mIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqL1xuJiM0MzsjZGVmaW5lIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxuIFxuIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKVxuQEAgLTYxLDYgJiM0Mzs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBidXJzdCAwOiBsYXJnZXN0IGVuY29kYWJsZSBidXJzdCAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb25cbiYjNDM7XHRcdCAqIENOMTBLKSwgbm90IGEgbWluaW1hbCBidXJzdC5cbiYjNDM7XHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCAmIzQzOzE2MDksNTk2IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19ibG9jayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgIG5pYywgbmljLCBpbmdyZXNzKTtcbiB9XG4gXG4mIzQzOy8qIEZyZWUgdGhlIHBlci1xdWV1ZSBtaW4vbWF4IHJhdGUgY2FjaGVzLiAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdGRldm1fa2ZyZWUocGZ2Zi1cdTAwM2VkZXYsIHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlKTtcbiYjNDM7XHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gTlVMTDtcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcbiYjNDM7XHQvKiBUT0RPOiBvdHgyX21xcHJpb19mcmVlX2NhY2hlKCkgaGVyZSBkcm9wcyB0aGUgY29tbWl0dGVkIHJhdGUgY2FjaGVcbiYjNDM7XHQgKiBvbiB0YyBxZGlzYyByZXBsYWNlIGJlZm9yZSB0aGUgbmV3IG1hcHBpbmcgaXMgY29tcGxldGUuIFN0YWdlIHRoZVxuJiM0MztcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cbiYjNDM7XHQgKiBhIGZhaWx1cmUgYWZ0ZXIgbmV0ZGV2IHJlc3RhcnQgY2FuIHJvbGwgYmFjayBmcm9tIHRoZSBwcmlvciBjYWNoZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuJiM0MztcbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4mIzQzO1x0XHRcdFx0XHQgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcdHBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXHUwMDNlZGV2LCBudW1fdHhxLFxuJiM0MztcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGUpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQoc3RydWN0IG90eDJfbmljICpwZnZmKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGx2bCwgaWR4O1xuJiM0MztcbiYjNDM7XHRmb3IgKGx2bCA9IDA7IGx2bCBcdTAwM2MgTklYX1RYU0NIX0xWTF9DTlQ7IGx2bCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4JiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAocGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtsdmxdW2lkeF0pXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLFxuJiM0MzsgKiBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLCBhbmQgdGhlIGNhY2hlZCByYXRlcy4gIENhbGxlZCBvblxuJiM0MzsgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpXG4mIzQzO1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IG1xcHJpb19kb3duKCkgY2xlYXJzIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsXG4mIzQzO1x0ICogYW5kIHRoZSByYXRlIGNhY2hlIGV2ZW4gd2hlbiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBmYWlsc1xuJiM0MztcdCAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhc1xuJiM0MztcdCAqIGluYWN0aXZlIHdoaWxlIHNvbWUgcXVldWVzIG1heSByZXRhaW4gcHJvZ3JhbW1lZCBDSVIvUElSLCBzbyBhIGxhdGVyXG4mIzQzO1x0ICogbXFwcmlvX3VwKCkgb3IgcmUtc2V0dXAgY2FuIHNoYXBlIHdpdGggdGhlIHdyb25nIGVmZmVjdGl2ZSByYXRlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XG4mIzQzO1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG90eDJfbXFwcmlvX3VwKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbiYjNDM7XHRpbnQgdHhxLCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRmb3IgKHR4cSA9IDA7IHR4cSBcdTAwM2MgcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4mIzQzO1x0XHRcdG1pbl9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXTtcbiYjNDM7XHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW1pbl9yYXRlIFx1MDAyNlx1MDAyNiAhbWF4X3JhdGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGZhaWxlZCB0byByZXN0b3JlIHNoYXBlciBmb3IgdHhxICVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0eHEsIGVycik7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXG4mIzQzOyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuJiM0MzsgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cbiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xuJiM0MzsgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4mIzQzOyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXG4mIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxuJiM0MzsgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gbmV0ZGV2LVx1MDAzZW5ldGRldl9vcHM7XG4mIzQzO1x0Ym9vbCB1cCA9IG5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsIGFuZCBkZWxldGUgcnVucyBhIGZ1bGwgbmRvX3N0b3AoKS9cbiYjNDM7XHQgKiBuZG9fb3BlbigpIGN5Y2xlIChjYXJyaWVyIGRyb3AsIElSUS9OQVBJIHRlYXJkb3duLCBpbi1mbGlnaHQgdHJhZmZpY1xuJiM0MztcdCAqIGxvc3MpIHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyLiBJZiBuZG9fb3BlbigpIGZhaWxzIHRoZVxuJiM0MztcdCAqIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biAoT1RYMl9GTEFHX0lOVEZfRE9XTikgdW50aWxcbiYjNDM7XHQgKiBtYW51YWwgcmVjb3ZlcnkuIEV4cGxvcmUgbGl2ZSByZXByb2dyYW1taW5nIHdpdGhvdXQgYm91bmNpbmcgdGhlXG4mIzQzO1x0ICogbmV0ZGV2LlxuJiM0MztcdCAqL1xuJiM0MztcdG5ldGRldl9pbmZvKG5ldGRldixcbiYjNDM7XHRcdCAgICBcJiMzNDttcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmICh1cClcbiYjNDM7XHRcdGRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dF9hY3RpdmF0ZTtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXG4mIzQzO1x0aWYgKHJhdGVfbGltaXQpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gb3BzLVx1MDAzZW5kb19vcGVuKG5ldGRldik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aW50IGRvd25fZXJyO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4mIzQzO1x0XHRpZiAoZG93bl9lcnIpXG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZG93bl9lcnIpO1xuJiM0MztcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4mIzQzO1x0XHQgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWVcbiYjNDM7XHRcdCAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHBmdmYtXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcbiYjNDM7XHRcdC8qIHZpc2libGUgdG8gb3R4Ml9zdG9wKCkgb24gb3RoZXIgY3B1cyAqL1xuJiM0MztcdFx0c21wX3dtYigpO1xuJiM0MztcdFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X2FjdGl2YXRlOlxuJiM0MztcdGlmICh1cCBcdTAwMjZcdTAwMjYgIWVycilcbiYjNDM7XHRcdGRldl9hY3RpdmF0ZShuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXRlIHx8IHFjb3VudCBcdTAwM2M9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmF0ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxIHx8IHJhdGUgXHUwMDNlPSBxY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDttcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBuYW1lLCByYXRlLCB0YywgcWNvdW50KTtcbiYjNDM7XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O21xcHJpbzogJXMgcmF0ZSAlbGx1IGZvciB0YyAlZCB0b28gc21hbGwgZm9yICV1IHF1ZXVlc1wmIzM0OyxcbiYjNDM7XHRcdFx0ICAgICAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpO1xuJiM0MztcdHJldHVybiAtRUlOVkFMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCB0Y19tcXByaW9fcW9wdCAqcW9wdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IG51bV90eHEgPSBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xuJiM0MztcdGludCB0YywgdHhxO1xuJiM0MztcbiYjNDM7XHRpZiAocW9wdC1cdTAwM2VudW1fdGMgXHUwMDNlIG51bV90eHEpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgICAgICBcJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIHFvcHQtXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG51bV90eHEgXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7TnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh0eHEgXHUwMDNlPSBudW1fdHhxKSB7XG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICB0eHEsIG51bV90eHEpO1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4mIzQzO3tcbiYjNDM7XHR1NjQgbWJwcztcbiYjNDM7XG4mIzQzO1x0aWYgKCFyYXRlX2J5dGVzX3BzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzYyBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QUylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgZGl2X3U2NChVNjRfTUFYLCA4KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWJwcyA9IG90eDJfY29udmVydF9yYXRlKHJhdGVfYnl0ZXNfcHMpO1xuJiM0MztcdHJldHVybiBpbG9nMihtYnBzIC8gMikgXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHQvKiBUT0RPOiBPbiBmYWlsZWQgdGMgcWRpc2MgcmVwbGFjZSByZXN0b3JlIHRoZSBwcmlvciByYXRlIGNhY2hlLFxuJiM0MztcdCAqIG5ldGRldiBUQyBtYXBwaW5nLCBhbmQgaGFyZHdhcmUgc2hhcGVycyBmcm9tIGEgc25hcHNob3QgdGFrZW4gYmVmb3JlXG4mIzQzO1x0ICogcmVwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUgd2hpbGVcbiYjNDM7XHQgKiB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgdGhlIGdyYWZ0ZWQgcm9vdCBxZGlzYy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdCAgIFwmIzM0O21xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKGV4dGFjaylcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290XCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbiYjNDM7e1xuJiM0MztcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4mIzQzO1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuJiM0MztcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4mIzQzO1x0aW50IGRvd25fZXJyLCBlcnI7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXG4mIzQzO1x0ICogb25lLiBtcXByaW9fc2tpcF90ZWFyZG93biBpcyBhcm1lZCBmcm9tIFRDX1JPT1RfR1JBRlQgc28gdGVhcmRvd25cbiYjNDM7XHQgKiBmcm9tIHRoZSByZXBsYWNlZCBxZGlzYyBpcyBpZ25vcmVkIGFmdGVyIHRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXNcbiYjNDM7XHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93bikge1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcbiYjNDM7XHRcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIE5VTEwpO1xuJiM0MztcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFNraXAgdGhlIG5ldGRldiByZXN0YXJ0IHdoZW4gbXFwcmlvIG9mZmxvYWQgd2FzIG5vdCBhY3RpdmUuICovXG4mIzQzO1x0aWYgKCFoYWRfbXFwcmlvKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlmX3VwKSB7XG4mIzQzO1x0XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZG93bl9lcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19tcXByaW8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbiYjNDM7XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuJiM0MztcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcbiYjNDM7XHRib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpO1xuJiM0MztcdGludCB0YywgdHhxLCBlcnIsIGk7XG4mIzQzO1xuJiM0MztcdGlmICghcW9wdC1cdTAwM2VodylcbiYjNDM7XHRcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlmX3VwKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7bXFwcmlvOiBzZXR1cCByZXF1aXJlcyBpbnRlcmZhY2UgVVBcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3hcXG5cJiMzNDssIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssIFwmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBtcXByaW8tXHUwMDNlc2hhcGVyKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghdGVzdF9iaXQoUU9TX0NJUl9QSVJfU1VQUE9SVCwgXHUwMDI2cGZ2Zi1cdTAwM2Vody5jYXBfZmxhZykpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlzX290eDJfc2RwX3JlcChwZnZmLVx1MDAzZXBkZXYpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwZnZmLVx1MDAzZXBmY19lbikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBmdmYtXHUwMDNleGRwX3Byb2cpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyB0YyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcbiYjNDM7XHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbiYjNDM7XHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXG4mIzQzO1x0XHRcdG1heF9yYXRlID0gbXFwcmlvLVx1MDAzZW1heF9yYXRlW3RjXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobWluX3JhdGUgXHUwMDI2XHUwMDI2IG1heF9yYXRlIFx1MDAyNlx1MDAyNiBtaW5fcmF0ZSBcdTAwM2UgbWF4X3JhdGUpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4mIzQzO1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIHFjb3VudCwgdGMsIFwmIzM0O21pblwmIzM0Oyk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcJiMzNDttYXhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWluX3JhdGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHQgICAgICAgcWNvdW50KSkpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBtaW5fcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDttcXByaW86IG1pbl9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICFvdHgyX21xcHJpb19yYXRlX3ZhbGlkKG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1heF9yYXRlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgbWF4X3JhdGUsIHRjKTtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7bXFwcmlvOiBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1wmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBtYXhfcmF0ZSwgdGMpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVx1MDAzZW5ldGRldiwgdHJ1ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU1cbiYjNDM7XHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cbiYjNDM7XHQgKiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBvciBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkpXG4mIzQzO1x0ICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsXG4mIzQzO1x0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxuJiM0MztcdCAqIGNhY2hlLCBvciBwYXJ0aWFsbHkgcmVwcm9ncmFtbWVkIGhhcmR3YXJlIHNoYXBlcnMuIFJlc3RvcmUgdGhlIHByaW9yXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcbiYjNDM7XHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuJiM0MztcdCAqIHRoZSByZXN0YXJ0IGFib3ZlLiBDbGVhciBldmVyeSBNRFEgc2hhcGVyIGJlZm9yZSBhcHBseWluZyB0aGUgbmV3XG4mIzQzO1x0ICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGVcbiYjNDM7XHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkge1xuJiM0MztcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byBjbGVhbnVwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwO1xuJiM0MztcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxuJiM0MztcdFx0ICogc2hhcGVyIHJlZ2lzdGVycyBhcmUgcHJvZ3JhbW1lZDsgc2VlXG4mIzQzO1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKVxuJiM0MztcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuJiM0MztcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgcWNvdW50KTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbiYjNDM7XHRcdCAgICAgdHhxIFx1MDAzYyBxb3B0LVx1MDAzZW9mZnNldFt0Y10gJiM0MzsgcWNvdW50OyB0eHEmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG5ldGRldl9kYmcobmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O21xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGVbdHhxXSA9IG1pbl9yYXRlO1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4mIzQzO1xuJiM0MztcdFx0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFvcHQtXHUwMDNlbnVtX3RjOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LVx1MDAzZWNvdW50W2ldLCBxb3B0LVx1MDAzZW9mZnNldFtpXSk7XG4mIzQzO1xuJiM0MztcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4mIzQzO1xuJiM0MztcdGlmIChyZXBsYWNpbmcpXG4mIzQzO1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0LyogQ2xlYXIgaGFyZHdhcmUgb2ZmbG9hZCBvbiB0aGlzIHJlamVjdGVkIHJlcXVlc3Qgc28gYSBmYWlsZWQgcmVwbGFjZVxuJiM0MztcdCAqIGRvZXMgbm90IGxlYXZlIHRjIHJlcG9ydGluZyBvZmZsb2FkIGZvciBkcml2ZXIgc3RhdGUgdGhhdCB3YXMgdG9yblxuJiM0MztcdCAqIGRvd24gd2hpbGUgdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cW9wdC1cdTAwM2VodyA9IDA7XG4mIzQzO1x0aWYgKHJlcGxhY2luZykge1xuJiM0MztcdFx0b3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKG5ldGRldiwgZXh0YWNrKTtcbiYjNDM7XHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0fVxuJiM0MztcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHJvb3QtXHUwMDNlY29tbWFuZCkge1xuJiM0MztcdGNhc2UgVENfUk9PVF9HUkFGVDpcbiYjNDM7XHRcdGlmIChyb290LVx1MDAzZWluZ3Jlc3MpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xuJiM0MztcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XHRcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRjX3F1ZXJ5X2NhcHNfYmFzZSAqYmFzZSA9IHR5cGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4mIzQzO1xuJiM0MztcdGlmIChiYXNlLVx1MDAzZXR5cGUgIT0gVENfU0VUVVBfUURJU0NfTVFQUklPKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gYmFzZS1cdTAwM2VjYXBzO1xuJiM0MztcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IG90eDJfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgZW51bSB0Y19zZXR1cF90eXBlIHR5cGUsXG4gXHRcdCAgdm9pZCAqdHlwZV9kYXRhKVxuIHtcbiBcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgVENfUVVFUllfQ0FQUzpcbiYjNDM7XHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuJiM0MztcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxuJiM0MztcdFx0cmV0dXJuIG90eDJfc2V0dXBfdGNfbXFwcmlvKG5ldGRldiwgdHlwZV9kYXRhKTtcbiYjNDM7XHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4mIzQzO1x0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG5pbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0LyogY29uZmlndXJlIFBJUiAqL1xuIFx0bWF4cmF0ZSA9IChub2RlLVx1MDAzZXJhdGUgXHUwMDNlIG5vZGUtXHUwMDNlY2VpbCkgPyBub2RlLVx1MDAzZXJhdGUgOiBub2RlLVx1MDAzZWNlaWw7XG4gXG4mIzQzO1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4mIzQzO1x0ICogZXhwbGljaXQgdmFsdWUsIG5vdCB0aGUgTklYIGhhcmR3YXJlIG1heGltdW0gKENOMTBLX01BWF9CVVJTVF9TSVpFKS5cbiYjNDM7XHQgKi9cbiBcdGNmZy1cdTAwM2VyZWd2YWxbKm51bV9yZWdzXSA9XG4gXHRcdG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCBtYXhyYXRlLCA2NTUzNik7XG4gXHQoKm51bV9yZWdzKSYjNDM7JiM0Mzs7XG5AQCAtMTcyOSwxMSAmIzQzOzE3MzIsMjMgQEAgdm9pZCBvdHgyX3Fvc19jb25maWdfdHhzY2hxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcbiBcdG90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTtcbiB9XG4gXG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpXG4ge1xuIFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgcmVzO1xuIFxuJiM0MztcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGh0Yi1cdTAwM2VleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3dpdGNoIChodGItXHUwMDNlY29tbWFuZCkge1xuIFx0Y2FzZSBUQ19IVEJfQ1JFQVRFOlxuIFx0XHRyZXR1cm4gb3R4Ml9xb3Nfcm9vdF9hZGQocGZ2ZiwgaHRiLVx1MDAzZXBhcmVudF9jbGFzc2lkLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuaW5kZXggMjIxYmQwNDM4ZjYwMy4uYzc3N2NjNDJlYWM5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5AQCAtMjMsNiAmIzQzOzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xuIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpO1xuIFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XG4mIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTRjMTcwNGJhY2Y4YTJmYjMwNjkyZTFlNDg3ZWYzNWY1NGJhYTljZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDA5OjUyOjAwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jCmluZGV4IGI4MWM0N2VhMDIzYmUuLjIyZjY0YzFlZGU5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9uaXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmMKQEAgLTMzMSw4ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLAogCQkJcmV0dXJuIHRydWU7CiAJfQogCi0JaWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpCiYjNDM7CWlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKSB7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgcGNpZnVuYywgbWFwX2Z1bmMsIGx2bCwgc2NocSk7CiAJCXJldHVybiBmYWxzZTsKJiM0MzsJfQogCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCmluZGV4IGNhNzNhOTRkYjc5NDMuLmI2ZDhlZTdlMmQ0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jCkBAIC02MTQsNiAmIzQzOzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogfQogRVhQT1JUX1NZTUJPTChvdHgyX2dldF9tYWNfZnJvbV9hZik7CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7b3R4Ml9uaXhfdG1xX3JlZ193cml0ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBjbnQsCiYjNDM7CQkgICAgICAgdTY0IHJlZ19hZGRyW01BWF9SRUdTX1BFUl9NQk9YX01TR10sCiYjNDM7CQkgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGksIGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXEtJmd0O2x2bCA9IE5JWF9UWFNDSF9MVkxfTURROwomIzQzOwlyZXEtJmd0O251bV9yZWdzID0gY250OwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY250OyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVxLSZndDtyZWdbaV0gPSByZWdfYWRkcltpXTsKJiM0MzsJCXJlcS0mZ3Q7cmVndmFsW2ldID0gcmVnX3ZhbFtpXTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CXU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwl1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddOwomIzQzOwlpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W05JWF9UWFNDSF9MVkxfU01RXTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXNtcSA9IHBmdmYtJmd0O2h3LnR4c2NocV9saXN0W05JWF9UWFNDSF9MVkxfU01RXVtpXTsKJiM0MzsKJiM0MzsJCXJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTsKJiM0MzsJCXJlZ192YWxbY250XSA9IDA7CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJcmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFtjbnRdID0gMDsKJiM0MzsJCWNudCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQlpZiAoY250ICZsdDsgTUFYX1JFR1NfUEVSX01CT1hfTVNHIC0gMSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LAomIzQzOwkJCQkJICAgICByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gZmFpbDsKJiM0MzsJCWNudCA9IDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGNudCkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCBjbnQsCiYjNDM7CQkJCQkgICAgIHJlZ19hZGRyLCByZWdfdmFsKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJZ290byBmYWlsOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2ZhaWw6CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJIGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYm94ICptYm94ID0gJmFtcDtwZnZmLSZndDttYm94OwomIzQzOwlzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTsKJiM0MzsJaW50IGVyciwgc21xLCBuID0gMDsKJiM0MzsJdTY0IHJlZ19hZGRyWzJdOwomIzQzOwl1NjQgcmVnX3ZhbFsyXTsKJiM0MzsJdTY0IHJhdGU7CiYjNDM7CiYjNDM7CWlmICghbWF4cmF0ZSAmYW1wOyZhbXA7ICFtaW5yYXRlKSB7CiYjNDM7CQlzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7CiYjNDM7CQlyZWdfYWRkclswXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFswXSA9IDA7CiYjNDM7CQlyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwkJcmVnX3ZhbFsxXSA9IDA7CiYjNDM7CQlyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc21xID0gb3R4Ml9nZXRfc21xX2lkeChwZnZmLCB0eHEpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bWJveC0mZ3Q7bG9jayk7CiYjNDM7CXJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7CiYjNDM7CWlmICghcmVxKSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDttYm94LSZndDtsb2NrKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bHZsID0gTklYX1RYU0NIX0xWTF9NRFE7CiYjNDM7CiYjNDM7CS8qIE1RUFJJTyBleHBvc2VzIG9ubHkgbWluL21heCByYXRlLCBub3QgYnVyc3QuICBQYXNzIGJ1cnN0IDAgc28KJiM0MzsJICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWAomIzQzOwkgKiBlbmNvZGluZyBzdXBwb3J0cyAoQ04xMEtfTUFYX0JVUlNUX1NJWkUgb24gQ04xMEspLiAgVGhpcyBkaWZmZXJzCiYjNDM7CSAqIGZyb20gdGhlIDY1NTM2IGJ5dGUgZGVmYXVsdCB1c2VkIGluIHRoZSBIVEIgcGF0aCwgd2hpY2ggaXMgYQomIzQzOwkgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGEKJiM0MzsJICogaGFyZHdhcmUgY2FwLgomIzQzOwkgKgomIzQzOwkgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLAomIzQzOwkgKiB3aGljaCByZXNldHMgTURRIHNoYXBlcnMgdG8gemVyby4gIFByb2dyYW0gYm90aCBQSVIgYW5kIENJUiBvbgomIzQzOwkgKiBldmVyeSB1cGRhdGUgc28gb21pdHRlZCByYXRlcyBhcmUgYXBwbGllZCBleHBsaWNpdGx5IHJhdGhlciB0aGFuCiYjNDM7CSAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX1BJUihzbXEpOwomIzQzOwlpZiAobWF4cmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CS8qIENJUiYjNDM7UElSIHN1cHBvcnQgaXMgcmVxdWlyZWQgYW5kIGNoZWNrZWQgYXQgbXFwcmlvIHNldHVwLiAqLwomIzQzOwlyZXEtJmd0O3JlZ1tuXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpOwomIzQzOwlpZiAobWlucmF0ZSkgewomIzQzOwkJcmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1pbnJhdGUpOwomIzQzOwkJcmVxLSZndDtyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXEtJmd0O3JlZ3ZhbFtuXSA9IDA7CiYjNDM7CX0KJiM0MzsJbiYjNDM7JiM0Mzs7CiYjNDM7CXJlcS0mZ3Q7bnVtX3JlZ3MgPSBuOwomIzQzOwomIzQzOwllcnIgPSBvdHgyX3N5bmNfbWJveF9tc2cobWJveCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO21ib3gtJmd0O2xvY2spOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3R4c2NocV9jb25maWcoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgbHZsLCBpbnQgcHJpbywgYm9vbCB0eHNjaHFfZm9yX3BmYykKIHsKIAl1MTYgKCpzY2hxX2xpc3QpW01BWF9UWFNDSFFfUEVSX0ZVTkNdOwpAQCAtNjUwLDcgJiM0Mzs3ODYsMjAgQEAgaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3IKIAkJCQkJCSh1NjQpaHctJmd0O3NtcV9saW5rX3R5cGUpOwogCQlyZXEtJmd0O251bV9yZWdzJiM0MzsmIzQzOzsKIAkJLyogTURRIGNvbmZpZyAqLwotCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KSB7CiYjNDM7CQkJLyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJTwomIzQzOwkJCSAqIHBhcmVudHMgZXZlcnkgTURRIHVuZGVyIHRoZSBzYW1lIFRMNCB3aXRoIHNjaGVkdWxlCiYjNDM7CQkJICogcHJpb3JpdHkgMCwgc28gc2libGluZyBhcmJpdHJhdGlvbiBkZXBlbmRzIG9uIHRoZSBUTDQKJiM0MzsJCQkgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpcwomIzQzOwkJCSAqIHRvZGF5IGFuZCB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLAomIzQzOwkJCSAqIHNvIGEgVEw0IHJldXNlZCBhZnRlciBIVEIgdGVhcmRvd24gY2FuIHJldGFpbiBzdGFsZQomIzQzOwkJCSAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdW3ByaW9dOwomIzQzOwkJfQomIzQzOwogCQlyZXEtJmd0O3JlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTsKIAkJcmVxLSZndDtyZWd2YWxbMV0gPSBwYXJlbnQgJmx0OyZsdDsgMTY7CiAJCXJlcS0mZ3Q7bnVtX3JlZ3MmIzQzOyYjNDM7OwpAQCAtNzc4LDYgJiM0Mzs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiAJCXJlcS0mZ3Q7c2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDsKIAl9CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmVxLSZndDtzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwogCXJjID0gb3R4Ml9zeW5jX21ib3hfbXNnKCZhbXA7cGZ2Zi0mZ3Q7bWJveCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCmluZGV4IGVlY2VlNjEyYjdiMmMuLjY3ZDRhYWU5NDQwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oCkBAIC00ODMsNiAmIzQzOzQ4MywxMyBAQCBzdHJ1Y3QgcGZfaXJxX2RhdGEgewogCWludCBtZGV2czsKIH07CiAKJiM0MztzdHJ1Y3Qgb3R4Ml9tcXByaW8gewomIzQzOwl1MzIJZmxhZ3M7CiYjNDM7CXU2NAkqbWluX3JhdGU7CiYjNDM7CXU2NAkqbWF4X3JhdGU7CiYjNDM7CWJvb2wJcmF0ZV9saW1pdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IG90eDJfbmljIHsKIAl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0ZGV2OwpAQCAtNTE1LDYgJiM0Mzs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHsKIAl1NjQJCQlmbGFnczsKIAl1NjQJCQkqY3Ffb3BfYWRkcjsKIAomIzQzOwlzdHJ1Y3Qgb3R4Ml9tcXByaW8JbXFwcmlvOwomIzQzOwlib29sCQkJbXFwcmlvX3JlcGxhY2VfcGVuZGluZzsKJiM0MzsJYm9vbAkJCW1xcHJpb19za2lwX3RlYXJkb3duOwomIzQzOwogCXN0cnVjdCBicGZfcHJvZwkJKnhkcF9wcm9nOwogCXN0cnVjdCBvdHgyX3FzZXQJcXNldDsKIAlzdHJ1Y3Qgb3R4Ml9odwkJaHc7CkBAIC0xMjQ2LDYgJiM0MzsxMjU3LDExIEBAIGRtYV9hZGRyX3Qgb3R4Ml9kbWFfbWFwX3NrYl9mcmFnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKIAkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlZywgaW50ICpsZW4pOwogdm9pZCBvdHgyX2RtYV91bm1hcF9za2JfZnJhZ3Moc3RydWN0IG90eDJfbmljICpwZnZmLCBzdHJ1Y3Qgc2dfbGlzdCAqc2cpOwogaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTsKJiM0MztpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsCiYjNDM7CQkJCSB1NjQgbWlucmF0ZSwgdTY0IG1heHJhdGUpOwomIzQzO2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKTsKJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwomIzQzO2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSwKIAkJCWludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7CiBpbnQgb3R4Ml9kZWxfbWNhbV9mbG93X2VudHJ5KHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MTYgZW50cnksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuYwppbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMKQEAgLTQxMyw2ICYjNDM7NDEzLDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml9kY2JubF9pZWVlX3NldHBmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKIAl1OCBvbGRfcGZjX2VuOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ICZhbXA7JmFtcDsgcGZjLSZndDtwZmNfZW4pIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7UEZDOiBjYW5ub3QgZW5hYmxlIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCW9sZF9wZmNfZW4gPSBwZnZmLSZndDtwZmNfZW47CiAJcGZ2Zi0mZ3Q7cGZjX2VuID0gcGZjLSZndDtwZmNfZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuYwppbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jCkBAIC0yODcsNiAmIzQzOzI4NywxNCBAQCBzdGF0aWMgaW50IG90eDJfc2V0X2NoYW5uZWxzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgKGNoYW5uZWwtJmd0O3R4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnR4X3F1ZXVlcyB8fAomIzQzOwkgICAgIGNoYW5uZWwtJmd0O3J4X2NvdW50ICE9IHBmdmYtJmd0O2h3LnJ4X3F1ZXVlcykpIHsKJiM0MzsJCW5ldGRldl9pbmZvKGRldiwKJiM0MzsJCQkgICAgJiMzNDtOb3QgcGVybWl0dGVkIHRvIGNoYW5nZSBjaGFubmVsIGNvdW50IHdoaWxlIE1RIHByaW8gaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwogCWlmIChpZl91cCkKIAkJZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fc3RvcChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYwppbmRleCBjOTk1ZjI5MDA4NTkwLi4wNmNiNDRlNzI2M2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmMKQEAgLTE5ODAsNiAmIzQzOzE5ODAsMTYgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfbWVtOwogCiYjNDM7CS8qIFRPRE86IG90eDJfbXFwcmlvX3VwKCkgZmFpbHVyZSBoZXJlIGFib3J0cyB0aGUgZW50aXJlIG5kb19vcGVuKCkKJiM0MzsJICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC4KJiM0MzsJICogUm91dGluZSBpcCBsaW5rIHNldCB1cCBvciBkcml2ZXIgcmVzZXQgd2l0aCBhY3RpdmUgbXFwcmlvIG9mZmxvYWQKJiM0MzsJICogY2FuIGxlYXZlIHRoZSBpbnRlcmZhY2Ugc3R1Y2sgZG93biB1bnRpbCB0aGUgcWRpc2MgaXMgcmVtb3ZlZCBhbmQKJiM0MzsJICogcmVhcHBsaWVkLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fdXAocGYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV9odzsKJiM0MzsKIAkvKiBSZWdpc3RlciBOQVBJIGhhbmRsZXIgKi8KIAlmb3IgKHFpZHggPSAwOyBxaWR4ICZsdDsgcGYtJmd0O2h3LmNpbnRfY250OyBxaWR4JiM0MzsmIzQzOykgewogCQljcV9wb2xsID0gJmFtcDtxc2V0LSZndDtuYXBpW3FpZHhdOwpAQCAtMjE0MCw2ICYjNDM7MjE1MCw3IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAlmcmVlX2lycSh2ZWMsIHBmKTsKIGVycl9kaXNhYmxlX25hcGk6CiAJb3R4Ml9kaXNhYmxlX25hcGkocGYpOwomIzQzO2Vycl9mcmVlX2h3OgogCW90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpOwogZXJyX2ZyZWVfbWVtOgogCW90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7CkBAIC0yODQ2LDYgJiM0MzsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKQogCWJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLSZndDtuZXRkZXYpOwogCXN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7CiAKJiM0MzsJaWYgKHByb2cgJmFtcDsmYW1wOyBwZi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQpIHsKJiM0MzsJCW5ldGRldl9lcnIoZGV2LAomIzQzOwkJCSAgICYjMzQ7WERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCWlmIChwcm9nICZhbXA7JmFtcDsgZGV2LSZndDttdHUgJmd0OyBNQVhfWERQX01UVSkgewogCQluZXRkZXZfd2FybihkZXYsICYjMzQ7SnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXG4mIzM0Oyk7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jCmluZGV4IDAzOWZkNDdlYmY1MjIuLmZjOTY3N2UzNDA2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuYwpAQCAtMTYsNiAmIzQzOzE2LDggQEAKICNpbmNsdWRlICZsdDtuZXQvdGNfYWN0L3RjX21pcnJlZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC90Y19hY3QvdGNfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcHY2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9wa3Rfc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NjaF9nZW5lcmljLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Y24xMGsuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O290eDJfY29tbW9uLmgmIzM0OwpAQCAtMzEsNiAmIzQzOzMzLDEwIEBACiAKICNkZWZpbmUgTUNBU1RfSU5WQUxJRF9HUlAJCSgtMVUpCiAjZGVmaW5lIFJBVEVfTUFOVElTU0FfQklUUwkJOAomIzQzOy8qIE1pbiBwZXItcXVldWUgZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgyIE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUlOX1JBVEVfQllURVNfUFMJMjUwMDAwVUxMCiYjNDM7LyogTWF4IGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMTMwODE2IE1icHMpLiAqLwomIzQzOyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMJKChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTCkKIAogc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJCSAgICAgIHUzMiAqYnVyc3RfZXhwLCB1MzIgKmJ1cnN0X21hbnRpc3NhKQpAQCAtNjEsNiAmIzQzOzY3LDkgQEAgc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LAogCQkJKmJ1cnN0X21hbnRpc3NhID0gdG1wIC8gKDFVTEwgJmx0OyZsdDsgKCpidXJzdF9leHAgLSA3KSk7CiAJCX0KIAl9IGVsc2UgewomIzQzOwkJLyogYnVyc3QgMDogbGFyZ2VzdCBlbmNvZGFibGUgYnVyc3QgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uCiYjNDM7CQkgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuCiYjNDM7CQkgKi8KIAkJKmJ1cnN0X2V4cCA9IE1BWF9CVVJTVF9FWFBPTkVOVDsKIAkJKmJ1cnN0X21hbnRpc3NhID0gbWF4X21hbnRpc3NhOwogCX0KQEAgLTE2MDAsMTQgJiM0MzsxNjA5LDU5NiBAQCBzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfYmxvY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJICBuaWMsIG5pYywgaW5ncmVzcyk7CiB9CiAKJiM0MzsvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi8KJiM0MztzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWRldm1fa2ZyZWUocGZ2Zi0mZ3Q7ZGV2LCBwZnZmLSZndDttcXByaW8ubWluX3JhdGUpOwomIzQzOwlkZXZtX2tmcmVlKHBmdmYtJmd0O2RldiwgcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlID0gTlVMTDsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19hbGxvY19jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwl1MTYgbnVtX3R4cSA9IHBmdmYtJmd0O2h3Lm5vbl9xb3NfcXVldWVzOwomIzQzOwomIzQzOwkvKiBUT0RPOiBvdHgyX21xcHJpb19mcmVlX2NhY2hlKCkgaGVyZSBkcm9wcyB0aGUgY29tbWl0dGVkIHJhdGUgY2FjaGUKJiM0MzsJICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGUKJiM0MzsJICogaW5jb21pbmcgcmF0ZXMgc2VwYXJhdGVseSBhbmQgY29tbWl0IG9ubHkgYWZ0ZXIgcmVwbGFjZSBzdWNjZWVkcyBzbwomIzQzOwkgKiBhIGZhaWx1cmUgYWZ0ZXIgbmV0ZGV2IHJlc3RhcnQgY2FuIHJvbGwgYmFjayBmcm9tIHRoZSBwcmlvciBjYWNoZS4KJiM0MzsJICovCiYjNDM7CW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CXBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLSZndDtkZXYsIG51bV90eHEsCiYjNDM7CQkJCQkgICAgIHNpemVvZigqcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlKSwKJiM0MzsJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpIHsKJiM0MzsJCW90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZikKJiM0Mzt7CiYjNDM7CWludCBsdmwsIGlkeDsKJiM0MzsKJiM0MzsJZm9yIChsdmwgPSAwOyBsdmwgJmx0OyBOSVhfVFhTQ0hfTFZMX0NOVDsgbHZsJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChpZHggPSAwOyBpZHggJmx0OyBwZnZmLSZndDtody50eHNjaHFfY250W2x2bF07IGlkeCYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAocGZ2Zi0mZ3Q7aHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKQomIzQzOwkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRlYXIgZG93biBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQ6IGNsZWFyIHBlci1xdWV1ZSBzaGFwZXJzLAomIzQzOyAqIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsIGFuZCB0aGUgY2FjaGVkIHJhdGVzLiAgQ2FsbGVkIG9uCiYjNDM7ICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb24KJiM0MzsgKiByb3V0aW5lIG5ldGRldiBzdG9wL29wZW4gY3ljbGVzIHdoZXJlIHRoZSBvZmZsb2FkIHN0YXlzIGFjdGl2ZS4KJiM0MzsgKi8KJiM0MztpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi0mZ3Q7bmV0ZGV2OwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFwZnZmLSZndDttcXByaW8ucmF0ZV9saW1pdCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKQomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpOwomIzQzOwomIzQzOwkvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLAomIzQzOwkgKiBhbmQgdGhlIHJhdGUgY2FjaGUgZXZlbiB3aGVuIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIGZhaWxzCiYjNDM7CSAqIHBhcnR3YXkgdGhyb3VnaCB0aGUgTURRIGJhdGNoLiBTb2Z0d2FyZSB0aGVuIHJlcG9ydHMgb2ZmbG9hZCBhcwomIzQzOwkgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlcgomIzQzOwkgKiBtcXByaW9fdXAoKSBvciByZS1zZXR1cCBjYW4gc2hhcGUgd2l0aCB0aGUgd3JvbmcgZWZmZWN0aXZlIHJhdGVzLgomIzQzOwkgKi8KJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgPSBmYWxzZTsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlOwomIzQzOwlwZnZmLSZndDttcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlOwomIzQzOwluZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApOwomIzQzOwlvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJaW50IHR4cSwgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmICghcGZ2Zi0mZ3Q7bXFwcmlvLm1pbl9yYXRlIHx8ICFwZnZmLSZndDttcXByaW8ubWF4X3JhdGUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZm9yICh0eHEgPSAwOyB0eHEgJmx0OyBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsgdHhxJiM0MzsmIzQzOykgewomIzQzOwkJdTY0IG1pbl9yYXRlID0gMCwgbWF4X3JhdGUgPSAwOwomIzQzOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdOwomIzQzOwkJaWYgKHBmdmYtJmd0O21xcHJpby5mbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSkKJiM0MzsJCQltYXhfcmF0ZSA9IHBmdmYtJmd0O21xcHJpby5tYXhfcmF0ZVt0eHFdOwomIzQzOwomIzQzOwkJaWYgKCFtaW5fcmF0ZSAmYW1wOyZhbXA7ICFtYXhfcmF0ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSwKJiM0MzsJCQkJCQkgICBtYXhfcmF0ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICB0eHEsIGVycik7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvCiYjNDM7ICogYmFuZHdpZHRoIG9mZmxvYWQuICBCb3RoIG1xcHJpbyBhZGQgYW5kIGRlbGV0ZSAod2hlbiBvZmZsb2FkIHdhcyBhY3RpdmUpCiYjNDM7ICogdGFrZSB0aGlzIHBhdGggdmlhIG5kb19zdG9wKCkvbmRvX29wZW4oKSBzbyBWRi1zcGVjaWZpYyBvcGVuIGxvZ2ljIChlLmcuCiYjNDM7ICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFycwomIzQzOyAqIGNhcnJpZXIsIHN0b3BzIGFsbCBUWCBxdWV1ZXMsIHRlYXJzIGRvd24gSVJRcy9OQVBJIGFuZCBkcm9wcyBpbi1mbGlnaHQKJiM0MzsgKiB0cmFmZmljLiAgSWYgb3BlbiBmYWlscywgdGhlIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93bgomIzQzOyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieQomIzQzOyAqIHRoZSBvcGVuIGVycm9yIHBhdGguCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi0mZ3Q7bmV0ZGV2X29wczsKJiM0MzsJYm9vbCB1cCA9IG5ldGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBUT0RPOiBFdmVyeSBtcXByaW8gYWRkLCByZXBsYWNlLCBhbmQgZGVsZXRlIHJ1bnMgYSBmdWxsIG5kb19zdG9wKCkvCiYjNDM7CSAqIG5kb19vcGVuKCkgY3ljbGUgKGNhcnJpZXIgZHJvcCwgSVJRL05BUEkgdGVhcmRvd24sIGluLWZsaWdodCB0cmFmZmljCiYjNDM7CSAqIGxvc3MpIHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyLiBJZiBuZG9fb3BlbigpIGZhaWxzIHRoZQomIzQzOwkgKiBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd24gKE9UWDJfRkxBR19JTlRGX0RPV04pIHVudGlsCiYjNDM7CSAqIG1hbnVhbCByZWNvdmVyeS4gRXhwbG9yZSBsaXZlIHJlcHJvZ3JhbW1pbmcgd2l0aG91dCBib3VuY2luZyB0aGUKJiM0MzsJICogbmV0ZGV2LgomIzQzOwkgKi8KJiM0MzsJbmV0ZGV2X2luZm8obmV0ZGV2LAomIzQzOwkJICAgICYjMzQ7bXFwcmlvOiByZXN0YXJ0aW5nIGludGVyZmFjZSB0byByZXByb2dyYW0gVFggc2NoZWR1bGVyOyBpbi1mbGlnaHQgdHJhZmZpYyB3aWxsIGJlIGRyb3BwZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKHVwKQomIzQzOwkJZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fc3RvcChuZXRkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXRfYWN0aXZhdGU7CiYjNDM7CiYjNDM7CS8qIFNldCBiZWZvcmUgbmRvX29wZW4oKSBzbyBvdHgyX3R4c2NoX2FsbG9jKCkgd2lkZW5zIFNNUSBhbGxvY2F0aW9uLiAqLwomIzQzOwlpZiAocmF0ZV9saW1pdCkKJiM0MzsJCXBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZXJyID0gb3BzLSZndDtuZG9fb3BlbihuZXRkZXYpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpbnQgZG93bl9lcnI7CiYjNDM7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byByZXN0YXJ0IGRldmljZSBhZnRlciBtcXByaW8gY2hhbmdlOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCWRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTsKJiM0MzsJCWlmIChkb3duX2VycikKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGZhaWxlZCB0byBjbGVhciBzaGFwZXJzIGFmdGVyIHJlc3RhcnQgZXJyb3I6ICVkXG4mIzM0OywKJiM0MzsJCQkJICAgZG93bl9lcnIpOwomIzQzOwkJLyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvCiYjNDM7CQkgKiBuZXRpZl9jbG9zZSgpIGRvZXMgbm90IGludm9rZSBuZG9fc3RvcCgpIG9uIGZyZWVkIE5BUEkvcXVldWUKJiM0MzsJCSAqIHN0YXRlLiBDYWxsZXIgaG9sZHMgUlROTDsgZGV2X2Nsb3NlKCkgd291bGQgZGVhZGxvY2suCiYjNDM7CQkgKi8KJiM0MzsJCXBmdmYtJmd0O2ZsYWdzIHw9IE9UWDJfRkxBR19JTlRGX0RPV047CiYjNDM7CQkvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi8KJiM0MzsJCXNtcF93bWIoKTsKJiM0MzsJCW5ldGlmX2Nsb3NlKG5ldGRldik7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X2FjdGl2YXRlOgomIzQzOwlpZiAodXAgJmFtcDsmYW1wOyAhZXJyKQomIzQzOwkJZGV2X2FjdGl2YXRlKG5ldGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1NjQgb3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUodTY0IHJhdGUsIHUzMiBxY291bnQpCiYjNDM7ewomIzQzOwlpZiAoIXJhdGUgfHwgcWNvdW50ICZsdDs9IDEpCiYjNDM7CQlyZXR1cm4gcmF0ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpdl91NjQocmF0ZSwgcWNvdW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCQl1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLAomIzQzOwkJCQkJY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWlmICghcmF0ZSB8fCBxY291bnQgJmx0Oz0gMSB8fCByYXRlICZndDs9IHFjb3VudCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCSAgICYjMzQ7bXFwcmlvOiAlcyByYXRlICVsbHUgZm9yIHRjICVkIHRvbyBzbWFsbCBmb3IgJXUgcXVldWVzXG4mIzM0OywKJiM0MzsJCSAgIG5hbWUsIHJhdGUsIHRjLCBxY291bnQpOwomIzQzOwlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkgICAgICAgJiMzNDttcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXMmIzM0OywKJiM0MzsJCQkgICAgICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiYjNDM7CQkJCSAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IG51bV90eHEgPSBwZnZmLSZndDtody5ub25fcW9zX3F1ZXVlczsKJiM0MzsJaW50IHRjLCB0eHE7CiYjNDM7CiYjNDM7CWlmIChxb3B0LSZndDtudW1fdGMgJmd0OyBudW1fdHhxKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcbiYjMzQ7LAomIzQzOwkJCSAgIHFvcHQtJmd0O251bV90YywgbnVtX3R4cSk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7TnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1JiMzNDssCiYjNDM7CQkJCSAgICAgICBxb3B0LSZndDtudW1fdGMsIG51bV90eHEpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG51bV90eHEgJmd0OyBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O051bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XG4mIzM0OywKJiM0MzsJCQkgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAgICAgJiMzNDtOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldSYjMzQ7LAomIzQzOwkJCQkgICAgICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKHRjID0gMDsgdGMgJmx0OyBxb3B0LSZndDtudW1fdGM7IHRjJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHFjb3VudCA9IHFvcHQtJmd0O2NvdW50W3RjXTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodHhxICZndDs9IG51bV90eHEpIHsKJiM0MzsJCQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCQkgICAmIzM0O21xcHJpbzogdHhxICVkIGV4Y2VlZHMgb2ZmbG9hZCBxdWV1ZSBjb3VudCAldVxuJiMzNDssCiYjNDM7CQkJCQkgICB0eHEsIG51bV90eHEpOwomIzQzOwkJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCQkgICAgICAgJiMzNDttcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXUmIzM0OywKJiM0MzsJCQkJCQkgICAgICAgdHhxLCBudW1fdHhxKTsKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBvdHgyX21xcHJpb19yYXRlX3ZhbGlkKHU2NCByYXRlX2J5dGVzX3BzKQomIzQzO3sKJiM0MzsJdTY0IG1icHM7CiYjNDM7CiYjNDM7CWlmICghcmF0ZV9ieXRlc19wcykKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmbHQ7IE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAocmF0ZV9ieXRlc19wcyAmZ3Q7IGRpdl91NjQoVTY0X01BWCwgOCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CW1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTsKJiM0MzsJcmV0dXJuIGlsb2cyKG1icHMgLyAyKSAmbHQ7PSBNQVhfUkFURV9FWFBPTkVOVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwkvKiBUT0RPOiBPbiBmYWlsZWQgdGMgcWRpc2MgcmVwbGFjZSByZXN0b3JlIHRoZSBwcmlvciByYXRlIGNhY2hlLAomIzQzOwkgKiBuZXRkZXYgVEMgbWFwcGluZywgYW5kIGhhcmR3YXJlIHNoYXBlcnMgZnJvbSBhIHNuYXBzaG90IHRha2VuIGJlZm9yZQomIzQzOwkgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZQomIzQzOwkgKiB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgdGhlIGdyYWZ0ZWQgcm9vdCBxZGlzYy4KJiM0MzsJICovCiYjNDM7CW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJICAgJiMzNDttcXByaW86IHJlcGxhY2UgZmFpbGVkOyBuZXcgb2ZmbG9hZCB2YWx1ZXMgYWN0aXZlLCBvbGQgbXFwcmlvIHN0aWxsIHJvb3RcbiYjMzQ7KTsKJiM0MzsJaWYgKGV4dGFjaykKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290JiMzNDspOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkJICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbykKJiM0Mzt7CiYjNDM7CWJvb2wgaGFkX21xcHJpbyA9IHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0OwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSAmYW1wO21xcHJpby0mZ3Q7cW9wdDsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtJmd0O25ldGRldjsKJiM0MzsJYm9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKJiM0MzsJaW50IGRvd25fZXJyLCBlcnI7CiYjNDM7CiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsKJiM0MzsJLyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZAomIzQzOwkgKiBvbmUuIG1xcHJpb19za2lwX3RlYXJkb3duIGlzIGFybWVkIGZyb20gVENfUk9PVF9HUkFGVCBzbyB0ZWFyZG93bgomIzQzOwkgKiBmcm9tIHRoZSByZXBsYWNlZCBxZGlzYyBpcyBpZ25vcmVkIGFmdGVyIHRoZSBuZXcgY29uZmlndXJhdGlvbiBoYXMKJiM0MzsJICogcmVwcm9ncmFtbWVkIGhhcmR3YXJlIGFuZCBzZXQgbXFwcmlvX3JhdGVfbGltaXQuCiYjNDM7CSAqLwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3NraXBfdGVhcmRvd24pIHsKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZykgewomIzQzOwkJb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKG5ldGRldiwgTlVMTCk7CiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTa2lwIHRoZSBuZXRkZXYgcmVzdGFydCB3aGVuIG1xcHJpbyBvZmZsb2FkIHdhcyBub3QgYWN0aXZlLiAqLwomIzQzOwlpZiAoIWhhZF9tcXByaW8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpOwomIzQzOwomIzQzOwlpZiAoaWZfdXApIHsKJiM0MzsJCWVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KG5ldGRldiwgZmFsc2UpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBkb3duX2VycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQlzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gJmFtcDttcXByaW8tJmd0O3FvcHQ7CiYjNDM7CXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayA9IG1xcHJpby0mZ3Q7ZXh0YWNrOwomIzQzOwlib29sIHJlcGxhY2luZyA9IHBmdmYtJmd0O21xcHJpby5yYXRlX2xpbWl0OwomIzQzOwlib29sIGlmX3VwID0gbmV0aWZfcnVubmluZyhuZXRkZXYpOwomIzQzOwlpbnQgdGMsIHR4cSwgZXJyLCBpOwomIzQzOwomIzQzOwlpZiAoIXFvcHQtJmd0O2h3KQomIzQzOwkJcmV0dXJuIG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CiYjNDM7CWlmICghaWZfdXApIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O21xcHJpbzogc2V0dXAgcmVxdWlyZXMgaW50ZXJmYWNlIFVQJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChtcXByaW8tJmd0O3NoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XG4mIzM0OywgbXFwcmlvLSZndDtzaGFwZXIpOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssICYjMzQ7VW5zdXBwb3J0ZWQgbXFwcmlvIHNoYXBlciAlI3gmIzM0OywKJiM0MzsJCQkJICAgICAgIG1xcHJpby0mZ3Q7c2hhcGVyKTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsICZhbXA7cGZ2Zi0mZ3Q7aHcuY2FwX2ZsYWcpKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSJiM0MztQSVIgc3VwcG9ydFxuJiMzNDspOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUiYjNDM7UElSIHN1cHBvcnQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlzX290eDJfc2RwX3JlcChwZnZmLSZndDtwZGV2KSkgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXAmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG90eDJfcW9zX2h0Yl9hY3RpdmUocGZ2ZikpIHsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIEhUQiBpcyBhY3RpdmVcbiYjMzQ7KTsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7bXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZSYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGZ2Zi0mZ3Q7cGZjX2VuKSB7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwZnZmLSZndDt4ZHBfcHJvZykgewomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDttcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFhEUCBpcyBhY3RpdmUmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBtcXByaW8tJmd0O21heF9yYXRlW3RjXTsKJiM0MzsKJiM0MzsJCWlmIChtaW5fcmF0ZSAmYW1wOyZhbXA7IG1heF9yYXRlICZhbXA7JmFtcDsgbWluX3JhdGUgJmd0OyBtYXhfcmF0ZSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bWluX3JhdGUgJWxsdSBleGNlZWRzIG1heF9yYXRlICVsbHUgZm9yIHRjICVkJiMzNDssCiYjNDM7CQkJCQkgICAgICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkgewomIzQzOwkJCWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1pbl9yYXRlLAomIzQzOwkJCQkJCQkgICBxY291bnQsIHRjLCAmIzM0O21pbiYjMzQ7KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpIHsKJiM0MzsJCQllcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSwKJiM0MzsJCQkJCQkJICAgcWNvdW50LCB0YywgJiMzNDttYXgmIzM0Oyk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChtcXByaW8tJmd0O2ZsYWdzICZhbXA7IFRDX01RUFJJT19GX01JTl9SQVRFICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtaW5fcmF0ZSwKJiM0MzsJCQkJCQkJCSAgICAgICBxY291bnQpKSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O21xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcbiYjMzQ7LAomIzQzOwkJCQkgICBtaW5fcmF0ZSwgdGMpOwomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLAomIzQzOwkJCQkJICAgICAgICYjMzQ7bXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0cyYjMzQ7LAomIzQzOwkJCQkJICAgICAgIG1pbl9yYXRlLCB0Yyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NQVhfUkFURSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWF4X3JhdGUsCiYjNDM7CQkJCQkJCQkgICAgICAgcWNvdW50KSkpIHsKJiM0MzsJCQluZXRkZXZfZXJyKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IG1heF9yYXRlICVsbHUgZm9yIHRjICVkIGlzIG91dHNpZGUgaGFyZHdhcmUgbGltaXRzXG4mIzM0OywKJiM0MzsJCQkJICAgbWF4X3JhdGUsIHRjKTsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O21xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHMmIzM0OywKJiM0MzsJCQkJCSAgICAgICBtYXhfcmF0ZSwgdGMpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYocGZ2Zi0mZ3Q7bmV0ZGV2LCB0cnVlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CS8qIFRPRE86IEZhaWx1cmVzIGZyb20gaGVyZSB0aHJvdWdoIHRoZSBlbmQgb2YgaW5pdCgpIChlLmcuIC1FTk9NRU0KJiM0MzsJICogZnJvbSBvdHgyX21xcHJpb19hbGxvY19jYWNoZSgpLCBtYm94IGVycm9ycyBmcm9tCiYjNDM7CSAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSkKJiM0MzsJICogcmVhY2ggY2xlYW51cC4gT24gdGMgcWRpc2MgcmVwbGFjZSB0aGUgb2xkIG1xcHJpbyByZW1haW5zIGdyYWZ0ZWQsCiYjNDM7CSAqIHNvIGNsZWFudXAgcmV0dXJucyB3aXRob3V0IHJvbGxpbmcgYmFjayBuZXRkZXYgVEMgbWFwcGluZywgdGhlIHJhdGUKJiM0MzsJICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3IKJiM0MzsJICogY29uZmlndXJhdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgb3R4Ml9tcXByaW9fZG93bigpIGFuZCBib3VuY2luZyB0aGUKJiM0MzsJICogaW50ZXJmYWNlIGEgc2Vjb25kIHRpbWUuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBvdHgyX21xcHJpb19hbGxvY19jYWNoZShwZnZmKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gY2xlYW51cDsKJiM0MzsKJiM0MzsJLyogb3R4Ml9tcXByaW9fdXAoKSBtYXkgaGF2ZSByZXN0b3JlZCB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBkdXJpbmcKJiM0MzsJICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXcKJiM0MzsJICogbWFwcGluZyBzbyBxdWV1ZXMgZHJvcHBlZCBmcm9tIHRoZSBUQyBsYXlvdXQgZG8gbm90IGtlZXAgc3RhbGUKJiM0MzsJICogbGltaXRzIGluIGhhcmR3YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChwZnZmKSkgewomIzQzOwkJZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGNsZWFudXA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGZ2Zi0mZ3Q7bXFwcmlvLmZsYWdzID0gbXFwcmlvLSZndDtmbGFnczsKJiM0MzsKJiM0MzsJZm9yICh0YyA9IDA7IHRjICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyB0YyYjNDM7JiM0MzspIHsKJiM0MzsJCXU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDsKJiM0MzsJCXUzMiBxY291bnQgPSBxb3B0LSZndDtjb3VudFt0Y107CiYjNDM7CiYjNDM7CQkvKiBSYXRlcyBvbWl0dGVkIGZyb20gdGMgbXFwcmlvIGFyZSBwYXNzZWQgYXMgemVybyBhbmQgYm90aCBNRFEKJiM0MzsJCSAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZQomIzQzOwkJICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXFwcmlvLSZndDtmbGFncyAmYW1wOyBUQ19NUVBSSU9fRl9NSU5fUkFURSkKJiM0MzsJCQltaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby0mZ3Q7bWluX3JhdGVbdGNdLAomIzQzOwkJCQkJCQkgICAgICBxY291bnQpOwomIzQzOwkJaWYgKG1xcHJpby0mZ3Q7ZmxhZ3MgJmFtcDsgVENfTVFQUklPX0ZfTUFYX1JBVEUpCiYjNDM7CQkJbWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tJmd0O21heF9yYXRlW3RjXSwKJiM0MzsJCQkJCQkJICAgICAgcWNvdW50KTsKJiM0MzsKJiM0MzsJCWZvciAodHhxID0gcW9wdC0mZ3Q7b2Zmc2V0W3RjXTsKJiM0MzsJCSAgICAgdHhxICZsdDsgcW9wdC0mZ3Q7b2Zmc2V0W3RjXSAmIzQzOyBxY291bnQ7IHR4cSYjNDM7JiM0MzspIHsKJiM0MzsJCQluZXRkZXZfZGJnKG5ldGRldiwKJiM0MzsJCQkJICAgJiMzNDttcXByaW86IHRjICVkIHR4cSAlZCBtaW5fcmF0ZSAlbGx1IG1heF9yYXRlICVsbHVcbiYjMzQ7LAomIzQzOwkJCQkgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpOwomIzQzOwomIzQzOwkJCXBmdmYtJmd0O21xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7CiYjNDM7CQkJcGZ2Zi0mZ3Q7bXFwcmlvLm1heF9yYXRlW3R4cV0gPSBtYXhfcmF0ZTsKJiM0MzsKJiM0MzsJCQllcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwKJiM0MzsJCQkJCQkJICAgbWluX3JhdGUsIG1heF9yYXRlKTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X3NldF9udW1fdGMobmV0ZGV2LCBxb3B0LSZndDtudW1fdGMpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcW9wdC0mZ3Q7bnVtX3RjOyBpJiM0MzsmIzQzOykKJiM0MzsJCW5ldGRldl9zZXRfdGNfcXVldWUobmV0ZGV2LCBpLCBxb3B0LSZndDtjb3VudFtpXSwgcW9wdC0mZ3Q7b2Zmc2V0W2ldKTsKJiM0MzsKJiM0MzsJcW9wdC0mZ3Q7aHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7CiYjNDM7CiYjNDM7CWlmIChyZXBsYWNpbmcpCiYjNDM7CQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y2xlYW51cDoKJiM0MzsJLyogQ2xlYXIgaGFyZHdhcmUgb2ZmbG9hZCBvbiB0aGlzIHJlamVjdGVkIHJlcXVlc3Qgc28gYSBmYWlsZWQgcmVwbGFjZQomIzQzOwkgKiBkb2VzIG5vdCBsZWF2ZSB0YyByZXBvcnRpbmcgb2ZmbG9hZCBmb3IgZHJpdmVyIHN0YXRlIHRoYXQgd2FzIHRvcm4KJiM0MzsJICogZG93biB3aGlsZSB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZC4KJiM0MzsJICovCiYjNDM7CXFvcHQtJmd0O2h3ID0gMDsKJiM0MzsJaWYgKHJlcGxhY2luZykgewomIzQzOwkJb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKG5ldGRldiwgZXh0YWNrKTsKJiM0MzsJCXBmdmYtJmd0O21xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTsKJiM0MzsJCXJldHVybiBlcnIgPyBlcnIgOiAtRUlPOwomIzQzOwl9CiYjNDM7CW90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19yb290KHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHJvb3QtJmd0O2NvbW1hbmQpIHsKJiM0MzsJY2FzZSBUQ19ST09UX0dSQUZUOgomIzQzOwkJaWYgKHJvb3QtJmd0O2luZ3Jlc3MpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlpZiAocGZ2Zi0mZ3Q7bXFwcmlvX3JlcGxhY2VfcGVuZGluZykgewomIzQzOwkJCXBmdmYtJmd0O21xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsJCQlwZnZmLSZndDttcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh2b2lkICp0eXBlX2RhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhOwomIzQzOwlzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7CiYjNDM7CiYjNDM7CWlmIChiYXNlLSZndDt0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJY2FwcyA9IGJhc2UtJmd0O2NhcHM7CiYjNDM7CWNhcHMtJmd0O3ZhbGlkYXRlX3F1ZXVlX2NvdW50cyA9IHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLAogCQkgIHZvaWQgKnR5cGVfZGF0YSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBUQ19RVUVSWV9DQVBTOgomIzQzOwkJcmV0dXJuIG90eDJfc2V0dXBfdGNfcXVlcnlfY2Fwcyh0eXBlX2RhdGEpOwogCWNhc2UgVENfU0VUVVBfQkxPQ0s6CiAJCXJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTsKIAljYXNlIFRDX1NFVFVQX1FESVNDX0hUQjoKIAkJcmV0dXJuIG90eDJfc2V0dXBfdGNfaHRiKG5ldGRldiwgdHlwZV9kYXRhKTsKJiM0MzsJY2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpOwomIzQzOwljYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6CiYjNDM7CQlyZXR1cm4gb3R4Ml9zZXR1cF90Y19yb290KG5ldGRldl9wcml2KG5ldGRldiksIHR5cGVfZGF0YSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYwppbmRleCA2OWMwOTExZTI4ZTkxLi5jZjAwMjE3ODgzNTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jCkBAIC0xMTgsNiAmIzQzOzExOCw5IEBAIHN0YXRpYyB2b2lkIG90eDJfY29uZmlnX3NjaGVkX3NoYXBpbmcoc3RydWN0IG90eDJfbmljICpwZnZmLAogCS8qIGNvbmZpZ3VyZSBQSVIgKi8KIAltYXhyYXRlID0gKG5vZGUtJmd0O3JhdGUgJmd0OyBub2RlLSZndDtjZWlsKSA/IG5vZGUtJmd0O3JhdGUgOiBub2RlLSZndDtjZWlsOwogCiYjNDM7CS8qIDY1NTM2IGlzIHRoZSBrZXJuZWwtc2lkZSBkZWZhdWx0IGJ1cnN0IHdoZW4gSFRCIGRvZXMgbm90IHN1cHBseSBhbgomIzQzOwkgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLgomIzQzOwkgKi8KIAljZmctJmd0O3JlZ3ZhbFsqbnVtX3JlZ3NdID0KIAkJb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTsKIAkoKm51bV9yZWdzKSYjNDM7JiM0Mzs7CkBAIC0xNzI5LDExICYjNDM7MTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKQogCW90eDJfcW9zX3Jvb3RfZGVzdHJveShwZnZmKTsKIH0KIAomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpCiYjNDM7ewomIzQzOwlyZXR1cm4gb3R4Ml9zd19ub2RlX2ZpbmQocGZ2ZiwgT1RYMl9RT1NfUk9PVF9DTEFTU0lEKTsKJiM0Mzt9CiYjNDM7CiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpCiB7CiAJc3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHJlczsKIAomIzQzOwlpZiAocGZ2Zi0mZ3Q7bXFwcmlvLnJhdGVfbGltaXQgJmFtcDsmYW1wOwomIzQzOwkgICAgaHRiLSZndDtjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoaHRiLSZndDtleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJc3dpdGNoIChodGItJmd0O2NvbW1hbmQpIHsKIAljYXNlIFRDX0hUQl9DUkVBVEU6CiAJCXJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItJmd0O3BhcmVudF9jbGFzc2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oCmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmgKQEAgLTIzLDYgJiM0MzsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHsKIHU2NCBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwoc3RydWN0IG90eDJfbmljICpuaWMsIHU2NCBtYXhyYXRlLCB1MzIgYnVyc3QpOwogCiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpOwomIzQzO2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpOwogaW50IG90eDJfcW9zX2dldF9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmKTsKIHZvaWQgb3R4Ml9xb3NfZnJlZV9xaWQoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgcWlkeCk7CiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc0NAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBtcXByaW8gT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHNwZWNpZmljYWxseSBhZGRpbmcgTXVsdGktUXVldWUgUHJpb3JpdHkgKG1xcHJpbykgYmFuZHdpZHRoIG9mZmxvYWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0cyBhcmUgdGhhdCB0aGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiwgaW52b2x2aW5nIHRoZSB1c3VhbCBtb2RpZmljYXRpb25zIHRvIHNldHVwIGZ1bmN0aW9ucyBhbmQgb3RoZXIgTklDLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBjaGFuZ2VzIHRvIGBvdHgyX3NldHVwX3RjX21xcHJpb2AsIGBvdHgyX3NldHVwX3RjYCwgdGhlIFRYIHNjaGVkdWxlciBjb25maWd1cmF0aW9ucyAoYG90eDJfdHhzY2hxX2NvbmZpZ2AsIGBvdHgyX3R4c2NoX2FsbG9jYCksIERDQiBjb25maWd1cmF0aW9ucywgY2hhbm5lbCBzZXR1cCwgYW5kIGV2ZW4gWERQLXJlbGF0ZWQgZnVuY3Rpb25zLiBQcmV0dHkgc3RhbmRhcmQgZmFyZSBmb3IgZW5hYmxpbmcgYSBmZWF0dXJlIGxpa2UgdGhpcy4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBmb3IgV29ydGhGdXp6aW5nPWZhbHNlLiBUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyB0byBza2lwIHBhdGNoZXMgdGhhdCBhcmUgdmVuZG9yLXNwZWNpZmljIGNvZGUgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZS4gQW5kIGhlcmUsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBNYXJ2ZWxsIE9jdGVvblRYMi4gVGhhdCYjMzk7cyBhIGRlZGljYXRlZCBoYXJkd2FyZSBOSUMuIEl0JiMzOTtzIG5vdCBsaWtlIGl0JiMzOTtzIGEgZ2VuZXJpYyBOSUMgdGhhdCBRRU1VIGNvdWxkIGVhc2lseSBlbXVsYXRlLgoKU28gbXkga2V5IHF1ZXN0aW9uIGlzOiBJcyB0aGlzIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBraW5kcyBvZiBkZXZpY2VzLCBPY3Rlb25UWDIgKG9yIHJhdGhlciwgdGhlIFJWVSBvciBOSVggcGFydHMgb2YgaXQpIGlzIGFsbW9zdCBhbHdheXMgYSBwaHlzaWNhbCBOSUMgZm91bmQgaW4gTWFydmVsbCBTb0NzLiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGdvb2QgZW11bGF0aW9uIGZvciBpdCBpbiBzdGFuZGFyZCBRRU1VLCBiZWNhdXNlIG9mIGl0cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZGVzaWduLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdG8gY29uZmlybSB0aGlzIGFzc3VtcHRpb24uIElmIG15IG1lbW9yeSBpcyByaWdodCwgYW5kIHRoaXMgKmlzbiYjMzk7dCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlbiBJIHdpbGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhpcyBmYWxscyB1bmRlciB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHJ1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2N0ZW9udHgyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjg6I2RlZmluZSBERUJVR0ZTX0RJUl9OQU1FIFwmIzM0O29jdGVvbnR4MlwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTQwMTM9c3RhdGljIGNvbnN0IGNoYXIgKnJ2dV9nZXRfZGJnX2Rpcl9uYW1lKHN0cnVjdCBydnUgKnJ2dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTQwMjAtXHRlbHNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjQwMjE6XHRcdHJldHVybiBcJiMzNDtvY3Rlb250eDJcJiMzNDs7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTQwMjItfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZXZsaW5rLmMtMTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jOjE2OiNkZWZpbmUgRFJWX05BTUUgXCYjMzQ7b2N0ZW9udHgyLWFmXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZT0xOD1ydnVfbmljcGYtJChDT05GSUdfWEZSTV9PRkZMT0FEKSAmIzQzOz0gY24xMGtfaXBzZWMub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlLTE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL01ha2VmaWxlOjIwOmNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyY3RyZWUpL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTctI2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvc2lsaWNvbnMuaFx1MDAzZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6MTg6I2luY2x1ZGUgXHUwMDNjbGludXgvc29jL21hcnZlbGwvb2N0ZW9udHgyL2FzbS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvbWFjc2VjLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmM9MTExOD1zdGF0aWMgaW50IG90eDJfcW9zX3ZhbGlkYXRlX3F1YW50dW0oc3RydWN0IG90eDJfbmljICpwZnZmLCB1MzIgcXVhbnR1bSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMtMTEyMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYzoxMTIzOlx0LyogTWF4IFJvdW5kIHJvYmluIHdlaWdodCBzdXBwb3J0ZWQgYnkgb2N0ZW9udHgyIGFuZCBDTjEwS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjQtXHQgKiBpcyBkaWZmZXJlbnQuIFZhbGlkYXRlIGFjY29yZGluZ2x5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczODEKCQkJCQkJCW91dHB1dDogODIKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWFydmVsbCBPY3Rlb25UWDIgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBkcml2ZXIsIHRoZSBvbmUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCwgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBhIHBoeXNpY2FsLCBkZWRpY2F0ZWQgTmV0d29yayBJbnRlcmZhY2UgQ2FyZCAoTklDKS4gVGhpcyBpcyByZWFsLCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBBbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgaGVyZSwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSwgdGhpcyBkcml2ZXIgaXMgbm90IGEgZ29vZCBmaXQgZm9yIFdvcnRoRnV6emluZy4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgbWVudGlvbnMgZHJpdmVycyBpbiB0aGUgcmVhbG0gb2YgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHdoaWNoIGRlcGVuZCBvbiAqYWN0dWFsKiBQQ0llIGhhcmR3YXJlLCBub3QgdGhlIGVtdWxhdGVkIGtpbmQgeW91JiMzOTtkIGZpbmQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGlzIGRyaXZlciBkZWZpbml0ZWx5IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSSYjMzk7bSBzZWVpbmcgJiMzNDtwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VJiMzNDsgaW4gYm90aCB0aGUgZHJpdmVyIGNoYXJhY3RlcmlzdGljcyBhbmQgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYS4gVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0JiMzOTtzIGp1c3Qgbm90IGFwcHJvcHJpYXRlIGZvciB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDA5OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjowMi42MjI1MTM0NzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NjczODQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDA5OjUyOjAyLjYyMjUxODYzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4MzExNDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU0YzE3MDRiYWNmOGEyZmIzMDY5MmUxZTQ4N2VmMzVmNTRiYWE5Y2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMDk6NTI6MDAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXFxuaW5kZXggYjgxYzQ3ZWEwMjNiZS4uMjJmNjRjMWVkZTkxYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcXG5AQCAtMzMxLDggKzMzMSwxMiBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF90eHNjaHEoc3RydWN0IHJ2dSAqcnZ1LCBpbnQgYmxrYWRkcixcXG4gXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChtYXBfZnVuYyAhPSBwY2lmdW5jKVxcbitcXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xcbitcXHRcXHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInBjaWZ1bmMgJXggbWFwIHBjaWZ1bmMgJXggbm90IGVxdWFsLCBsdmw9JXUgc2NocT0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHBjaWZ1bmMsIG1hcF9mdW5jLCBsdmwsIHNjaHEpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5pbmRleCBjYTczYTk0ZGI3OTQzLi5iNmQ4ZWU3ZTJkNGMyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcXG5AQCAtNjE0LDYgKzYxNCwxNDIgQEAgdm9pZCBvdHgyX2dldF9tYWNfZnJvbV9hZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB9XFxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xcbiBcXG4rc3RhdGljIGludFxcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcXG4rXFx0XFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxcbitcXHRcXHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcXG4re1xcbitcXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFxcdTAwMjZwZnZmLVxcdTAwM2VtYm94O1xcbitcXHRzdHJ1Y3Qgbml4X3R4c2NocV9jb25maWcgKnJlcTtcXG4rXFx0aW50IGksIGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0cmVxLVxcdTAwM2VsdmwgPSBOSVhfVFhTQ0hfTFZMX01EUTtcXG4rXFx0cmVxLVxcdTAwM2VudW1fcmVncyA9IGNudDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ1tpXSA9IHJlZ19hZGRyW2ldO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtpXSA9IHJlZ192YWxbaV07XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHR1NjQgcmVnX3ZhbFtNQVhfUkVHU19QRVJfTUJPWF9NU0ddO1xcbitcXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGZ2Zi1cXHUwMDNlaHcudHhzY2hxX2NudFtOSVhfVFhTQ0hfTFZMX1NNUV07IGkrKykge1xcbitcXHRcXHRzbXEgPSBwZnZmLVxcdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XFxuK1xcbitcXHRcXHRyZWdfYWRkcltjbnRdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbY250XSA9IDA7XFxuK1xcdFxcdGNudCsrO1xcbitcXG4rXFx0XFx0cmVnX2FkZHJbY250XSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsW2NudF0gPSAwO1xcbitcXHRcXHRjbnQrKztcXG4rXFxuK1xcdFxcdGlmIChjbnQgXFx1MDAzYyBNQVhfUkVHU19QRVJfTUJPWF9NU0cgLSAxKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHRcXHRjbnQgPSAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoY250KSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBmYWlsO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rZmFpbDpcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHRcXHQgaW50IHR4cSwgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKVxcbit7XFxuK1xcdHN0cnVjdCBtYm94ICptYm94ID0gXFx1MDAyNnBmdmYtXFx1MDAzZW1ib3g7XFxuK1xcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xcbitcXHRpbnQgZXJyLCBzbXEsIG4gPSAwO1xcbitcXHR1NjQgcmVnX2FkZHJbMl07XFxuK1xcdHU2NCByZWdfdmFsWzJdO1xcbitcXHR1NjQgcmF0ZTtcXG4rXFxuK1xcdGlmICghbWF4cmF0ZSBcXHUwMDI2XFx1MDAyNiAhbWlucmF0ZSkge1xcbitcXHRcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcdFxcdHJlZ19hZGRyWzBdID0gTklYX0FGX01EUVhfUElSKHNtcSk7XFxuK1xcdFxcdHJlZ192YWxbMF0gPSAwO1xcbitcXHRcXHRyZWdfYWRkclsxXSA9IE5JWF9BRl9NRFFYX0NJUihzbXEpO1xcbitcXHRcXHRyZWdfdmFsWzFdID0gMDtcXG4rXFx0XFx0cmV0dXJuIG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgMiwgcmVnX2FkZHIsIHJlZ192YWwpO1xcbitcXHR9XFxuK1xcbitcXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmVxID0gb3R4Ml9tYm94X2FsbG9jX21zZ19uaXhfdHhzY2hxX2NmZyhtYm94KTtcXG4rXFx0aWYgKCFyZXEpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZtYm94LVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XFxuK1xcbitcXHQvKiBNUVBSSU8gZXhwb3NlcyBvbmx5IG1pbi9tYXggcmF0ZSwgbm90IGJ1cnN0LiAgUGFzcyBidXJzdCAwIHNvXFxuK1xcdCAqIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoKSBwcm9ncmFtbWVzIHRoZSBsYXJnZXN0IGJ1cnN0IHRoZSBOSVhcXG4rXFx0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xcbitcXHQgKiBmcm9tIHRoZSA2NTUzNiBieXRlIGRlZmF1bHQgdXNlZCBpbiB0aGUgSFRCIHBhdGgsIHdoaWNoIGlzIGFcXG4rXFx0ICoga2VybmVsLXNpZGUgZGVmYXVsdCB3aGVuIG5vIGV4cGxpY2l0IGJ1cnN0IGlzIGNvbmZpZ3VyZWQsIG5vdCBhXFxuK1xcdCAqIGhhcmR3YXJlIGNhcC5cXG4rXFx0ICpcXG4rXFx0ICogbXFwcmlvIHNldHVwIHJlc3RhcnRzIHRoZSBuZXRkZXYgKG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KSxcXG4rXFx0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cXG4rXFx0ICogZXZlcnkgdXBkYXRlIHNvIG9taXR0ZWQgcmF0ZXMgYXJlIGFwcGxpZWQgZXhwbGljaXRseSByYXRoZXIgdGhhblxcbitcXHQgKiByZWx5aW5nIG9uIHN0YWxlIGhhcmR3YXJlIHN0YXRlLlxcbitcXHQgKi9cXG4rXFx0cmVxLVxcdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcXG4rXFx0aWYgKG1heHJhdGUpIHtcXG4rXFx0XFx0cmF0ZSA9IG90eDJfY29udmVydF9yYXRlKG1heHJhdGUpO1xcbitcXHRcXHRyZXEtXFx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSAwO1xcbitcXHR9XFxuK1xcdG4rKztcXG4rXFxuK1xcdC8qIENJUitQSVIgc3VwcG9ydCBpcyByZXF1aXJlZCBhbmQgY2hlY2tlZCBhdCBtcXByaW8gc2V0dXAuICovXFxuK1xcdHJlcS1cXHUwMDNlcmVnW25dID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XFxuK1xcdGlmIChtaW5yYXRlKSB7XFxuK1xcdFxcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcXG4rXFx0XFx0cmVxLVxcdTAwM2VyZWd2YWxbbl0gPSBvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgcmF0ZSwgMCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJlcS1cXHUwMDNlcmVndmFsW25dID0gMDtcXG4rXFx0fVxcbitcXHRuKys7XFxuK1xcdHJlcS1cXHUwMDNlbnVtX3JlZ3MgPSBuO1xcbitcXG4rXFx0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2Zvcl9wZmMpXFxuIHtcXG4gXFx0dTE2ICgqc2NocV9saXN0KVtNQVhfVFhTQ0hRX1BFUl9GVU5DXTtcXG5AQCAtNjUwLDcgKzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxcbiBcXHRcXHRcXHRcXHRcXHRcXHQodTY0KWh3LVxcdTAwM2VzbXFfbGlua190eXBlKTtcXG4gXFx0XFx0cmVxLVxcdTAwM2VudW1fcmVncysrO1xcbiBcXHRcXHQvKiBNRFEgY29uZmlnICovXFxuLVxcdFxcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCkge1xcbitcXHRcXHRcXHQvKiBUT0RPOiBQcm9ncmFtIE5JWF9BRl9UTDRYX1RPUE9MT0dZIG9uIFRMNFswXS4gTVFQUklPXFxuK1xcdFxcdFxcdCAqIHBhcmVudHMgZXZlcnkgTURRIHVuZGVyIHRoZSBzYW1lIFRMNCB3aXRoIHNjaGVkdWxlXFxuK1xcdFxcdFxcdCAqIHByaW9yaXR5IDAsIHNvIHNpYmxpbmcgYXJiaXRyYXRpb24gZGVwZW5kcyBvbiB0aGUgVEw0XFxuK1xcdFxcdFxcdCAqIHRvcG9sb2d5IHJlZ2lzdGVyLiBPbmx5IHRoZSBIVEIgcGF0aCBwcm9ncmFtcyB0aGlzXFxuK1xcdFxcdFxcdCAqIHRvZGF5IGFuZCB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLFxcbitcXHRcXHRcXHQgKiBzbyBhIFRMNCByZXVzZWQgYWZ0ZXIgSFRCIHRlYXJkb3duIGNhbiByZXRhaW4gc3RhbGVcXG4rXFx0XFx0XFx0ICogUlJfUFJJTy9QUklPX0FOQ0hPUiBhbmQgc3RhcnZlIHNvbWUgVFggcXVldWVzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVswXTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cGFyZW50ID0gc2NocV9saXN0W05JWF9UWFNDSF9MVkxfVEw0XVtwcmlvXTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0cmVxLVxcdTAwM2VyZWdbMV0gPSBOSVhfQUZfTURRWF9QQVJFTlQoc2NocSk7XFxuIFxcdFxcdHJlcS1cXHUwMDNlcmVndmFsWzFdID0gcGFyZW50IFxcdTAwM2NcXHUwMDNjIDE2O1xcbiBcXHRcXHRyZXEtXFx1MDAzZW51bV9yZWdzKys7XFxuQEAgLTc3OCw2ICs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuIFxcdFxcdHJlcS1cXHUwMDNlc2NocVtOSVhfVFhTQ0hfTFZMX1RMNF0gPSBjaGFuX2NudDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXEtXFx1MDAzZXNjaHFbTklYX1RYU0NIX0xWTF9TTVFdID0gcGZ2Zi1cXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XFxuK1xcbiBcXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcXHUwMDI2cGZ2Zi1cXHUwMDNlbWJveCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXFxuQEAgLTQ4Myw2ICs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcXG4gXFx0aW50IG1kZXZzO1xcbiB9O1xcbiBcXG4rc3RydWN0IG90eDJfbXFwcmlvIHtcXG4rXFx0dTMyXFx0ZmxhZ3M7XFxuK1xcdHU2NFxcdCptaW5fcmF0ZTtcXG4rXFx0dTY0XFx0Km1heF9yYXRlO1xcbitcXHRib29sXFx0cmF0ZV9saW1pdDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHZvaWQgX19pb21lbVxcdFxcdCpyZWdfYmFzZTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqbmV0ZGV2O1xcbkBAIC01MTUsNiArNTIyLDEwIEBAIHN0cnVjdCBvdHgyX25pYyB7XFxuIFxcdHU2NFxcdFxcdFxcdGZsYWdzO1xcbiBcXHR1NjRcXHRcXHRcXHQqY3Ffb3BfYWRkcjtcXG4gXFxuK1xcdHN0cnVjdCBvdHgyX21xcHJpb1xcdG1xcHJpbztcXG4rXFx0Ym9vbFxcdFxcdFxcdG1xcHJpb19yZXBsYWNlX3BlbmRpbmc7XFxuK1xcdGJvb2xcXHRcXHRcXHRtcXByaW9fc2tpcF90ZWFyZG93bjtcXG4rXFxuIFxcdHN0cnVjdCBicGZfcHJvZ1xcdFxcdCp4ZHBfcHJvZztcXG4gXFx0c3RydWN0IG90eDJfcXNldFxcdHFzZXQ7XFxuIFxcdHN0cnVjdCBvdHgyX2h3XFx0XFx0aHc7XFxuQEAgLTEyNDYsNiArMTI1NywxMSBAQCBkbWFfYWRkcl90IG90eDJfZG1hX21hcF9za2JfZnJhZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2VnLCBpbnQgKmxlbik7XFxuIHZvaWQgb3R4Ml9kbWFfdW5tYXBfc2tiX2ZyYWdzKHN0cnVjdCBvdHgyX25pYyAqcGZ2Ziwgc3RydWN0IHNnX2xpc3QgKnNnKTtcXG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLCBpbnQgdHhxLFxcbitcXHRcXHRcXHRcXHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcXG4raW50IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcXG4gdm9pZCBvdHgyX3F1ZXVlX3ZmX3dvcmsoc3RydWN0IG1ib3ggKm13LCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWJveF93cSxcXG4gXFx0XFx0XFx0aW50IGZpcnN0LCBpbnQgbWRldnMsIHU2NCBpbnRyKTtcXG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbmluZGV4IGYxMTBkZmE0MjM2MDUuLjRhNzBhYmMyMzBiZWEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmNcXG5AQCAtNDEzLDYgKzQxMywxMiBAQCBzdGF0aWMgaW50IG90eDJfZGNibmxfaWVlZV9zZXRwZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfcGZjICpwZmMpXFxuIFxcdHU4IG9sZF9wZmNfZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQgXFx1MDAyNlxcdTAwMjYgcGZjLVxcdTAwM2VwZmNfZW4pIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJQRkM6IGNhbm5vdCBlbmFibGUgd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0b2xkX3BmY19lbiA9IHBmdmYtXFx1MDAzZXBmY19lbjtcXG4gXFx0cGZ2Zi1cXHUwMDNlcGZjX2VuID0gcGZjLVxcdTAwM2VwZmNfZW47XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2V0aHRvb2wuY1xcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKGNoYW5uZWwtXFx1MDAzZXR4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxcbitcXHQgICAgIGNoYW5uZWwtXFx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXFx1MDAzZWh3LnJ4X3F1ZXVlcykpIHtcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIGNoYW5uZWwgY291bnQgd2hpbGUgTVEgcHJpbyBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKGlmX3VwKVxcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zdG9wKGRldik7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcXG5AQCAtMTk4MCw2ICsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfZnJlZV9tZW07XFxuIFxcbitcXHQvKiBUT0RPOiBvdHgyX21xcHJpb191cCgpIGZhaWx1cmUgaGVyZSBhYm9ydHMgdGhlIGVudGlyZSBuZG9fb3BlbigpXFxuK1xcdCAqIHBhdGggZXZlbiB0aG91Z2ggbXFwcmlvX3JhdGVfbGltaXQgYW5kIHRoZSByYXRlIGNhY2hlIHJlbWFpbiBzZXQuXFxuK1xcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXFxuK1xcdCAqIGNhbiBsZWF2ZSB0aGUgaW50ZXJmYWNlIHN0dWNrIGRvd24gdW50aWwgdGhlIHFkaXNjIGlzIHJlbW92ZWQgYW5kXFxuK1xcdCAqIHJlYXBwbGllZC5cXG4rXFx0ICovXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX3VwKHBmKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9odztcXG4rXFxuIFxcdC8qIFJlZ2lzdGVyIE5BUEkgaGFuZGxlciAqL1xcbiBcXHRmb3IgKHFpZHggPSAwOyBxaWR4IFxcdTAwM2MgcGYtXFx1MDAzZWh3LmNpbnRfY250OyBxaWR4KyspIHtcXG4gXFx0XFx0Y3FfcG9sbCA9IFxcdTAwMjZxc2V0LVxcdTAwM2VuYXBpW3FpZHhdO1xcbkBAIC0yMTQwLDYgKzIxNTAsNyBAQCBpbnQgb3R4Ml9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdGZyZWVfaXJxKHZlYywgcGYpO1xcbiBlcnJfZGlzYWJsZV9uYXBpOlxcbiBcXHRvdHgyX2Rpc2FibGVfbmFwaShwZik7XFxuK2Vycl9mcmVlX2h3OlxcbiBcXHRvdHgyX2ZyZWVfaHdfcmVzb3VyY2VzKHBmKTtcXG4gZXJyX2ZyZWVfbWVtOlxcbiBcXHRvdHgyX2ZyZWVfcXVldWVfbWVtKHFzZXQpO1xcbkBAIC0yODQ2LDYgKzI4NTcsMTIgQEAgc3RhdGljIGludCBvdHgyX3hkcF9zZXR1cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuIFxcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKHBmLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nO1xcbiBcXG4rXFx0aWYgKHByb2cgXFx1MDAyNlxcdTAwMjYgcGYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiWERQOiBjYW5ub3QgYXR0YWNoIHdoaWxlIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZCBpcyBhY3RpdmVcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChwcm9nIFxcdTAwMjZcXHUwMDI2IGRldi1cXHUwMDNlbXR1IFxcdTAwM2UgTUFYX1hEUF9NVFUpIHtcXG4gXFx0XFx0bmV0ZGV2X3dhcm4oZGV2LCBcXFwiSnVtYm8gZnJhbWVzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggWERQXFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbmluZGV4IDAzOWZkNDdlYmY1MjIuLmZjOTY3N2UzNDA2NTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcXG5AQCAtMTYsNiArMTYsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwdjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9wa3Rfc2NoZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcImNuMTBrLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJvdHgyX2NvbW1vbi5oXFxcIlxcbkBAIC0zMSw2ICszMywxMCBAQFxcbiBcXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFxcdFxcdCgtMVUpXFxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXFx0XFx0OFxcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cXG4rI2RlZmluZSBPVFgyX01RUFJJT19NSU5fUkFURV9CWVRFU19QU1xcdDI1MDAwMFVMTFxcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXFxuKyNkZWZpbmUgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFNcXHQoKE1BWF9CVVJTVF9TSVpFICogMTAwMDAwMFVMTCkgLyA4VUxMKVxcbiBcXG4gc3RhdGljIHZvaWQgb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZyhzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTMyIGJ1cnN0LFxcbiBcXHRcXHRcXHRcXHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcXG5AQCAtNjEsNiArNjcsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXFxuIFxcdFxcdFxcdCpidXJzdF9tYW50aXNzYSA9IHRtcCAvICgxVUxMIFxcdTAwM2NcXHUwMDNjICgqYnVyc3RfZXhwIC0gNykpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxcbitcXHRcXHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xcbiBcXHRcXHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XFxuIFxcdH1cXG5AQCAtMTYwMCwxNCArMTYwOSw1OTYgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xcbiB9XFxuIFxcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fZnJlZV9jYWNoZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0ZGV2bV9rZnJlZShwZnZmLVxcdTAwM2VkZXYsIHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XFxuK1xcdGRldm1fa2ZyZWUocGZ2Zi1cXHUwMDNlZGV2LCBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUpO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUgPSBOVUxMO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHR1MTYgbnVtX3R4cSA9IHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzO1xcbitcXG4rXFx0LyogVE9ETzogb3R4Ml9tcXByaW9fZnJlZV9jYWNoZSgpIGhlcmUgZHJvcHMgdGhlIGNvbW1pdHRlZCByYXRlIGNhY2hlXFxuK1xcdCAqIG9uIHRjIHFkaXNjIHJlcGxhY2UgYmVmb3JlIHRoZSBuZXcgbWFwcGluZyBpcyBjb21wbGV0ZS4gU3RhZ2UgdGhlXFxuK1xcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cXG4rXFx0ICogYSBmYWlsdXJlIGFmdGVyIG5ldGRldiByZXN0YXJ0IGNhbiByb2xsIGJhY2sgZnJvbSB0aGUgcHJpb3IgY2FjaGUuXFxuK1xcdCAqL1xcbitcXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xcbitcXG4rXFx0cGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlID0gZGV2bV9rY2FsbG9jKHBmdmYtXFx1MDAzZWRldiwgbnVtX3R4cSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKnBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVxcdTAwM2VkZXYsIG51bV90eHEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKCpwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGUpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZSB8fCAhcGZ2Zi1cXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZilcXG4re1xcbitcXHRpbnQgbHZsLCBpZHg7XFxuK1xcbitcXHRmb3IgKGx2bCA9IDA7IGx2bCBcXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xcbitcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3LnR4c2NocV9jbnRbbHZsXTsgaWR4KyspIHtcXG4rXFx0XFx0XFx0aWYgKHBmdmYtXFx1MDAzZWh3LnR4c2NocV9saXN0W2x2bF1baWR4XSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbisvKiBUZWFyIGRvd24gbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkOiBjbGVhciBwZXItcXVldWUgc2hhcGVycyxcXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cXG4rICogZXhwbGljaXQgbXFwcmlvIHRlYXJkb3duICh0YyBxZGlzYyBkZWwpIGFuZCBlcnJvciBjbGVhbnVwLCBub3Qgb25cXG4rICogcm91dGluZSBuZXRkZXYgc3RvcC9vcGVuIGN5Y2xlcyB3aGVyZSB0aGUgb2ZmbG9hZCBzdGF5cyBhY3RpdmUuXFxuKyAqL1xcbitpbnQgb3R4Ml9tcXByaW9fZG93bihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRpZiAoIXBmdmYtXFx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFxuK1xcdC8qIFRPRE86IG1xcHJpb19kb3duKCkgY2xlYXJzIG1xcHJpb19yYXRlX2xpbWl0LCBuZXRkZXYgVEMgbWFwcGluZ3MsXFxuK1xcdCAqIGFuZCB0aGUgcmF0ZSBjYWNoZSBldmVuIHdoZW4gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgZmFpbHNcXG4rXFx0ICogcGFydHdheSB0aHJvdWdoIHRoZSBNRFEgYmF0Y2guIFNvZnR3YXJlIHRoZW4gcmVwb3J0cyBvZmZsb2FkIGFzXFxuK1xcdCAqIGluYWN0aXZlIHdoaWxlIHNvbWUgcXVldWVzIG1heSByZXRhaW4gcHJvZ3JhbW1lZCBDSVIvUElSLCBzbyBhIGxhdGVyXFxuK1xcdCAqIG1xcHJpb191cCgpIG9yIHJlLXNldHVwIGNhbiBzaGFwZSB3aXRoIHRoZSB3cm9uZyBlZmZlY3RpdmUgcmF0ZXMuXFxuK1xcdCAqL1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdHBmdmYtXFx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgMCk7XFxuK1xcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVxcdTAwM2VuZXRkZXY7XFxuK1xcdGludCB0eHEsIGVycjtcXG4rXFxuK1xcdGlmICghcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwZnZmLVxcdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRmb3IgKHR4cSA9IDA7IHR4cSBcXHUwMDNjIHBmdmYtXFx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xcbitcXHRcXHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XFxuK1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvLmZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV07XFxuK1xcdFxcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBwZnZmLVxcdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcXG4rXFxuK1xcdFxcdGlmICghbWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgIW1heF9yYXRlKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIocGZ2ZiwgdHhxLCBtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbWF4X3JhdGUpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBmYWlsZWQgdG8gcmVzdG9yZSBzaGFwZXIgZm9yIHR4cSAlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHR4cSwgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogUmVzdGFydCB0aGUgbmV0ZGV2IHRvIHJlcHJvZ3JhbSB0aGUgVFggc2NoZWR1bGVyIGhpZXJhcmNoeSBmb3IgbXFwcmlvXFxuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxcbisgKiB0YWtlIHRoaXMgcGF0aCB2aWEgbmRvX3N0b3AoKS9uZG9fb3BlbigpIHNvIFZGLXNwZWNpZmljIG9wZW4gbG9naWMgKGUuZy5cXG4rICogTEJLIGNhcnJpZXIgb24pIHJ1bnMgY29ycmVjdGx5LiAgVGhlIGZ1bGwgc3RvcC9vcGVuIGN5Y2xlIGNsZWFyc1xcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XFxuKyAqIHRyYWZmaWMuICBJZiBvcGVuIGZhaWxzLCB0aGUgaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duXFxuKyAqIHdpdGhvdXQgY2FsbGluZyBuZG9fc3RvcCgpIGFnYWluIG9uIHJlc291cmNlcyBhbHJlYWR5IHRvcm4gZG93biBieVxcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxcbisgKi9cXG4rc3RhdGljIGludCBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIHJhdGVfbGltaXQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHM7XFxuK1xcdGJvb2wgdXAgPSBuZXRkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0LyogVE9ETzogRXZlcnkgbXFwcmlvIGFkZCwgcmVwbGFjZSwgYW5kIGRlbGV0ZSBydW5zIGEgZnVsbCBuZG9fc3RvcCgpL1xcbitcXHQgKiBuZG9fb3BlbigpIGN5Y2xlIChjYXJyaWVyIGRyb3AsIElSUS9OQVBJIHRlYXJkb3duLCBpbi1mbGlnaHQgdHJhZmZpY1xcbitcXHQgKiBsb3NzKSB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlci4gSWYgbmRvX29wZW4oKSBmYWlscyB0aGVcXG4rXFx0ICogaW50ZXJmYWNlIGlzIGxlZnQgYWRtaW5pc3RyYXRpdmVseSBkb3duIChPVFgyX0ZMQUdfSU5URl9ET1dOKSB1bnRpbFxcbitcXHQgKiBtYW51YWwgcmVjb3ZlcnkuIEV4cGxvcmUgbGl2ZSByZXByb2dyYW1taW5nIHdpdGhvdXQgYm91bmNpbmcgdGhlXFxuK1xcdCAqIG5ldGRldi5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9pbmZvKG5ldGRldixcXG4rXFx0XFx0ICAgIFxcXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAodXApXFxuK1xcdFxcdGRldl9kZWFjdGl2YXRlKG5ldGRldiwgdHJ1ZSk7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zdG9wKG5ldGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gb3V0X2FjdGl2YXRlO1xcbitcXG4rXFx0LyogU2V0IGJlZm9yZSBuZG9fb3BlbigpIHNvIG90eDJfdHhzY2hfYWxsb2MoKSB3aWRlbnMgU01RIGFsbG9jYXRpb24uICovXFxuK1xcdGlmIChyYXRlX2xpbWl0KVxcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IHRydWU7XFxuK1xcbitcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19vcGVuKG5ldGRldik7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aW50IGRvd25fZXJyO1xcbitcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gcmVzdGFydCBkZXZpY2UgYWZ0ZXIgbXFwcmlvIGNoYW5nZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFx0XFx0aWYgKGRvd25fZXJyKVxcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGRvd25fZXJyKTtcXG4rXFx0XFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXFxuK1xcdFxcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxcbitcXHRcXHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlZmxhZ3MgfD0gT1RYMl9GTEFHX0lOVEZfRE9XTjtcXG4rXFx0XFx0LyogdmlzaWJsZSB0byBvdHgyX3N0b3AoKSBvbiBvdGhlciBjcHVzICovXFxuK1xcdFxcdHNtcF93bWIoKTtcXG4rXFx0XFx0bmV0aWZfY2xvc2UobmV0ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rb3V0X2FjdGl2YXRlOlxcbitcXHRpZiAodXAgXFx1MDAyNlxcdTAwMjYgIWVycilcXG4rXFx0XFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxcbit7XFxuK1xcdGlmICghcmF0ZSB8fCBxY291bnQgXFx1MDAzYz0gMSlcXG4rXFx0XFx0cmV0dXJuIHJhdGU7XFxuK1xcbitcXHRyZXR1cm4gZGl2X3U2NChyYXRlLCBxY291bnQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcmF0ZSwgdTMyIHFjb3VudCwgaW50IHRjLFxcbitcXHRcXHRcXHRcXHRcXHRjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGlmICghcmF0ZSB8fCBxY291bnQgXFx1MDAzYz0gMSB8fCByYXRlIFxcdTAwM2U9IHFjb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0ICAgXFxcIm1xcHJpbzogJXMgcmF0ZSAlbGx1IGZvciB0YyAlZCB0b28gc21hbGwgZm9yICV1IHF1ZXVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XFxuK1xcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogJXMgcmF0ZSAlbGx1IGZvciB0YyAlZCB0b28gc21hbGwgZm9yICV1IHF1ZXVlc1xcXCIsXFxuK1xcdFxcdFxcdCAgICAgICBuYW1lLCByYXRlLCB0YywgcWNvdW50KTtcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQpXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0dTE2IG51bV90eHEgPSBwZnZmLVxcdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcXG4rXFx0aW50IHRjLCB0eHE7XFxuK1xcbitcXHRpZiAocW9wdC1cXHUwMDNlbnVtX3RjIFxcdTAwM2UgbnVtX3R4cSkge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIk51bWJlciBvZiBUQ3MgKCV1KSBleGNlZWRzIGh3IHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgcW9wdC1cXHUwMDNlbnVtX3RjLCBudW1fdHhxKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHFvcHQtXFx1MDAzZW51bV90YywgbnVtX3R4cSk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobnVtX3R4cSBcXHUwMDNlIE1BWF9UWFNDSFFfUEVSX0ZVTkMpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgbnVtX3R4cSwgTUFYX1RYU0NIUV9QRVJfRlVOQyk7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIk51bWJlciBvZiBxdWV1ZXMgKCV1KSBleGNlZWRzIG1heCBzY2hlZHVsZXIgcXVldWVzICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHUzMiBxY291bnQgPSBxb3B0LVxcdTAwM2Vjb3VudFt0Y107XFxuK1xcbitcXHRcXHRmb3IgKHR4cSA9IHFvcHQtXFx1MDAzZW9mZnNldFt0Y107XFxuK1xcdFxcdCAgICAgdHhxIFxcdTAwM2MgcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcXG4rXFx0XFx0XFx0aWYgKHR4cSBcXHUwMDNlPSBudW1fdHhxKSB7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICB0eHEsIG51bV90eHEpO1xcbitcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgdHhxLCBudW1fdHhxKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgb3R4Ml9tcXByaW9fcmF0ZV92YWxpZCh1NjQgcmF0ZV9ieXRlc19wcylcXG4re1xcbitcXHR1NjQgbWJwcztcXG4rXFxuK1xcdGlmICghcmF0ZV9ieXRlc19wcylcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIE9UWDJfTVFQUklPX01BWF9SQVRFX0JZVEVTX1BTKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmF0ZV9ieXRlc19wcyBcXHUwMDNlIGRpdl91NjQoVTY0X01BWCwgOCkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdG1icHMgPSBvdHgyX2NvbnZlcnRfcmF0ZShyYXRlX2J5dGVzX3BzKTtcXG4rXFx0cmV0dXJuIGlsb2cyKG1icHMgLyAyKSBcXHUwMDNjPSBNQVhfUkFURV9FWFBPTkVOVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb3R4Ml9tcXByaW9fcmVwbGFjZV9mYWlsZWRfbXNnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHQvKiBUT0RPOiBPbiBmYWlsZWQgdGMgcWRpc2MgcmVwbGFjZSByZXN0b3JlIHRoZSBwcmlvciByYXRlIGNhY2hlLFxcbitcXHQgKiBuZXRkZXYgVEMgbWFwcGluZywgYW5kIGhhcmR3YXJlIHNoYXBlcnMgZnJvbSBhIHNuYXBzaG90IHRha2VuIGJlZm9yZVxcbitcXHQgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZVxcbitcXHQgKiB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgdGhlIGdyYWZ0ZWQgcm9vdCBxZGlzYy5cXG4rXFx0ICovXFxuK1xcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHQgICBcXFwibXFwcmlvOiByZXBsYWNlIGZhaWxlZDsgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSwgb2xkIG1xcHJpbyBzdGlsbCByb290XFxcXG5cXFwiKTtcXG4rXFx0aWYgKGV4dGFjaylcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcXG4re1xcbitcXHRib29sIGhhZF9tcXByaW8gPSBwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdDtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXFx1MDAzZW5ldGRldjtcXG4rXFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcXG4rXFx0aW50IGRvd25fZXJyLCBlcnI7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IDA7XFxuK1xcbitcXHQvKiB0YyBxZGlzYyByZXBsYWNlIGdyYWZ0cyB0aGUgbmV3IG1xcHJpbyBiZWZvcmUgZGVzdHJveWluZyB0aGUgb2xkXFxuK1xcdCAqIG9uZS4gbXFwcmlvX3NraXBfdGVhcmRvd24gaXMgYXJtZWQgZnJvbSBUQ19ST09UX0dSQUZUIHNvIHRlYXJkb3duXFxuK1xcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xcbitcXHQgKiByZXByb2dyYW1tZWQgaGFyZHdhcmUgYW5kIHNldCBtcXByaW9fcmF0ZV9saW1pdC5cXG4rXFx0ICovXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93bikge1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IGZhbHNlO1xcbitcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xcbitcXHRcXHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBOVUxMKTtcXG4rXFx0XFx0cGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cXG4rXFx0aWYgKCFoYWRfbXFwcmlvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGRvd25fZXJyID0gb3R4Ml9tcXByaW9fZG93bihwZnZmKTtcXG4rXFxuK1xcdGlmIChpZl91cCkge1xcbitcXHRcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihuZXRkZXYsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGRvd25fZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfbXFwcmlvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB0Y19tcXByaW9fcW9wdF9vZmZsb2FkICptcXByaW8pXFxuK3tcXG4rXFx0c3RydWN0IG90eDJfbmljICpwZnZmID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXFx1MDAyNm1xcHJpby1cXHUwMDNlcW9wdDtcXG4rXFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrID0gbXFwcmlvLVxcdTAwM2VleHRhY2s7XFxuK1xcdGJvb2wgcmVwbGFjaW5nID0gcGZ2Zi1cXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XFxuK1xcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XFxuK1xcdGludCB0YywgdHhxLCBlcnIsIGk7XFxuK1xcbitcXHRpZiAoIXFvcHQtXFx1MDAzZWh3KVxcbitcXHRcXHRyZXR1cm4gb3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFxuK1xcdGlmICghaWZfdXApIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChtcXByaW8tXFx1MDAzZXNoYXBlciAhPSBUQ19NUVBSSU9fU0hBUEVSX0JXX1JBVEUpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFxcXFxuXFxcIiwgbXFwcmlvLVxcdTAwM2VzaGFwZXIpO1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXFxcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIG1xcHJpby1cXHUwMDNlc2hhcGVyKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFxcdTAwMjZwZnZmLVxcdTAwM2Vody5jYXBfZmxhZykpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIHJlcXVpcmVzIENJUitQSVIgc3VwcG9ydFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChpc19vdHgyX3NkcF9yZXAocGZ2Zi1cXHUwMDNlcGRldikpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGJhbmR3aWR0aCBvZmZsb2FkIG5vdCBzdXBwb3J0ZWQgb24gU0RQIHJlcFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvdHgyX3Fvc19odGJfYWN0aXZlKHBmdmYpKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgSFRCIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXBmY19lbikge1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogY2Fubm90IGVuYWJsZSBvZmZsb2FkIHdoaWxlIFBGQyBpcyBlbmFibGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBmdmYtXFx1MDAzZXhkcF9wcm9nKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBYRFAgaXMgYWN0aXZlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXFxuK1xcdFxcdFxcdG1pbl9yYXRlID0gbXFwcmlvLVxcdTAwM2VtaW5fcmF0ZVt0Y107XFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUpXFxuK1xcdFxcdFxcdG1heF9yYXRlID0gbXFwcmlvLVxcdTAwM2VtYXhfcmF0ZVt0Y107XFxuK1xcbitcXHRcXHRpZiAobWluX3JhdGUgXFx1MDAyNlxcdTAwMjYgbWF4X3JhdGUgXFx1MDAyNlxcdTAwMjYgbWluX3JhdGUgXFx1MDAzZSBtYXhfcmF0ZSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1pbl9yYXRlICVsbHUgZXhjZWVkcyBtYXhfcmF0ZSAlbGx1IGZvciB0YyAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChtcXByaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHFjb3VudCwgdGMsIFxcXCJtaW5cXFwiKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX21xcHJpb192YWxpZGF0ZV90Y19yYXRlKG5ldGRldiwgZXh0YWNrLCBtYXhfcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgcWNvdW50LCB0YywgXFxcIm1heFxcXCIpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobXFwcmlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtaW5fcmF0ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHFjb3VudCkpKSB7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBcXFwibXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXFwibXFwcmlvOiBtaW5fcmF0ZSAlbGx1IGZvciB0YyAlZCBpcyBvdXRzaWRlIGhhcmR3YXJlIGxpbWl0c1xcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBtaW5fcmF0ZSwgdGMpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIW90eDJfbXFwcmlvX3JhdGVfdmFsaWQob3R4Ml9tcXByaW9fcGVyX3F1ZXVlX3JhdGUobWF4X3JhdGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBxY291bnQpKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIG1heF9yYXRlLCB0Yyk7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFxcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbWF4X3JhdGUsIHRjKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdHhxcyhuZXRkZXYsIGV4dGFjaywgcW9wdCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRlcnIgPSBvdHgyX21xcHJpb19yZXN0YXJ0X25ldGRldihwZnZmLVxcdTAwM2VuZXRkZXYsIHRydWUpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0LyogVE9ETzogRmFpbHVyZXMgZnJvbSBoZXJlIHRocm91Z2ggdGhlIGVuZCBvZiBpbml0KCkgKGUuZy4gLUVOT01FTVxcbitcXHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cXG4rXFx0ICogb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKCkgb3Igb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpKVxcbitcXHQgKiByZWFjaCBjbGVhbnVwLiBPbiB0YyBxZGlzYyByZXBsYWNlIHRoZSBvbGQgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZCxcXG4rXFx0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxcbitcXHQgKiBjYWNoZSwgb3IgcGFydGlhbGx5IHJlcHJvZ3JhbW1lZCBoYXJkd2FyZSBzaGFwZXJzLiBSZXN0b3JlIHRoZSBwcmlvclxcbitcXHQgKiBjb25maWd1cmF0aW9uIGluc3RlYWQgb2YgY2FsbGluZyBvdHgyX21xcHJpb19kb3duKCkgYW5kIGJvdW5jaW5nIHRoZVxcbitcXHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cXG4rXFx0ICovXFxuK1xcdGVyciA9IG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKHBmdmYpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcbitcXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xcbitcXHQgKiB0aGUgcmVzdGFydCBhYm92ZS4gQ2xlYXIgZXZlcnkgTURRIHNoYXBlciBiZWZvcmUgYXBwbHlpbmcgdGhlIG5ld1xcbitcXHQgKiBtYXBwaW5nIHNvIHF1ZXVlcyBkcm9wcGVkIGZyb20gdGhlIFRDIGxheW91dCBkbyBub3Qga2VlcCBzdGFsZVxcbitcXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKSB7XFxuK1xcdFxcdGVyciA9IG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcihwZnZmKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHRwZnZmLVxcdTAwM2VtcXByaW8uZmxhZ3MgPSBtcXByaW8tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0Zm9yICh0YyA9IDA7IHRjIFxcdTAwM2MgcW9wdC1cXHUwMDNlbnVtX3RjOyB0YysrKSB7XFxuK1xcdFxcdHU2NCBtaW5fcmF0ZSA9IDAsIG1heF9yYXRlID0gMDtcXG4rXFx0XFx0dTMyIHFjb3VudCA9IHFvcHQtXFx1MDAzZWNvdW50W3RjXTtcXG4rXFxuK1xcdFxcdC8qIFJhdGVzIG9taXR0ZWQgZnJvbSB0YyBtcXByaW8gYXJlIHBhc3NlZCBhcyB6ZXJvIGFuZCBib3RoIE1EUVxcbitcXHRcXHQgKiBzaGFwZXIgcmVnaXN0ZXJzIGFyZSBwcm9ncmFtbWVkOyBzZWVcXG4rXFx0XFx0ICogb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcigpLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcXG4rXFx0XFx0XFx0bWluX3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXFx1MDAzZW1pbl9yYXRlW3RjXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcWNvdW50KTtcXG4rXFx0XFx0aWYgKG1xcHJpby1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcXG4rXFx0XFx0XFx0bWF4X3JhdGUgPSBvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtcXByaW8tXFx1MDAzZW1heF9yYXRlW3RjXSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcWNvdW50KTtcXG4rXFxuK1xcdFxcdGZvciAodHhxID0gcW9wdC1cXHUwMDNlb2Zmc2V0W3RjXTtcXG4rXFx0XFx0ICAgICB0eHEgXFx1MDAzYyBxb3B0LVxcdTAwM2VvZmZzZXRbdGNdICsgcWNvdW50OyB0eHErKykge1xcbitcXHRcXHRcXHRuZXRkZXZfZGJnKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIm1xcHJpbzogdGMgJWQgdHhxICVkIG1pbl9yYXRlICVsbHUgbWF4X3JhdGUgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgdGMsIHR4cSwgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdID0gbWluX3JhdGU7XFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XFxuK1xcbitcXHRcXHRcXHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbWluX3JhdGUsIG1heF9yYXRlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cXHUwMDNlbnVtX3RjKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHFvcHQtXFx1MDAzZW51bV90YzsgaSsrKVxcbitcXHRcXHRuZXRkZXZfc2V0X3RjX3F1ZXVlKG5ldGRldiwgaSwgcW9wdC1cXHUwMDNlY291bnRbaV0sIHFvcHQtXFx1MDAzZW9mZnNldFtpXSk7XFxuK1xcbitcXHRxb3B0LVxcdTAwM2VodyA9IFRDX01RUFJJT19IV19PRkZMT0FEX1RDUztcXG4rXFxuK1xcdGlmIChyZXBsYWNpbmcpXFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbnVwOlxcbitcXHQvKiBDbGVhciBoYXJkd2FyZSBvZmZsb2FkIG9uIHRoaXMgcmVqZWN0ZWQgcmVxdWVzdCBzbyBhIGZhaWxlZCByZXBsYWNlXFxuK1xcdCAqIGRvZXMgbm90IGxlYXZlIHRjIHJlcG9ydGluZyBvZmZsb2FkIGZvciBkcml2ZXIgc3RhdGUgdGhhdCB3YXMgdG9yblxcbitcXHQgKiBkb3duIHdoaWxlIHRoZSBwcmV2aW91cyBtcXByaW8gcmVtYWlucyBncmFmdGVkLlxcbitcXHQgKi9cXG4rXFx0cW9wdC1cXHUwMDNlaHcgPSAwO1xcbitcXHRpZiAocmVwbGFjaW5nKSB7XFxuK1xcdFxcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7XFxuK1xcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XFxuK1xcdH1cXG4rXFx0b3R4Ml90ZWFyZG93bl90Y19tcXByaW8ocGZ2ZiwgbXFwcmlvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3Jvb3Qoc3RydWN0IG90eDJfbmljICpwZnZmLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNfcm9vdF9xb3B0X29mZmxvYWQgKnJvb3QpXFxuK3tcXG4rXFx0c3dpdGNoIChyb290LVxcdTAwM2Vjb21tYW5kKSB7XFxuK1xcdGNhc2UgVENfUk9PVF9HUkFGVDpcXG4rXFx0XFx0aWYgKHJvb3QtXFx1MDAzZWluZ3Jlc3MpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAocGZ2Zi1cXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xcbitcXHRcXHRcXHRwZnZmLVxcdTAwM2VtcXByaW9fc2tpcF90ZWFyZG93biA9IHRydWU7XFxuK1xcdFxcdFxcdHBmdmYtXFx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHZvaWQgKnR5cGVfZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgdGNfcXVlcnlfY2Fwc19iYXNlICpiYXNlID0gdHlwZV9kYXRhO1xcbitcXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XFxuK1xcbitcXHRpZiAoYmFzZS1cXHUwMDNldHlwZSAhPSBUQ19TRVRVUF9RRElTQ19NUVBSSU8pXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGNhcHMgPSBiYXNlLVxcdTAwM2VjYXBzO1xcbitcXHRjYXBzLVxcdTAwM2V2YWxpZGF0ZV9xdWV1ZV9jb3VudHMgPSB0cnVlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGVudW0gdGNfc2V0dXBfdHlwZSB0eXBlLFxcbiBcXHRcXHQgIHZvaWQgKnR5cGVfZGF0YSlcXG4ge1xcbiBcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBUQ19RVUVSWV9DQVBTOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19xdWVyeV9jYXBzKHR5cGVfZGF0YSk7XFxuIFxcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcXG4gXFx0Y2FzZSBUQ19TRVRVUF9RRElTQ19IVEI6XFxuIFxcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX2h0YihuZXRkZXYsIHR5cGVfZGF0YSk7XFxuK1xcdGNhc2UgVENfU0VUVVBfUURJU0NfTVFQUklPOlxcbitcXHRcXHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19tcXByaW8obmV0ZGV2LCB0eXBlX2RhdGEpO1xcbitcXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XFxuK1xcdFxcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmNmMDAyMTc4ODM1NjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jXFxuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcXG4gXFx0LyogY29uZmlndXJlIFBJUiAqL1xcbiBcXHRtYXhyYXRlID0gKG5vZGUtXFx1MDAzZXJhdGUgXFx1MDAzZSBub2RlLVxcdTAwM2VjZWlsKSA/IG5vZGUtXFx1MDAzZXJhdGUgOiBub2RlLVxcdTAwM2VjZWlsO1xcbiBcXG4rXFx0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXFxuK1xcdCAqIGV4cGxpY2l0IHZhbHVlLCBub3QgdGhlIE5JWCBoYXJkd2FyZSBtYXhpbXVtIChDTjEwS19NQVhfQlVSU1RfU0laRSkuXFxuK1xcdCAqL1xcbiBcXHRjZmctXFx1MDAzZXJlZ3ZhbFsqbnVtX3JlZ3NdID1cXG4gXFx0XFx0b3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHBmdmYsIG1heHJhdGUsIDY1NTM2KTtcXG4gXFx0KCpudW1fcmVncykrKztcXG5AQCAtMTcyOSwxMSArMTczMiwyMyBAQCB2b2lkIG90eDJfcW9zX2NvbmZpZ190eHNjaHEoc3RydWN0IG90eDJfbmljICpwZnZmKVxcbiBcXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XFxuIH1cXG4gXFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXFxuK3tcXG4rXFx0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XFxuK31cXG4rXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcXG4ge1xcbiBcXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFx0aW50IHJlcztcXG4gXFxuK1xcdGlmIChwZnZmLVxcdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgaHRiLVxcdTAwM2Vjb21tYW5kICE9IFRDX0hUQl9ERVNUUk9ZKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChodGItXFx1MDAzZWV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIkhUQiBvZmZsb2FkIGNhbm5vdCBiZSB1c2VkIHdpdGggbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGFjdGl2ZVxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdHN3aXRjaCAoaHRiLVxcdTAwM2Vjb21tYW5kKSB7XFxuIFxcdGNhc2UgVENfSFRCX0NSRUFURTpcXG4gXFx0XFx0cmV0dXJuIG90eDJfcW9zX3Jvb3RfYWRkKHBmdmYsIGh0Yi1cXHUwMDNlcGFyZW50X2NsYXNzaWQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuaFxcbmluZGV4IDIyMWJkMDQzOGY2MDMuLmM3NzdjYzQyZWFjOWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXFxuQEAgLTIzLDYgKzIzLDcgQEAgZW51bSBxb3Nfc21xX29wZXJhdGlvbnMge1xcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcXG4gXFxuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0Yik7XFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiBpbnQgb3R4Ml9xb3NfZ2V0X3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xcbiB2b2lkIG90eDJfcW9zX2ZyZWVfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjowMy45MDYzOTI3MTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTM4Mjg0MTg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTRjMTcwNGJhY2Y4YTJmYjMwNjkyZTFlNDg3ZWYzNWY1NGJhYTljZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDA5OjUyOjAwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG5pbmRleCBiODFjNDdlYTAyM2JlLi4yMmY2NGMxZWRlOTFhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X25peC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfbml4LmNcbkBAIC0zMzEsOCArMzMxLDEyIEBAIHN0YXRpYyBib29sIGlzX3ZhbGlkX3R4c2NocShzdHJ1Y3QgcnZ1ICpydnUsIGludCBibGthZGRyLFxuIFx0XHRcdHJldHVybiB0cnVlO1xuIFx0fVxuIFxuLVx0aWYgKG1hcF9mdW5jICE9IHBjaWZ1bmMpXG4rXHRpZiAobWFwX2Z1bmMgIT0gcGNpZnVuYykge1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKHJ2dS1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgXCJwY2lmdW5jICV4IG1hcCBwY2lmdW5jICV4IG5vdCBlcXVhbCwgbHZsPSV1IHNjaHE9JXVcXG5cIixcbitcdFx0XHRcdCAgICBwY2lmdW5jLCBtYXBfZnVuYywgbHZsLCBzY2hxKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbmluZGV4IGNhNzNhOTRkYjc5NDMuLmI2ZDhlZTdlMmQ0YzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmNcbkBAIC02MTQsNiArNjE0LDE0MiBAQCB2b2lkIG90eDJfZ2V0X21hY19mcm9tX2FmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wob3R4Ml9nZXRfbWFjX2Zyb21fYWYpO1xuIFxuK3N0YXRpYyBpbnRcbitvdHgyX25peF90bXFfcmVnX3dyaXRlKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGNudCxcbitcdFx0ICAgICAgIHU2NCByZWdfYWRkcltNQVhfUkVHU19QRVJfTUJPWF9NU0ddLFxuK1x0XHQgICAgICAgdTY0IHJlZ192YWxbTUFYX1JFR1NfUEVSX01CT1hfTVNHXSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGksIGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdHJlcSA9IG90eDJfbWJveF9hbGxvY19tc2dfbml4X3R4c2NocV9jZmcobWJveCk7XG4rXHRpZiAoIXJlcSkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bWJveC1cdTAwM2Vsb2NrKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXEtXHUwMDNlbHZsID0gTklYX1RYU0NIX0xWTF9NRFE7XG4rXHRyZXEtXHUwMDNlbnVtX3JlZ3MgPSBjbnQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRyZXEtXHUwMDNlcmVnW2ldID0gcmVnX2FkZHJbaV07XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbaV0gPSByZWdfdmFsW2ldO1xuK1x0fVxuK1xuK1x0ZXJyID0gb3R4Ml9zeW5jX21ib3hfbXNnKG1ib3gpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHR1NjQgcmVnX2FkZHJbTUFYX1JFR1NfUEVSX01CT1hfTVNHXTtcbitcdHU2NCByZWdfdmFsW01BWF9SRUdTX1BFUl9NQk9YX01TR107XG4rXHRpbnQgZXJyLCBzbXEsIGksIGNudCA9IDA7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZnZmLVx1MDAzZWh3LnR4c2NocV9jbnRbTklYX1RYU0NIX0xWTF9TTVFdOyBpKyspIHtcbitcdFx0c21xID0gcGZ2Zi1cdTAwM2Vody50eHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1NNUV1baV07XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdHJlZ19hZGRyW2NudF0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdFx0cmVnX3ZhbFtjbnRdID0gMDtcbitcdFx0Y250Kys7XG4rXG4rXHRcdGlmIChjbnQgXHUwMDNjIE1BWF9SRUdTX1BFUl9NQk9YX01TRyAtIDEpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHRcdGNudCA9IDA7XG4rXHR9XG4rXG4rXHRpZiAoY250KSB7XG4rXHRcdGVyciA9IG90eDJfbml4X3RtcV9yZWdfd3JpdGUocGZ2ZiwgY250LFxuK1x0XHRcdFx0XHQgICAgIHJlZ19hZGRyLCByZWdfdmFsKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIGZhaWw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitmYWlsOlxuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoc3RydWN0IG90eDJfbmljICpwZnZmLFxuK1x0XHRcdFx0IGludCB0eHEsIHU2NCBtaW5yYXRlLCB1NjQgbWF4cmF0ZSlcbit7XG4rXHRzdHJ1Y3QgbWJveCAqbWJveCA9IFx1MDAyNnBmdmYtXHUwMDNlbWJveDtcbitcdHN0cnVjdCBuaXhfdHhzY2hxX2NvbmZpZyAqcmVxO1xuK1x0aW50IGVyciwgc21xLCBuID0gMDtcbitcdHU2NCByZWdfYWRkclsyXTtcbitcdHU2NCByZWdfdmFsWzJdO1xuK1x0dTY0IHJhdGU7XG4rXG4rXHRpZiAoIW1heHJhdGUgXHUwMDI2XHUwMDI2ICFtaW5yYXRlKSB7XG4rXHRcdHNtcSA9IG90eDJfZ2V0X3NtcV9pZHgocGZ2ZiwgdHhxKTtcbitcdFx0cmVnX2FkZHJbMF0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdFx0cmVnX3ZhbFswXSA9IDA7XG4rXHRcdHJlZ19hZGRyWzFdID0gTklYX0FGX01EUVhfQ0lSKHNtcSk7XG4rXHRcdHJlZ192YWxbMV0gPSAwO1xuK1x0XHRyZXR1cm4gb3R4Ml9uaXhfdG1xX3JlZ193cml0ZShwZnZmLCAyLCByZWdfYWRkciwgcmVnX3ZhbCk7XG4rXHR9XG4rXG4rXHRzbXEgPSBvdHgyX2dldF9zbXFfaWR4KHBmdmYsIHR4cSk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRyZXEgPSBvdHgyX21ib3hfYWxsb2NfbXNnX25peF90eHNjaHFfY2ZnKG1ib3gpO1xuK1x0aWYgKCFyZXEpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNm1ib3gtXHUwMDNlbG9jayk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZWx2bCA9IE5JWF9UWFNDSF9MVkxfTURRO1xuK1xuK1x0LyogTVFQUklPIGV4cG9zZXMgb25seSBtaW4vbWF4IHJhdGUsIG5vdCBidXJzdC4gIFBhc3MgYnVyc3QgMCBzb1xuK1x0ICogb3R4Ml9nZXRfZWdyZXNzX2J1cnN0X2NmZygpIHByb2dyYW1tZXMgdGhlIGxhcmdlc3QgYnVyc3QgdGhlIE5JWFxuK1x0ICogZW5jb2Rpbmcgc3VwcG9ydHMgKENOMTBLX01BWF9CVVJTVF9TSVpFIG9uIENOMTBLKS4gIFRoaXMgZGlmZmVyc1xuK1x0ICogZnJvbSB0aGUgNjU1MzYgYnl0ZSBkZWZhdWx0IHVzZWQgaW4gdGhlIEhUQiBwYXRoLCB3aGljaCBpcyBhXG4rXHQgKiBrZXJuZWwtc2lkZSBkZWZhdWx0IHdoZW4gbm8gZXhwbGljaXQgYnVyc3QgaXMgY29uZmlndXJlZCwgbm90IGFcbitcdCAqIGhhcmR3YXJlIGNhcC5cbitcdCAqXG4rXHQgKiBtcXByaW8gc2V0dXAgcmVzdGFydHMgdGhlIG5ldGRldiAob3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYpLFxuK1x0ICogd2hpY2ggcmVzZXRzIE1EUSBzaGFwZXJzIHRvIHplcm8uICBQcm9ncmFtIGJvdGggUElSIGFuZCBDSVIgb25cbitcdCAqIGV2ZXJ5IHVwZGF0ZSBzbyBvbWl0dGVkIHJhdGVzIGFyZSBhcHBsaWVkIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW5cbitcdCAqIHJlbHlpbmcgb24gc3RhbGUgaGFyZHdhcmUgc3RhdGUuXG4rXHQgKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9QSVIoc21xKTtcbitcdGlmIChtYXhyYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtYXhyYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1xuK1x0LyogQ0lSK1BJUiBzdXBwb3J0IGlzIHJlcXVpcmVkIGFuZCBjaGVja2VkIGF0IG1xcHJpbyBzZXR1cC4gKi9cbitcdHJlcS1cdTAwM2VyZWdbbl0gPSBOSVhfQUZfTURRWF9DSVIoc21xKTtcbitcdGlmIChtaW5yYXRlKSB7XG4rXHRcdHJhdGUgPSBvdHgyX2NvbnZlcnRfcmF0ZShtaW5yYXRlKTtcbitcdFx0cmVxLVx1MDAzZXJlZ3ZhbFtuXSA9IG90eDJfZ2V0X3R4c2NocV9yYXRlX3JlZ3ZhbChwZnZmLCByYXRlLCAwKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJlcS1cdTAwM2VyZWd2YWxbbl0gPSAwO1xuK1x0fVxuK1x0bisrO1xuK1x0cmVxLVx1MDAzZW51bV9yZWdzID0gbjtcbitcbitcdGVyciA9IG90eDJfc3luY19tYm94X21zZyhtYm94KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZtYm94LVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IG90eDJfdHhzY2hxX2NvbmZpZyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBsdmwsIGludCBwcmlvLCBib29sIHR4c2NocV9mb3JfcGZjKVxuIHtcbiBcdHUxNiAoKnNjaHFfbGlzdClbTUFYX1RYU0NIUV9QRVJfRlVOQ107XG5AQCAtNjUwLDcgKzc4NiwyMCBAQCBpbnQgb3R4Ml90eHNjaHFfY29uZmlnKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IGx2bCwgaW50IHByaW8sIGJvb2wgdHhzY2hxX2ZvclxuIFx0XHRcdFx0XHRcdCh1NjQpaHctXHUwMDNlc21xX2xpbmtfdHlwZSk7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuIFx0XHQvKiBNRFEgY29uZmlnICovXG4tXHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KSB7XG4rXHRcdFx0LyogVE9ETzogUHJvZ3JhbSBOSVhfQUZfVEw0WF9UT1BPTE9HWSBvbiBUTDRbMF0uIE1RUFJJT1xuK1x0XHRcdCAqIHBhcmVudHMgZXZlcnkgTURRIHVuZGVyIHRoZSBzYW1lIFRMNCB3aXRoIHNjaGVkdWxlXG4rXHRcdFx0ICogcHJpb3JpdHkgMCwgc28gc2libGluZyBhcmJpdHJhdGlvbiBkZXBlbmRzIG9uIHRoZSBUTDRcbitcdFx0XHQgKiB0b3BvbG9neSByZWdpc3Rlci4gT25seSB0aGUgSFRCIHBhdGggcHJvZ3JhbXMgdGhpc1xuK1x0XHRcdCAqIHRvZGF5IGFuZCB0aGUgQUYgZG9lcyBub3QgcmVzZXQgaXQgb24gc2NocSByZWFsbG9jLFxuK1x0XHRcdCAqIHNvIGEgVEw0IHJldXNlZCBhZnRlciBIVEIgdGVhcmRvd24gY2FuIHJldGFpbiBzdGFsZVxuK1x0XHRcdCAqIFJSX1BSSU8vUFJJT19BTkNIT1IgYW5kIHN0YXJ2ZSBzb21lIFRYIHF1ZXVlcy5cbitcdFx0XHQgKi9cbitcdFx0XHRwYXJlbnQgPSBzY2hxX2xpc3RbTklYX1RYU0NIX0xWTF9UTDRdWzBdO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHBhcmVudCA9IHNjaHFfbGlzdFtOSVhfVFhTQ0hfTFZMX1RMNF1bcHJpb107XG4rXHRcdH1cbitcbiBcdFx0cmVxLVx1MDAzZXJlZ1sxXSA9IE5JWF9BRl9NRFFYX1BBUkVOVChzY2hxKTtcbiBcdFx0cmVxLVx1MDAzZXJlZ3ZhbFsxXSA9IHBhcmVudCBcdTAwM2NcdTAwM2MgMTY7XG4gXHRcdHJlcS1cdTAwM2VudW1fcmVncysrO1xuQEAgLTc3OCw2ICs5MjcsOSBAQCBpbnQgb3R4Ml90eHNjaF9hbGxvYyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfVEw0XSA9IGNoYW5fY250O1xuIFx0fVxuIFxuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpXG4rXHRcdHJlcS1cdTAwM2VzY2hxW05JWF9UWFNDSF9MVkxfU01RXSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXG4gXHRyYyA9IG90eDJfc3luY19tYm94X21zZyhcdTAwMjZwZnZmLVx1MDAzZW1ib3gpO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuaW5kZXggZWVjZWU2MTJiN2IyYy4uNjdkNGFhZTk0NDBmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaFxuQEAgLTQ4Myw2ICs0ODMsMTMgQEAgc3RydWN0IHBmX2lycV9kYXRhIHtcbiBcdGludCBtZGV2cztcbiB9O1xuIFxuK3N0cnVjdCBvdHgyX21xcHJpbyB7XG4rXHR1MzJcdGZsYWdzO1xuK1x0dTY0XHQqbWluX3JhdGU7XG4rXHR1NjRcdCptYXhfcmF0ZTtcbitcdGJvb2xcdHJhdGVfbGltaXQ7XG4rfTtcbitcbiBzdHJ1Y3Qgb3R4Ml9uaWMge1xuIFx0dm9pZCBfX2lvbWVtXHRcdCpyZWdfYmFzZTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlXHQqbmV0ZGV2O1xuQEAgLTUxNSw2ICs1MjIsMTAgQEAgc3RydWN0IG90eDJfbmljIHtcbiBcdHU2NFx0XHRcdGZsYWdzO1xuIFx0dTY0XHRcdFx0KmNxX29wX2FkZHI7XG4gXG4rXHRzdHJ1Y3Qgb3R4Ml9tcXByaW9cdG1xcHJpbztcbitcdGJvb2xcdFx0XHRtcXByaW9fcmVwbGFjZV9wZW5kaW5nO1xuK1x0Ym9vbFx0XHRcdG1xcHJpb19za2lwX3RlYXJkb3duO1xuK1xuIFx0c3RydWN0IGJwZl9wcm9nXHRcdCp4ZHBfcHJvZztcbiBcdHN0cnVjdCBvdHgyX3FzZXRcdHFzZXQ7XG4gXHRzdHJ1Y3Qgb3R4Ml9od1x0XHRodztcbkBAIC0xMjQ2LDYgKzEyNTcsMTEgQEAgZG1hX2FkZHJfdCBvdHgyX2RtYV9tYXBfc2tiX2ZyYWcoc3RydWN0IG90eDJfbmljICpwZnZmLFxuIFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBzZWcsIGludCAqbGVuKTtcbiB2b2lkIG90eDJfZG1hX3VubWFwX3NrYl9mcmFncyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHN0cnVjdCBzZ19saXN0ICpzZyk7XG4gaW50IG90eDJfcmVhZF9mcmVlX3NxZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIHUxNiBxaWR4KTtcbitpbnQgb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCB0eHEsXG4rXHRcdFx0XHQgdTY0IG1pbnJhdGUsIHU2NCBtYXhyYXRlKTtcbitpbnQgb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4raW50IG90eDJfbXFwcmlvX2Rvd24oc3RydWN0IG90eDJfbmljICpwZnZmKTtcbitpbnQgb3R4Ml9tcXByaW9fdXAoc3RydWN0IG90eDJfbmljICpwZnZmKTtcbiB2b2lkIG90eDJfcXVldWVfdmZfd29yayhzdHJ1Y3QgbWJveCAqbXcsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94X3dxLFxuIFx0XHRcdGludCBmaXJzdCwgaW50IG1kZXZzLCB1NjQgaW50cik7XG4gaW50IG90eDJfZGVsX21jYW1fZmxvd19lbnRyeShzdHJ1Y3Qgb3R4Ml9uaWMgKm5pYywgdTE2IGVudHJ5LFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX2RjYm5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9kY2JubC5jXG5pbmRleCBmMTEwZGZhNDIzNjA1Li40YTcwYWJjMjMwYmVhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZGNibmwuY1xuQEAgLTQxMyw2ICs0MTMsMTIgQEAgc3RhdGljIGludCBvdHgyX2RjYm5sX2llZWVfc2V0cGZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZWVlX3BmYyAqcGZjKVxuIFx0dTggb2xkX3BmY19lbjtcbiBcdGludCBlcnI7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjYgcGZjLVx1MDAzZXBmY19lbikge1xuK1x0XHRuZXRkZXZfZXJyKGRldixcbitcdFx0XHQgICBcIlBGQzogY2Fubm90IGVuYWJsZSB3aGlsZSBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRvbGRfcGZjX2VuID0gcGZ2Zi1cdTAwM2VwZmNfZW47XG4gXHRwZnZmLVx1MDAzZXBmY19lbiA9IHBmYy1cdTAwM2VwZmNfZW47XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG5pbmRleCBhMDM0MGYzNDIyYmY5Li44MzdkMjkwMjQ5ODFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9ldGh0b29sLmNcbkBAIC0yODcsNiArMjg3LDE0IEBAIHN0YXRpYyBpbnQgb3R4Ml9zZXRfY2hhbm5lbHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICAoY2hhbm5lbC1cdTAwM2V0eF9jb3VudCAhPSBwZnZmLVx1MDAzZWh3LnR4X3F1ZXVlcyB8fFxuK1x0ICAgICBjaGFubmVsLVx1MDAzZXJ4X2NvdW50ICE9IHBmdmYtXHUwMDNlaHcucnhfcXVldWVzKSkge1xuK1x0XHRuZXRkZXZfaW5mbyhkZXYsXG4rXHRcdFx0ICAgIFwiTm90IHBlcm1pdHRlZCB0byBjaGFuZ2UgY2hhbm5lbCBjb3VudCB3aGlsZSBNUSBwcmlvIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAoaWZfdXApXG4gXHRcdGRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19zdG9wKGRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3BmLmNcbmluZGV4IGM5OTVmMjkwMDg1OTAuLjA2Y2I0NGU3MjYzY2YgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9wZi5jXG5AQCAtMTk4MCw2ICsxOTgwLDE2IEBAIGludCBvdHgyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2ZyZWVfbWVtO1xuIFxuK1x0LyogVE9ETzogb3R4Ml9tcXByaW9fdXAoKSBmYWlsdXJlIGhlcmUgYWJvcnRzIHRoZSBlbnRpcmUgbmRvX29wZW4oKVxuK1x0ICogcGF0aCBldmVuIHRob3VnaCBtcXByaW9fcmF0ZV9saW1pdCBhbmQgdGhlIHJhdGUgY2FjaGUgcmVtYWluIHNldC5cbitcdCAqIFJvdXRpbmUgaXAgbGluayBzZXQgdXAgb3IgZHJpdmVyIHJlc2V0IHdpdGggYWN0aXZlIG1xcHJpbyBvZmZsb2FkXG4rXHQgKiBjYW4gbGVhdmUgdGhlIGludGVyZmFjZSBzdHVjayBkb3duIHVudGlsIHRoZSBxZGlzYyBpcyByZW1vdmVkIGFuZFxuK1x0ICogcmVhcHBsaWVkLlxuK1x0ICovXG4rXHRlcnIgPSBvdHgyX21xcHJpb191cChwZik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlX2h3O1xuK1xuIFx0LyogUmVnaXN0ZXIgTkFQSSBoYW5kbGVyICovXG4gXHRmb3IgKHFpZHggPSAwOyBxaWR4IFx1MDAzYyBwZi1cdTAwM2Vody5jaW50X2NudDsgcWlkeCsrKSB7XG4gXHRcdGNxX3BvbGwgPSBcdTAwMjZxc2V0LVx1MDAzZW5hcGlbcWlkeF07XG5AQCAtMjE0MCw2ICsyMTUwLDcgQEAgaW50IG90eDJfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0ZnJlZV9pcnEodmVjLCBwZik7XG4gZXJyX2Rpc2FibGVfbmFwaTpcbiBcdG90eDJfZGlzYWJsZV9uYXBpKHBmKTtcbitlcnJfZnJlZV9odzpcbiBcdG90eDJfZnJlZV9od19yZXNvdXJjZXMocGYpO1xuIGVycl9mcmVlX21lbTpcbiBcdG90eDJfZnJlZV9xdWV1ZV9tZW0ocXNldCk7XG5AQCAtMjg0Niw2ICsyODU3LDEyIEBAIHN0YXRpYyBpbnQgb3R4Ml94ZHBfc2V0dXAoc3RydWN0IG90eDJfbmljICpwZiwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuIFx0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcocGYtXHUwMDNlbmV0ZGV2KTtcbiBcdHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2c7XG4gXG4rXHRpZiAocHJvZyBcdTAwMjZcdTAwMjYgcGYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQpIHtcbitcdFx0bmV0ZGV2X2VycihkZXYsXG4rXHRcdFx0ICAgXCJYRFA6IGNhbm5vdCBhdHRhY2ggd2hpbGUgbXFwcmlvIGJhbmR3aWR0aCBvZmZsb2FkIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuIFx0aWYgKHByb2cgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VtdHUgXHUwMDNlIE1BWF9YRFBfTVRVKSB7XG4gXHRcdG5ldGRldl93YXJuKGRldiwgXCJKdW1ibyBmcmFtZXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBYRFBcXG5cIik7XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfdGMuY1xuaW5kZXggMDM5ZmQ0N2ViZjUyMi4uZmM5Njc3ZTM0MDY1OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9vdHgyX3RjLmNcbkBAIC0xNiw2ICsxNiw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3RjX2FjdC90Y19taXJyZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC90Y19hY3QvdGNfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwdjYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wa3Rfc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zY2hfZ2VuZXJpYy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJjbjEway5oXCJcbiAjaW5jbHVkZSBcIm90eDJfY29tbW9uLmhcIlxuQEAgLTMxLDYgKzMzLDEwIEBAXG4gXG4gI2RlZmluZSBNQ0FTVF9JTlZBTElEX0dSUFx0XHQoLTFVKVxuICNkZWZpbmUgUkFURV9NQU5USVNTQV9CSVRTXHRcdDhcbisvKiBNaW4gcGVyLXF1ZXVlIGVncmVzcyBzaGFwaW5nIHJhdGUgdGhlIE5JWCBUTFggZW5jb2RlciBzdXBwb3J0cyAoMiBNYnBzKS4gKi9cbisjZGVmaW5lIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTXHQyNTAwMDBVTExcbisvKiBNYXggZWdyZXNzIHNoYXBpbmcgcmF0ZSB0aGUgTklYIFRMWCBlbmNvZGVyIHN1cHBvcnRzICgxMzA4MTYgTWJwcykuICovXG4rI2RlZmluZSBPVFgyX01RUFJJT19NQVhfUkFURV9CWVRFU19QU1x0KChNQVhfQlVSU1RfU0laRSAqIDEwMDAwMDBVTEwpIC8gOFVMTClcbiBcbiBzdGF0aWMgdm9pZCBvdHgyX2dldF9lZ3Jlc3NfYnVyc3RfY2ZnKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1MzIgYnVyc3QsXG4gXHRcdFx0XHQgICAgICB1MzIgKmJ1cnN0X2V4cCwgdTMyICpidXJzdF9tYW50aXNzYSlcbkBAIC02MSw2ICs2Nyw5IEBAIHN0YXRpYyB2b2lkIG90eDJfZ2V0X2VncmVzc19idXJzdF9jZmcoc3RydWN0IG90eDJfbmljICpuaWMsIHUzMiBidXJzdCxcbiBcdFx0XHQqYnVyc3RfbWFudGlzc2EgPSB0bXAgLyAoMVVMTCBcdTAwM2NcdTAwM2MgKCpidXJzdF9leHAgLSA3KSk7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4rXHRcdC8qIGJ1cnN0IDA6IGxhcmdlc3QgZW5jb2RhYmxlIGJ1cnN0IChDTjEwS19NQVhfQlVSU1RfU0laRSBvblxuK1x0XHQgKiBDTjEwSyksIG5vdCBhIG1pbmltYWwgYnVyc3QuXG4rXHRcdCAqL1xuIFx0XHQqYnVyc3RfZXhwID0gTUFYX0JVUlNUX0VYUE9ORU5UO1xuIFx0XHQqYnVyc3RfbWFudGlzc2EgPSBtYXhfbWFudGlzc2E7XG4gXHR9XG5AQCAtMTYwMCwxNCArMTYwOSw1OTYgQEAgc3RhdGljIGludCBvdHgyX3NldHVwX3RjX2Jsb2NrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0XHRcdCAgbmljLCBuaWMsIGluZ3Jlc3MpO1xuIH1cbiBcbisvKiBGcmVlIHRoZSBwZXItcXVldWUgbWluL21heCByYXRlIGNhY2hlcy4gKi9cbitzdGF0aWMgdm9pZCBvdHgyX21xcHJpb19mcmVlX2NhY2hlKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSk7XG4rXHRkZXZtX2tmcmVlKHBmdmYtXHUwMDNlZGV2LCBwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IE5VTEw7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5mbGFncyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUoc3RydWN0IG90eDJfbmljICpwZnZmKVxuK3tcbitcdHUxNiBudW1fdHhxID0gcGZ2Zi1cdTAwM2Vody5ub25fcW9zX3F1ZXVlcztcbitcbitcdC8qIFRPRE86IG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUoKSBoZXJlIGRyb3BzIHRoZSBjb21taXR0ZWQgcmF0ZSBjYWNoZVxuK1x0ICogb24gdGMgcWRpc2MgcmVwbGFjZSBiZWZvcmUgdGhlIG5ldyBtYXBwaW5nIGlzIGNvbXBsZXRlLiBTdGFnZSB0aGVcbitcdCAqIGluY29taW5nIHJhdGVzIHNlcGFyYXRlbHkgYW5kIGNvbW1pdCBvbmx5IGFmdGVyIHJlcGxhY2Ugc3VjY2VlZHMgc29cbitcdCAqIGEgZmFpbHVyZSBhZnRlciBuZXRkZXYgcmVzdGFydCBjYW4gcm9sbCBiYWNrIGZyb20gdGhlIHByaW9yIGNhY2hlLlxuK1x0ICovXG4rXHRvdHgyX21xcHJpb19mcmVlX2NhY2hlKHBmdmYpO1xuK1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgPSBkZXZtX2tjYWxsb2MocGZ2Zi1cdTAwM2VkZXYsIG51bV90eHEsXG4rXHRcdFx0XHRcdCAgICAgc2l6ZW9mKCpwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZSksXG4rXHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4rXHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZSA9IGRldm1fa2NhbGxvYyhwZnZmLVx1MDAzZWRldiwgbnVtX3R4cSxcbitcdFx0XHRcdFx0ICAgICBzaXplb2YoKnBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSxcbitcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKSB7XG4rXHRcdG90eDJfbXFwcmlvX2ZyZWVfY2FjaGUocGZ2Zik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfdHhzY2hxX2lzX2FsbG9jYXRlZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0aW50IGx2bCwgaWR4O1xuK1xuK1x0Zm9yIChsdmwgPSAwOyBsdmwgXHUwMDNjIE5JWF9UWFNDSF9MVkxfQ05UOyBsdmwrKykge1xuK1x0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgcGZ2Zi1cdTAwM2Vody50eHNjaHFfY250W2x2bF07IGlkeCsrKSB7XG4rXHRcdFx0aWYgKHBmdmYtXHUwMDNlaHcudHhzY2hxX2xpc3RbbHZsXVtpZHhdKVxuK1x0XHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rLyogVGVhciBkb3duIG1xcHJpbyBiYW5kd2lkdGggb2ZmbG9hZDogY2xlYXIgcGVyLXF1ZXVlIHNoYXBlcnMsXG4rICogbXFwcmlvX3JhdGVfbGltaXQsIG5ldGRldiBUQyBtYXBwaW5ncywgYW5kIHRoZSBjYWNoZWQgcmF0ZXMuICBDYWxsZWQgb25cbisgKiBleHBsaWNpdCBtcXByaW8gdGVhcmRvd24gKHRjIHFkaXNjIGRlbCkgYW5kIGVycm9yIGNsZWFudXAsIG5vdCBvblxuKyAqIHJvdXRpbmUgbmV0ZGV2IHN0b3Avb3BlbiBjeWNsZXMgd2hlcmUgdGhlIG9mZmxvYWQgc3RheXMgYWN0aXZlLlxuKyAqL1xuK2ludCBvdHgyX21xcHJpb19kb3duKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zilcbit7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGZ2Zi1cdTAwM2VuZXRkZXY7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3R4Ml90eHNjaHFfaXNfYWxsb2NhdGVkKHBmdmYpKVxuK1x0XHRlcnIgPSBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIocGZ2Zik7XG4rXG4rXHQvKiBUT0RPOiBtcXByaW9fZG93bigpIGNsZWFycyBtcXByaW9fcmF0ZV9saW1pdCwgbmV0ZGV2IFRDIG1hcHBpbmdzLFxuK1x0ICogYW5kIHRoZSByYXRlIGNhY2hlIGV2ZW4gd2hlbiBvdHgyX25peF90bV9jbGVhcl9xdWV1ZV9zaGFwZXIoKSBmYWlsc1xuK1x0ICogcGFydHdheSB0aHJvdWdoIHRoZSBNRFEgYmF0Y2guIFNvZnR3YXJlIHRoZW4gcmVwb3J0cyBvZmZsb2FkIGFzXG4rXHQgKiBpbmFjdGl2ZSB3aGlsZSBzb21lIHF1ZXVlcyBtYXkgcmV0YWluIHByb2dyYW1tZWQgQ0lSL1BJUiwgc28gYSBsYXRlclxuK1x0ICogbXFwcmlvX3VwKCkgb3IgcmUtc2V0dXAgY2FuIHNoYXBlIHdpdGggdGhlIHdyb25nIGVmZmVjdGl2ZSByYXRlcy5cbitcdCAqL1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCA9IGZhbHNlO1xuK1x0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gZmFsc2U7XG4rXHRuZXRkZXZfc2V0X251bV90YyhuZXRkZXYsIDApO1xuK1x0b3R4Ml9tcXByaW9fZnJlZV9jYWNoZShwZnZmKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK2ludCBvdHgyX21xcHJpb191cChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBmdmYtXHUwMDNlbmV0ZGV2O1xuK1x0aW50IHR4cSwgZXJyO1xuK1xuK1x0aWYgKCFwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcGZ2Zi1cdTAwM2VtcXByaW8ubWluX3JhdGUgfHwgIXBmdmYtXHUwMDNlbXFwcmlvLm1heF9yYXRlKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGZvciAodHhxID0gMDsgdHhxIFx1MDAzYyBwZnZmLVx1MDAzZWh3Lm5vbl9xb3NfcXVldWVzOyB0eHErKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpby5mbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBwZnZmLVx1MDAzZW1xcHJpby5taW5fcmF0ZVt0eHFdO1xuK1x0XHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8uZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01BWF9SQVRFKVxuK1x0XHRcdG1heF9yYXRlID0gcGZ2Zi1cdTAwM2VtcXByaW8ubWF4X3JhdGVbdHhxXTtcbitcbitcdFx0aWYgKCFtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgIW1heF9yYXRlKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRlcnIgPSBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKHBmdmYsIHR4cSwgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0ICAgbWF4X3JhdGUpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIHJlc3RvcmUgc2hhcGVyIGZvciB0eHEgJWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICB0eHEsIGVycik7XG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIFJlc3RhcnQgdGhlIG5ldGRldiB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlciBoaWVyYXJjaHkgZm9yIG1xcHJpb1xuKyAqIGJhbmR3aWR0aCBvZmZsb2FkLiAgQm90aCBtcXByaW8gYWRkIGFuZCBkZWxldGUgKHdoZW4gb2ZmbG9hZCB3YXMgYWN0aXZlKVxuKyAqIHRha2UgdGhpcyBwYXRoIHZpYSBuZG9fc3RvcCgpL25kb19vcGVuKCkgc28gVkYtc3BlY2lmaWMgb3BlbiBsb2dpYyAoZS5nLlxuKyAqIExCSyBjYXJyaWVyIG9uKSBydW5zIGNvcnJlY3RseS4gIFRoZSBmdWxsIHN0b3Avb3BlbiBjeWNsZSBjbGVhcnNcbisgKiBjYXJyaWVyLCBzdG9wcyBhbGwgVFggcXVldWVzLCB0ZWFycyBkb3duIElSUXMvTkFQSSBhbmQgZHJvcHMgaW4tZmxpZ2h0XG4rICogdHJhZmZpYy4gIElmIG9wZW4gZmFpbHMsIHRoZSBpbnRlcmZhY2UgaXMgbGVmdCBhZG1pbmlzdHJhdGl2ZWx5IGRvd25cbisgKiB3aXRob3V0IGNhbGxpbmcgbmRvX3N0b3AoKSBhZ2FpbiBvbiByZXNvdXJjZXMgYWxyZWFkeSB0b3JuIGRvd24gYnlcbisgKiB0aGUgb3BlbiBlcnJvciBwYXRoLlxuKyAqL1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCByYXRlX2xpbWl0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IG5ldGRldi1cdTAwM2VuZXRkZXZfb3BzO1xuK1x0Ym9vbCB1cCA9IG5ldGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFRPRE86IEV2ZXJ5IG1xcHJpbyBhZGQsIHJlcGxhY2UsIGFuZCBkZWxldGUgcnVucyBhIGZ1bGwgbmRvX3N0b3AoKS9cbitcdCAqIG5kb19vcGVuKCkgY3ljbGUgKGNhcnJpZXIgZHJvcCwgSVJRL05BUEkgdGVhcmRvd24sIGluLWZsaWdodCB0cmFmZmljXG4rXHQgKiBsb3NzKSB0byByZXByb2dyYW0gdGhlIFRYIHNjaGVkdWxlci4gSWYgbmRvX29wZW4oKSBmYWlscyB0aGVcbitcdCAqIGludGVyZmFjZSBpcyBsZWZ0IGFkbWluaXN0cmF0aXZlbHkgZG93biAoT1RYMl9GTEFHX0lOVEZfRE9XTikgdW50aWxcbitcdCAqIG1hbnVhbCByZWNvdmVyeS4gRXhwbG9yZSBsaXZlIHJlcHJvZ3JhbW1pbmcgd2l0aG91dCBib3VuY2luZyB0aGVcbitcdCAqIG5ldGRldi5cbitcdCAqL1xuK1x0bmV0ZGV2X2luZm8obmV0ZGV2LFxuK1x0XHQgICAgXCJtcXByaW86IHJlc3RhcnRpbmcgaW50ZXJmYWNlIHRvIHJlcHJvZ3JhbSBUWCBzY2hlZHVsZXI7IGluLWZsaWdodCB0cmFmZmljIHdpbGwgYmUgZHJvcHBlZFxcblwiKTtcbitcbitcdGlmICh1cClcbitcdFx0ZGV2X2RlYWN0aXZhdGUobmV0ZGV2LCB0cnVlKTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fc3RvcChuZXRkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBvdXRfYWN0aXZhdGU7XG4rXG4rXHQvKiBTZXQgYmVmb3JlIG5kb19vcGVuKCkgc28gb3R4Ml90eHNjaF9hbGxvYygpIHdpZGVucyBTTVEgYWxsb2NhdGlvbi4gKi9cbitcdGlmIChyYXRlX2xpbWl0KVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0ID0gdHJ1ZTtcbitcbitcdGVyciA9IG9wcy1cdTAwM2VuZG9fb3BlbihuZXRkZXYpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpbnQgZG93bl9lcnI7XG4rXG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiRmFpbGVkIHRvIHJlc3RhcnQgZGV2aWNlIGFmdGVyIG1xcHJpbyBjaGFuZ2U6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0ZG93bl9lcnIgPSBvdHgyX21xcHJpb19kb3duKHBmdmYpO1xuK1x0XHRpZiAoZG93bl9lcnIpXG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogZmFpbGVkIHRvIGNsZWFyIHNoYXBlcnMgYWZ0ZXIgcmVzdGFydCBlcnJvcjogJWRcXG5cIixcbitcdFx0XHRcdCAgIGRvd25fZXJyKTtcbitcdFx0LyogbmRvX29wZW4oKSByb2xscyBiYWNrIG9uIGZhaWx1cmU7IG1hcmsgdGhlIGludGVyZmFjZSBkb3duIHNvXG4rXHRcdCAqIG5ldGlmX2Nsb3NlKCkgZG9lcyBub3QgaW52b2tlIG5kb19zdG9wKCkgb24gZnJlZWQgTkFQSS9xdWV1ZVxuK1x0XHQgKiBzdGF0ZS4gQ2FsbGVyIGhvbGRzIFJUTkw7IGRldl9jbG9zZSgpIHdvdWxkIGRlYWRsb2NrLlxuK1x0XHQgKi9cbitcdFx0cGZ2Zi1cdTAwM2VmbGFncyB8PSBPVFgyX0ZMQUdfSU5URl9ET1dOO1xuK1x0XHQvKiB2aXNpYmxlIHRvIG90eDJfc3RvcCgpIG9uIG90aGVyIGNwdXMgKi9cbitcdFx0c21wX3dtYigpO1xuK1x0XHRuZXRpZl9jbG9zZShuZXRkZXYpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK291dF9hY3RpdmF0ZTpcbitcdGlmICh1cCBcdTAwMjZcdTAwMjYgIWVycilcbitcdFx0ZGV2X2FjdGl2YXRlKG5ldGRldik7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdTY0IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKHU2NCByYXRlLCB1MzIgcWNvdW50KVxuK3tcbitcdGlmICghcmF0ZSB8fCBxY291bnQgXHUwMDNjPSAxKVxuK1x0XHRyZXR1cm4gcmF0ZTtcbitcbitcdHJldHVybiBkaXZfdTY0KHJhdGUsIHFjb3VudCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4rXHRcdFx0XHRcdHU2NCByYXRlLCB1MzIgcWNvdW50LCBpbnQgdGMsXG4rXHRcdFx0XHRcdGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aWYgKCFyYXRlIHx8IHFjb3VudCBcdTAwM2M9IDEgfHwgcmF0ZSBcdTAwM2U9IHFjb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRuZXRkZXZfZXJyKG5ldGRldixcbitcdFx0ICAgXCJtcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXNcXG5cIixcbitcdFx0ICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XG4rXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJtcXByaW86ICVzIHJhdGUgJWxsdSBmb3IgdGMgJWQgdG9vIHNtYWxsIGZvciAldSBxdWV1ZXNcIixcbitcdFx0XHQgICAgICAgbmFtZSwgcmF0ZSwgdGMsIHFjb3VudCk7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX21xcHJpb192YWxpZGF0ZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgc3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0KVxuK3tcbitcdHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1MTYgbnVtX3R4cSA9IHBmdmYtXHUwMDNlaHcubm9uX3Fvc19xdWV1ZXM7XG4rXHRpbnQgdGMsIHR4cTtcbitcbitcdGlmIChxb3B0LVx1MDAzZW51bV90YyBcdTAwM2UgbnVtX3R4cSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJOdW1iZXIgb2YgVENzICgldSkgZXhjZWVkcyBodyBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBxb3B0LVx1MDAzZW51bV90YywgbnVtX3R4cSk7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiTnVtYmVyIG9mIFRDcyAoJXUpIGV4Y2VlZHMgaHcgcXVldWVzICV1XCIsXG4rXHRcdFx0XHQgICAgICAgcW9wdC1cdTAwM2VudW1fdGMsIG51bV90eHEpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmIChudW1fdHhxIFx1MDAzZSBNQVhfVFhTQ0hRX1BFUl9GVU5DKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwiTnVtYmVyIG9mIHF1ZXVlcyAoJXUpIGV4Y2VlZHMgbWF4IHNjaGVkdWxlciBxdWV1ZXMgJXVcXG5cIixcbitcdFx0XHQgICBudW1fdHhxLCBNQVhfVFhTQ0hRX1BFUl9GVU5DKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICAgICAgXCJOdW1iZXIgb2YgcXVldWVzICgldSkgZXhjZWVkcyBtYXggc2NoZWR1bGVyIHF1ZXVlcyAldVwiLFxuK1x0XHRcdFx0ICAgICAgIG51bV90eHEsIE1BWF9UWFNDSFFfUEVSX0ZVTkMpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGZvciAodGMgPSAwOyB0YyBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IHRjKyspIHtcbitcdFx0dTMyIHFjb3VudCA9IHFvcHQtXHUwMDNlY291bnRbdGNdO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRpZiAodHhxIFx1MDAzZT0gbnVtX3R4cSkge1xuK1x0XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHRcdCAgIFwibXFwcmlvOiB0eHEgJWQgZXhjZWVkcyBvZmZsb2FkIHF1ZXVlIGNvdW50ICV1XFxuXCIsXG4rXHRcdFx0XHRcdCAgIHR4cSwgbnVtX3R4cSk7XG4rXHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICAgICAgXCJtcXByaW86IHR4cSAlZCBleGNlZWRzIG9mZmxvYWQgcXVldWUgY291bnQgJXVcIixcbitcdFx0XHRcdFx0XHQgICAgICAgdHhxLCBudW1fdHhxKTtcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIG90eDJfbXFwcmlvX3JhdGVfdmFsaWQodTY0IHJhdGVfYnl0ZXNfcHMpXG4re1xuK1x0dTY0IG1icHM7XG4rXG4rXHRpZiAoIXJhdGVfYnl0ZXNfcHMpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKHJhdGVfYnl0ZXNfcHMgXHUwMDNjIE9UWDJfTVFQUklPX01JTl9SQVRFX0JZVEVTX1BTKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAocmF0ZV9ieXRlc19wcyBcdTAwM2UgT1RYMl9NUVBSSU9fTUFYX1JBVEVfQllURVNfUFMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChyYXRlX2J5dGVzX3BzIFx1MDAzZSBkaXZfdTY0KFU2NF9NQVgsIDgpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtYnBzID0gb3R4Ml9jb252ZXJ0X3JhdGUocmF0ZV9ieXRlc19wcyk7XG4rXHRyZXR1cm4gaWxvZzIobWJwcyAvIDIpIFx1MDAzYz0gTUFYX1JBVEVfRVhQT05FTlQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0LyogVE9ETzogT24gZmFpbGVkIHRjIHFkaXNjIHJlcGxhY2UgcmVzdG9yZSB0aGUgcHJpb3IgcmF0ZSBjYWNoZSxcbitcdCAqIG5ldGRldiBUQyBtYXBwaW5nLCBhbmQgaGFyZHdhcmUgc2hhcGVycyBmcm9tIGEgc25hcHNob3QgdGFrZW4gYmVmb3JlXG4rXHQgKiByZXByb2dyYW1taW5nIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgbmV3IG9mZmxvYWQgdmFsdWVzIGFjdGl2ZSB3aGlsZVxuK1x0ICogdGhlIHByZXZpb3VzIG1xcHJpbyByZW1haW5zIHRoZSBncmFmdGVkIHJvb3QgcWRpc2MuXG4rXHQgKi9cbitcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFxcblwiKTtcbitcdGlmIChleHRhY2spXG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogcmVwbGFjZSBmYWlsZWQ7IG5ldyBvZmZsb2FkIHZhbHVlcyBhY3RpdmUsIG9sZCBtcXByaW8gc3RpbGwgcm9vdFwiKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgdGNfbXFwcmlvX3FvcHRfb2ZmbG9hZCAqbXFwcmlvKVxuK3tcbitcdGJvb2wgaGFkX21xcHJpbyA9IHBmdmYtXHUwMDNlbXFwcmlvLnJhdGVfbGltaXQ7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX3FvcHQgKnFvcHQgPSBcdTAwMjZtcXByaW8tXHUwMDNlcW9wdDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZnZmLVx1MDAzZW5ldGRldjtcbitcdGJvb2wgaWZfdXAgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7XG4rXHRpbnQgZG93bl9lcnIsIGVycjtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSAwO1xuK1xuK1x0LyogdGMgcWRpc2MgcmVwbGFjZSBncmFmdHMgdGhlIG5ldyBtcXByaW8gYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIG9sZFxuK1x0ICogb25lLiBtcXByaW9fc2tpcF90ZWFyZG93biBpcyBhcm1lZCBmcm9tIFRDX1JPT1RfR1JBRlQgc28gdGVhcmRvd25cbitcdCAqIGZyb20gdGhlIHJlcGxhY2VkIHFkaXNjIGlzIGlnbm9yZWQgYWZ0ZXIgdGhlIG5ldyBjb25maWd1cmF0aW9uIGhhc1xuK1x0ICogcmVwcm9ncmFtbWVkIGhhcmR3YXJlIGFuZCBzZXQgbXFwcmlvX3JhdGVfbGltaXQuXG4rXHQgKi9cbitcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duKSB7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3NraXBfdGVhcmRvd24gPSBmYWxzZTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZykge1xuK1x0XHRvdHgyX21xcHJpb19yZXBsYWNlX2ZhaWxlZF9tc2cobmV0ZGV2LCBOVUxMKTtcbitcdFx0cGZ2Zi1cdTAwM2VtcXByaW9fcmVwbGFjZV9wZW5kaW5nID0gZmFsc2U7XG4rXHRcdHJldHVybiAtRUlPO1xuK1x0fVxuK1xuK1x0LyogU2tpcCB0aGUgbmV0ZGV2IHJlc3RhcnQgd2hlbiBtcXByaW8gb2ZmbG9hZCB3YXMgbm90IGFjdGl2ZS4gKi9cbitcdGlmICghaGFkX21xcHJpbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkb3duX2VyciA9IG90eDJfbXFwcmlvX2Rvd24ocGZ2Zik7XG4rXG4rXHRpZiAoaWZfdXApIHtcbitcdFx0ZXJyID0gb3R4Ml9tcXByaW9fcmVzdGFydF9uZXRkZXYobmV0ZGV2LCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiBkb3duX2Vycjtcbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX21xcHJpbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0c3RydWN0IHRjX21xcHJpb19xb3B0X29mZmxvYWQgKm1xcHJpbylcbit7XG4rXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IHRjX21xcHJpb19xb3B0ICpxb3B0ID0gXHUwMDI2bXFwcmlvLVx1MDAzZXFvcHQ7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sgPSBtcXByaW8tXHUwMDNlZXh0YWNrO1xuK1x0Ym9vbCByZXBsYWNpbmcgPSBwZnZmLVx1MDAzZW1xcHJpby5yYXRlX2xpbWl0O1xuK1x0Ym9vbCBpZl91cCA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTtcbitcdGludCB0YywgdHhxLCBlcnIsIGk7XG4rXG4rXHRpZiAoIXFvcHQtXHUwMDNlaHcpXG4rXHRcdHJldHVybiBvdHgyX3RlYXJkb3duX3RjX21xcHJpbyhwZnZmLCBtcXByaW8pO1xuK1xuK1x0aWYgKCFpZl91cCkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJtcXByaW86IHNldHVwIHJlcXVpcmVzIGludGVyZmFjZSBVUFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0aWYgKG1xcHJpby1cdTAwM2VzaGFwZXIgIT0gVENfTVFQUklPX1NIQVBFUl9CV19SQVRFKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIlVuc3VwcG9ydGVkIG1xcHJpbyBzaGFwZXIgJSN4XFxuXCIsIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCJVbnN1cHBvcnRlZCBtcXByaW8gc2hhcGVyICUjeFwiLFxuK1x0XHRcdFx0ICAgICAgIG1xcHJpby1cdTAwM2VzaGFwZXIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoIXRlc3RfYml0KFFPU19DSVJfUElSX1NVUFBPUlQsIFx1MDAyNnBmdmYtXHUwMDNlaHcuY2FwX2ZsYWcpKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCByZXF1aXJlcyBDSVIrUElSIHN1cHBvcnRcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgcmVxdWlyZXMgQ0lSK1BJUiBzdXBwb3J0XCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAoaXNfb3R4Ml9zZHBfcmVwKHBmdmYtXHUwMDNlcGRldikpIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwibXFwcmlvOiBiYW5kd2lkdGggb2ZmbG9hZCBub3Qgc3VwcG9ydGVkIG9uIFNEUCByZXBcXG5cIik7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogYmFuZHdpZHRoIG9mZmxvYWQgbm90IHN1cHBvcnRlZCBvbiBTRFAgcmVwXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAob3R4Ml9xb3NfaHRiX2FjdGl2ZShwZnZmKSkge1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXFxuXCIpO1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBIVEIgaXMgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRpZiAocGZ2Zi1cdTAwM2VwZmNfZW4pIHtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0ICAgXCJtcXByaW86IGNhbm5vdCBlbmFibGUgb2ZmbG9hZCB3aGlsZSBQRkMgaXMgZW5hYmxlZFxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgUEZDIGlzIGVuYWJsZWRcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGlmIChwZnZmLVx1MDAzZXhkcF9wcm9nKSB7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwibXFwcmlvOiBjYW5ub3QgZW5hYmxlIG9mZmxvYWQgd2hpbGUgWERQIGlzIGFjdGl2ZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUpXG4rXHRcdFx0bWluX3JhdGUgPSBtcXByaW8tXHUwMDNlbWluX3JhdGVbdGNdO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y107XG4rXG4rXHRcdGlmIChtaW5fcmF0ZSBcdTAwMjZcdTAwMjYgbWF4X3JhdGUgXHUwMDI2XHUwMDI2IG1pbl9yYXRlIFx1MDAzZSBtYXhfcmF0ZSkge1xuK1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2LFxuK1x0XHRcdFx0ICAgXCJtaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJtaW5fcmF0ZSAlbGx1IGV4Y2VlZHMgbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWRcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCBtYXhfcmF0ZSwgdGMpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChtcXByaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IFRDX01RUFJJT19GX01JTl9SQVRFKSB7XG4rXHRcdFx0ZXJyID0gb3R4Ml9tcXByaW9fdmFsaWRhdGVfdGNfcmF0ZShuZXRkZXYsIGV4dGFjaywgbWluX3JhdGUsXG4rXHRcdFx0XHRcdFx0XHQgICBxY291bnQsIHRjLCBcIm1pblwiKTtcbitcdFx0XHRpZiAoZXJyKVxuK1x0XHRcdFx0cmV0dXJuIGVycjtcbitcdFx0fVxuK1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSkge1xuK1x0XHRcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3RjX3JhdGUobmV0ZGV2LCBleHRhY2ssIG1heF9yYXRlLFxuK1x0XHRcdFx0XHRcdFx0ICAgcWNvdW50LCB0YywgXCJtYXhcIik7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUlOX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtaW5fcmF0ZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWluX3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1pbl9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0aWYgKG1xcHJpby1cdTAwM2VmbGFncyBcdTAwMjYgVENfTVFQUklPX0ZfTUFYX1JBVEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhb3R4Ml9tcXByaW9fcmF0ZV92YWxpZChvdHgyX21xcHJpb19wZXJfcXVldWVfcmF0ZShtYXhfcmF0ZSxcbitcdFx0XHRcdFx0XHRcdFx0ICAgICAgIHFjb3VudCkpKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcXG5cIixcbitcdFx0XHRcdCAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4rXHRcdFx0XHRcdCAgICAgICBcIm1xcHJpbzogbWF4X3JhdGUgJWxsdSBmb3IgdGMgJWQgaXMgb3V0c2lkZSBoYXJkd2FyZSBsaW1pdHNcIixcbitcdFx0XHRcdFx0ICAgICAgIG1heF9yYXRlLCB0Yyk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3ZhbGlkYXRlX3R4cXMobmV0ZGV2LCBleHRhY2ssIHFvcHQpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG90eDJfbXFwcmlvX3Jlc3RhcnRfbmV0ZGV2KHBmdmYtXHUwMDNlbmV0ZGV2LCB0cnVlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHQvKiBUT0RPOiBGYWlsdXJlcyBmcm9tIGhlcmUgdGhyb3VnaCB0aGUgZW5kIG9mIGluaXQoKSAoZS5nLiAtRU5PTUVNXG4rXHQgKiBmcm9tIG90eDJfbXFwcmlvX2FsbG9jX2NhY2hlKCksIG1ib3ggZXJyb3JzIGZyb21cbitcdCAqIG90eDJfbml4X3RtX2NsZWFyX3F1ZXVlX3NoYXBlcigpIG9yIG90eDJfbml4X3RtX3NldF9xdWV1ZV9zaGFwZXIoKSlcbitcdCAqIHJlYWNoIGNsZWFudXAuIE9uIHRjIHFkaXNjIHJlcGxhY2UgdGhlIG9sZCBtcXByaW8gcmVtYWlucyBncmFmdGVkLFxuK1x0ICogc28gY2xlYW51cCByZXR1cm5zIHdpdGhvdXQgcm9sbGluZyBiYWNrIG5ldGRldiBUQyBtYXBwaW5nLCB0aGUgcmF0ZVxuK1x0ICogY2FjaGUsIG9yIHBhcnRpYWxseSByZXByb2dyYW1tZWQgaGFyZHdhcmUgc2hhcGVycy4gUmVzdG9yZSB0aGUgcHJpb3JcbitcdCAqIGNvbmZpZ3VyYXRpb24gaW5zdGVhZCBvZiBjYWxsaW5nIG90eDJfbXFwcmlvX2Rvd24oKSBhbmQgYm91bmNpbmcgdGhlXG4rXHQgKiBpbnRlcmZhY2UgYSBzZWNvbmQgdGltZS5cbitcdCAqL1xuK1x0ZXJyID0gb3R4Ml9tcXByaW9fYWxsb2NfY2FjaGUocGZ2Zik7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGNsZWFudXA7XG4rXG4rXHQvKiBvdHgyX21xcHJpb191cCgpIG1heSBoYXZlIHJlc3RvcmVkIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGR1cmluZ1xuK1x0ICogdGhlIHJlc3RhcnQgYWJvdmUuIENsZWFyIGV2ZXJ5IE1EUSBzaGFwZXIgYmVmb3JlIGFwcGx5aW5nIHRoZSBuZXdcbitcdCAqIG1hcHBpbmcgc28gcXVldWVzIGRyb3BwZWQgZnJvbSB0aGUgVEMgbGF5b3V0IGRvIG5vdCBrZWVwIHN0YWxlXG4rXHQgKiBsaW1pdHMgaW4gaGFyZHdhcmUuXG4rXHQgKi9cbitcdGlmIChvdHgyX3R4c2NocV9pc19hbGxvY2F0ZWQocGZ2ZikpIHtcbitcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fY2xlYXJfcXVldWVfc2hhcGVyKHBmdmYpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdGdvdG8gY2xlYW51cDtcbitcdH1cbitcbitcdHBmdmYtXHUwMDNlbXFwcmlvLmZsYWdzID0gbXFwcmlvLVx1MDAzZWZsYWdzO1xuK1xuK1x0Zm9yICh0YyA9IDA7IHRjIFx1MDAzYyBxb3B0LVx1MDAzZW51bV90YzsgdGMrKykge1xuK1x0XHR1NjQgbWluX3JhdGUgPSAwLCBtYXhfcmF0ZSA9IDA7XG4rXHRcdHUzMiBxY291bnQgPSBxb3B0LVx1MDAzZWNvdW50W3RjXTtcbitcbitcdFx0LyogUmF0ZXMgb21pdHRlZCBmcm9tIHRjIG1xcHJpbyBhcmUgcGFzc2VkIGFzIHplcm8gYW5kIGJvdGggTURRXG4rXHRcdCAqIHNoYXBlciByZWdpc3RlcnMgYXJlIHByb2dyYW1tZWQ7IHNlZVxuK1x0XHQgKiBvdHgyX25peF90bV9zZXRfcXVldWVfc2hhcGVyKCkuXG4rXHRcdCAqL1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NSU5fUkFURSlcbitcdFx0XHRtaW5fcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtaW5fcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1x0XHRpZiAobXFwcmlvLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ19NUVBSSU9fRl9NQVhfUkFURSlcbitcdFx0XHRtYXhfcmF0ZSA9IG90eDJfbXFwcmlvX3Blcl9xdWV1ZV9yYXRlKG1xcHJpby1cdTAwM2VtYXhfcmF0ZVt0Y10sXG4rXHRcdFx0XHRcdFx0XHQgICAgICBxY291bnQpO1xuK1xuK1x0XHRmb3IgKHR4cSA9IHFvcHQtXHUwMDNlb2Zmc2V0W3RjXTtcbitcdFx0ICAgICB0eHEgXHUwMDNjIHFvcHQtXHUwMDNlb2Zmc2V0W3RjXSArIHFjb3VudDsgdHhxKyspIHtcbitcdFx0XHRuZXRkZXZfZGJnKG5ldGRldixcbitcdFx0XHRcdCAgIFwibXFwcmlvOiB0YyAlZCB0eHEgJWQgbWluX3JhdGUgJWxsdSBtYXhfcmF0ZSAlbGx1XFxuXCIsXG4rXHRcdFx0XHQgICB0YywgdHhxLCBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1xuK1x0XHRcdHBmdmYtXHUwMDNlbXFwcmlvLm1pbl9yYXRlW3R4cV0gPSBtaW5fcmF0ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpby5tYXhfcmF0ZVt0eHFdID0gbWF4X3JhdGU7XG4rXG4rXHRcdFx0ZXJyID0gb3R4Ml9uaXhfdG1fc2V0X3F1ZXVlX3NoYXBlcihwZnZmLCB0eHEsXG4rXHRcdFx0XHRcdFx0XHQgICBtaW5fcmF0ZSwgbWF4X3JhdGUpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4rXHRcdH1cbitcdH1cbitcbitcdG5ldGRldl9zZXRfbnVtX3RjKG5ldGRldiwgcW9wdC1cdTAwM2VudW1fdGMpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcW9wdC1cdTAwM2VudW1fdGM7IGkrKylcbitcdFx0bmV0ZGV2X3NldF90Y19xdWV1ZShuZXRkZXYsIGksIHFvcHQtXHUwMDNlY291bnRbaV0sIHFvcHQtXHUwMDNlb2Zmc2V0W2ldKTtcbitcbitcdHFvcHQtXHUwMDNlaHcgPSBUQ19NUVBSSU9fSFdfT0ZGTE9BRF9UQ1M7XG4rXG4rXHRpZiAocmVwbGFjaW5nKVxuK1x0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rY2xlYW51cDpcbitcdC8qIENsZWFyIGhhcmR3YXJlIG9mZmxvYWQgb24gdGhpcyByZWplY3RlZCByZXF1ZXN0IHNvIGEgZmFpbGVkIHJlcGxhY2VcbitcdCAqIGRvZXMgbm90IGxlYXZlIHRjIHJlcG9ydGluZyBvZmZsb2FkIGZvciBkcml2ZXIgc3RhdGUgdGhhdCB3YXMgdG9yblxuK1x0ICogZG93biB3aGlsZSB0aGUgcHJldmlvdXMgbXFwcmlvIHJlbWFpbnMgZ3JhZnRlZC5cbitcdCAqL1xuK1x0cW9wdC1cdTAwM2VodyA9IDA7XG4rXHRpZiAocmVwbGFjaW5nKSB7XG4rXHRcdG90eDJfbXFwcmlvX3JlcGxhY2VfZmFpbGVkX21zZyhuZXRkZXYsIGV4dGFjayk7XG4rXHRcdHBmdmYtXHUwMDNlbXFwcmlvX3JlcGxhY2VfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbitcdH1cbitcdG90eDJfdGVhcmRvd25fdGNfbXFwcmlvKHBmdmYsIG1xcHJpbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IG90eDJfc2V0dXBfdGNfcm9vdChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsXG4rXHRcdFx0ICAgICAgc3RydWN0IHRjX3Jvb3RfcW9wdF9vZmZsb2FkICpyb290KVxuK3tcbitcdHN3aXRjaCAocm9vdC1cdTAwM2Vjb21tYW5kKSB7XG4rXHRjYXNlIFRDX1JPT1RfR1JBRlQ6XG4rXHRcdGlmIChyb290LVx1MDAzZWluZ3Jlc3MpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmIChwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcpIHtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19za2lwX3RlYXJkb3duID0gdHJ1ZTtcbitcdFx0XHRwZnZmLVx1MDAzZW1xcHJpb19yZXBsYWNlX3BlbmRpbmcgPSBmYWxzZTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModm9pZCAqdHlwZV9kYXRhKVxuK3tcbitcdHN0cnVjdCB0Y19xdWVyeV9jYXBzX2Jhc2UgKmJhc2UgPSB0eXBlX2RhdGE7XG4rXHRzdHJ1Y3QgdGNfbXFwcmlvX2NhcHMgKmNhcHM7XG4rXG4rXHRpZiAoYmFzZS1cdTAwM2V0eXBlICE9IFRDX1NFVFVQX1FESVNDX01RUFJJTylcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0Y2FwcyA9IGJhc2UtXHUwMDNlY2FwcztcbitcdGNhcHMtXHUwMDNldmFsaWRhdGVfcXVldWVfY291bnRzID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgb3R4Ml9zZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSxcbiBcdFx0ICB2b2lkICp0eXBlX2RhdGEpXG4ge1xuIFx0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIFRDX1FVRVJZX0NBUFM6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3F1ZXJ5X2NhcHModHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfQkxPQ0s6XG4gXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX2Jsb2NrKG5ldGRldiwgdHlwZV9kYXRhKTtcbiBcdGNhc2UgVENfU0VUVVBfUURJU0NfSFRCOlxuIFx0XHRyZXR1cm4gb3R4Ml9zZXR1cF90Y19odGIobmV0ZGV2LCB0eXBlX2RhdGEpO1xuK1x0Y2FzZSBUQ19TRVRVUF9RRElTQ19NUVBSSU86XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX21xcHJpbyhuZXRkZXYsIHR5cGVfZGF0YSk7XG4rXHRjYXNlIFRDX1NFVFVQX1JPT1RfUURJU0M6XG4rXHRcdHJldHVybiBvdHgyX3NldHVwX3RjX3Jvb3QobmV0ZGV2X3ByaXYobmV0ZGV2KSwgdHlwZV9kYXRhKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbmluZGV4IDY5YzA5MTFlMjhlOTEuLmNmMDAyMTc4ODM1NjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9xb3MuY1xuQEAgLTExOCw2ICsxMTgsOSBAQCBzdGF0aWMgdm9pZCBvdHgyX2NvbmZpZ19zY2hlZF9zaGFwaW5nKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZixcbiBcdC8qIGNvbmZpZ3VyZSBQSVIgKi9cbiBcdG1heHJhdGUgPSAobm9kZS1cdTAwM2VyYXRlIFx1MDAzZSBub2RlLVx1MDAzZWNlaWwpID8gbm9kZS1cdTAwM2VyYXRlIDogbm9kZS1cdTAwM2VjZWlsO1xuIFxuK1x0LyogNjU1MzYgaXMgdGhlIGtlcm5lbC1zaWRlIGRlZmF1bHQgYnVyc3Qgd2hlbiBIVEIgZG9lcyBub3Qgc3VwcGx5IGFuXG4rXHQgKiBleHBsaWNpdCB2YWx1ZSwgbm90IHRoZSBOSVggaGFyZHdhcmUgbWF4aW11bSAoQ04xMEtfTUFYX0JVUlNUX1NJWkUpLlxuK1x0ICovXG4gXHRjZmctXHUwMDNlcmVndmFsWypudW1fcmVnc10gPVxuIFx0XHRvdHgyX2dldF90eHNjaHFfcmF0ZV9yZWd2YWwocGZ2ZiwgbWF4cmF0ZSwgNjU1MzYpO1xuIFx0KCpudW1fcmVncykrKztcbkBAIC0xNzI5LDExICsxNzMyLDIzIEBAIHZvaWQgb3R4Ml9xb3NfY29uZmlnX3R4c2NocShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4gXHRvdHgyX3Fvc19yb290X2Rlc3Ryb3kocGZ2Zik7XG4gfVxuIFxuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpXG4re1xuK1x0cmV0dXJuIG90eDJfc3dfbm9kZV9maW5kKHBmdmYsIE9UWDJfUU9TX1JPT1RfQ0xBU1NJRCk7XG4rfVxuK1xuIGludCBvdHgyX3NldHVwX3RjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKmh0YilcbiB7XG4gXHRzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCByZXM7XG4gXG4rXHRpZiAocGZ2Zi1cdTAwM2VtcXByaW8ucmF0ZV9saW1pdCBcdTAwMjZcdTAwMjZcbitcdCAgICBodGItXHUwMDNlY29tbWFuZCAhPSBUQ19IVEJfREVTVFJPWSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoaHRiLVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdCAgIFwiSFRCIG9mZmxvYWQgY2Fubm90IGJlIHVzZWQgd2l0aCBtcXByaW8gYmFuZHdpZHRoIG9mZmxvYWQgYWN0aXZlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHRzd2l0Y2ggKGh0Yi1cdTAwM2Vjb21tYW5kKSB7XG4gXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4gXHRcdHJldHVybiBvdHgyX3Fvc19yb290X2FkZChwZnZmLCBodGItXHUwMDNlcGFyZW50X2NsYXNzaWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG5pbmRleCAyMjFiZDA0MzhmNjAzLi5jNzc3Y2M0MmVhYzljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmhcbkBAIC0yMyw2ICsyMyw3IEBAIGVudW0gcW9zX3NtcV9vcGVyYXRpb25zIHtcbiB1NjQgb3R4Ml9nZXRfdHhzY2hxX3JhdGVfcmVndmFsKHN0cnVjdCBvdHgyX25pYyAqbmljLCB1NjQgbWF4cmF0ZSwgdTMyIGJ1cnN0KTtcbiBcbiBpbnQgb3R4Ml9zZXR1cF90Y19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB0Y19odGJfcW9wdF9vZmZsb2FkICpodGIpO1xuK2Jvb2wgb3R4Ml9xb3NfaHRiX2FjdGl2ZShzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYpO1xuIGludCBvdHgyX3Fvc19nZXRfcWlkKHN0cnVjdCBvdHgyX25pYyAqcGZ2Zik7XG4gdm9pZCBvdHgyX3Fvc19mcmVlX3FpZChzdHJ1Y3Qgb3R4Ml9uaWMgKnBmdmYsIGludCBxaWR4KTtcbiBpbnQgb3R4Ml9xb3NfZW5hYmxlX3NxKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgaW50IHFpZHgpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NTI6MDMuOTA2MzkzNzc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyODg2NTQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBtcXByaW8gT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBNYXJ2ZWxsIE9jdGVvblRYMiBOSUMgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIE11bHRpLVF1ZXVlIFByaW9yaXR5IChtcXByaW8pIGJhbmR3aWR0aCBvZmZsb2FkLiBNeSBpbW1lZGlhdGUgdGhvdWdodHMgYXJlIHRoYXQgdGhpcyBsb29rcyBsaWtlIGEgc3RhbmRhcmQgaW1wbGVtZW50YXRpb24sIGludm9sdmluZyB0aGUgdXN1YWwgbW9kaWZpY2F0aW9ucyB0byBzZXR1cCBmdW5jdGlvbnMgYW5kIG90aGVyIE5JQy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSBzZWUgY2hhbmdlcyB0byBgb3R4Ml9zZXR1cF90Y19tcXByaW9gLCBgb3R4Ml9zZXR1cF90Y2AsIHRoZSBUWCBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMgKGBvdHgyX3R4c2NocV9jb25maWdgLCBgb3R4Ml90eHNjaF9hbGxvY2ApLCBEQ0IgY29uZmlndXJhdGlvbnMsIGNoYW5uZWwgc2V0dXAsIGFuZCBldmVuIFhEUC1yZWxhdGVkIGZ1bmN0aW9ucy4gUHJldHR5IHN0YW5kYXJkIGZhcmUgZm9yIGVuYWJsaW5nIGEgZmVhdHVyZSBsaWtlIHRoaXMuXG5cbkJ1dCB3YWl0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgbWVldHMgdGhlIHByb21wdCdzIGNyaXRlcmlhIGZvciBXb3J0aEZ1enppbmc9ZmFsc2UuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIHNraXAgcGF0Y2hlcyB0aGF0IGFyZSB2ZW5kb3Itc3BlY2lmaWMgY29kZSB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLiBBbmQgaGVyZSwgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgTWFydmVsbCBPY3Rlb25UWDIuIFRoYXQncyBhIGRlZGljYXRlZCBoYXJkd2FyZSBOSUMuIEl0J3Mgbm90IGxpa2UgaXQncyBhIGdlbmVyaWMgTklDIHRoYXQgUUVNVSBjb3VsZCBlYXNpbHkgZW11bGF0ZS5cblxuU28gbXkga2V5IHF1ZXN0aW9uIGlzOiBJcyB0aGlzIE1hcnZlbGwgT2N0ZW9uVFgyIE5JQyBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBGcm9tIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBraW5kcyBvZiBkZXZpY2VzLCBPY3Rlb25UWDIgKG9yIHJhdGhlciwgdGhlIFJWVSBvciBOSVggcGFydHMgb2YgaXQpIGlzIGFsbW9zdCBhbHdheXMgYSBwaHlzaWNhbCBOSUMgZm91bmQgaW4gTWFydmVsbCBTb0NzLiBJIGRvbid0IHJlY2FsbCBzZWVpbmcgZ29vZCBlbXVsYXRpb24gZm9yIGl0IGluIHN0YW5kYXJkIFFFTVUsIGJlY2F1c2Ugb2YgaXRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBkZXNpZ24uIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBJZiBteSBtZW1vcnkgaXMgcmlnaHQsIGFuZCB0aGlzICppc24ndCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlbiBJIHdpbGwgcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSwgYXMgdGhpcyBmYWxscyB1bmRlciB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHJ1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzQ0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NTI6MTAuOTM1MjYyMTE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2OTU0MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jdGVvbnR4MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4MlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTI3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6Mjg6I2RlZmluZSBERUJVR0ZTX0RJUl9OQU1FIFxcXCJvY3Rlb250eDJcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0yOS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM9NDAxMz1zdGF0aWMgY29uc3QgY2hhciAqcnZ1X2dldF9kYmdfZGlyX25hbWUoc3RydWN0IHJ2dSAqcnZ1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy00MDIwLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjQwMjE6XFx0XFx0cmV0dXJuIFxcXCJvY3Rlb250eDJcXFwiO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtNDAyMi19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGV2bGluay5jLTE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZXZsaW5rLmM6MTY6I2RlZmluZSBEUlZfTkFNRSBcXFwib2N0ZW9udHgyLWFmXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZXZsaW5rLmMtMTctXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU9MTg9cnZ1X25pY3BmLSQoQ09ORklHX1hGUk1fT0ZGTE9BRCkgKz0gY24xMGtfaXBzZWMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL25pYy9NYWtlZmlsZS0xOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvTWFrZWZpbGU6MjA6Y2NmbGFncy15ICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmgtMTctI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL3NpbGljb25zLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL290eDJfY29tbW9uLmg6MTg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NvYy9tYXJ2ZWxsL29jdGVvbnR4Mi9hc20uaFxcdTAwM2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvb3R4Ml9jb21tb24uaC0xOS0jaW5jbHVkZSBcXHUwMDNjbmV0L21hY3NlYy5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jPTExMTg9c3RhdGljIGludCBvdHgyX3Fvc192YWxpZGF0ZV9xdWFudHVtKHN0cnVjdCBvdHgyX25pYyAqcGZ2ZiwgdTMyIHF1YW50dW0pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmMtMTEyMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9uaWMvcW9zLmM6MTEyMzpcXHQvKiBNYXggUm91bmQgcm9iaW4gd2VpZ2h0IHN1cHBvcnRlZCBieSBvY3Rlb250eDIgYW5kIENOMTBLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvbmljL3Fvcy5jLTExMjQtXFx0ICogaXMgZGlmZmVyZW50LiBWYWxpZGF0ZSBhY2NvcmRpbmdseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjoxMC45ODIyMjUzMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzA2OTc5NjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1hcnZlbGwgT2N0ZW9uVFgyIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIE1hcnZlbGwgT2N0ZW9uVFgyIGRyaXZlciwgdGhlIG9uZSB3ZSdyZSBkZWFsaW5nIHdpdGgsIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGggYSBwaHlzaWNhbCwgZGVkaWNhdGVkIE5ldHdvcmsgSW50ZXJmYWNlIENhcmQgKE5JQykuIFRoaXMgaXMgcmVhbCwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gQW5kIHRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgaGVyZSwgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSwgdGhpcyBkcml2ZXIgaXMgbm90IGEgZ29vZCBmaXQgZm9yIFdvcnRoRnV6emluZy4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgbWVudGlvbnMgZHJpdmVycyBpbiB0aGUgcmVhbG0gb2YgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc1wiIHdoaWNoIGRlcGVuZCBvbiAqYWN0dWFsKiBQQ0llIGhhcmR3YXJlLCBub3QgdGhlIGVtdWxhdGVkIGtpbmQgeW91J2QgZmluZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgZHJpdmVyIGRlZmluaXRlbHkgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBJJ20gc2VlaW5nIFwicGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIGluIGJvdGggdGhlIGRyaXZlciBjaGFyYWN0ZXJpc3RpY3MgYW5kIHRoZSBleGNsdXNpb24gY3JpdGVyaWEuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgdG8gZmFsc2UuIEl0J3MganVzdCBub3QgYXBwcm9wcmlhdGUgZm9yIHRoaXMgcGFydGljdWxhciBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczODEsIk91dHB1dFRva2VucyI6ODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDk6NTI6MTUuMjg5MjA4MTc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDcxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgTWFydmVsbCBPY3Rlb25UWDIgTklDIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwOTo1MjoxNS4yODkyMzg2NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxdcjh[1] Phase: Running StartedAt: 2026-08-13 09:52:45 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxdcjh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 09:52:45 +0000 UTC FinishedAt: 2026-08-13 09:52:50 +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,}