Name: series-workflowhtwpc Phase: Failed StartedAt: 2026-08-17 02:19:14 +0000 UTC FinishedAt: 2026-08-17 02:21:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtwpc[0] Phase: Succeeded StartedAt: 2026-08-17 02:19:14 +0000 UTC FinishedAt: 2026-08-17 02:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtwpc[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 02:19:14 +0000 UTC FinishedAt: 2026-08-17 02:21:35 +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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhpbmljMyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBhZGFwdGVyIGRyaXZlciAoSHVhd2VpIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGQgZXRodG9vbCBzdGF0aXN0aWNzIGFuZCBjb2FsZXNjZSBzZXR0aW5ncywgd2hpY2ggaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWVlZjYzM2EwNjI0ZDBlNDI5MTE2YTQwMWRmZDI2MjdiMzlhZjE0OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAyOjIxOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY1xuaW5kZXggOTBmYzE2Mjg4ZGU5NS4uODlhN2JhMjExMTczMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jXG5AQCAtMTcsNiAmIzQzOzE3LDExIEBAXG4gI2luY2x1ZGUgXCYjMzQ7aGluaWMzX25pY19jZmcuaFwmIzM0O1xuIFxuICNkZWZpbmUgSElOSUMzX01HTVRfVkVSU0lPTl9NQVhfTEVOICAgICAzMlxuJiM0MzsvKiBDb2FsZXNjZSB0aW1lIHByb3BlcnRpZXMgaW4gbWljcm9zZWNvbmRzICovXG4mIzQzOyNkZWZpbmUgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUICAgICA4XG4mIzQzOyNkZWZpbmUgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQgICAgICAgICA1XG4mIzQzOyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVQgICAgICAoMjU1ICogQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKVxuJiM0MzsjZGVmaW5lIENPQUxFU0NFX01BWF9USU1FUl9DRkcgICAgICAgICAgKDI1NSAqIENPQUxFU0NFX1RJTUVSX0NGR19VTklUKVxuIFxuIHN0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKVxuQEAgLTQwOSwxNCAmIzQzOzQxNCw3OTEgQEAgaGluaWMzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgaGluaWMzX3N0YXRzIHtcbiYjNDM7XHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbiYjNDM7XHRpbnQgIG9mZnNldDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSElOSUMzX1NUQVRfU0laRV9DSEVDSyh0eXBlLCBtZW1iZXIpIFxcXG4mIzQzO1x0QlVJTERfQlVHX09OX1pFUk8oc2l6ZW9mX2ZpZWxkKHR5cGUsIG1lbWJlcikgIT0gc2l6ZW9mKHU2NCkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhJTklDM19SWFFfU1RBVChfc3RhdF9pdGVtKSB7IFxcXG4mIzQzO1x0Lm5hbWUgICA9IFwmIzM0O3J4cSVkX1wmIzM0OyNfc3RhdF9pdGVtLCBcXFxuJiM0MztcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbiYjNDM7XHRcdCAgJiM0MzsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGhpbmljM19yeHFfc3RhdHMsIFxcXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuJiM0MztcdC5uYW1lICAgPSBcJiMzNDt0eHElZF9cJiMzNDsjX3N0YXRfaXRlbSwgXFxcbiYjNDM7XHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGhpbmljM190eHFfc3RhdHMsIF9zdGF0X2l0ZW0pIFxcXG4mIzQzO1x0XHQgICYjNDM7IDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBcXFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIF9zdGF0X2l0ZW0pIFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19yeF9xdWV1ZV9zdGF0c1tdID0ge1xuJiM0MztcdEhJTklDM19SWFFfU1RBVChjc3VtX2Vycm9ycyksXG4mIzQzO1x0SElOSUMzX1JYUV9TVEFUKG90aGVyX2Vycm9ycyksXG4mIzQzO1x0SElOSUMzX1JYUV9TVEFUKHJ4X2J1Zl9lbXB0eSksXG4mIzQzO1x0SElOSUMzX1JYUV9TVEFUKGFsbG9jX3NrYl9lcnIpLFxuJiM0MztcdEhJTklDM19SWFFfU1RBVChhbGxvY19yeF9idWZfZXJyKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM190eF9xdWV1ZV9zdGF0c1tdID0ge1xuJiM0MztcdEhJTklDM19UWFFfU1RBVChidXN5KSxcbiYjNDM7XHRISU5JQzNfVFhRX1NUQVQoc2tiX3BhZF9lcnIpLFxuJiM0MztcdEhJTklDM19UWFFfU1RBVChvZmZsb2FkX2Nvd19za2JfZXJyKSxcbiYjNDM7XHRISU5JQzNfVFhRX1NUQVQobWFwX2ZyYWdfZXJyKSxcbiYjNDM7XHRISU5JQzNfVFhRX1NUQVQodW5rbm93bl90dW5uZWxfcGt0KSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSElOSUMzX0ZVTkNfU1RBVChfc3RhdF9pdGVtKSB7XHRcXFxuJiM0MztcdC5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXFxcbiYjNDM7XHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzLCBfc3RhdF9pdGVtKSBcXFxuJiM0MztcdFx0ICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIFxcXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBoaW5pYzNfc3RhdHMgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW10gPSB7XG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF91bmljYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9tdWx0aWNhc3RfcGt0c192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9tdWx0aWNhc3RfYnl0ZXNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0KSxcbiYjNDM7XG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQocnhfdW5pY2FzdF9ieXRlc192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfcGt0c192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfYnl0ZXNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0KSxcbiYjNDM7XG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9kaXNjYXJkX3Zwb3J0KSxcbiYjNDM7XHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Rpc2NhcmRfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfZXJyX3Zwb3J0KSxcbiYjNDM7XHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Vycl92cG9ydCksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhJTklDM19QT1JUX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuJiM0MztcdC5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXFxcbiYjNDM7XHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbiYjNDM7XHRcdCAgJiM0MzsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgXFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcG9ydF9zdGF0c1tdID0ge1xuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2ZyYWdtZW50X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3VuZGVyc2l6ZV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcm1pbl9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9qYWJiZXJfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfYmFkX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9vY3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF90b3RhbF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmlfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkwX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkxX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkyX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkzX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk0X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk1X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk2X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk3X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Vycl9hbGxfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfZ29vZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9mcm9tX2FwcF9iYWRfcGt0X251bSksXG4mIzQzO1xuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZGVybWluX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X2JhZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9iYWRfb2N0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdG90YWxfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5pX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpM19wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpN19wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmZpbHRlcl9wa3RfbnVtKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGluaWMzX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBzc2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRpbnQgY291bnQsIHFfbnVtO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdHFfbnVtID0gbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzO1xuJiM0MztcdFx0Y291bnQgPSBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cykgJiM0MztcbiYjNDM7XHRcdFx0KEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKSAmIzQzO1xuJiM0MztcdFx0XHQgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpKSAqXG4mIzQzO1x0XHRcdHFfbnVtO1xuJiM0MztcbiYjNDM7XHRcdGlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuJiM0MztcdFx0XHRjb3VudCAmIzQzOz0gQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2Rydl9xdWV1ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHR4cV9zdGF0cyA9IHt9O1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzIHJ4cV9zdGF0cyA9IHt9O1xuJiM0MztcdHUxNiBpID0gMCwgaiwgcWlkO1xuJiM0MztcdGNoYXIgKnA7XG4mIzQzO1xuJiM0MztcdGZvciAocWlkID0gMDsgcWlkIFx1MDAzYyBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IHFpZCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbmljX2Rldi1cdTAwM2V0eHFzKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRoaW5pYzNfdHhxX2dldF9zdGF0cyhcdTAwMjZuaWNfZGV2LVx1MDAzZXR4cXNbcWlkXSwgXHUwMDI2dHhxX3N0YXRzKTtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHAgPSAoY2hhciAqKVx1MDAyNnR4cV9zdGF0cyAmIzQzO1xuJiM0MztcdFx0XHQgICAgaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcbiYjNDM7XHRcdFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGkgPSBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHMgKiBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7XG4mIzQzO1x0Zm9yIChxaWQgPSAwOyBxaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgcWlkJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuaWNfZGV2LVx1MDAzZXJ4cXMpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGhpbmljM19yeHFfZ2V0X3N0YXRzKFx1MDAyNm5pY19kZXYtXHUwMDNlcnhxc1txaWRdLCBcdTAwMjZyeHFfc3RhdHMpO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpOyBqJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cCA9IChjaGFyICopXHUwMDI2cnhxX3N0YXRzICYjNDM7XG4mIzQzO1x0XHRcdCAgICBoaW5pYzNfcnhfcXVldWVfc3RhdHNbal0ub2Zmc2V0O1xuJiM0MztcdFx0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBoaW5pYzNfZ2V0X2V0aHRvb2xfcG9ydF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xuJiM0MztcdHUxNiBpID0gMCwgajtcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHBzID0ga21hbGxvY19vYmooKnBzKTtcbiYjNDM7XHRpZiAoIXBzKVxuJiM0MztcdFx0Z290byBlcnJfemVyb19zdGF0cztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHMpO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgcG9ydCBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3plcm9fc3RhdHM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwID0gKGNoYXIgKilwcyAmIzQzOyBoaW5pYzNfcG9ydF9zdGF0c1tqXS5vZmZzZXQ7XG4mIzQzO1x0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaTtcbiYjNDM7XG4mIzQzO2Vycl96ZXJvX3N0YXRzOlxuJiM0MztcdG1lbXNldChcdTAwMjZkYXRhW2ldLCAwLCBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKSAqIHNpemVvZigqZGF0YSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaSAmIzQzOyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XG4mIzQzO1x0dTE2IGkgPSAwLCBqO1xuJiM0MztcdGNoYXIgKnA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF92cG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgaGluaWMzX2dsb2JhbF9mdW5jX2lkKG5pY19kZXYtXHUwMDNlaHdkZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2dnBvcnRfc3RhdHMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfZnVuY3Rpb25fc3RhdHMpOyBqJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHAgPSAoY2hhciAqKVx1MDAyNnZwb3J0X3N0YXRzICYjNDM7IGhpbmljM19mdW5jdGlvbl9zdGF0c1tqXS5vZmZzZXQ7XG4mIzQzO1x0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cdTAwM2Vod2RldikpXG4mIzQzO1x0XHRpICYjNDM7PSBoaW5pYzNfZ2V0X2V0aHRvb2xfcG9ydF9zdGF0cyhuZXRkZXYsIGRhdGEgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdGhpbmljM19nZXRfZHJ2X3F1ZXVlX3N0YXRzKG5ldGRldiwgZGF0YSAmIzQzOyBpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBoaW5pYzNfZ2V0X2h3X3N0YXRzX3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1lbWNweShwLCBoaW5pYzNfZnVuY3Rpb25fc3RhdHNbaV0ubmFtZSwgRVRIX0dTVFJJTkdfTEVOKTtcbiYjNDM7XHRcdHAgJiM0Mzs9IEVUSF9HU1RSSU5HX0xFTjtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LVx1MDAzZWh3ZGV2KSkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG1lbWNweShwLCBoaW5pYzNfcG9ydF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuJiM0MztcdFx0XHRwICYjNDM7PSBFVEhfR1NUUklOR19MRU47XG4mIzQzO1x0XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY250O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3FwX3N0YXRzX3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTggKmRhdGEgPSBwO1xuJiM0MztcdHUxNiBpLCBqO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSxcbiYjNDM7XHRcdFx0XHRcdGhpbmljM190eF9xdWV1ZV9zdGF0c1tqXS5uYW1lLCBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3J4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLFxuJiM0MztcdFx0XHRcdFx0aGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgKnAgPSAoY2hhciAqKWRhdGE7XG4mIzQzO1x0dTE2IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdG9mZnNldCA9IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhuZXRkZXYsIHApO1xuJiM0MztcdFx0aGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBwICYjNDM7IG9mZnNldCAqIEVUSF9HU1RSSU5HX0xFTik7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7SW52YWxpZCBzdHJpbmcgc2V0ICV1LlxcblwmIzM0Oywgc3RyaW5nc2V0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX3BoeV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX3BoeV9zdGF0cyAqcGh5X3N0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4mIzQzO1x0aWYgKCFwcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHMpO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIHBoeSBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeV9zdGF0cy1cdTAwM2VTeW1ib2xFcnJvckR1cmluZ0NhcnJpZXIgPSBwcy1cdTAwM2VtYWNfcnhfc3ltX2Vycl9wa3RfbnVtO1xuJiM0MztcbiYjNDM7XHRrZnJlZShwcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4mIzQzO1x0aWYgKCFwcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHMpO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIG1hYyBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gcHMtXHUwMDNlbWFjX3R4X2dvb2RfcGt0X251bTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVx1MDAzZW1hY19yeF9nb29kX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9IHBzLVx1MDAzZW1hY19yeF9mY3NfZXJyX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPSBwcy1cdTAwM2VtYWNfdHhfZ29vZF9vY3RfbnVtO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X2dvb2Rfb2N0X251bTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LID0gcHMtXHUwMDNlbWFjX3R4X211bHRpX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHBzLVx1MDAzZW1hY190eF9icm9hZF9wa3RfbnVtO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X211bHRpX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPSBwcy1cdTAwM2VtYWNfcnhfYnJvYWRfcGt0X251bTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHBzID0ga21hbGxvY19vYmooKnBzKTtcbiYjNDM7XHRpZiAoIXBzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrZnJlZShwcyk7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBldGggY3RybCBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0cmxfc3RhdHMtXHUwMDNlTUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID0gcHMtXHUwMDNlbWFjX3R4X2NvbnRyb2xfcGt0X251bTtcbiYjNDM7XHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHBzLVx1MDAzZW1hY19yeF9jb250cm9sX3BrdF9udW07XG4mIzQzO1xuJiM0MztcdGtmcmVlKHBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBoaW5pYzNfcm1vbl9yYW5nZXNbXSA9IHtcbiYjNDM7XHR7ICAgICAwLCAgICA2NCB9LFxuJiM0MztcdHsgICAgNjUsICAgMTI3IH0sXG4mIzQzO1x0eyAgIDEyOCwgICAyNTUgfSxcbiYjNDM7XHR7ICAgMjU2LCAgIDUxMSB9LFxuJiM0MztcdHsgICA1MTIsICAxMDIzIH0sXG4mIzQzO1x0eyAgMTAyNCwgIDE1MTggfSxcbiYjNDM7XHR7ICAxNTE5LCAgMjA0NyB9LFxuJiM0MztcdHsgIDIwNDgsICA0MDk1IH0sXG4mIzQzO1x0eyAgNDA5NiwgIDgxOTEgfSxcbiYjNDM7XHR7ICA4MTkyLCAgOTIxNiB9LFxuJiM0MztcdHsgIDkyMTcsIDEyMjg3IH0sXG4mIzQzO1x0e31cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuJiM0MztcdGlmICghcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtmcmVlKHBzKTtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBybW9uIHN0YXRzIGZyb20gZndcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0c1x0PSBwcy1cdTAwM2VtYWNfcnhfdW5kZXJzaXplX3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzXHQ9IHBzLVx1MDAzZW1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlZnJhZ21lbnRzXHRcdD0gcHMtXHUwMDNlbWFjX3J4X2ZyYWdtZW50X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzXHRcdD0gcHMtXHUwMDNlbWFjX3J4X2phYmJlcl9wa3RfbnVtO1xuJiM0MztcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMF1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfNjRfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzFdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzY1XzEyN19vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbM11cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNF1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfNTEyXzEwMjNfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNl1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs3XVx0XHQ9IHBzLVx1MDAzZW1hY19yeF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzhdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbOV1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsxMF1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfOTIxN18xMjI4N19vY3RfcGt0X251bTtcbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzBdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzY0X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFsxXVx0XHQ9IHBzLVx1MDAzZW1hY190eF82NV8xMjdfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzEyOF8yNTVfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzI1Nl81MTFfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzRdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XVx0XHQ9IHBzLVx1MDAzZW1hY190eF8xMDI0XzE1MThfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzZdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzE1MTlfMjA0N19vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbN11cdFx0PSBwcy1cdTAwM2VtYWNfdHhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs4XVx0XHQ9IHBzLVx1MDAzZW1hY190eF80MDk2XzgxOTFfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzldXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzgxOTJfOTIxNl9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMTBdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4mIzQzO1xuJiM0MztcdCpyYW5nZXMgPSBoaW5pYzNfcm1vbl9yYW5nZXM7XG4mIzQzO1xuJiM0MztcdGtmcmVlKHBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuJiM0MztcdGlmICghcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtmcmVlKHBzKTtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBwYXVzZSBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHBzLVx1MDAzZW1hY190eF9wYXVzZV9udW07XG4mIzQzO1x0cGF1c2Vfc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcHMtXHUwMDNlbWFjX3J4X3BhdXNlX251bTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHFfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpjb2FsLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICppbnRyX2NvYWw7XG4mIzQzO1x0c3RydWN0IGhpbmljM19pbnRlcnJ1cHRfaW5mbyBpbmZvID0ge307XG4mIzQzO1x0Ym9vbCBpc19hY3RpdmU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdGlzX2FjdGl2ZSA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcdTAwMjZuaWNfZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAocV9pZCBcdTAwM2MgbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2FjdGl2ZSkge1xuJiM0MztcdFx0aW5mby5tc2l4X2luZGV4ID1cbiYjNDM7XHRcdFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4O1xuJiM0MztcdFx0aW5mby5yZXNlbmRfdGltZXJfY2ZnID1cbiYjNDM7XHRcdFx0bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfYWN0aXZlKSB7XG4mIzQzO1x0XHRpbmZvLmludGVycnVwdF9jb2FsZXNjX3NldCA9IDE7XG4mIzQzO1x0XHRpbmZvLmNvYWxlc2NfdGltZXJfY2ZnID0gY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmc7XG4mIzQzO1x0XHRpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLVx1MDAzZXBlbmRpbmdfbGltaXQ7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtXHUwMDNlaHdkZXYsIGluZm8pO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDtGYWlsZWQgdG8gc2V0IHF1ZXVlJXUgY29hbGVzY2VcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcV9pZCk7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0aW50cl9jb2FsID0gXHUwMDI2bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdO1xuJiM0MztcdGludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcgPSBjb2FsLVx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZztcbiYjNDM7XHRpbnRyX2NvYWwtXHUwMDNlcGVuZGluZ19saW1pdCA9IGNvYWwtXHUwMDNlcGVuZGluZ19saW1pdDtcbiYjNDM7XHRpbnRyX2NvYWwtXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3cgPSBjb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93O1xuJiM0MztcdGludHJfY29hbC1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2hpZ2ggPSBjb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaXNfY29hbGVzY2VfZXhjZWVkX2xpbWl0KGNvbnN0IHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRcdHUzMiB2YWx1ZTtcbiYjNDM7XHRcdHUzMiBsaW1pdDtcbiYjNDM7XHR9IGNvYWxlc2NlX2xpbWl0c1tdID0ge1xuJiM0MztcdFx0e1wmIzM0O3J4X2NvYWxlc2NlX3VzZWNzXCYjMzQ7LFxuJiM0MztcdFx0IGNvYWwtXHUwMDNlcnhfY29hbGVzY2VfdXNlY3MsXG4mIzQzO1x0XHQgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGR30sXG4mIzQzO1x0XHR7XCYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNcJiMzNDssXG4mIzQzO1x0XHQgY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyxcbiYjNDM7XHRcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXG4mIzQzO1x0XHR7XCYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93XCYjMzQ7LFxuJiM0MztcdFx0IGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuJiM0MztcdFx0IENPQUxFU0NFX01BWF9QRU5ESU5HX0xJTUlUfSxcbiYjNDM7XHRcdHtcJiMzNDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoXCYjMzQ7LFxuJiM0MztcdFx0IGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbiYjNDM7XHRcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY29hbGVzY2VfbGltaXRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChjb2FsZXNjZV9saW1pdHNbaV0udmFsdWUgXHUwMDNlIGNvYWxlc2NlX2xpbWl0c1tpXS5saW1pdCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7JXMgb3V0IG9mIHJhbmdlICVkLSVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGNvYWxlc2NlX2xpbWl0c1tpXS5uYW1lLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGNvYWxlc2NlX2xpbWl0c1tpXS5saW1pdCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29uc3Qgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb2FsLCBleHRhY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgXHUwMDNlXG4mIzQzO1x0ICAgIGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O2ludmFsaWQgY29hbGVzY2UgZnJhbWUgaGlnaCAldSwgbG93ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93KTtcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0IHUzMiBpdGVtLCB1MzIgdW5pdCwgY29uc3QgY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGl0ZW0gJSB1bml0KVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcJiMzNDslcyBpbiAldSB1bml0cywgY2hhbmdlIHRvICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgc3RyLCB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0FMSUdOKG1lbWJlciwgdW5pdCkgXFxcbiYjNDM7XHRjaGVja19jb2FsZXNjZV9hbGlnbihuZXRkZXYsIG1lbWJlciwgdW5pdCwgI21lbWJlcilcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2NoYW5nZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICB1MzIgaXRlbSwgdTMyIHVuaXQsIHUzMiBvcmlfdmFsLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm9ial9zdHIsIGNvbnN0IGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdGlmICgoaXRlbSAvIHVuaXQpICE9IG9yaV92YWwpXG4mIzQzO1x0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7Q2hhbmdlICVzIGZyb20gJXUgdG8gJXUgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0ciwgb3JpX3ZhbCAqIHVuaXQsIGl0ZW0gLSBpdGVtICUgdW5pdCwgb2JqX3N0cik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgQ0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChtZW1iZXIsIHVuaXQsIG9yaV92YWwsIG9ial9zdHIpIFxcXG4mIzQzO1x0Y2hlY2tfY29hbGVzY2VfY2hhbmdlZChuZXRkZXYsIG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0ciwgI21lbWJlcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGluaWMzX3NldF9od19jb2FsX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvbGRfY29hbDtcbiYjNDM7XHR1MTYgaSwgajtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRvbGRfY29hbCA9IGtjYWxsb2MobmljX2Rldi1cdTAwM2VtYXhfcXBzLCBzaXplb2YoKm9sZF9jb2FsKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFvbGRfY29hbClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmljX2Rldi1cdTAwM2VtYXhfcXBzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG9sZF9jb2FsW2ldID0gbmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW2ldO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZW1heF9xcHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlcnIgPSBoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKG5ldGRldiwgaSwgaW50cl9jb2FsLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byByb2xsYmFjaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKG9sZF9jb2FsKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JvbGxiYWNrOlxuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0aGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShuZXRkZXYsIGosIFx1MDAyNm9sZF9jb2FsW2pdLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUob2xkX2NvYWwpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGluaWMzX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICppbnRlcnJ1cHRfaW5mbztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpbnRlcnJ1cHRfaW5mbyA9IFx1MDAyNm5pY19kZXYtXHUwMDNlaW50cl9jb2FsZXNjZVswXTtcbiYjNDM7XG4mIzQzO1x0Y29hbC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKTtcbiYjNDM7XG4mIzQzO1x0Y29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgPVxuJiM0MztcdFx0aW50ZXJydXB0X2luZm8tXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3cgKlxuJiM0MztcdFx0Q09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUO1xuJiM0MztcbiYjNDM7XHRjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggPVxuJiM0MztcdFx0aW50ZXJydXB0X2luZm8tXHUwMDNlcnhfcGVuZGluZ19saW1pdF9oaWdoICpcbiYjNDM7XHRcdENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVDtcbiYjNDM7XG4mIzQzO1x0LyogVFgvUlggdXNlcyB0aGUgc2FtZSBpbnRlcnJ1cHQuXG4mIzQzO1x0ICogU28gd2Ugb25seSBkZWNsYXJlIFJYIGV0aHRvb2xfY29hbGVzY2UgcGFyYW1ldGVycy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzID0gaW50ZXJydXB0X2luZm8tXHUwMDNlY29hbGVzY2VfdGltZXJfY2ZnICpcbiYjNDM7XHRcdFx0XHQgIENPQUxFU0NFX1RJTUVSX0NGR19VTklUO1xuJiM0MztcbiYjNDM7XHRjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaW50ZXJydXB0X2luZm8tXHUwMDNlcGVuZGluZ19saW1pdCAqXG4mIzQzO1x0XHRcdFx0XHRDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoaW5pYzNfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9jb2FsZXNjZSAqa2VybmVsX2NvYWwsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKm9yaV9pbnRyX2NvYWw7XG4mIzQzO1x0c3RydWN0IGhpbmljM19pbnRyX2NvYWxfaW5mbyBpbnRyX2NvYWwgPSB7fTtcbiYjNDM7XHRjb25zdCBjaGFyICpvYmpfc3RyID0gXCYjMzQ7Zm9yIG5ldGRldlwmIzM0OztcbiYjNDM7XHRib29sIG9sZF9hZGFwdGl2ZSwgbmV3X2FkYXB0aXZlO1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfcnhxICpyeHEgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM192YWxpZGF0ZV9jb2FsZXNjZShjb2FsLCBleHRhY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7XG4mIzQzO1x0Q0hFQ0tfQ09BTEVTQ0VfQUxJR04oY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyxcbiYjNDM7XHRcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbiYjNDM7XHRcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuJiM0MztcdFx0XHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRvcmlfaW50cl9jb2FsID0gXHUwMDI2bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xuJiM0MztcbiYjNDM7XHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXHUwMDNlcnhfY29hbGVzY2VfdXNlY3MsIENPQUxFU0NFX1RJTUVSX0NGR19VTklULFxuJiM0MztcdFx0XHQgICAgICAgb3JpX2ludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpO1xuJiM0MztcdENIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyxcbiYjNDM7XHRcdFx0ICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCxcbiYjNDM7XHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcGVuZGluZ19saW1pdCwgb2JqX3N0cik7XG4mIzQzO1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4mIzQzO1x0XHRcdCAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsXG4mIzQzO1x0XHRcdCAgICAgICBvcmlfaW50cl9jb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCwgb2JqX3N0cik7XG4mIzQzO1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyxcbiYjNDM7XHRcdFx0ICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCxcbiYjNDM7XHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRvbGRfYWRhcHRpdmUgPSBSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKTtcbiYjNDM7XHRuZXdfYWRhcHRpdmUgPSAhIWNvYWwtXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkX2FkYXB0aXZlKSB7XG4mIzQzO1x0XHRib29sIGlzX3VwO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0c3luY2hyb25pemVfbmV0KCk7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdFx0aXNfdXAgPSB0ZXN0X2JpdChISU5JQzNfSU5URl9VUCwgXHUwMDI2bmljX2Rldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXNfdXApIHtcbiYjNDM7XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdHJ4cSA9IG5pY19kZXYtXHUwMDNlcV9wYXJhbXMuaXJxX2NmZ1tpXS5yeHE7XG4mIzQzO1x0XHRcdFx0aWYgKCFyeHEpXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bmV0X2RpbV93b3JrX2NhbmNlbChcdTAwMjZyeHEtXHUwMDNlZGltKTtcbiYjNDM7XHRcdFx0XHRyeHEtXHUwMDNlZGltLnN0YXRlID0gRElNX1NUQVJUX01FQVNVUkU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgPVxuJiM0MztcdFx0KHU4KShjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzIC8gQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpO1xuJiM0MztcbiYjNDM7XHRpbnRyX2NvYWwucGVuZGluZ19saW1pdCA9XG4mIzQzO1x0XHQodTgpKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgL1xuJiM0MztcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcbiYjNDM7XHRpbnRyX2NvYWwucnhfcGVuZGluZ19saW1pdF9oaWdoID1cbiYjNDM7XHRcdCh1OCkoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoIC9cbiYjNDM7XHRcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcbiYjNDM7XG4mIzQzO1x0aW50cl9jb2FsLnJ4X3BlbmRpbmdfbGltaXRfbG93ID1cbiYjNDM7XHRcdCh1OCkoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgL1xuJiM0MztcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcbiYjNDM7XHQvKiBjb2FsZXNjZSB0aW1lciBvciBwZW5kaW5nIHNldCB0byB6ZXJvIHdpbGwgZGlzYWJsZSBjb2FsZXNjZSAqL1xuJiM0MztcdGlmICghbmV3X2FkYXB0aXZlIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgfHwgIWludHJfY29hbC5wZW5kaW5nX2xpbWl0KSlcbiYjNDM7XHRcdG5ldGRldl9pbmZvKG5ldGRldiwgXCYjMzQ7Q29hbGVzY2Ugd2lsbCBiZSBkaXNhYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM19zZXRfaHdfY29hbF9wYXJhbShuZXRkZXYsIFx1MDAyNmludHJfY29hbCwgZXh0YWNrKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAob2xkX2FkYXB0aXZlKVxuJiM0MztcdFx0XHRXUklURV9PTkNFKG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgb2xkX2FkYXB0aXZlKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwsIG5ld19hZGFwdGl2ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaGluaWMzX2V0aHRvb2xfb3BzID0ge1xuLVx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUEtUX1JBVEVfUlhfVVNFQ1MsXG4mIzQzO1x0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfUlhfVVNFQ1MgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVMgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRV9SWCB8XG4mIzQzO1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19MT1cgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVNfSElHSCxcbiBcdC5nZXRfbGlua19rc2V0dGluZ3MgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9kcnZpbmZvICAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbXNnbGV2ZWwgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19zZXRfbXNnbGV2ZWwsXG4gXHQuZ2V0X2xpbmsgICAgICAgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluayxcbiYjNDM7XHQuZ2V0X3NzZXRfY291bnQgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9zc2V0X2NvdW50LFxuJiM0MztcdC5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsXG4mIzQzO1x0LmdldF9zdHJpbmdzICAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X2V0aF9waHlfc3RhdHMgICAgICAgICAgICAgID0gaGluaWMzX2dldF9ldGhfcGh5X3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsXG4mIzQzO1x0LmdldF9ldGhfY3RybF9zdGF0cyAgICAgICAgICAgICA9IGhpbmljM19nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO1x0LmdldF9ybW9uX3N0YXRzICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfcm1vbl9zdGF0cyxcbiYjNDM7XHQuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cyxcbiYjNDM7XHQuZ2V0X2NvYWxlc2NlICAgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9jb2FsZXNjZSxcbiYjNDM7XHQuc2V0X2NvYWxlc2NlICAgICAgICAgICAgICAgICAgID0gaGluaWMzX3NldF9jb2FsZXNjZSxcbiB9O1xuIFxuIHZvaWQgaGluaWMzX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxuaW5kZXggY2ZjOWRhYTMwMzRmZS4uNmIwZjQ4NmJhNTkwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oXG5AQCAtNTMsNiAmIzQzOzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhXG4gXHRtc2dfcGFyYW1zLVx1MDAzZXRpbWVvdXRfbXMgPSAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkXG4mIzQzO21nbXRfbXNnX3BhcmFtc19pbml0X2luX291dChzdHJ1Y3QgbWdtdF9tc2dfcGFyYW1zICptc2dfcGFyYW1zLCB2b2lkICppbl9idWYsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpvdXRfYnVmLCB1MzIgaW5fYnVmX3NpemUsIHUzMiBvdXRfYnVmX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRtc2dfcGFyYW1zLVx1MDAzZWJ1Zl9pbiA9IGluX2J1ZjtcbiYjNDM7XHRtc2dfcGFyYW1zLVx1MDAzZWJ1Zl9vdXQgPSBvdXRfYnVmO1xuJiM0MztcdG1zZ19wYXJhbXMtXHUwMDNlaW5fc2l6ZSA9IGluX2J1Zl9zaXplO1xuJiM0MztcdG1zZ19wYXJhbXMtXHUwMDNlZXhwZWN0ZWRfb3V0X3NpemUgPSBvdXRfYnVmX3NpemU7XG4mIzQzO1x0bXNnX3BhcmFtcy1cdTAwM2V0aW1lb3V0X21zID0gMDtcbiYjNDM7fVxuJiM0MztcbiBlbnVtIGNmZ19jbWQge1xuIFx0Q0ZHX0NNRF9HRVRfREVWX0NBUCA9IDAsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXG5pbmRleCBlN2Q2YzIwMzNiNDUxLi5mNjY0NTM4NWM1NTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXG5AQCAtMjAsNyAmIzQzOzIwLDcgQEAgc3RhdGljIHZvaWQgaGluaWMzX25ldF9kaW0oc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2LFxuIFx0c3RydWN0IGRpbV9zYW1wbGUgc2FtcGxlID0ge307XG4gXG4gXHRpZiAoIXRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcdTAwMjZuaWNfZGV2LVx1MDAzZWZsYWdzKSB8fFxuLVx0ICAgICFuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpXG4mIzQzO1x0ICAgICFSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0ZGltX3VwZGF0ZV9zYW1wbGUoaXJxX2NmZy1cdTAwM2V0b3RhbF9ldmVudHMsIHJ4cS1cdTAwM2VyeHFfc3RhdHMucGFja2V0cyxcbkBAIC0xNDgsMTMgJiM0MzsxNDgsOSBAQCBzdGF0aWMgaW50IGhpbmljM19zZXRfaW50ZXJydXB0X21vZGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBxX2lkLFxuIFx0XHRuaWNfZGV2LVx1MDAzZWludHJfY29hbGVzY2VbcV9pZF0ucmVzZW5kX3RpbWVyX2NmZztcbiBcbiBcdGVyciA9IGhpbmljM19zZXRfaW50ZXJydXB0X2NmZyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBpbmZvKTtcbi1cdGlmIChlcnIpIHtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiBcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IG1vZGVyYXRpb24gZm9yIFF1ZXVlOiAldVxcblwmIzM0OywgcV9pZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRuaWNfZGV2LVx1MDAzZXJ4cXNbcV9pZF0ubGFzdF9jb2FsZXNjX3RpbWVyX2NmZyA9IGNvYWxlc2NfdGltZXJfY2ZnO1xuLVx0XHRuaWNfZGV2LVx1MDAzZXJ4cXNbcV9pZF0ubGFzdF9wZW5kaW5nX2xpbWl0ID0gcGVuZGluZ19saW1pdDtcbi1cdH1cbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xuaW5kZXggMGE4ODhmZTRjOTc1Yi4uOGM3NDkyZTE1NDA5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWFpbi5jXG5AQCAtNTEsNyAmIzQzOzUxLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9pbnRyX2NvYWxfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0aW5mby1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IEhJTklDM19SWF9QRU5ESU5HX0xJTUlUX0xPVztcbiBcdH1cbiBcbi1cdG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCA9IDE7XG4mIzQzO1x0V1JJVEVfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwsIDEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhpbmljM19pbml0X2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0xNzgsNyAmIzQzOzE3OCw3IEBAIHN0YXRpYyBpbnQgaGluaWMzX3N3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4tXHRtdXRleF9pbml0KFx1MDAyNm5pY19kZXYtXHUwMDNlcG9ydF9zdGF0ZV9tdXRleCk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuIFxuIFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5zcV9kZXB0aCA9IEhJTklDM19TUV9ERVBUSDtcbiBcdG5pY19kZXYtXHUwMDNlcV9wYXJhbXMucnFfZGVwdGggPSBISU5JQzNfUlFfREVQVEg7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcbmluZGV4IGM1YmNhM2M0YWY5NjEuLjc2YzY5MWY4MjcwM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG5AQCAtMTQzLDYgJiM0MzsxNDMsNDEgQEAgc3RydWN0IGwybmljX2NtZF9zZXRfZGNiX3N0YXRlIHtcbiBcdHU4ICAgICAgICAgICAgICAgICAgIHJzdmRbN107XG4gfTtcbiBcbiYjNDM7c3RydWN0IGwybmljX3BvcnRfc3RhdHNfaW5mbyB7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4mIzQzO1x0dTE2ICAgICAgICAgICAgICAgICAgZnVuY19pZDtcbiYjNDM7XHR1MTYgICAgICAgICAgICAgICAgICByc3ZkMTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBsMm5pY192cG9ydF9zdGF0cyB7XG4mIzQzO1x0dTY0IHR4X3VuaWNhc3RfcGt0c192cG9ydDtcbiYjNDM7XHR1NjQgdHhfdW5pY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgdHhfbXVsdGljYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHR4X211bHRpY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgdHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHR4X2Jyb2FkY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XG4mIzQzO1x0dTY0IHJ4X3VuaWNhc3RfcGt0c192cG9ydDtcbiYjNDM7XHR1NjQgcnhfdW5pY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgcnhfbXVsdGljYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHJ4X211bHRpY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgcnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XG4mIzQzO1x0dTY0IHR4X2Rpc2NhcmRfdnBvcnQ7XG4mIzQzO1x0dTY0IHJ4X2Rpc2NhcmRfdnBvcnQ7XG4mIzQzO1x0dTY0IHR4X2Vycl92cG9ydDtcbiYjNDM7XHR1NjQgcnhfZXJyX3Zwb3J0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGwybmljX2NtZF92cG9ydF9zdGF0cyB7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgICAgIG1zZ19oZWFkO1xuJiM0MztcdHUzMiAgICAgICAgICAgICAgICAgICAgICBzdGF0c19zaXplO1xuJiM0MztcdHUzMiAgICAgICAgICAgICAgICAgICAgICByc3ZkMTtcbiYjNDM7XHRzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgc3RhdHM7XG4mIzQzO1x0dTY0ICAgICAgICAgICAgICAgICAgICAgIHJzdmQyWzZdO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbDJuaWNfY21kX2xyb19jb25maWcge1xuIFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4gXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xuQEAgLTIzNCw2ICYjNDM7MjY5LDcgQEAgZW51bSBsMm5pY19jbWQge1xuIFx0TDJOSUNfQ01EX1NFVF9WUE9SVF9FTkFCTEUgICAgPSA2LFxuIFx0TDJOSUNfQ01EX1NFVF9SWF9NT0RFICAgICAgICAgPSA3LFxuIFx0TDJOSUNfQ01EX1NFVF9TUV9DSV9BVFRSICAgICAgPSA4LFxuJiM0MztcdEwyTklDX0NNRF9HRVRfVlBPUlRfU1RBVCAgICAgID0gOSxcbiBcdEwyTklDX0NNRF9DTEVBUl9RUF9SRVNPVVJDRSAgID0gMTEsXG4gXHRMMk5JQ19DTURfQ0ZHX1JYX0xSTyAgICAgICAgICA9IDEzLFxuIFx0TDJOSUNfQ01EX0NGR19MUk9fVElNRVIgICAgICAgPSAxNCxcbkBAIC0yNzIsNiAmIzQzOzMwOCw3IEBAIGVudW0gbWFnX2NtZCB7XG4gXHRNQUdfQ01EX1NFVF9QT1JUX0VOQUJMRSA9IDYsXG4gXHRNQUdfQ01EX0dFVF9MSU5LX1NUQVRVUyA9IDcsXG4gXG4mIzQzO1x0TUFHX0NNRF9HRVRfUE9SVF9TVEFUICAgPSAxNTEsXG4gXHRNQUdfQ01EX0dFVF9QT1JUX0lORk8gICA9IDE1MyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuY1xuaW5kZXggZGE3MzgxMTY0MWE5ZC4uZWQ0ODEwZmE5ODUyZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXG5AQCAtMzQxLDkgJiM0MzszNDEsOSBAQCBzdGF0aWMgaW50IGhpbmljM19tYXliZV9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIGVuYWJsZSlcbiBcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGVyciA9IGhpbmljM19zZXRfcG9ydF9lbmFibGUobmljX2Rldi1cdTAwM2Vod2RldiwgZW5hYmxlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jXG5pbmRleCBkZTVhNzk4NGQyY2I5Li4xYjE0ZGM4MjRjZTFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcbkBAIC02MzksNiAmIzQzOzYzOSw0MiBAQCBpbnQgaGluaWMzX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgYm9vbCAqbGlua19zdGF0dXNfdXApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpzdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyBzdGF0c19pbmZvID0ge307XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCAqcHM7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX3BhcmFtcyBtc2dfcGFyYW1zID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cHMgPSBremFsbG9jX29iaigqcHMpO1xuJiM0MztcdGlmICghcHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0c3RhdHNfaW5mby5wb3J0X2lkID0gaGluaWMzX3BoeXNpY2FsX3BvcnRfaWQoaHdkZXYpO1xuJiM0MztcbiYjNDM7XHRtZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoXHUwMDI2bXNnX3BhcmFtcywgXHUwMDI2c3RhdHNfaW5mbywgcHMsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVvZihzdGF0c19pbmZvKSwgc2l6ZW9mKCpwcykpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBoaW5pYzNfc2VuZF9tYm94X3RvX21nbXQoaHdkZXYsIE1HTVRfTU9EX0hJTElOSyxcbiYjNDM7XHRcdFx0XHQgICAgICAgTUFHX0NNRF9HRVRfUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciB8fCBwcy1cdTAwM2VoZWFkLnN0YXR1cykge1xuJiM0MztcdFx0ZGV2X2Vycihod2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0ZhaWxlZCB0byBnZXQgcG9ydCBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgcHMtXHUwMDNlaGVhZC5zdGF0dXMpO1xuJiM0MztcdFx0ZXJyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZwcy1cdTAwM2Vjb3VudGVyLCBzaXplb2YoKnN0YXRzKSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBoaW5pYzNfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcbiBcdFx0XHQgc3RydWN0IGhpbmljM19uaWNfcG9ydF9pbmZvICpwb3J0X2luZm8pXG4ge1xuQEAgLTczOCwzICYjNDM7Nzc0LDMxIEBAIGludCBoaW5pYzNfZ2V0X3BhdXNlX2luZm8oc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2LFxuIFx0cmV0dXJuIGhpbmljM19jZmdfaHdfcGF1c2UobmljX2Rldi1cdTAwM2Vod2RldiwgTUdNVF9NU0dfQ01EX09QX0dFVCxcbiBcdFx0XHRcdCAgIG5pY19wYXVzZSk7XG4gfVxuJiM0MztcbiYjNDM7aW50IGhpbmljM19nZXRfdnBvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiBmdW5jX2lkLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGwybmljX2NtZF92cG9ydF9zdGF0cyB2cG9ydF9zdGF0cyA9IHt9O1xuJiM0MztcdHN0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8gc3RhdHNfaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHN0YXRzX2luZm8uZnVuY19pZCA9IGZ1bmNfaWQ7XG4mIzQzO1xuJiM0MztcdG1nbXRfbXNnX3BhcmFtc19pbml0X2luX291dChcdTAwMjZtc2dfcGFyYW1zLCBcdTAwMjZzdGF0c19pbmZvLCBcdTAwMjZ2cG9ydF9zdGF0cyxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKHN0YXRzX2luZm8pLCBzaXplb2YodnBvcnRfc3RhdHMpKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9MMk5JQyxcbiYjNDM7XHRcdFx0XHQgICAgICAgTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciB8fCB2cG9ydF9zdGF0cy5tc2dfaGVhZC5zdGF0dXMpIHtcbiYjNDM7XHRcdGRldl9lcnIoaHdkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZ2V0IGZ1bmN0aW9uIHN0YXRpc3RpY3MsIGVycjogJWQsIHN0YXR1czogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyLCB2cG9ydF9zdGF0cy5tc2dfaGVhZC5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZW1jcHkoc3RhdHMsIFx1MDAyNnZwb3J0X3N0YXRzLnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oXG5pbmRleCA1ZDUyMjAyYThkNGViLi44MDU3M2MxMjE1Mzk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmhcbkBAIC0xMjksNiAmIzQzOzEyOSwxMTAgQEAgc3RydWN0IG1hZ19jbWRfZ2V0X3hzZnBfcHJlc2VudCB7XG4gXHR1OCAgICAgICAgICAgICAgICAgICByc3ZkWzJdO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMge1xuJiM0MztcdHU2NCBtYWNfdHhfZnJhZ21lbnRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3VuZGVyc2l6ZV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfdW5kZXJtaW5fcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzY0X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfNjVfMTI3X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfMTI4XzI1NV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzI1Nl81MTFfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF81MTJfMTAyM19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzE1MTlfMjA0N19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzgxOTJfOTIxNl9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzE1MTlfbWF4X2JhZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfb3ZlcnNpemVfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X2phYmJlcl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfYmFkX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9iYWRfb2N0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X2dvb2RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X2dvb2Rfb2N0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3RvdGFsX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF90b3RhbF9vY3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfdW5pX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9tdWx0aV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfYnJvYWRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BhdXNlX251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfcGZjX3ByaTBfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wcmkxX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9wZmNfcHJpMl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfcGZjX3ByaTNfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wcmk0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9wZmNfcHJpNV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfcGZjX3ByaTZfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wcmk3X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9jb250cm9sX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9lcnJfYWxsX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9mcm9tX2FwcF9nb29kX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9mcm9tX2FwcF9iYWRfcGt0X251bTtcbiYjNDM7XG4mIzQzO1x0dTY0IG1hY19yeF9mcmFnbWVudF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfdW5kZXJzaXplX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF91bmRlcm1pbl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfNjRfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF82NV8xMjdfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF8xMjhfMjU1X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMTAyNF8xNTE4X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfNDA5Nl84MTkxX29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfOTIxN18xMjI4N19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMTUxOV9tYXhfYmFkX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfamFiYmVyX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9iYWRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X2JhZF9vY3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfZ29vZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfZ29vZF9vY3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfdG90YWxfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3RvdGFsX29jdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF91bmlfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X211bHRpX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9icm9hZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGF1c2VfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3ByaTFfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3BmY19wcmkyX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9wZmNfcHJpM19wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3ByaTRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3BmY19wcmk1X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3ByaTdfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X2NvbnRyb2xfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3N5bV9lcnJfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X2Zjc19lcnJfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3NlbmRfYXBwX2dvb2RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfdW5maWx0ZXJfcGt0X251bTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyB7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgaGVhZDtcbiYjNDM7XG4mIzQzO1x0dTggICAgICAgICAgICAgICAgICAgcG9ydF9pZDtcbiYjNDM7XHR1OCAgICAgICAgICAgICAgICAgICByc3ZkMFszXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYWdfY21kX2dldF9wb3J0X3N0YXQge1xuJiM0MztcdHN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyBjb3VudGVyO1xuJiM0MztcdHU2NCAgICAgICAgICAgICAgICAgICAgICAgcnN2ZDFbMTVdO1xuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIGxpbmtfZXJyX3R5cGUge1xuIFx0TElOS19FUlJfTU9EVUxFX1VOUkVDT0dFTklaRUQsXG4gXHRMSU5LX0VSUl9OVU0sXG5AQCAtMjA5LDYgJiM0MzszMTMsMTEgQEAgaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuIFx0XHRcdCBzdHJ1Y3QgaGluaWMzX25pY19wb3J0X2luZm8gKnBvcnRfaW5mbyk7XG4gaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcbiBcdFx0XHQgICAgYm9vbCBlbmFibGUpO1xuJiM0MztpbnQgaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpO1xuJiM0MztpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBsMm5pY192cG9ydF9zdGF0cyAqc3RhdHMpO1xuJiM0MztcbiBpbnQgaGluaWMzX2FkZF92bGFuKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgdmxhbl9pZCwgdTE2IGZ1bmNfaWQpO1xuIGludCBoaW5pYzNfZGVsX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oXG5pbmRleCA5NTAyMjkzZmY3MTBjLi45NGEyYmFiNTI1NjQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmhcbkBAIC0xMCw2ICYjNDM7MTAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2hpbmljM19od19jZmcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hpbmljM19od2Rldi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGluaWMzX21nbXRfaW50ZXJmYWNlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGluaWMzX3J4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGluaWMzX3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIEhJTklDM19WTEFOX0JJVE1BUF9CWVRFX1NJWkUobmljX2RldikgIChzaXplb2YoKihuaWNfZGV2KS1cdTAwM2V2bGFuX2JpdG1hcCkpXG4gI2RlZmluZSBISU5JQzNfVkxBTl9CSVRNQVBfU0laRShuaWNfZGV2KSAgXFxcbkBAIC0xMjcsOCAmIzQzOzEyOSw4IEBAIHN0cnVjdCBoaW5pYzNfbmljX2RldiB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAgICAgICAgICp3b3JrcTtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgICAgICAgICAgICAgcGVyaW9kaWNfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgcnhfbW9kZV93b3JrO1xuLVx0LyogbG9jayBmb3IgZW5hYmxlL2Rpc2FibGUgcG9ydCAqL1xuLVx0c3RydWN0IG11dGV4ICAgICAgICAgICAgICAgICAgICBwb3J0X3N0YXRlX211dGV4O1xuJiM0MztcdC8qIFByb3RlY3RzIGludGVyZmFjZSBzdGF0ZSAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgc3RhdGVfbG9jaztcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgdWNfZmlsdGVyX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIG1jX2ZpbHRlcl9saXN0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXG5pbmRleCAzMDlhYjU5MDEzNzk3Li4yOThmYzA4MTc2ODBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuQEAgLTI4LDEwICYjNDM7MjgsNiBAQFxuIFxuICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0ICAgICA2NlxuICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2ICAgICA4NlxuLSNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTihjcWUpIFxcXG4tXHQoUlFfQ1FFX09GRk9MQURfVFlQRV9HRVQoKGNxZSktXHUwMDNlb2ZmbG9hZF90eXBlLCBJUF9UWVBFKSA9PSBcXFxuLVx0IEhJTklDM19SWF9JUFY2X1BLVCA/IEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNiA6IFxcXG4tXHQgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0KVxuIFxuIHN0YXRpYyB2b2lkIGhpbmljM19yeHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cylcbiB7XG5AQCAtNDYsNyAmIzQzOzQyLDYgQEAgc3RhdGljIHZvaWQgaGluaWMzX3J4cV9jbGVhbl9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzKVxuIFxuIFx0cnhxX3N0YXRzLVx1MDAzZWFsbG9jX3NrYl9lcnIgPSAwO1xuIFx0cnhxX3N0YXRzLVx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSAwO1xuLVx0cnhxX3N0YXRzLVx1MDAzZXJlc3RvcmVfZHJvcF9zZ2UgPSAwO1xuIFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxX3N0YXRzLVx1MDAzZXN5bmNwKTtcbiB9XG4gXG5AQCAtMTQ3LDYgJiM0MzsxNDIsOCBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcbiB7XG4gXHR1MzIgaSwgZnJlZV93cWViYnMgPSByeHEtXHUwMDNlZGVsdGEgLSAxO1xuIFx0c3RydWN0IGhpbmljM19yeF9pbmZvICpyeF9pbmZvO1xuJiM0MztcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3A7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTE1NSw4ICYjNDM7MTUyLDEzIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKVxuIFxuIFx0XHRlcnIgPSByeF9hbGxvY19tYXBwZWRfcGFnZShyeHEtXHUwMDNlcGFnZV9wb29sLCByeF9pbmZvLFxuIFx0XHRcdFx0XHQgICByeHEtXHUwMDNlYnVmX2xlbik7XG4tXHRcdGlmICh1bmxpa2VseShlcnIpKVxuJiM0MztcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjNDM7XHRcdFx0c3luY3AgPSBcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xuJiM0MztcdFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XG4mIzQzO1x0XHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuYWxsb2NfcnhfYnVmX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoc3luY3AsIGZsYWdzKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcbiBcdFx0ZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHJ4X2luZm8tXHUwMDNlcGFnZSkgJiM0MztcbiBcdFx0XHRyeF9pbmZvLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuQEAgLTE3MCw2ICYjNDM7MTcyLDExIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKVxuIFx0XHRcdFx0cnhxLVx1MDAzZW5leHRfdG9fdXBkYXRlIFx1MDAzY1x1MDAzYyBISU5JQzNfTk9STUFMX1JRX1dRRSk7XG4gXHRcdHJ4cS1cdTAwM2VkZWx0YSAtPSBpO1xuIFx0XHRyeHEtXHUwMDNlbmV4dF90b19hbGxvYyA9IHJ4cS1cdTAwM2VuZXh0X3RvX3VwZGF0ZTtcbiYjNDM7XHR9IGVsc2UgaWYgKGZyZWVfd3FlYmJzID09IHJ4cS1cdTAwM2VxX2RlcHRoIC0gMSkge1xuJiM0MztcdFx0c3luY3AgPSBcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xuJiM0MztcdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoc3luY3ApO1xuJiM0MztcdFx0cnhxLVx1MDAzZXJ4cV9zdGF0cy5yeF9idWZfZW1wdHkmIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShzeW5jcCwgZmxhZ3MpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGk7XG5AQCAtMzMwLDExICYjNDM7MzM3LDI0IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeF9jc3VtKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHUzMiBvZmZsb2FkX3R5cGUsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcnhxLVx1MDAzZW5ldGRldjtcbiBcdGJvb2wgbDJfdHVubmVsO1xuIFxuJiM0MztcdC8qIEhXIGVuc3VyZXMgdGhhdCBvbmx5IDEgYml0IGlzIHNldCBpbiBjc3VtX2Vyci4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoY3N1bV9lcnIgPT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpKSB7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0cnhxLVx1MDAzZXJ4cV9zdGF0cy5vdGhlcl9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodW5saWtlbHkoY3N1bV9lcnIpKSB7XG4gXHRcdC8qIHBrdCB0eXBlIGlzIHJlY29nbml6ZWQgYnkgSFcsIGFuZCBjc3VtIGlzIHdyb25nICovXG4mIzQzO1x0XHRpZiAoY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjc3VtX2VyciAhPSBISU5JQzNfUlhfQ1NVTV9JUFNVX09USEVSX0VSUikge1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRyeHEtXHUwMDNlcnhxX3N0YXRzLmNzdW1fZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR9XG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzg3LDggJiM0Mzs0MDcsMTIgQEAgc3RhdGljIGludCByZWN2X29uZV9wa3Qoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZSxcbiBcdHUxNiBudW1fbHJvO1xuIFxuIFx0c2tiID0gaGluaWMzX2ZldGNoX3J4X2J1ZmZlcihyeHEsIHBrdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKVxuJiM0MztcdGlmICh1bmxpa2VseSghc2tiKSkge1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuYWxsb2Nfc2tiX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0LyogcGxhY2UgaGVhZGVyIGluIGxpbmVhciBwb3J0aW9uIG9mIGJ1ZmZlciAqL1xuIFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSlcbkBAIC01NTAsMTEgJiM0Mzs1NzQsMjkgQEAgaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cyA9IFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZyeHFfc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlY3N1bV9lcnJvcnMgPSByeHFfc3RhdHMtXHUwMDNlY3N1bV9lcnJvcnM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VvdGhlcl9lcnJvcnMgPSByeHFfc3RhdHMtXHUwMDNlb3RoZXJfZXJyb3JzO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfYnVmX2VtcHR5ID0gcnhxX3N0YXRzLVx1MDAzZXJ4X2J1Zl9lbXB0eTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZWFsbG9jX3NrYl9lcnIgPSByeHFfc3RhdHMtXHUwMDNlYWxsb2Nfc2tiX2VycjtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSByeHFfc3RhdHMtXHUwMDNlYWxsb2NfcnhfYnVmX2VycjtcbiYjNDM7XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cnhxX3N0YXRzLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KHJ4cS1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHUzMiBpcF90eXBlLCBvZmZsb2FkX3R5cGUsIHBrdF9oZHJfbGVuO1xuIFx0dTMyIHN3X2NpLCBzdGF0dXMsIHBrdF9sZW4sIHZsYW5fbGVuO1xuIFx0c3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZTtcbiYjNDM7XHR1NjQgcnhfYnl0ZXMgPSAwO1xuIFx0dTMyIG51bV93cWUgPSAwO1xuIFx0aW50IG5yX3BrdHMgPSAwO1xuIFx0dTE2IG51bV9scm87XG5AQCAtNTc0LDEwICYjNDM7NjE2LDIwIEBAIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAocmVjdl9vbmVfcGt0KHJ4cSwgcnhfY3FlLCBwa3RfbGVuLCB2bGFuX2xlbiwgc3RhdHVzKSlcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdHJ4X2J5dGVzICYjNDM7PSBwa3RfbGVuO1xuIFx0XHRucl9wa3RzJiM0MzsmIzQzOztcbiBcdFx0bnVtX2xybyA9IFJRX0NRRV9TVEFUVVNfR0VUKHN0YXR1cywgTlVNX0xSTyk7XG4tXHRcdGlmIChudW1fbHJvKVxuJiM0MztcdFx0aWYgKG51bV9scm8pIHtcbiYjNDM7XHRcdFx0b2ZmbG9hZF90eXBlID0gbGUzMl90b19jcHUocnhfY3FlLVx1MDAzZW9mZmxvYWRfdHlwZSk7XG4mIzQzO1x0XHRcdGlwX3R5cGUgPSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVChvZmZsb2FkX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBJUF9UWVBFKTtcbiYjNDM7XHRcdFx0cGt0X2hkcl9sZW4gPSBpcF90eXBlID09IEhJTklDM19SWF9JUFY2X1BLVCA/XG4mIzQzO1x0XHRcdFx0ICAgICAgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2IDpcbiYjNDM7XHRcdFx0XHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQ7XG4mIzQzO1xuJiM0MztcdFx0XHRyeF9ieXRlcyAmIzQzOz0gKG51bV9scm8gLSAxKSAqIHBrdF9oZHJfbGVuO1xuIFx0XHRcdG51bV93cWUgJiM0Mzs9IGhpbmljM19nZXRfc2dlX251bShyeHEsIHBrdF9sZW4pO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRyeF9jcWUtXHUwMDNlc3RhdHVzID0gMDtcbiBcbkBAIC01ODgsNSAmIzQzOzY0MCwxMCBAQCBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldClcbiBcdGlmIChyeHEtXHUwMDNlZGVsdGEgXHUwMDNlPSBISU5JQzNfUlhfQlVGRkVSX1dSSVRFKVxuIFx0XHRoaW5pYzNfcnhfZmlsbF9idWZmZXJzKHJ4cSk7XG4gXG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRyeHEtXHUwMDNlcnhxX3N0YXRzLnBhY2tldHMgJiM0Mzs9ICh1NjQpbnJfcGt0cztcbiYjNDM7XHRyeHEtXHUwMDNlcnhxX3N0YXRzLmJ5dGVzICYjNDM7PSByeF9ieXRlcztcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJfcGt0cztcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcbmluZGV4IDA2ZDFiMzI5OWU3Y2YuLjJhYjY5MWVkMTFhOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG5AQCAtOCw2ICYjNDM7OCwxNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RpbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiBcbiYjNDM7LyogcnggY3FlIGNoZWNrc3VtIGVyciAqL1xuJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lQX0NTVU1fRVJSICAgICAgQklUKDApXG4mIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVENQX0NTVU1fRVJSICAgICBCSVQoMSlcbiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9VRFBfQ1NVTV9FUlIgICAgIEJJVCgyKVxuJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lHTVBfQ1NVTV9FUlIgICAgQklUKDMpXG4mIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY0X0NTVU1fRVJSICBCSVQoNClcbiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JQ01QVjZfQ1NVTV9FUlIgIEJJVCg1KVxuJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX1NDVFBfQ1JDX0VSUiAgICAgQklUKDYpXG4mIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSAgICBCSVQoNylcbiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JUFNVX09USEVSX0VSUiAgIEJJVCg4KVxuJiM0MztcbiAjZGVmaW5lIFJRX0NRRV9PRkZPTEFEX1RZUEVfUEtUX1RZUEVfTUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKVxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9JUF9UWVBFX01BU0sgICAgICAgICAgICBHRU5NQVNLKDYsIDUpXG4gI2RlZmluZSBSUV9DUUVfT0ZGT0xBRF9UWVBFX1RVTk5FTF9QS1RfRk9STUFUX01BU0sgIEdFTk1BU0soMTEsIDgpXG5AQCAtMzksNyAmIzQzOzUwLDYgQEAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMge1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIHJ4X2J1Zl9lbXB0eTtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBhbGxvY19za2JfZXJyO1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3J4X2J1Zl9lcnI7XG4tXHR1NjQgICAgICAgICAgICAgICAgICAgcmVzdG9yZV9kcm9wX3NnZTtcbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbiB9O1xuIFxuQEAgLTEwMSw5ICYjNDM7MTExLDYgQEAgc3RydWN0IGhpbmljM19yeHEge1xuIFx0ZG1hX2FkZHJfdCAgICAgICAgICAgICBjcWVfc3RhcnRfcGFkZHI7XG4gXG4gXHRzdHJ1Y3QgZGltICAgICAgICAgICAgIGRpbTtcbi1cbi1cdHU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2FsZXNjX3RpbWVyX2NmZztcbi1cdHU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZW5kaW5nX2xpbWl0O1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzIHtcbkBAIC0xMjMsNiAmIzQzOzEzMCw5IEBAIHZvaWQgaGluaWMzX2ZyZWVfcnhxc19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSxcbiBcdFx0XHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcbiBpbnQgaGluaWMzX2NvbmZpZ3VyZV9yeHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fcnEsXG4gXHRcdFx0ICB1MzIgcnFfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzICpyeHFzX3Jlcyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKTtcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcbmluZGV4IDkzMDZiZjAwMjBjYWYuLjYyMTljYzEwOTE4ZGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG5AQCAtMjUsMTEgJiM0MzsyNSw5IEBAIHN0YXRpYyB2b2lkIGhpbmljM190eHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnR4cV9zdGF0cylcbiBcdHR4cV9zdGF0cy1cdTAwM2Vkcm9wcGVkID0gMDtcbiBcbiBcdHR4cV9zdGF0cy1cdTAwM2Vza2JfcGFkX2VyciA9IDA7XG4tXHR0eHFfc3RhdHMtXHUwMDNlZnJhZ19sZW5fb3ZlcmZsb3cgPSAwO1xuIFx0dHhxX3N0YXRzLVx1MDAzZW9mZmxvYWRfY293X3NrYl9lcnIgPSAwO1xuIFx0dHhxX3N0YXRzLVx1MDAzZW1hcF9mcmFnX2VyciA9IDA7XG4gXHR0eHFfc3RhdHMtXHUwMDNldW5rbm93bl90dW5uZWxfcGt0ID0gMDtcbi1cdHR4cV9zdGF0cy1cdTAwM2VmcmFnX3NpemVfZXJyID0gMDtcbiBcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4gfVxuIFxuQEAgLTk3LDggJiM0Mzs5NSwxMiBAQCBzdGF0aWMgaW50IGhpbmljM190eF9tYXBfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRkbWFfaW5mb1swXS5kbWEgPSBkbWFfbWFwX3NpbmdsZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2tiLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRcdCBza2JfaGVhZGxlbihza2IpLCBETUFfVE9fREVWSUNFKTtcbi1cdGlmIChkbWFfbWFwcGluZ19lcnJvcihcdTAwMjZwZGV2LVx1MDAzZWRldiwgZG1hX2luZm9bMF0uZG1hKSlcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvWzBdLmRtYSkpIHtcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLm1hcF9mcmFnX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuIFxuIFx0ZG1hX2luZm9bMF0ubGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcbiBcbkBAIC0xMTcsNiAmIzQzOzExOSw5IEBAIHN0YXRpYyBpbnQgaGluaWMzX3R4X21hcF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICAgIHNrYl9mcmFnX3NpemUoZnJhZyksXG4gXHRcdFx0XHRcdFx0ICAgICBETUFfVE9fREVWSUNFKTtcbiBcdFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBkbWFfaW5mb1tpZHhdLmRtYSkpIHtcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdFx0dHhxLVx1MDAzZXR4cV9zdGF0cy5tYXBfZnJhZ19lcnImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZXJyX3VubWFwX3BhZ2U7XG4gXHRcdH1cbkBAIC0yNjAsNiAmIzQzOzI2NSw5IEBAIHN0YXRpYyBpbnQgaGluaWMzX3R4X2NzdW0oc3RydWN0IGhpbmljM190eHEgKnR4cSwgc3RydWN0IGhpbmljM19zcV90YXNrICp0YXNrLFxuIFx0XHRpZiAobDRfcHJvdG8gIT0gSVBQUk9UT19VRFAgfHxcbiBcdFx0ICAgICgoc3RydWN0IHVkcGhkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikpLVx1MDAzZWRlc3QgIT1cbiBcdFx0ICAgIFZYTEFOX09GRkxPQURfUE9SVF9MRSkge1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHR0eHEtXHUwMDNldHhxX3N0YXRzLnVua25vd25fdHVubmVsX3BrdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuIFx0XHRcdC8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovXG4gXHRcdFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC00MzMsNiAmIzQzOzQ0MSwyNyBAQCBzdGF0aWMgdTMyIGhpbmljM190eF9vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoaW5pYzNfc3FfdGFzayAqdGFzayxcbiBcdHJldHVybiBvZmZsb2FkO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9wa3Rfc3RhdHMoc3RydWN0IGhpbmljM190eHEgKnR4cSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHUzMiBoZHJfbGVuLCB0eF9ieXRlcztcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBwa3RzO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XG4mIzQzO1x0XHRoZHJfbGVuID0gKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2VncyAtIDEpICpcbiYjNDM7XHRcdFx0ICBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XG4mIzQzO1x0XHR0eF9ieXRlcyA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgaGRyX2xlbjtcbiYjNDM7XHRcdHBrdHMgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR4X2J5dGVzID0gc2tiLVx1MDAzZWxlbiBcdTAwM2UgRVRIX1pMRU4gPyBza2ItXHUwMDNlbGVuIDogRVRIX1pMRU47XG4mIzQzO1x0XHRwa3RzID0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5ieXRlcyAmIzQzOz0gdHhfYnl0ZXM7XG4mIzQzO1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5wYWNrZXRzICYjNDM7PSBwa3RzO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MTYgaGluaWMzX2dldF9hbmRfdXBkYXRlX3NxX293bmVyKHN0cnVjdCBoaW5pYzNfaW9fcXVldWUgKnNxLFxuIFx0XHRcdFx0XHQgIHUxNiBjdXJyX3BpLCB1MTYgd3FlYmJfY250KVxuIHtcbkBAIC01MzksOCAmIzQzOzU2OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW50IGVycjtcbiBcbiBcdGlmICh1bmxpa2VseShza2ItXHUwMDNlbGVuIFx1MDAzYyBNSU5fU0tCX0xFTikpIHtcbi1cdFx0aWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi1cdTAwM2VsZW4pKVxuJiM0MztcdFx0aWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi1cdTAwM2VsZW4pKSB7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdHR4cS1cdTAwM2V0eHFfc3RhdHMuc2tiX3BhZF9lcnImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBNSU5fU0tCX0xFTjtcbiBcdH1cbkBAIC01NTcsMTEgJiM0Mzs1OTAsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0aGluaWMzX3dxX2ZyZWVfd3FlYmJzKFx1MDAyNnR4cS1cdTAwM2VzcS1cdTAwM2V3cSksXG4gXHRcdFx0XHRcdHR4cS1cdTAwM2V0eF9zdGFydF90aHJzKTtcbiBcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLmJ1c3kmIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbiBcdG9mZmxvYWQgPSBoaW5pYzNfdHhfb2ZmbG9hZChza2IsIFx1MDAyNnRhc2ssIFx1MDAyNnF1ZXVlX2luZm8sIHR4cSk7XG4gXHRpZiAodW5saWtlbHkob2ZmbG9hZCA9PSBISU5JQzNfVFhfT0ZGTE9BRF9JTlZBTElEKSkge1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdHR4cS1cdTAwM2V0eHFfc3RhdHMub2ZmbG9hZF9jb3dfc2tiX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0Z290byBlcnJfZHJvcF9wa3Q7XG4gXHR9IGVsc2UgaWYgKCFvZmZsb2FkKSB7XG4gXHRcdHdxZWJiX2NudCAtPSAxO1xuQEAgLTU5NSw2ICYjNDM7NjM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0b3BfdGhycyxcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0YXJ0X3RocnMpO1xuIFxuJiM0MztcdGhpbmljM19nZXRfcGt0X3N0YXRzKHR4cSwgc2tiKTtcbiBcdGhpbmljM19wcmVwYXJlX3NxX2N0cmwoXHUwMDI2d3FlX2NvbWJvLCBxdWV1ZV9pbmZvLCBudW1fc2dlLCBvd25lcik7XG4gXHRoaW5pYzNfd3JpdGVfZGIodHhxLVx1MDAzZXNxLCAwLCBEQl9DRkxBR19EUF9TUSxcbiBcdFx0XHRoaW5pYzNfZ2V0X3NxX2xvY2FsX3BpKHR4cS1cdTAwM2VzcSkpO1xuQEAgLTYwNCw2ICYjNDM7NjQ0LDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoaW5pYzNfc2VuZF9vbmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyX2Ryb3BfcGt0OlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBlcnJfb3V0OlxuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbkBAIC03NTQsNiAmIzQzOzc5OCwyMiBAQCBpbnQgaGluaWMzX2NvbmZpZ3VyZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fc3EsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3ZvaWQgaGluaWMzX3R4cV9nZXRfc3RhdHMoc3RydWN0IGhpbmljM190eHEgKnR4cSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqdHhxX3N0YXRzID0gXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnR4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VidXN5ID0gdHhxX3N0YXRzLVx1MDAzZWJ1c3k7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2Vza2JfcGFkX2VyciA9IHR4cV9zdGF0cy1cdTAwM2Vza2JfcGFkX2VycjtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZW9mZmxvYWRfY293X3NrYl9lcnIgPSB0eHFfc3RhdHMtXHUwMDNlb2ZmbG9hZF9jb3dfc2tiX2VycjtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZW1hcF9mcmFnX2VyciA9IHR4cV9zdGF0cy1cdTAwM2VtYXBfZnJhZ19lcnI7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V1bmtub3duX3R1bm5lbF9wa3QgPSB0eHFfc3RhdHMtXHUwMDNldW5rbm93bl90dW5uZWxfcGt0O1xuJiM0MztcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZ0eHFfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBoaW5pYzNfdHhfcG9sbChzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0eHEtXHUwMDNlbmV0ZGV2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oXG5pbmRleCAwMDE5NGYyYTFiY2MxLi42YWJmNDQzY2I5MjdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxuQEAgLTEwNiwxMSAmIzQzOzEwNiw5IEBAIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBidXN5O1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIGRyb3BwZWQ7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgc2tiX3BhZF9lcnI7XG4tXHR1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19sZW5fb3ZlcmZsb3c7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgb2ZmbG9hZF9jb3dfc2tiX2VycjtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBtYXBfZnJhZ19lcnI7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgdW5rbm93bl90dW5uZWxfcGt0O1xuLVx0dTY0ICAgICAgICAgICAgICAgICAgIGZyYWdfc2l6ZV9lcnI7XG4gXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XG4gfTtcbiBcbkBAIC0xNTcsNiAmIzQzOzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSxcbiBcdFx0XHQgIHUzMiBzcV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3R4cV9yZXMgKnR4cXNfcmVzKTtcbiBcbiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7dm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICpzdGF0cyk7XG4gYm9vbCBoaW5pYzNfdHhfcG9sbChzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBpbnQgYnVkZ2V0KTtcbiB2b2lkIGhpbmljM19mbHVzaF90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZWVmNjMzYTA2MjRkMGU0MjkxMTZhNDAxZGZkMjYyN2IzOWFmMTQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDI6MjE6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMKaW5kZXggOTBmYzE2Mjg4ZGU5NS4uODlhN2JhMjExMTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYwpAQCAtMTcsNiAmIzQzOzE3LDExIEBACiAjaW5jbHVkZSAmIzM0O2hpbmljM19uaWNfY2ZnLmgmIzM0OwogCiAjZGVmaW5lIEhJTklDM19NR01UX1ZFUlNJT05fTUFYX0xFTiAgICAgMzIKJiM0MzsvKiBDb2FsZXNjZSB0aW1lIHByb3BlcnRpZXMgaW4gbWljcm9zZWNvbmRzICovCiYjNDM7I2RlZmluZSBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQgICAgIDgKJiM0MzsjZGVmaW5lIENPQUxFU0NFX1RJTUVSX0NGR19VTklUICAgICAgICAgNQomIzQzOyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVQgICAgICAoMjU1ICogQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKQomIzQzOyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGRyAgICAgICAgICAoMjU1ICogQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpCiAKIHN0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCkBAIC00MDksMTQgJiM0Mzs0MTQsNzkxIEBAIGhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0cnVjdCBoaW5pYzNfc3RhdHMgewomIzQzOwljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKJiM0MzsJaW50ICBvZmZzZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0sodHlwZSwgbWVtYmVyKSBcCiYjNDM7CUJVSUxEX0JVR19PTl9aRVJPKHNpemVvZl9maWVsZCh0eXBlLCBtZW1iZXIpICE9IHNpemVvZih1NjQpKQomIzQzOwomIzQzOyNkZWZpbmUgSElOSUMzX1JYUV9TVEFUKF9zdGF0X2l0ZW0pIHsgXAomIzQzOwkubmFtZSAgID0gJiMzNDtyeHElZF8mIzM0OyNfc3RhdF9pdGVtLCBcCiYjNDM7CS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXAomIzQzOwkJICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgXAomIzQzOwkJCQkJICAgICAgIF9zdGF0X2l0ZW0pIFwKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcCiYjNDM7CS5uYW1lICAgPSAmIzM0O3R4cSVkXyYjMzQ7I19zdGF0X2l0ZW0sIFwKJiM0MzsJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBfc3RhdF9pdGVtKSBcCiYjNDM7CQkgICYjNDM7IDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBcCiYjNDM7CQkJCQkgICAgICAgX3N0YXRfaXRlbSkgXAomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcnhfcXVldWVfc3RhdHNbXSA9IHsKJiM0MzsJSElOSUMzX1JYUV9TVEFUKGNzdW1fZXJyb3JzKSwKJiM0MzsJSElOSUMzX1JYUV9TVEFUKG90aGVyX2Vycm9ycyksCiYjNDM7CUhJTklDM19SWFFfU1RBVChyeF9idWZfZW1wdHkpLAomIzQzOwlISU5JQzNfUlhRX1NUQVQoYWxsb2Nfc2tiX2VyciksCiYjNDM7CUhJTklDM19SWFFfU1RBVChhbGxvY19yeF9idWZfZXJyKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM190eF9xdWV1ZV9zdGF0c1tdID0gewomIzQzOwlISU5JQzNfVFhRX1NUQVQoYnVzeSksCiYjNDM7CUhJTklDM19UWFFfU1RBVChza2JfcGFkX2VyciksCiYjNDM7CUhJTklDM19UWFFfU1RBVChvZmZsb2FkX2Nvd19za2JfZXJyKSwKJiM0MzsJSElOSUMzX1RYUV9TVEFUKG1hcF9mcmFnX2VyciksCiYjNDM7CUhJTklDM19UWFFfU1RBVCh1bmtub3duX3R1bm5lbF9wa3QpLAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBISU5JQzNfRlVOQ19TVEFUKF9zdGF0X2l0ZW0pIHsJXAomIzQzOwkubmFtZSAgID0gI19zdGF0X2l0ZW0sIFwKJiM0MzsJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBsMm5pY192cG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXAomIzQzOwkJICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIFwKJiM0MzsJCQkJCSAgICAgICBfc3RhdF9pdGVtKSBcCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19mdW5jdGlvbl9zdGF0c1tdID0gewomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHR4X3VuaWNhc3RfcGt0c192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQodHhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLAomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHR4X211bHRpY2FzdF9ieXRlc192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLAomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHR4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksCiYjNDM7CiYjNDM7CUhJTklDM19GVU5DX1NUQVQocnhfdW5pY2FzdF9wa3RzX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X2J5dGVzX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfcGt0c192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQocnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF9icm9hZGNhc3RfcGt0c192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0KSwKJiM0MzsKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVCh0eF9kaXNjYXJkX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF9kaXNjYXJkX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVCh0eF9lcnJfdnBvcnQpLAomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHJ4X2Vycl92cG9ydCksCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEhJTklDM19QT1JUX1NUQVQoX3N0YXRfaXRlbSkgeyBcCiYjNDM7CS5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXAomIzQzOwkub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXAomIzQzOwkJICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzLCBcCiYjNDM7CQkJCQkgICAgICAgX3N0YXRfaXRlbSkgXAomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcG9ydF9zdGF0c1tdID0gewomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9mcmFnbWVudF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdW5kZXJzaXplX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcm1pbl9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfMTUxOV9tYXhfYmFkX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF8xNTE5X21heF9nb29kX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfamFiYmVyX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9iYWRfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9vY3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdG90YWxfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X3VuaV9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpMF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTFfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkyX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpM19wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTRfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk1X3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpNl9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTdfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Vycl9hbGxfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Zyb21fYXBwX2dvb2RfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Zyb21fYXBwX2JhZF9wa3RfbnVtKSwKJiM0MzsKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5kZXJtaW5fcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9iYWRfb2N0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3RvdGFsX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmlfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTBfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmkxX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTNfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk0X3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTZfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk3X3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9iYWRfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZmlsdGVyX3BrdF9udW0pLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBoaW5pYzNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlpbnQgY291bnQsIHFfbnVtOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNzZXQpIHsKJiM0MzsJY2FzZSBFVEhfU1NfU1RBVFM6CiYjNDM7CQlxX251bSA9IG5pY19kZXYtJmd0O3FfcGFyYW1zLm51bV9xcHM7CiYjNDM7CQljb3VudCA9IEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKSAmIzQzOwomIzQzOwkJCShBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cykgJiM0MzsKJiM0MzsJCQkgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpKSAqCiYjNDM7CQkJcV9udW07CiYjNDM7CiYjNDM7CQlpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LSZndDtod2RldikpCiYjNDM7CQkJY291bnQgJiM0Mzs9IEFSUkFZX1NJWkUoaGluaWMzX3BvcnRfc3RhdHMpOwomIzQzOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2X3F1ZXVlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHR4cV9zdGF0cyA9IHt9OwomIzQzOwlzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyByeHFfc3RhdHMgPSB7fTsKJiM0MzsJdTE2IGkgPSAwLCBqLCBxaWQ7CiYjNDM7CWNoYXIgKnA7CiYjNDM7CiYjNDM7CWZvciAocWlkID0gMDsgcWlkICZsdDsgbmljX2Rldi0mZ3Q7cV9wYXJhbXMubnVtX3FwczsgcWlkJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuaWNfZGV2LSZndDt0eHFzKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaGluaWMzX3R4cV9nZXRfc3RhdHMoJmFtcDtuaWNfZGV2LSZndDt0eHFzW3FpZF0sICZhbXA7dHhxX3N0YXRzKTsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGomIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXAgPSAoY2hhciAqKSZhbXA7dHhxX3N0YXRzICYjNDM7CiYjNDM7CQkJICAgIGhpbmljM190eF9xdWV1ZV9zdGF0c1tqXS5vZmZzZXQ7CiYjNDM7CQkJZGF0YVtpXSA9ICoodTY0ICopcDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpID0gbmljX2Rldi0mZ3Q7cV9wYXJhbXMubnVtX3FwcyAqIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsKJiM0MzsJZm9yIChxaWQgPSAwOyBxaWQgJmx0OyBuaWNfZGV2LSZndDtxX3BhcmFtcy5udW1fcXBzOyBxaWQmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW5pY19kZXYtJmd0O3J4cXMpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQloaW5pYzNfcnhxX2dldF9zdGF0cygmYW1wO25pY19kZXYtJmd0O3J4cXNbcWlkXSwgJmFtcDtyeHFfc3RhdHMpOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX3J4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJcCA9IChjaGFyICopJmFtcDtyeHFfc3RhdHMgJiM0MzsKJiM0MzsJCQkgICAgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDsKJiM0MzsJCQlkYXRhW2ldID0gKih1NjQgKilwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MTYgaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7CiYjNDM7CXUxNiBpID0gMCwgajsKJiM0MzsJY2hhciAqcDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcHMgPSBrbWFsbG9jX29iaigqcHMpOwomIzQzOwlpZiAoIXBzKQomIzQzOwkJZ290byBlcnJfemVyb19zdGF0czsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LSZndDtod2RldiwgcHMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IHBvcnQgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJZ290byBlcnJfemVyb19zdGF0czsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7IGomIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJcCA9IChjaGFyICopcHMgJiM0MzsgaGluaWMzX3BvcnRfc3RhdHNbal0ub2Zmc2V0OwomIzQzOwkJZGF0YVtpXSA9ICoodTY0ICopcDsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShwcyk7CiYjNDM7CiYjNDM7CXJldHVybiBpOwomIzQzOwomIzQzO2Vycl96ZXJvX3N0YXRzOgomIzQzOwltZW1zZXQoJmFtcDtkYXRhW2ldLCAwLCBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKSAqIHNpemVvZigqZGF0YSkpOwomIzQzOwomIzQzOwlyZXR1cm4gaSAmIzQzOyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgdnBvcnRfc3RhdHMgPSB7fTsKJiM0MzsJdTE2IGkgPSAwLCBqOwomIzQzOwljaGFyICpwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfZ2V0X3Zwb3J0X3N0YXRzKG5pY19kZXYtJmd0O2h3ZGV2LAomIzQzOwkJCQkgICAgIGhpbmljM19nbG9iYWxfZnVuY19pZChuaWNfZGV2LSZndDtod2RldiksCiYjNDM7CQkJCSAgICAgJmFtcDt2cG9ydF9zdGF0cyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGZ1bmN0aW9uIHN0YXRzIGZyb20gZndcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwID0gKGNoYXIgKikmYW1wO3Zwb3J0X3N0YXRzICYjNDM7IGhpbmljM19mdW5jdGlvbl9zdGF0c1tqXS5vZmZzZXQ7CiYjNDM7CQlkYXRhW2ldID0gKih1NjQgKilwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtJmd0O2h3ZGV2KSkKJiM0MzsJCWkgJiM0Mzs9IGhpbmljM19nZXRfZXRodG9vbF9wb3J0X3N0YXRzKG5ldGRldiwgZGF0YSAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJaGluaWMzX2dldF9kcnZfcXVldWVfc3RhdHMobmV0ZGV2LCBkYXRhICYjNDM7IGkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjaGFyICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZW1jcHkocCwgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CQlwICYjNDM7PSBFVEhfR1NUUklOR19MRU47CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtJmd0O2h3ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX3BvcnRfc3RhdHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCW1lbWNweShwLCBoaW5pYzNfcG9ydF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pOwomIzQzOwkJCXAgJiM0Mzs9IEVUSF9HU1RSSU5HX0xFTjsKJiM0MzsJCQljbnQmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjbnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcXBfc3RhdHNfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjaGFyICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTggKmRhdGEgPSBwOwomIzQzOwl1MTYgaSwgajsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5pY19kZXYtJmd0O3FfcGFyYW1zLm51bV9xcHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgQVJSQVlfU0laRShoaW5pYzNfdHhfcXVldWVfc3RhdHMpOyBqJiM0MzsmIzQzOykKJiM0MzsJCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLAomIzQzOwkJCQkJaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuaWNfZGV2LSZndDtxX3BhcmFtcy5udW1fcXBzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX3J4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzspCiYjNDM7CQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwKJiM0MzsJCQkJCWhpbmljM19yeF9xdWV1ZV9zdGF0c1tqXS5uYW1lLCBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCiYjNDM7ewomIzQzOwljaGFyICpwID0gKGNoYXIgKilkYXRhOwomIzQzOwl1MTYgb2Zmc2V0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0cmluZ3NldCkgewomIzQzOwljYXNlIEVUSF9TU19TVEFUUzoKJiM0MzsJCW9mZnNldCA9IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhuZXRkZXYsIHApOwomIzQzOwkJaGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKG5ldGRldiwKJiM0MzsJCQkJCSAgICBwICYjNDM7IG9mZnNldCAqIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CiYjNDM7CQlyZXR1cm47CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtJbnZhbGlkIHN0cmluZyBzZXQgJXUuXG4mIzM0Oywgc3RyaW5nc2V0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfcGh5X3N0YXRzICpwaHlfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKEhJTklDM19JU19WRihuaWNfZGV2LSZndDtod2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBzID0ga21hbGxvY19vYmooKnBzKTsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LSZndDtod2RldiwgcHMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBwaHkgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV9zdGF0cy0mZ3Q7U3ltYm9sRXJyb3JEdXJpbmdDYXJyaWVyID0gcHMtJmd0O21hY19yeF9zeW1fZXJyX3BrdF9udW07CiYjNDM7CiYjNDM7CWtmcmVlKHBzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXBzID0ga21hbGxvY19vYmooKnBzKTsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LSZndDtod2RldiwgcHMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBtYWMgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7RnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHBzLSZndDttYWNfdHhfZ29vZF9wa3RfbnVtOwomIzQzOwltYWNfc3RhdHMtJmd0O0ZyYW1lc1JlY2VpdmVkT0sgPSBwcy0mZ3Q7bWFjX3J4X2dvb2RfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSBwcy0mZ3Q7bWFjX3J4X2Zjc19lcnJfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtPY3RldHNUcmFuc21pdHRlZE9LID0gcHMtJmd0O21hY190eF9nb29kX29jdF9udW07CiYjNDM7CW1hY19zdGF0cy0mZ3Q7T2N0ZXRzUmVjZWl2ZWRPSyA9IHBzLSZndDttYWNfcnhfZ29vZF9vY3RfbnVtOwomIzQzOwltYWNfc3RhdHMtJmd0O011bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHBzLSZndDttYWNfdHhfbXVsdGlfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy0mZ3Q7bWFjX3R4X2Jyb2FkX3BrdF9udW07CiYjNDM7CW1hY19zdGF0cy0mZ3Q7TXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHBzLSZndDttYWNfcnhfbXVsdGlfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtJmd0O21hY19yeF9icm9hZF9wa3RfbnVtOwomIzQzOwomIzQzOwlrZnJlZShwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcHMgPSBrbWFsbG9jX29iaigqcHMpOwomIzQzOwlpZiAoIXBzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtJmd0O2h3ZGV2LCBwcyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKHBzKTsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIGN0cmwgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0cmxfc3RhdHMtJmd0O01BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHBzLSZndDttYWNfdHhfY29udHJvbF9wa3RfbnVtOwomIzQzOwljdHJsX3N0YXRzLSZndDtNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSBwcy0mZ3Q7bWFjX3J4X2NvbnRyb2xfcGt0X251bTsKJiM0MzsKJiM0MzsJa2ZyZWUocHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGhpbmljM19ybW9uX3Jhbmdlc1tdID0gewomIzQzOwl7ICAgICAwLCAgICA2NCB9LAomIzQzOwl7ICAgIDY1LCAgIDEyNyB9LAomIzQzOwl7ICAgMTI4LCAgIDI1NSB9LAomIzQzOwl7ICAgMjU2LCAgIDUxMSB9LAomIzQzOwl7ICAgNTEyLCAgMTAyMyB9LAomIzQzOwl7ICAxMDI0LCAgMTUxOCB9LAomIzQzOwl7ICAxNTE5LCAgMjA0NyB9LAomIzQzOwl7ICAyMDQ4LCAgNDA5NSB9LAomIzQzOwl7ICA0MDk2LCAgODE5MSB9LAomIzQzOwl7ICA4MTkyLCAgOTIxNiB9LAomIzQzOwl7ICA5MjE3LCAxMjI4NyB9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcHMgPSBrbWFsbG9jX29iaigqcHMpOwomIzQzOwlpZiAoIXBzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtJmd0O2h3ZGV2LCBwcyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKHBzKTsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIHJtb24gc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJtb25fc3RhdHMtJmd0O3VuZGVyc2l6ZV9wa3RzCT0gcHMtJmd0O21hY19yeF91bmRlcnNpemVfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cwk9IHBzLSZndDttYWNfcnhfb3ZlcnNpemVfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7ZnJhZ21lbnRzCQk9IHBzLSZndDttYWNfcnhfZnJhZ21lbnRfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7amFiYmVycwkJPSBwcy0mZ3Q7bWFjX3J4X2phYmJlcl9wa3RfbnVtOwomIzQzOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzBdCQk9IHBzLSZndDttYWNfcnhfNjRfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RbMV0JCT0gcHMtJmd0O21hY19yeF82NV8xMjdfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RbMl0JCT0gcHMtJmd0O21hY19yeF8xMjhfMjU1X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzNdCQk9IHBzLSZndDttYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFs0XQkJPSBwcy0mZ3Q7bWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzVdCQk9IHBzLSZndDttYWNfcnhfMTAyNF8xNTE4X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzZdCQk9IHBzLSZndDttYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzddCQk9IHBzLSZndDttYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzhdCQk9IHBzLSZndDttYWNfcnhfNDA5Nl84MTkxX29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzldCQk9IHBzLSZndDttYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzEwXQkJPSBwcy0mZ3Q7bWFjX3J4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07CiYjNDM7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMF0JCT0gcHMtJmd0O21hY190eF82NF9vY3RfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsxXQkJPSBwcy0mZ3Q7bWFjX3R4XzY1XzEyN19vY3RfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsyXQkJPSBwcy0mZ3Q7bWFjX3R4XzEyOF8yNTVfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbM10JCT0gcHMtJmd0O21hY190eF8yNTZfNTExX29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzRdCQk9IHBzLSZndDttYWNfdHhfNTEyXzEwMjNfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNV0JCT0gcHMtJmd0O21hY190eF8xMDI0XzE1MThfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNl0JCT0gcHMtJmd0O21hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbN10JCT0gcHMtJmd0O21hY190eF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbOF0JCT0gcHMtJmd0O21hY190eF80MDk2XzgxOTFfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbOV0JCT0gcHMtJmd0O21hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMTBdCQk9IHBzLSZndDttYWNfdHhfOTIxN18xMjI4N19vY3RfcGt0X251bTsKJiM0MzsKJiM0MzsJKnJhbmdlcyA9IGhpbmljM19ybW9uX3JhbmdlczsKJiM0MzsKJiM0MzsJa2ZyZWUocHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlwcyA9IGttYWxsb2Nfb2JqKCpwcyk7CiYjNDM7CWlmICghcHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi0mZ3Q7aHdkZXYsIHBzKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa2ZyZWUocHMpOwomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7RmFpbGVkIHRvIGdldCBldGggcGF1c2Ugc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhdXNlX3N0YXRzLSZndDt0eF9wYXVzZV9mcmFtZXMgPSBwcy0mZ3Q7bWFjX3R4X3BhdXNlX251bTsKJiM0MzsJcGF1c2Vfc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9IHBzLSZndDttYWNfcnhfcGF1c2VfbnVtOwomIzQzOwomIzQzOwlrZnJlZShwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpjb2FsLAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbDsKJiM0MzsJc3RydWN0IGhpbmljM19pbnRlcnJ1cHRfaW5mbyBpbmZvID0ge307CiYjNDM7CWJvb2wgaXNfYWN0aXZlOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CWlzX2FjdGl2ZSA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCAmYW1wO25pY19kZXYtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHFfaWQgJmx0OyBuaWNfZGV2LSZndDtxX3BhcmFtcy5udW1fcXBzKTsKJiM0MzsKJiM0MzsJaWYgKGlzX2FjdGl2ZSkgewomIzQzOwkJaW5mby5tc2l4X2luZGV4ID0KJiM0MzsJCQluaWNfZGV2LSZndDtxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4OwomIzQzOwkJaW5mby5yZXNlbmRfdGltZXJfY2ZnID0KJiM0MzsJCQluaWNfZGV2LSZndDtpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChpc19hY3RpdmUpIHsKJiM0MzsJCWluZm8uaW50ZXJydXB0X2NvYWxlc2Nfc2V0ID0gMTsKJiM0MzsJCWluZm8uY29hbGVzY190aW1lcl9jZmcgPSBjb2FsLSZndDtjb2FsZXNjZV90aW1lcl9jZmc7CiYjNDM7CQlpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLSZndDtwZW5kaW5nX2xpbWl0OwomIzQzOwomIzQzOwkJZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtJmd0O2h3ZGV2LCBpbmZvKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O0ZhaWxlZCB0byBzZXQgcXVldWUldSBjb2FsZXNjZSYjMzQ7LAomIzQzOwkJCQkJICAgICAgIHFfaWQpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlpbnRyX2NvYWwgPSAmYW1wO25pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbcV9pZF07CiYjNDM7CWludHJfY29hbC0mZ3Q7Y29hbGVzY2VfdGltZXJfY2ZnID0gY29hbC0mZ3Q7Y29hbGVzY2VfdGltZXJfY2ZnOwomIzQzOwlpbnRyX2NvYWwtJmd0O3BlbmRpbmdfbGltaXQgPSBjb2FsLSZndDtwZW5kaW5nX2xpbWl0OwomIzQzOwlpbnRyX2NvYWwtJmd0O3J4X3BlbmRpbmdfbGltaXRfbG93ID0gY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9sb3c7CiYjNDM7CWludHJfY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9oaWdoID0gY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9oaWdoOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaXNfY29hbGVzY2VfZXhjZWVkX2xpbWl0KGNvbnN0IHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHsKJiM0MzsJCWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CQl1MzIgdmFsdWU7CiYjNDM7CQl1MzIgbGltaXQ7CiYjNDM7CX0gY29hbGVzY2VfbGltaXRzW10gPSB7CiYjNDM7CQl7JiMzNDtyeF9jb2FsZXNjZV91c2VjcyYjMzQ7LAomIzQzOwkJIGNvYWwtJmd0O3J4X2NvYWxlc2NlX3VzZWNzLAomIzQzOwkJIENPQUxFU0NFX01BWF9USU1FUl9DRkd9LAomIzQzOwkJeyYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMmIzM0OywKJiM0MzsJCSBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcywKJiM0MzsJCSBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sCiYjNDM7CQl7JiMzNDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cmIzM0OywKJiM0MzsJCSBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csCiYjNDM7CQkgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LAomIzQzOwkJeyYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCYjMzQ7LAomIzQzOwkJIGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LAomIzQzOwl9OwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoY29hbGVzY2VfbGltaXRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChjb2FsZXNjZV9saW1pdHNbaV0udmFsdWUgJmd0OyBjb2FsZXNjZV9saW1pdHNbaV0ubGltaXQpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgJiMzNDslcyBvdXQgb2YgcmFuZ2UgJWQtJWQmIzM0OywKJiM0MzsJCQkJCSAgICAgICBjb2FsZXNjZV9saW1pdHNbaV0ubmFtZSwgMCwKJiM0MzsJCQkJCSAgICAgICBjb2FsZXNjZV9saW1pdHNbaV0ubGltaXQpOwomIzQzOwkJCXJldHVybiAtRVJBTkdFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhpbmljM192YWxpZGF0ZV9jb2FsZXNjZShjb25zdCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb2FsLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAmZ3Q7CiYjNDM7CSAgICBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7aW52YWxpZCBjb2FsZXNjZSBmcmFtZSBoaWdoICV1LCBsb3cgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkJCSAgICAgICBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSB1MzIgaXRlbSwgdTMyIHVuaXQsIGNvbnN0IGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CWlmIChpdGVtICUgdW5pdCkKJiM0MzsJCW5ldGRldl93YXJuKG5ldGRldiwgJiMzNDslcyBpbiAldSB1bml0cywgY2hhbmdlIHRvICV1XG4mIzM0OywKJiM0MzsJCQkgICAgc3RyLCB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0FMSUdOKG1lbWJlciwgdW5pdCkgXAomIzQzOwljaGVja19jb2FsZXNjZV9hbGlnbihuZXRkZXYsIG1lbWJlciwgdW5pdCwgI21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjaGVja19jb2FsZXNjZV9jaGFuZ2VkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIHUzMiBpdGVtLCB1MzIgdW5pdCwgdTMyIG9yaV92YWwsCiYjNDM7CQkJCSAgIGNvbnN0IGNoYXIgKm9ial9zdHIsIGNvbnN0IGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CWlmICgoaXRlbSAvIHVuaXQpICE9IG9yaV92YWwpCiYjNDM7CQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtDaGFuZ2UgJXMgZnJvbSAldSB0byAldSAlc1xuJiMzNDssCiYjNDM7CQkJICAgc3RyLCBvcmlfdmFsICogdW5pdCwgaXRlbSAtIGl0ZW0gJSB1bml0LCBvYmpfc3RyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBDSEVDS19DT0FMRVNDRV9DSEFOR0VEKG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0cikgXAomIzQzOwljaGVja19jb2FsZXNjZV9jaGFuZ2VkKG5ldGRldiwgbWVtYmVyLCB1bml0LCBvcmlfdmFsLCBvYmpfc3RyLCAjbWVtYmVyKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGluaWMzX3NldF9od19jb2FsX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICppbnRyX2NvYWwsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvbGRfY29hbDsKJiM0MzsJdTE2IGksIGo7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW9sZF9jb2FsID0ga2NhbGxvYyhuaWNfZGV2LSZndDttYXhfcXBzLCBzaXplb2YoKm9sZF9jb2FsKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghb2xkX2NvYWwpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmljX2Rldi0mZ3Q7bWF4X3FwczsgaSYjNDM7JiM0MzspCiYjNDM7CQlvbGRfY29hbFtpXSA9IG5pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbaV07CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmljX2Rldi0mZ3Q7bWF4X3FwczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2UobmV0ZGV2LCBpLCBpbnRyX2NvYWwsIGV4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUob2xkX2NvYWwpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0Mztyb2xsYmFjazoKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQomIzQzOwkJaGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShuZXRkZXYsIGosICZhbXA7b2xkX2NvYWxbal0sIE5VTEwpOwomIzQzOwomIzQzOwlrZnJlZShvbGRfY29hbCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGluaWMzX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCwKJiM0MzsJCQkgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX2NvYWxlc2NlICprZXJuZWxfY29hbCwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGhpbmljM19pbnRyX2NvYWxfaW5mbyAqaW50ZXJydXB0X2luZm87CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJaW50ZXJydXB0X2luZm8gPSAmYW1wO25pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbMF07CiYjNDM7CiYjNDM7CWNvYWwtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IFJFQURfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsKTsKJiM0MzsKJiM0MzsJY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93ID0KJiM0MzsJCWludGVycnVwdF9pbmZvLSZndDtyeF9wZW5kaW5nX2xpbWl0X2xvdyAqCiYjNDM7CQlDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7CiYjNDM7CiYjNDM7CWNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggPQomIzQzOwkJaW50ZXJydXB0X2luZm8tJmd0O3J4X3BlbmRpbmdfbGltaXRfaGlnaCAqCiYjNDM7CQlDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7CiYjNDM7CiYjNDM7CS8qIFRYL1JYIHVzZXMgdGhlIHNhbWUgaW50ZXJydXB0LgomIzQzOwkgKiBTbyB3ZSBvbmx5IGRlY2xhcmUgUlggZXRodG9vbF9jb2FsZXNjZSBwYXJhbWV0ZXJzLgomIzQzOwkgKi8KJiM0MzsJY29hbC0mZ3Q7cnhfY29hbGVzY2VfdXNlY3MgPSBpbnRlcnJ1cHRfaW5mby0mZ3Q7Y29hbGVzY2VfdGltZXJfY2ZnICoKJiM0MzsJCQkJICBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVDsKJiM0MzsKJiM0MzsJY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBpbnRlcnJ1cHRfaW5mby0mZ3Q7cGVuZGluZ19saW1pdCAqCiYjNDM7CQkJCQlDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoaW5pYzNfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvcmlfaW50cl9jb2FsOwomIzQzOwlzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvIGludHJfY29hbCA9IHt9OwomIzQzOwljb25zdCBjaGFyICpvYmpfc3RyID0gJiMzNDtmb3IgbmV0ZGV2JiMzNDs7CiYjNDM7CWJvb2wgb2xkX2FkYXB0aXZlLCBuZXdfYWRhcHRpdmU7CiYjNDM7CXN0cnVjdCBoaW5pYzNfcnhxICpyeHEgPSBOVUxMOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX3ZhbGlkYXRlX2NvYWxlc2NlKGNvYWwsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLSZndDtyeF9jb2FsZXNjZV91c2VjcywgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcywKJiM0MzsJCQkgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7CiYjNDM7CUNIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkJICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csCiYjNDM7CQkJICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CW9yaV9pbnRyX2NvYWwgPSAmYW1wO25pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbMF07CiYjNDM7CiYjNDM7CUNIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC0mZ3Q7cnhfY29hbGVzY2VfdXNlY3MsIENPQUxFU0NFX1RJTUVSX0NGR19VTklULAomIzQzOwkJCSAgICAgICBvcmlfaW50cl9jb2FsLSZndDtjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzLAomIzQzOwkJCSAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsCiYjNDM7CQkJICAgICAgIG9yaV9pbnRyX2NvYWwtJmd0O3BlbmRpbmdfbGltaXQsIG9ial9zdHIpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkJICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCwKJiM0MzsJCQkgICAgICAgb3JpX2ludHJfY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9oaWdoLCBvYmpfc3RyKTsKJiM0MzsJQ0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csCiYjNDM7CQkJICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCwKJiM0MzsJCQkgICAgICAgb3JpX2ludHJfY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJb2xkX2FkYXB0aXZlID0gUkVBRF9PTkNFKG5pY19kZXYtJmd0O2FkYXB0aXZlX3J4X2NvYWwpOwomIzQzOwluZXdfYWRhcHRpdmUgPSAhIWNvYWwtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKJiM0MzsKJiM0MzsJaWYgKG9sZF9hZGFwdGl2ZSkgewomIzQzOwkJYm9vbCBpc191cDsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UobmljX2Rldi0mZ3Q7YWRhcHRpdmVfcnhfY29hbCwgZmFsc2UpOwomIzQzOwomIzQzOwkJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CQlpc191cCA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCAmYW1wO25pY19kZXYtJmd0O2ZsYWdzKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwkJaWYgKGlzX3VwKSB7CiYjNDM7CQkJZm9yIChpID0gMDsgaSAmbHQ7IG5pY19kZXYtJmd0O3FfcGFyYW1zLm51bV9xcHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCXJ4cSA9IG5pY19kZXYtJmd0O3FfcGFyYW1zLmlycV9jZmdbaV0ucnhxOwomIzQzOwkJCQlpZiAoIXJ4cSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCQluZXRfZGltX3dvcmtfY2FuY2VsKCZhbXA7cnhxLSZndDtkaW0pOwomIzQzOwkJCQlyeHEtJmd0O2RpbS5zdGF0ZSA9IERJTV9TVEFSVF9NRUFTVVJFOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpbnRyX2NvYWwuY29hbGVzY2VfdGltZXJfY2ZnID0KJiM0MzsJCSh1OCkoY29hbC0mZ3Q7cnhfY29hbGVzY2VfdXNlY3MgLyBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7CiYjNDM7CiYjNDM7CWludHJfY29hbC5wZW5kaW5nX2xpbWl0ID0KJiM0MzsJCSh1OCkoY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgLwomIzQzOwkJICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpOwomIzQzOwomIzQzOwlpbnRyX2NvYWwucnhfcGVuZGluZ19saW1pdF9oaWdoID0KJiM0MzsJCSh1OCkoY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCAvCiYjNDM7CQkgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7CiYjNDM7CiYjNDM7CWludHJfY29hbC5yeF9wZW5kaW5nX2xpbWl0X2xvdyA9CiYjNDM7CQkodTgpKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAvCiYjNDM7CQkgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7CiYjNDM7CiYjNDM7CS8qIGNvYWxlc2NlIHRpbWVyIG9yIHBlbmRpbmcgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGNvYWxlc2NlICovCiYjNDM7CWlmICghbmV3X2FkYXB0aXZlICZhbXA7JmFtcDsKJiM0MzsJICAgICghaW50cl9jb2FsLmNvYWxlc2NlX3RpbWVyX2NmZyB8fCAhaW50cl9jb2FsLnBlbmRpbmdfbGltaXQpKQomIzQzOwkJbmV0ZGV2X2luZm8obmV0ZGV2LCAmIzM0O0NvYWxlc2NlIHdpbGwgYmUgZGlzYWJsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX3NldF9od19jb2FsX3BhcmFtKG5ldGRldiwgJmFtcDtpbnRyX2NvYWwsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChvbGRfYWRhcHRpdmUpCiYjNDM7CQkJV1JJVEVfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsLCBvbGRfYWRhcHRpdmUpOwomIzQzOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKG5pY19kZXYtJmd0O2FkYXB0aXZlX3J4X2NvYWwsIG5ld19hZGFwdGl2ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaGluaWMzX2V0aHRvb2xfb3BzID0gewotCS5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zICAgICAgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHwKLQkJCQkJICBFVEhUT09MX0NPQUxFU0NFX1BLVF9SQVRFX1JYX1VTRUNTLAomIzQzOwkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyAgICAgID0gRVRIVE9PTF9DT0FMRVNDRV9SWF9VU0VDUyB8CiYjNDM7CQkJCQkgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FUyB8CiYjNDM7CQkJCQkgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFX1JYIHwKJiM0MzsJCQkJCSAgRVRIVE9PTF9DT0FMRVNDRV9SWF9NQVhfRlJBTUVTX0xPVyB8CiYjNDM7CQkJCQkgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19ISUdILAogCS5nZXRfbGlua19rc2V0dGluZ3MgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2xpbmtfa3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19zZXRfbXNnbGV2ZWwsCiAJLmdldF9saW5rICAgICAgICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiYjNDM7CS5nZXRfc3NldF9jb3VudCAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3N0cmluZ3MsCiYjNDM7CS5nZXRfZXRoX3BoeV9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMsCiYjNDM7CS5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsCiYjNDM7CS5nZXRfZXRoX2N0cmxfc3RhdHMgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzLAomIzQzOwkuZ2V0X3Jtb25fc3RhdHMgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9ybW9uX3N0YXRzLAomIzQzOwkuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cywKJiM0MzsJLmdldF9jb2FsZXNjZSAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfc2V0X2NvYWxlc2NlLAogfTsKIAogdm9pZCBoaW5pYzNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmgKaW5kZXggY2ZjOWRhYTMwMzRmZS4uNmIwZjQ4NmJhNTkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaApAQCAtNTMsNiAmIzQzOzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhCiAJbXNnX3BhcmFtcy0mZ3Q7dGltZW91dF9tcyA9IDA7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQKJiM0MzttZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoc3RydWN0IG1nbXRfbXNnX3BhcmFtcyAqbXNnX3BhcmFtcywgdm9pZCAqaW5fYnVmLAomIzQzOwkJCSAgICB2b2lkICpvdXRfYnVmLCB1MzIgaW5fYnVmX3NpemUsIHUzMiBvdXRfYnVmX3NpemUpCiYjNDM7ewomIzQzOwltc2dfcGFyYW1zLSZndDtidWZfaW4gPSBpbl9idWY7CiYjNDM7CW1zZ19wYXJhbXMtJmd0O2J1Zl9vdXQgPSBvdXRfYnVmOwomIzQzOwltc2dfcGFyYW1zLSZndDtpbl9zaXplID0gaW5fYnVmX3NpemU7CiYjNDM7CW1zZ19wYXJhbXMtJmd0O2V4cGVjdGVkX291dF9zaXplID0gb3V0X2J1Zl9zaXplOwomIzQzOwltc2dfcGFyYW1zLSZndDt0aW1lb3V0X21zID0gMDsKJiM0Mzt9CiYjNDM7CiBlbnVtIGNmZ19jbWQgewogCUNGR19DTURfR0VUX0RFVl9DQVAgPSAwLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMKaW5kZXggZTdkNmMyMDMzYjQ1MS4uZjY2NDUzODVjNTUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMKQEAgLTIwLDcgJiM0MzsyMCw3IEBAIHN0YXRpYyB2b2lkIGhpbmljM19uZXRfZGltKHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiwKIAlzdHJ1Y3QgZGltX3NhbXBsZSBzYW1wbGUgPSB7fTsKIAogCWlmICghdGVzdF9iaXQoSElOSUMzX0lOVEZfVVAsICZhbXA7bmljX2Rldi0mZ3Q7ZmxhZ3MpIHx8Ci0JICAgICFuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsKQomIzQzOwkgICAgIVJFQURfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsKSkKIAkJcmV0dXJuOwogCiAJZGltX3VwZGF0ZV9zYW1wbGUoaXJxX2NmZy0mZ3Q7dG90YWxfZXZlbnRzLCByeHEtJmd0O3J4cV9zdGF0cy5wYWNrZXRzLApAQCAtMTQ4LDEzICYjNDM7MTQ4LDkgQEAgc3RhdGljIGludCBoaW5pYzNfc2V0X2ludGVycnVwdF9tb2RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCwKIAkJbmljX2Rldi0mZ3Q7aW50cl9jb2FsZXNjZVtxX2lkXS5yZXNlbmRfdGltZXJfY2ZnOwogCiAJZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtJmd0O2h3ZGV2LCBpbmZvKTsKLQlpZiAoZXJyKSB7CiYjNDM7CWlmIChlcnIpCiAJCW5ldGRldl9lcnIobmV0ZGV2LAogCQkJICAgJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IG1vZGVyYXRpb24gZm9yIFF1ZXVlOiAldVxuJiMzNDssIHFfaWQpOwotCX0gZWxzZSB7Ci0JCW5pY19kZXYtJmd0O3J4cXNbcV9pZF0ubGFzdF9jb2FsZXNjX3RpbWVyX2NmZyA9IGNvYWxlc2NfdGltZXJfY2ZnOwotCQluaWNfZGV2LSZndDtyeHFzW3FfaWRdLmxhc3RfcGVuZGluZ19saW1pdCA9IHBlbmRpbmdfbGltaXQ7Ci0JfQogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uYwppbmRleCAwYTg4OGZlNGM5NzViLi44Yzc0OTJlMTU0MDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWFpbi5jCkBAIC01MSw3ICYjNDM7NTEsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2ludHJfY29hbF9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlpbmZvLSZndDtyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IEhJTklDM19SWF9QRU5ESU5HX0xJTUlUX0xPVzsKIAl9CiAKLQluaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsID0gMTsKJiM0MzsJV1JJVEVfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsLCAxKTsKIH0KIAogc3RhdGljIGludCBoaW5pYzNfaW5pdF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0xNzgsNyAmIzQzOzE3OCw3IEBAIHN0YXRpYyBpbnQgaGluaWMzX3N3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJaW50IGVycjsKIAotCW11dGV4X2luaXQoJmFtcDtuaWNfZGV2LSZndDtwb3J0X3N0YXRlX211dGV4KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwogCiAJbmljX2Rldi0mZ3Q7cV9wYXJhbXMuc3FfZGVwdGggPSBISU5JQzNfU1FfREVQVEg7CiAJbmljX2Rldi0mZ3Q7cV9wYXJhbXMucnFfZGVwdGggPSBISU5JQzNfUlFfREVQVEg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaAppbmRleCBjNWJjYTNjNGFmOTYxLi43NmM2OTFmODI3MDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmgKQEAgLTE0Myw2ICYjNDM7MTQzLDQxIEBAIHN0cnVjdCBsMm5pY19jbWRfc2V0X2RjYl9zdGF0ZSB7CiAJdTggICAgICAgICAgICAgICAgICAgcnN2ZFs3XTsKIH07CiAKJiM0MztzdHJ1Y3QgbDJuaWNfcG9ydF9zdGF0c19pbmZvIHsKJiM0MzsJc3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7CiYjNDM7CXUxNiAgICAgICAgICAgICAgICAgIGZ1bmNfaWQ7CiYjNDM7CXUxNiAgICAgICAgICAgICAgICAgIHJzdmQxOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHsKJiM0MzsJdTY0IHR4X3VuaWNhc3RfcGt0c192cG9ydDsKJiM0MzsJdTY0IHR4X3VuaWNhc3RfYnl0ZXNfdnBvcnQ7CiYjNDM7CXU2NCB0eF9tdWx0aWNhc3RfcGt0c192cG9ydDsKJiM0MzsJdTY0IHR4X211bHRpY2FzdF9ieXRlc192cG9ydDsKJiM0MzsJdTY0IHR4X2Jyb2FkY2FzdF9wa3RzX3Zwb3J0OwomIzQzOwl1NjQgdHhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0OwomIzQzOwomIzQzOwl1NjQgcnhfdW5pY2FzdF9wa3RzX3Zwb3J0OwomIzQzOwl1NjQgcnhfdW5pY2FzdF9ieXRlc192cG9ydDsKJiM0MzsJdTY0IHJ4X211bHRpY2FzdF9wa3RzX3Zwb3J0OwomIzQzOwl1NjQgcnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0OwomIzQzOwl1NjQgcnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7CiYjNDM7CXU2NCByeF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7CiYjNDM7CiYjNDM7CXU2NCB0eF9kaXNjYXJkX3Zwb3J0OwomIzQzOwl1NjQgcnhfZGlzY2FyZF92cG9ydDsKJiM0MzsJdTY0IHR4X2Vycl92cG9ydDsKJiM0MzsJdTY0IHJ4X2Vycl92cG9ydDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBsMm5pY19jbWRfdnBvcnRfc3RhdHMgewomIzQzOwlzdHJ1Y3QgbWdtdF9tc2dfaGVhZCAgICAgbXNnX2hlYWQ7CiYjNDM7CXUzMiAgICAgICAgICAgICAgICAgICAgICBzdGF0c19zaXplOwomIzQzOwl1MzIgICAgICAgICAgICAgICAgICAgICAgcnN2ZDE7CiYjNDM7CXN0cnVjdCBsMm5pY192cG9ydF9zdGF0cyBzdGF0czsKJiM0MzsJdTY0ICAgICAgICAgICAgICAgICAgICAgIHJzdmQyWzZdOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbDJuaWNfY21kX2xyb19jb25maWcgewogCXN0cnVjdCBtZ210X21zZ19oZWFkIG1zZ19oZWFkOwogCXUxNiAgICAgICAgICAgICAgICAgIGZ1bmNfaWQ7CkBAIC0yMzQsNiAmIzQzOzI2OSw3IEBAIGVudW0gbDJuaWNfY21kIHsKIAlMMk5JQ19DTURfU0VUX1ZQT1JUX0VOQUJMRSAgICA9IDYsCiAJTDJOSUNfQ01EX1NFVF9SWF9NT0RFICAgICAgICAgPSA3LAogCUwyTklDX0NNRF9TRVRfU1FfQ0lfQVRUUiAgICAgID0gOCwKJiM0MzsJTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFUICAgICAgPSA5LAogCUwyTklDX0NNRF9DTEVBUl9RUF9SRVNPVVJDRSAgID0gMTEsCiAJTDJOSUNfQ01EX0NGR19SWF9MUk8gICAgICAgICAgPSAxMywKIAlMMk5JQ19DTURfQ0ZHX0xST19USU1FUiAgICAgICA9IDE0LApAQCAtMjcyLDYgJiM0MzszMDgsNyBAQCBlbnVtIG1hZ19jbWQgewogCU1BR19DTURfU0VUX1BPUlRfRU5BQkxFID0gNiwKIAlNQUdfQ01EX0dFVF9MSU5LX1NUQVRVUyA9IDcsCiAKJiM0MzsJTUFHX0NNRF9HRVRfUE9SVF9TVEFUICAgPSAxNTEsCiAJTUFHX0NNRF9HRVRfUE9SVF9JTkZPICAgPSAxNTMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uZXRkZXZfb3BzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uZXRkZXZfb3BzLmMKaW5kZXggZGE3MzgxMTY0MWE5ZC4uZWQ0ODEwZmE5ODUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuYwpAQCAtMzQxLDkgJiM0MzszNDEsOSBAQCBzdGF0aWMgaW50IGhpbmljM19tYXliZV9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIGVuYWJsZSkKIAlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnI7CiAKLQltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7cG9ydF9zdGF0ZV9tdXRleCk7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKIAllcnIgPSBoaW5pYzNfc2V0X3BvcnRfZW5hYmxlKG5pY19kZXYtJmd0O2h3ZGV2LCBlbmFibGUpOwotCW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3BvcnRfc3RhdGVfbXV0ZXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmMKaW5kZXggZGU1YTc5ODRkMmNiOS4uMWIxNGRjODI0Y2UxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuYwpAQCAtNjM5LDYgJiM0Mzs2MzksNDIgQEAgaW50IGhpbmljM19nZXRfbGlua19zdGF0dXMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIGJvb2wgKmxpbmtfc3RhdHVzX3VwKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzX2luZm8gc3RhdHNfaW5mbyA9IHt9OwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9nZXRfcG9ydF9zdGF0ICpwczsKJiM0MzsJc3RydWN0IG1nbXRfbXNnX3BhcmFtcyBtc2dfcGFyYW1zID0ge307CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXBzID0ga3phbGxvY19vYmooKnBzKTsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlzdGF0c19pbmZvLnBvcnRfaWQgPSBoaW5pYzNfcGh5c2ljYWxfcG9ydF9pZChod2Rldik7CiYjNDM7CiYjNDM7CW1nbXRfbXNnX3BhcmFtc19pbml0X2luX291dCgmYW1wO21zZ19wYXJhbXMsICZhbXA7c3RhdHNfaW5mbywgcHMsCiYjNDM7CQkJCSAgICBzaXplb2Yoc3RhdHNfaW5mbyksIHNpemVvZigqcHMpKTsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9ISUxJTkssCiYjNDM7CQkJCSAgICAgICBNQUdfQ01EX0dFVF9QT1JUX1NUQVQsICZhbXA7bXNnX3BhcmFtcyk7CiYjNDM7CiYjNDM7CWlmIChlcnIgfHwgcHMtJmd0O2hlYWQuc3RhdHVzKSB7CiYjNDM7CQlkZXZfZXJyKGh3ZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtGYWlsZWQgdG8gZ2V0IHBvcnQgc3RhdGlzdGljcywgZXJyOiAlZCwgc3RhdHVzOiAweCV4XG4mIzM0OywKJiM0MzsJCQllcnIsIHBzLSZndDtoZWFkLnN0YXR1cyk7CiYjNDM7CQllcnIgPSAtRUZBVUxUOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtY3B5KHN0YXRzLCAmYW1wO3BzLSZndDtjb3VudGVyLCBzaXplb2YoKnN0YXRzKSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShwcyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LAogCQkJIHN0cnVjdCBoaW5pYzNfbmljX3BvcnRfaW5mbyAqcG9ydF9pbmZvKQogewpAQCAtNzM4LDMgJiM0Mzs3NzQsMzEgQEAgaW50IGhpbmljM19nZXRfcGF1c2VfaW5mbyhzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYsCiAJcmV0dXJuIGhpbmljM19jZmdfaHdfcGF1c2UobmljX2Rldi0mZ3Q7aHdkZXYsIE1HTVRfTVNHX0NNRF9PUF9HRVQsCiAJCQkJICAgbmljX3BhdXNlKTsKIH0KJiM0MzsKJiM0MztpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsCiYjNDM7CQkJICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsMm5pY19jbWRfdnBvcnRfc3RhdHMgdnBvcnRfc3RhdHMgPSB7fTsKJiM0MzsJc3RydWN0IGwybmljX3BvcnRfc3RhdHNfaW5mbyBzdGF0c19pbmZvID0ge307CiYjNDM7CXN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzdGF0c19pbmZvLmZ1bmNfaWQgPSBmdW5jX2lkOwomIzQzOwomIzQzOwltZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoJmFtcDttc2dfcGFyYW1zLCAmYW1wO3N0YXRzX2luZm8sICZhbXA7dnBvcnRfc3RhdHMsCiYjNDM7CQkJCSAgICBzaXplb2Yoc3RhdHNfaW5mbyksIHNpemVvZih2cG9ydF9zdGF0cykpOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfc2VuZF9tYm94X3RvX21nbXQoaHdkZXYsIE1HTVRfTU9EX0wyTklDLAomIzQzOwkJCQkgICAgICAgTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFULCAmYW1wO21zZ19wYXJhbXMpOwomIzQzOwomIzQzOwlpZiAoZXJyIHx8IHZwb3J0X3N0YXRzLm1zZ19oZWFkLnN0YXR1cykgewomIzQzOwkJZGV2X2Vycihod2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcbiYjMzQ7LAomIzQzOwkJCWVyciwgdnBvcnRfc3RhdHMubXNnX2hlYWQuc3RhdHVzKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbWNweShzdGF0cywgJmFtcDt2cG9ydF9zdGF0cy5zdGF0cywgc2l6ZW9mKCpzdGF0cykpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmgKaW5kZXggNWQ1MjIwMmE4ZDRlYi4uODA1NzNjMTIxNTM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaApAQCAtMTI5LDYgJiM0MzsxMjksMTEwIEBAIHN0cnVjdCBtYWdfY21kX2dldF94c2ZwX3ByZXNlbnQgewogCXU4ICAgICAgICAgICAgICAgICAgIHJzdmRbMl07CiB9OwogCiYjNDM7c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyB7CiYjNDM7CXU2NCBtYWNfdHhfZnJhZ21lbnRfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF91bmRlcnNpemVfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF91bmRlcm1pbl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzY0X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzY1XzEyN19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF8xMjhfMjU1X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzI1Nl81MTFfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfNTEyXzEwMjNfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfMTAyNF8xNTE4X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzE1MTlfMjA0N19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfNDA5Nl84MTkxX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzgxOTJfOTIxNl9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF85MjE3XzEyMjg3X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzE1MTlfbWF4X2JhZF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzE1MTlfbWF4X2dvb2RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2phYmJlcl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2JhZF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2JhZF9vY3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2dvb2RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9nb29kX29jdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfdG90YWxfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF90b3RhbF9vY3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X3VuaV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X211bHRpX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfYnJvYWRfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wYXVzZV9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3ByaTBfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wZmNfcHJpMV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X3BmY19wcmkyX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3ByaTNfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wZmNfcHJpNF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X3BmY19wcmk1X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3ByaTZfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wZmNfcHJpN19wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2NvbnRyb2xfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9lcnJfYWxsX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfZnJvbV9hcHBfZ29vZF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2Zyb21fYXBwX2JhZF9wa3RfbnVtOwomIzQzOwomIzQzOwl1NjQgbWFjX3J4X2ZyYWdtZW50X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdW5kZXJzaXplX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdW5kZXJtaW5fcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF82NF9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF82NV8xMjdfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8yNTZfNTExX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xNTE5XzIwNDdfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF84MTkyXzkyMTZfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfOTIxN18xMjI4N19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xNTE5X21heF9iYWRfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfb3ZlcnNpemVfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9qYWJiZXJfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9iYWRfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9iYWRfb2N0X251bTsKJiM0MzsJdTY0IG1hY19yeF9nb29kX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfZ29vZF9vY3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3RvdGFsX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdG90YWxfb2N0X251bTsKJiM0MzsJdTY0IG1hY19yeF91bmlfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9tdWx0aV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X2Jyb2FkX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGF1c2VfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wcmkwX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGZjX3ByaTFfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wcmkzX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGZjX3ByaTRfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wcmk2X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGZjX3ByaTdfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9jb250cm9sX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfc3ltX2Vycl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X2Zjc19lcnJfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfc2VuZF9hcHBfYmFkX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdW5maWx0ZXJfcGt0X251bTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyB7CiYjNDM7CXN0cnVjdCBtZ210X21zZ19oZWFkIGhlYWQ7CiYjNDM7CiYjNDM7CXU4ICAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7CiYjNDM7CXU4ICAgICAgICAgICAgICAgICAgIHJzdmQwWzNdOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCB7CiYjNDM7CXN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDsKJiM0MzsKJiM0MzsJc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyBjb3VudGVyOwomIzQzOwl1NjQgICAgICAgICAgICAgICAgICAgICAgIHJzdmQxWzE1XTsKJiM0Mzt9OwomIzQzOwogZW51bSBsaW5rX2Vycl90eXBlIHsKIAlMSU5LX0VSUl9NT0RVTEVfVU5SRUNPR0VOSVpFRCwKIAlMSU5LX0VSUl9OVU0sCkBAIC0yMDksNiAmIzQzOzMxMywxMSBAQCBpbnQgaGluaWMzX2dldF9wb3J0X2luZm8oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsCiAJCQkgc3RydWN0IGhpbmljM19uaWNfcG9ydF9pbmZvICpwb3J0X2luZm8pOwogaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCwKIAkJCSAgICBib29sIGVuYWJsZSk7CiYjNDM7aW50IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpOwomIzQzO2ludCBoaW5pYzNfZ2V0X3Zwb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCwKJiM0MzsJCQkgICBzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgKnN0YXRzKTsKJiM0MzsKIGludCBoaW5pYzNfYWRkX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7CiBpbnQgaGluaWMzX2RlbF92bGFuKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgdmxhbl9pZCwgdTE2IGZ1bmNfaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmgKaW5kZXggOTUwMjI5M2ZmNzEwYy4uOTRhMmJhYjUyNTY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaApAQCAtMTAsNiAmIzQzOzEwLDggQEAKICNpbmNsdWRlICYjMzQ7aGluaWMzX2h3X2NmZy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGluaWMzX2h3ZGV2LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoaW5pYzNfcnguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoaW5pYzNfdHguaCYjMzQ7CiAKICNkZWZpbmUgSElOSUMzX1ZMQU5fQklUTUFQX0JZVEVfU0laRShuaWNfZGV2KSAgKHNpemVvZigqKG5pY19kZXYpLSZndDt2bGFuX2JpdG1hcCkpCiAjZGVmaW5lIEhJTklDM19WTEFOX0JJVE1BUF9TSVpFKG5pY19kZXYpICBcCkBAIC0xMjcsOCAmIzQzOzEyOSw4IEBAIHN0cnVjdCBoaW5pYzNfbmljX2RldiB7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgICAgICAgICAqd29ya3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAgICAgICAgICAgICBwZXJpb2RpY193b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgcnhfbW9kZV93b3JrOwotCS8qIGxvY2sgZm9yIGVuYWJsZS9kaXNhYmxlIHBvcnQgKi8KLQlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIHBvcnRfc3RhdGVfbXV0ZXg7CiYjNDM7CS8qIFByb3RlY3RzIGludGVyZmFjZSBzdGF0ZSAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIHN0YXRlX2xvY2s7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIHVjX2ZpbHRlcl9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgbWNfZmlsdGVyX2xpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguYwppbmRleCAzMDlhYjU5MDEzNzk3Li4yOThmYzA4MTc2ODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMKQEAgLTI4LDEwICYjNDM7MjgsNiBAQAogCiAjZGVmaW5lIEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNCAgICAgNjYKICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2ICAgICA4NgotI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOKGNxZSkgXAotCShSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVCgoY3FlKS0mZ3Q7b2ZmbG9hZF90eXBlLCBJUF9UWVBFKSA9PSBcCi0JIEhJTklDM19SWF9JUFY2X1BLVCA/IEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNiA6IFwKLQkgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0KQogCiBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpCiB7CkBAIC00Niw3ICYjNDM7NDIsNiBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpCiAKIAlyeHFfc3RhdHMtJmd0O2FsbG9jX3NrYl9lcnIgPSAwOwogCXJ4cV9zdGF0cy0mZ3Q7YWxsb2NfcnhfYnVmX2VyciA9IDA7Ci0JcnhxX3N0YXRzLSZndDtyZXN0b3JlX2Ryb3Bfc2dlID0gMDsKIAl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cV9zdGF0cy0mZ3Q7c3luY3ApOwogfQogCkBAIC0xNDcsNiAmIzQzOzE0Miw4IEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKQogewogCXUzMiBpLCBmcmVlX3dxZWJicyA9IHJ4cS0mZ3Q7ZGVsdGEgLSAxOwogCXN0cnVjdCBoaW5pYzNfcnhfaW5mbyAqcnhfaW5mbzsKJiM0MzsJc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWludCBlcnI7CiAKQEAgLTE1NSw4ICYjNDM7MTUyLDEzIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKQogCiAJCWVyciA9IHJ4X2FsbG9jX21hcHBlZF9wYWdlKHJ4cS0mZ3Q7cGFnZV9wb29sLCByeF9pbmZvLAogCQkJCQkgICByeHEtJmd0O2J1Zl9sZW4pOwotCQlpZiAodW5saWtlbHkoZXJyKSkKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKSB7CiYjNDM7CQkJc3luY3AgPSAmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwOwomIzQzOwkJCWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKHN5bmNwKTsKJiM0MzsJCQlyeHEtJmd0O3J4cV9zdGF0cy5hbGxvY19yeF9idWZfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKHN5bmNwLCBmbGFncyk7CiAJCQlicmVhazsKJiM0MzsJCX0KIAogCQlkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocnhfaW5mby0mZ3Q7cGFnZSkgJiM0MzsKIAkJCXJ4X2luZm8tJmd0O3BhZ2Vfb2Zmc2V0OwpAQCAtMTcwLDYgJiM0MzsxNzIsMTEgQEAgc3RhdGljIHUzMiBoaW5pYzNfcnhfZmlsbF9idWZmZXJzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEpCiAJCQkJcnhxLSZndDtuZXh0X3RvX3VwZGF0ZSAmbHQ7Jmx0OyBISU5JQzNfTk9STUFMX1JRX1dRRSk7CiAJCXJ4cS0mZ3Q7ZGVsdGEgLT0gaTsKIAkJcnhxLSZndDtuZXh0X3RvX2FsbG9jID0gcnhxLSZndDtuZXh0X3RvX3VwZGF0ZTsKJiM0MzsJfSBlbHNlIGlmIChmcmVlX3dxZWJicyA9PSByeHEtJmd0O3FfZGVwdGggLSAxKSB7CiYjNDM7CQlzeW5jcCA9ICZhbXA7cnhxLSZndDtyeHFfc3RhdHMuc3luY3A7CiYjNDM7CQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7CiYjNDM7CQlyeHEtJmd0O3J4cV9zdGF0cy5yeF9idWZfZW1wdHkmIzQzOyYjNDM7OwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShzeW5jcCwgZmxhZ3MpOwogCX0KIAogCXJldHVybiBpOwpAQCAtMzMwLDExICYjNDM7MzM3LDI0IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeF9jc3VtKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHUzMiBvZmZsb2FkX3R5cGUsCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHJ4cS0mZ3Q7bmV0ZGV2OwogCWJvb2wgbDJfdHVubmVsOwogCiYjNDM7CS8qIEhXIGVuc3VyZXMgdGhhdCBvbmx5IDEgYml0IGlzIHNldCBpbiBjc3VtX2Vyci4gKi8KJiM0MzsJaWYgKHVubGlrZWx5KGNzdW1fZXJyID09IEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSKSkgewomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCXJ4cS0mZ3Q7cnhxX3N0YXRzLm90aGVyX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJfQomIzQzOwogCWlmICghKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9SWENTVU0pKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoY3N1bV9lcnIpKSB7CiAJCS8qIHBrdCB0eXBlIGlzIHJlY29nbml6ZWQgYnkgSFcsIGFuZCBjc3VtIGlzIHdyb25nICovCiYjNDM7CQlpZiAoY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpIHsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhxLSZndDtyeHFfc3RhdHMuc3luY3ApOwomIzQzOwkJCXJ4cS0mZ3Q7cnhxX3N0YXRzLmNzdW1fZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCX0KIAkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQlyZXR1cm47CiAJfQpAQCAtMzg3LDggJiM0Mzs0MDcsMTIgQEAgc3RhdGljIGludCByZWN2X29uZV9wa3Qoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZSwKIAl1MTYgbnVtX2xybzsKIAogCXNrYiA9IGhpbmljM19mZXRjaF9yeF9idWZmZXIocnhxLCBwa3RfbGVuKTsKLQlpZiAodW5saWtlbHkoIXNrYikpCiYjNDM7CWlmICh1bmxpa2VseSghc2tiKSkgewomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCXJ4cS0mZ3Q7cnhxX3N0YXRzLmFsbG9jX3NrYl9lcnImIzQzOyYjNDM7OwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeHEtJmd0O3J4cV9zdGF0cy5zeW5jcCk7CiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiAKIAkvKiBwbGFjZSBoZWFkZXIgaW4gbGluZWFyIHBvcnRpb24gb2YgYnVmZmVyICovCiAJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkKQEAgLTU1MCwxMSAmIzQzOzU3NCwyOSBAQCBpbnQgaGluaWMzX2NvbmZpZ3VyZV9yeHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fcnEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsCiYjNDM7CQkJICBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzID0gJmFtcDtyeHEtJmd0O3J4cV9zdGF0czsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO3J4cV9zdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwkJc3RhdHMtJmd0O2NzdW1fZXJyb3JzID0gcnhxX3N0YXRzLSZndDtjc3VtX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDtvdGhlcl9lcnJvcnMgPSByeHFfc3RhdHMtJmd0O290aGVyX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDtyeF9idWZfZW1wdHkgPSByeHFfc3RhdHMtJmd0O3J4X2J1Zl9lbXB0eTsKJiM0MzsJCXN0YXRzLSZndDthbGxvY19za2JfZXJyID0gcnhxX3N0YXRzLSZndDthbGxvY19za2JfZXJyOwomIzQzOwkJc3RhdHMtJmd0O2FsbG9jX3J4X2J1Zl9lcnIgPSByeHFfc3RhdHMtJmd0O2FsbG9jX3J4X2J1Zl9lcnI7CiYjNDM7CX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3J4cV9zdGF0cy0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiYjNDM7fQomIzQzOwogaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYocnhxLSZndDtuZXRkZXYpOwomIzQzOwl1MzIgaXBfdHlwZSwgb2ZmbG9hZF90eXBlLCBwa3RfaGRyX2xlbjsKIAl1MzIgc3dfY2ksIHN0YXR1cywgcGt0X2xlbiwgdmxhbl9sZW47CiAJc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZTsKJiM0MzsJdTY0IHJ4X2J5dGVzID0gMDsKIAl1MzIgbnVtX3dxZSA9IDA7CiAJaW50IG5yX3BrdHMgPSAwOwogCXUxNiBudW1fbHJvOwpAQCAtNTc0LDEwICYjNDM7NjE2LDIwIEBAIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KQogCQlpZiAocmVjdl9vbmVfcGt0KHJ4cSwgcnhfY3FlLCBwa3RfbGVuLCB2bGFuX2xlbiwgc3RhdHVzKSkKIAkJCWJyZWFrOwogCiYjNDM7CQlyeF9ieXRlcyAmIzQzOz0gcGt0X2xlbjsKIAkJbnJfcGt0cyYjNDM7JiM0Mzs7CiAJCW51bV9scm8gPSBSUV9DUUVfU1RBVFVTX0dFVChzdGF0dXMsIE5VTV9MUk8pOwotCQlpZiAobnVtX2xybykKJiM0MzsJCWlmIChudW1fbHJvKSB7CiYjNDM7CQkJb2ZmbG9hZF90eXBlID0gbGUzMl90b19jcHUocnhfY3FlLSZndDtvZmZsb2FkX3R5cGUpOwomIzQzOwkJCWlwX3R5cGUgPSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVChvZmZsb2FkX3R5cGUsCiYjNDM7CQkJCQkJCSAgSVBfVFlQRSk7CiYjNDM7CQkJcGt0X2hkcl9sZW4gPSBpcF90eXBlID09IEhJTklDM19SWF9JUFY2X1BLVCA/CiYjNDM7CQkJCSAgICAgIEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNiA6CiYjNDM7CQkJCSAgICAgIEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNDsKJiM0MzsKJiM0MzsJCQlyeF9ieXRlcyAmIzQzOz0gKG51bV9scm8gLSAxKSAqIHBrdF9oZHJfbGVuOwogCQkJbnVtX3dxZSAmIzQzOz0gaGluaWMzX2dldF9zZ2VfbnVtKHJ4cSwgcGt0X2xlbik7CiYjNDM7CQl9CiAKIAkJcnhfY3FlLSZndDtzdGF0dXMgPSAwOwogCkBAIC01ODgsNSAmIzQzOzY0MCwxMCBAQCBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCkKIAlpZiAocnhxLSZndDtkZWx0YSAmZ3Q7PSBISU5JQzNfUlhfQlVGRkVSX1dSSVRFKQogCQloaW5pYzNfcnhfZmlsbF9idWZmZXJzKHJ4cSk7CiAKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJcnhxLSZndDtyeHFfc3RhdHMucGFja2V0cyAmIzQzOz0gKHU2NClucl9wa3RzOwomIzQzOwlyeHEtJmd0O3J4cV9zdGF0cy5ieXRlcyAmIzQzOz0gcnhfYnl0ZXM7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhxLSZndDtyeHFfc3RhdHMuc3luY3ApOwomIzQzOwogCXJldHVybiBucl9wa3RzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmgKaW5kZXggMDZkMWIzMjk5ZTdjZi4uMmFiNjkxZWQxMWE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oCkBAIC04LDYgJiM0Mzs4LDE3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGltLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAKJiM0MzsvKiByeCBjcWUgY2hlY2tzdW0gZXJyICovCiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JUF9DU1VNX0VSUiAgICAgIEJJVCgwKQomIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVENQX0NTVU1fRVJSICAgICBCSVQoMSkKJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX1VEUF9DU1VNX0VSUiAgICAgQklUKDIpCiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JR01QX0NTVU1fRVJSICAgIEJJVCgzKQomIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY0X0NTVU1fRVJSICBCSVQoNCkKJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lDTVBWNl9DU1VNX0VSUiAgQklUKDUpCiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9TQ1RQX0NSQ19FUlIgICAgIEJJVCg2KQomIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSAgICBCSVQoNykKJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSICAgQklUKDgpCiYjNDM7CiAjZGVmaW5lIFJRX0NRRV9PRkZPTEFEX1RZUEVfUEtUX1RZUEVfTUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKQogI2RlZmluZSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0lQX1RZUEVfTUFTSyAgICAgICAgICAgIEdFTk1BU0soNiwgNSkKICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9UVU5ORUxfUEtUX0ZPUk1BVF9NQVNLICBHRU5NQVNLKDExLCA4KQpAQCAtMzksNyAmIzQzOzUwLDYgQEAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgewogCXU2NCAgICAgICAgICAgICAgICAgICByeF9idWZfZW1wdHk7CiAJdTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3NrYl9lcnI7CiAJdTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3J4X2J1Zl9lcnI7Ci0JdTY0ICAgICAgICAgICAgICAgICAgIHJlc3RvcmVfZHJvcF9zZ2U7CiAJc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwOwogfTsKIApAQCAtMTAxLDkgJiM0MzsxMTEsNiBAQCBzdHJ1Y3QgaGluaWMzX3J4cSB7CiAJZG1hX2FkZHJfdCAgICAgICAgICAgICBjcWVfc3RhcnRfcGFkZHI7CiAKIAlzdHJ1Y3QgZGltICAgICAgICAgICAgIGRpbTsKLQotCXU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2FsZXNjX3RpbWVyX2NmZzsKLQl1OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfcGVuZGluZ19saW1pdDsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBzdHJ1Y3QgaGluaWMzX2R5bmFfcnhxX3JlcyB7CkBAIC0xMjMsNiAmIzQzOzEzMCw5IEBAIHZvaWQgaGluaWMzX2ZyZWVfcnhxc19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSwKIAkJCSAgdTMyIHJxX2RlcHRoLCBzdHJ1Y3QgaGluaWMzX2R5bmFfcnhxX3JlcyAqcnhxc19yZXMpOwogaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLAogCQkJICB1MzIgcnFfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzICpyeHFzX3Jlcyk7CiYjNDM7CiYjNDM7dm9pZCBoaW5pYzNfcnhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLAomIzQzOwkJCSAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKTsKIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYwppbmRleCA5MzA2YmYwMDIwY2FmLi42MjE5Y2MxMDkxOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmMKQEAgLTI1LDExICYjNDM7MjUsOSBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfdHhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICp0eHFfc3RhdHMpCiAJdHhxX3N0YXRzLSZndDtkcm9wcGVkID0gMDsKIAogCXR4cV9zdGF0cy0mZ3Q7c2tiX3BhZF9lcnIgPSAwOwotCXR4cV9zdGF0cy0mZ3Q7ZnJhZ19sZW5fb3ZlcmZsb3cgPSAwOwogCXR4cV9zdGF0cy0mZ3Q7b2ZmbG9hZF9jb3dfc2tiX2VyciA9IDA7CiAJdHhxX3N0YXRzLSZndDttYXBfZnJhZ19lcnIgPSAwOwogCXR4cV9zdGF0cy0mZ3Q7dW5rbm93bl90dW5uZWxfcGt0ID0gMDsKLQl0eHFfc3RhdHMtJmd0O2ZyYWdfc2l6ZV9lcnIgPSAwOwogCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxX3N0YXRzLSZndDtzeW5jcCk7CiB9CiAKQEAgLTk3LDggJiM0Mzs5NSwxMiBAQCBzdGF0aWMgaW50IGhpbmljM190eF9tYXBfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAlkbWFfaW5mb1swXS5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmYW1wO3BkZXYtJmd0O2Rldiwgc2tiLSZndDtkYXRhLAogCQkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7Ci0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhbXA7cGRldi0mZ3Q7ZGV2LCBkbWFfaW5mb1swXS5kbWEpKQomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmFtcDtwZGV2LSZndDtkZXYsIGRtYV9pbmZvWzBdLmRtYSkpIHsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQl0eHEtJmd0O3R4cV9zdGF0cy5tYXBfZnJhZ19lcnImIzQzOyYjNDM7OwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiAKIAlkbWFfaW5mb1swXS5sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCkBAIC0xMTcsNiAmIzQzOzExOSw5IEBAIHN0YXRpYyBpbnQgaGluaWMzX3R4X21hcF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSwKIAkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYW1wO3BkZXYtJmd0O2RldiwgZG1hX2luZm9baWR4XS5kbWEpKSB7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3R4cS0mZ3Q7dHhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCQl0eHEtJmd0O3R4cV9zdGF0cy5tYXBfZnJhZ19lcnImIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyX3VubWFwX3BhZ2U7CiAJCX0KQEAgLTI2MCw2ICYjNDM7MjY1LDkgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfY3N1bShzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBzdHJ1Y3QgaGluaWMzX3NxX3Rhc2sgKnRhc2ssCiAJCWlmIChsNF9wcm90byAhPSBJUFBST1RPX1VEUCB8fAogCQkgICAgKChzdHJ1Y3QgdWRwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktJmd0O2Rlc3QgIT0KIAkJICAgIFZYTEFOX09GRkxPQURfUE9SVF9MRSkgewomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQkJdHhxLSZndDt0eHFfc3RhdHMudW5rbm93bl90dW5uZWxfcGt0JiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3R4cS0mZ3Q7dHhxX3N0YXRzLnN5bmNwKTsKIAkJCS8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovCiAJCQlza2JfY2hlY2tzdW1faGVscChza2IpOwogCQkJcmV0dXJuIDA7CkBAIC00MzMsNiAmIzQzOzQ0MSwyNyBAQCBzdGF0aWMgdTMyIGhpbmljM190eF9vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoaW5pYzNfc3FfdGFzayAqdGFzaywKIAlyZXR1cm4gb2ZmbG9hZDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcGt0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwl1MzIgaGRyX2xlbiwgdHhfYnl0ZXM7CiYjNDM7CXVuc2lnbmVkIHNob3J0IHBrdHM7CiYjNDM7CiYjNDM7CWlmIChza2JfaXNfZ3NvKHNrYikpIHsKJiM0MzsJCWhkcl9sZW4gPSAoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fc2VncyAtIDEpICoKJiM0MzsJCQkgIHNrYl90Y3BfYWxsX2hlYWRlcnMoc2tiKTsKJiM0MzsJCXR4X2J5dGVzID0gc2tiLSZndDtsZW4gJiM0MzsgaGRyX2xlbjsKJiM0MzsJCXBrdHMgPSBza2Jfc2hpbmZvKHNrYiktJmd0O2dzb19zZWdzOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHhfYnl0ZXMgPSBza2ItJmd0O2xlbiAmZ3Q7IEVUSF9aTEVOID8gc2tiLSZndDtsZW4gOiBFVEhfWkxFTjsKJiM0MzsJCXBrdHMgPSAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CXR4cS0mZ3Q7dHhxX3N0YXRzLmJ5dGVzICYjNDM7PSB0eF9ieXRlczsKJiM0MzsJdHhxLSZndDt0eHFfc3RhdHMucGFja2V0cyAmIzQzOz0gcGt0czsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2FuZF91cGRhdGVfc3Ffb3duZXIoc3RydWN0IGhpbmljM19pb19xdWV1ZSAqc3EsCiAJCQkJCSAgdTE2IGN1cnJfcGksIHUxNiB3cWViYl9jbnQpCiB7CkBAIC01MzksOCAmIzQzOzU2OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWludCBlcnI7CiAKIAlpZiAodW5saWtlbHkoc2tiLSZndDtsZW4gJmx0OyBNSU5fU0tCX0xFTikpIHsKLQkJaWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi0mZ3Q7bGVuKSkKJiM0MzsJCWlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItJmd0O2xlbikpIHsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwomIzQzOwkJCXR4cS0mZ3Q7dHhxX3N0YXRzLnNrYl9wYWRfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3R4cS0mZ3Q7dHhxX3N0YXRzLnN5bmNwKTsKIAkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KIAogCQlza2ItJmd0O2xlbiA9IE1JTl9TS0JfTEVOOwogCX0KQEAgLTU1NywxMSAmIzQzOzU5MCwxNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQloaW5pYzNfd3FfZnJlZV93cWViYnMoJmFtcDt0eHEtJmd0O3NxLSZndDt3cSksCiAJCQkJCXR4cS0mZ3Q7dHhfc3RhcnRfdGhycyk7CiAKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQl0eHEtJmd0O3R4cV9zdGF0cy5idXN5JiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCiAJb2ZmbG9hZCA9IGhpbmljM190eF9vZmZsb2FkKHNrYiwgJmFtcDt0YXNrLCAmYW1wO3F1ZXVlX2luZm8sIHR4cSk7CiAJaWYgKHVubGlrZWx5KG9mZmxvYWQgPT0gSElOSUMzX1RYX09GRkxPQURfSU5WQUxJRCkpIHsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQl0eHEtJmd0O3R4cV9zdGF0cy5vZmZsb2FkX2Nvd19za2JfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwogCQlnb3RvIGVycl9kcm9wX3BrdDsKIAl9IGVsc2UgaWYgKCFvZmZsb2FkKSB7CiAJCXdxZWJiX2NudCAtPSAxOwpAQCAtNTk1LDYgJiM0Mzs2MzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgdHhxLSZndDt0eF9zdG9wX3RocnMsCiAJCQkJICB0eHEtJmd0O3R4X3N0YXJ0X3RocnMpOwogCiYjNDM7CWhpbmljM19nZXRfcGt0X3N0YXRzKHR4cSwgc2tiKTsKIAloaW5pYzNfcHJlcGFyZV9zcV9jdHJsKCZhbXA7d3FlX2NvbWJvLCBxdWV1ZV9pbmZvLCBudW1fc2dlLCBvd25lcik7CiAJaGluaWMzX3dyaXRlX2RiKHR4cS0mZ3Q7c3EsIDAsIERCX0NGTEFHX0RQX1NRLAogCQkJaGluaWMzX2dldF9zcV9sb2NhbF9waSh0eHEtJmd0O3NxKSk7CkBAIC02MDQsNiAmIzQzOzY0NCwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogZXJyX2Ryb3BfcGt0OgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiBlcnJfb3V0OgomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwomIzQzOwl0eHEtJmd0O3R4cV9zdGF0cy5kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNzU0LDYgJiM0Mzs3OTgsMjIgQEAgaW50IGhpbmljM19jb25maWd1cmVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3NxLAogCXJldHVybiAwOwogfQogCiYjNDM7dm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLAomIzQzOwkJCSAgc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnN0YXRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnR4cV9zdGF0cyA9ICZhbXA7dHhxLSZndDt0eHFfc3RhdHM7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDt0eHFfc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJCXN0YXRzLSZndDtidXN5ID0gdHhxX3N0YXRzLSZndDtidXN5OwomIzQzOwkJc3RhdHMtJmd0O3NrYl9wYWRfZXJyID0gdHhxX3N0YXRzLSZndDtza2JfcGFkX2VycjsKJiM0MzsJCXN0YXRzLSZndDtvZmZsb2FkX2Nvd19za2JfZXJyID0gdHhxX3N0YXRzLSZndDtvZmZsb2FkX2Nvd19za2JfZXJyOwomIzQzOwkJc3RhdHMtJmd0O21hcF9mcmFnX2VyciA9IHR4cV9zdGF0cy0mZ3Q7bWFwX2ZyYWdfZXJyOwomIzQzOwkJc3RhdHMtJmd0O3Vua25vd25fdHVubmVsX3BrdCA9IHR4cV9zdGF0cy0mZ3Q7dW5rbm93bl90dW5uZWxfcGt0OwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDt0eHFfc3RhdHMtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzO30KJiM0MzsKIGJvb2wgaGluaWMzX3R4X3BvbGwoc3RydWN0IGhpbmljM190eHEgKnR4cSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdHhxLSZndDtuZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaAppbmRleCAwMDE5NGYyYTFiY2MxLi42YWJmNDQzY2I5MjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmgKQEAgLTEwNiwxMSAmIzQzOzEwNiw5IEBAIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHsKIAl1NjQgICAgICAgICAgICAgICAgICAgYnVzeTsKIAl1NjQgICAgICAgICAgICAgICAgICAgZHJvcHBlZDsKIAl1NjQgICAgICAgICAgICAgICAgICAgc2tiX3BhZF9lcnI7Ci0JdTY0ICAgICAgICAgICAgICAgICAgIGZyYWdfbGVuX292ZXJmbG93OwogCXU2NCAgICAgICAgICAgICAgICAgICBvZmZsb2FkX2Nvd19za2JfZXJyOwogCXU2NCAgICAgICAgICAgICAgICAgICBtYXBfZnJhZ19lcnI7CiAJdTY0ICAgICAgICAgICAgICAgICAgIHVua25vd25fdHVubmVsX3BrdDsKLQl1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19zaXplX2VycjsKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7CiB9OwogCkBAIC0xNTcsNiAmIzQzOzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSwKIAkJCSAgdTMyIHNxX2RlcHRoLCBzdHJ1Y3QgaGluaWMzX2R5bmFfdHhxX3JlcyAqdHhxc19yZXMpOwogCiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0Mzt2b2lkIGhpbmljM190eHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsCiYjNDM7CQkJICBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqc3RhdHMpOwogYm9vbCBoaW5pYzNfdHhfcG9sbChzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBpbnQgYnVkZ2V0KTsKIHZvaWQgaGluaWMzX2ZsdXNoX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV3IFBhdGNoIGZvciB0aGUgSHVhd2VpIGhpbmljMyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY2AgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgZXNzZW50aWFsIGV0aHRvb2wgZnVuY3Rpb25hbGl0eTogc3RhdGlzdGljcywgY29hbGVzY2Ugc2V0dGluZ3MsIGFuZCBhIGZldyBxdWljayBmaXhlcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgdGhlIGBoaW5pYzNgLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyB0aGUgSHVhd2VpIEludGVsbGlnZW50IE5JQyBkcml2ZXIuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgc29tZXRoaW5nIEkgY2FuIGV2ZW4gdG91Y2ggaW4gbXkgdXN1YWwgUUVNVSBlbnZpcm9ubWVudD8KClRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHBoeXNpY2FsIE5JQyBkcml2ZXIgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGVtdWxhdGlvbiBhdmFpbGFibGUuICYjMzQ7SHVhd2VpIEludGVsbGlnZW50IE5JQyYjMzQ7IOKAkyB0aGF0IHBocmFzZSB1c3VhbGx5IHNjcmVhbXMgKnBoeXNpY2FsIGhhcmR3YXJlKi4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHRydXRoIGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGRldmljZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhJTklDMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzo2OmNvbmZpZyBISU5JQzNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SHVhd2VpIDNyZCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKEhJTklDMykgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTQ2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZ2AgZmlsZSwgYXMgaWYgaXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IGV4cGVydCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBIdWF3ZWkgaGluaWMzIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGlzIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIHRoZSBvcHRpb25zIGl0IHByb3ZpZGVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBhIGRyaXZlciYjMzk7cyBmZWF0dXJlIHNldCBsYWlkIG91dCBpbiBhIGhpZXJhcmNoaWNhbCBmYXNoaW9uLCBjb250cm9sbGVkIGJ5IHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKRmlyc3QsIEkmIzM5O20gc2Nhbm5pbmcgZm9yIHRoZSBnZW5lcmFsIGBjb25maWdgIGJsb2NrIOKAkyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRyaXZlciBpcyBkZWZpbmVkLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgbWFpbiBzeW1ib2wsIGxpa2UgYEhJTklDM2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCByZXByZXNlbnRzIHRoZSByb290IGVuYWJsaW5nIHRoZSBkcml2ZXIuIFRoZW4sIEnigJlsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIGRyaXZlciBiZWNvbWVzIHJlbGV2YW50PyBUaGluZ3MgbGlrZSBQQ0kgc3VwcG9ydCwgRE1BIGVuZ2luZSBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgbmV0d29yay1yZWxhdGVkIHN1YnN5c3RlbXMgYXJlIGFsbCBvbiBteSByYWRhci4KCk5leHQsIEkmIzM5O2xsIGJlIGRyaWxsaW5nIGRvd24gaW50byB0aGUgc3BlY2lmaWMgYGNvbmZpZ2Agb3B0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBmZWF0dXJlcyB0aGUgZHJpdmVyIG9mZmVycy4gQXJlIHRoZXJlIGRpZmZlcmVudCBoYXJkd2FyZSBnZW5lcmF0aW9ucyBzdXBwb3J0ZWQ/IEFyZSB0aGVyZSBkZWJ1Z2dpbmcgb3B0aW9ucz8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIHR1bmFibGVzIGxpa2UgaW50ZXJydXB0IGNvYWxlc2Npbmcgb3IgZmxvdyBjb250cm9sIG9wdGlvbnM/IEkmIzM5O20gc2Nhbm5pbmcgZm9yIGtleXdvcmRzIHRoYXQgaGludCBhdCB0aGVzZSBjYXBhYmlsaXRpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2xlYXIsIGNvbmNpc2UgZGVzY3JpcHRpb25zLCBidXQgSSYjMzk7bSBhbHNvIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbXBsZXhpdGllcy4gT2Z0ZW4sIHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscyB3aGVuIGl0IGNvbWVzIHRvIE5JQyBjb25maWd1cmF0aW9uLgoKSSBleHBlY3QgdG8gc2VlIGBib29sYCwgYHRyaXN0YXRlYCwgb3IgYGludGAgb3B0aW9ucywgYW5kIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyBob3cgdGhlc2UgYXJlIHN0cnVjdHVyZWQsIGFuZCBob3cgdGhleSByZWxhdGUuIElmIHRoZXJlIGFyZSBhZHZhbmNlZCBmZWF0dXJlcywgSSYjMzk7bSBodW50aW5nIGZvciB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXM7IHRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmUgaW50ZXJhY3Rpb25zLiBJdCBpcyBub3QgdW5jb21tb24gZm9yIGRyaXZlcnMgdG8gaGF2ZSBmZWF0dXJlIG9wdGlvbnMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucywgYW5kIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgdGhvc2UuCgpGaW5hbGx5LCBJ4oCZbGwgbG9vayBmb3IgYW55ICYjMzQ7aGVscCYjMzQ7IHRleHQg4oCTIHRoaXMgaXMgZ29sZCBmb3IgcXVpY2tseSB1bmRlcnN0YW5kaW5nIHRoZSBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIGNsYXJpdHkgYW5kIGNvbXBsZXRlbmVzcyBvZiB0aGUgJiMzNDtoZWxwJiMzNDsgdGV4dCBhcmUgYSBnb29kIGluZGljYXRvciBvZiB0aGUgbWFpbnRhaW5lcnMmIzM5OyBkaWxpZ2VuY2UgYW5kIHRoZSBvdmVyYWxsIHF1YWxpdHkgb2YgdGhlIGRyaXZlciYjMzk7cyBjb25maWd1cmF0aW9uLiBJ4oCZbSBhbHNvIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlZmF1bHQgdmFsdWVzIOKAkyBhcmUgdGhleSBzZW5zaWJsZSBmb3IgdGhlIGdlbmVyYWwgY2FzZSwgb3IgYXJlIHRoZXkgZ2VhcmVkIHRvd2FyZCBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVudmlyb25tZW50PwoKVWx0aW1hdGVseSwgdGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgYmx1ZXByaW50IGZvciBob3cgdGhlIGhpbmljMyBkcml2ZXIgaW50ZWdyYXRlcyBpbnRvIHRoZSBrZXJuZWwuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBhbmQgYWNjdXJhdGVseSBjb21wcmVoZW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSBiZWhpbmQgdGhlIGRyaXZlciYjMzk7cyBidWlsZC10aW1lIHNldHRpbmdzLiBJdCYjMzk7cyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2Ygd2hhdCYjMzk7cyBwb3NzaWJsZSwgYW5kIGJlaW5nIGFibGUgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGlzIGRyaXZlciBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBIdWF3ZWkgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEhJTklDM1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7SHVhd2VpIDNyZCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKEhJTklDMykgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0IyBGaWVsZHMgb2YgSFcgYW5kIG1hbmFnZW1lbnQgc3RydWN0dXJlcyBhcmUgbGl0dGxlIGVuZGlhbiBhbmQgYXJlXG4gICA5Olx0XHQjIGN1cnJlbnRseSBub3QgY29udmVydGVkXG4gIDEwOlx0XHRkZXBlbmRzIG9uICFDUFVfQklHX0VORElBTlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFBDSV9NU0kgXHUwMDI2XHUwMDI2IDY0QklUXG4gIDEzOlx0XHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuICAxNDpcdFx0c2VsZWN0IERJTUxJQlxuICAxNTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBIaU5JQyAzcmQgZ2VuIE5ldHdvcmsgQWRhcHRlciAoSElOSUMzKS5cbiAgMTg6XHRcdCAgVGhlIGRyaXZlciBpcyBzdXBwb3J0ZWQgb24gWDg2XzY0IGFuZCBBUk02NCBsaXR0bGUgZW5kaWFuLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuICAyMTpcdFx0ICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhpbmljMy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUwOQoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBIaW5pYzMgRHJpdmVyIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYSBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYGhpbmljM2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyIGFib3V0IHRoYXQuCgpJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBoaW5pYzNgIGhhcyBhbnkgUUVNVSBlbXVsYXRpb24uIFVzdWFsbHksIHRoZXNlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IGZvciBTbWFydE5JQ3MsIGRvbiYjMzk7dCBwbGF5IHdlbGwgd2l0aCBzdGFuZGFyZCBRRU1VLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgbm90IGVtdWxhdGVkLiBUaGVuLCBJIG5vdGljZSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYGV0aHRvb2xgIHN0YXRzIGFuZCBjb2FsZXNjZSBzZXR0aW5ncy4gT2theSwgYGV0aHRvb2xgIHN0YXRzIGFyZSBiYXNpY2FsbHkganVzdCByZWFkcyBmcm9tIHRoZSBoYXJkd2FyZSwgbm90IGNvbXBsZXggbG9naWMsIGFuZCBjb2FsZXNjZSBzZXR0aW5ncyBqdXN0IGludm9sdmUgd3JpdGluZyB0byBoYXJkd2FyZSByZWdpc3RlcnMuIEkgZ2V0IHRoYXQuCgpCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBndWlkZWxpbmVzLiBMZXQgbWUgY2hlY2sgdGhlIHJ1bGVz4oCmIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSB3aXRoaW4gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc+KApiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IHNob3VsZCBiZSBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIHByZXR0eSBjb25maWRlbnQgdGhhdCBgaGluaWMzYCAoSHVhd2VpJiMzOTtzIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyKSBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnkuIEl0IGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gU2luY2UgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIGRyaXZlciB0aGF0IGlzICpkZWZpbml0ZWx5KiB0aWVkIHRvIGEgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZCwgYW5kIGlzIGxpa2VseSBub3QgdG8gcnVuIHVuZGVyIFFFTVUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoaW5pYzMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgKEh1YXdlaSAzcmQgZ2VuIE5ldHdvcmsgQWRhcHRlcikuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQWRkaXRpb25hbGx5LCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkIGV0aHRvb2wgc3RhdGlzdGljcyBhbmQgY29hbGVzY2Ugc2V0dGluZ3MsIHdoaWNoIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MjE6MDMuNzM4MjY2NDA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNjgzMzMzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjAzLjczODI3MjE4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDgzODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFlZWY2MzNhMDYyNGQwZTQyOTExNmE0MDFkZmQyNjI3YjM5YWYxNDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MjE6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jXFxuaW5kZXggOTBmYzE2Mjg4ZGU5NS4uODlhN2JhMjExMTczMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcXG5AQCAtMTcsNiArMTcsMTEgQEBcXG4gI2luY2x1ZGUgXFxcImhpbmljM19uaWNfY2ZnLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEhJTklDM19NR01UX1ZFUlNJT05fTUFYX0xFTiAgICAgMzJcXG4rLyogQ29hbGVzY2UgdGltZSBwcm9wZXJ0aWVzIGluIG1pY3Jvc2Vjb25kcyAqL1xcbisjZGVmaW5lIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCAgICAgOFxcbisjZGVmaW5lIENPQUxFU0NFX1RJTUVSX0NGR19VTklUICAgICAgICAgNVxcbisjZGVmaW5lIENPQUxFU0NFX01BWF9QRU5ESU5HX0xJTUlUICAgICAgKDI1NSAqIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVClcXG4rI2RlZmluZSBDT0FMRVNDRV9NQVhfVElNRVJfQ0ZHICAgICAgICAgICgyNTUgKiBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVClcXG4gXFxuIHN0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbylcXG5AQCAtNDA5LDE0ICs0MTQsNzkxIEBAIGhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0cnVjdCBoaW5pYzNfc3RhdHMge1xcbitcXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcXG4rXFx0aW50ICBvZmZzZXQ7XFxuK307XFxuK1xcbisjZGVmaW5lIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0sodHlwZSwgbWVtYmVyKSBcXFxcXFxuK1xcdEJVSUxEX0JVR19PTl9aRVJPKHNpemVvZl9maWVsZCh0eXBlLCBtZW1iZXIpICE9IHNpemVvZih1NjQpKVxcbitcXG4rI2RlZmluZSBISU5JQzNfUlhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxcXFxuK1xcdC5uYW1lICAgPSBcXFwicnhxJWRfXFxcIiNfc3RhdF9pdGVtLCBcXFxcXFxuK1xcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcXFxcbitcXHRcXHQgICsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGhpbmljM19yeHFfc3RhdHMsIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9zdGF0X2l0ZW0pIFxcXFxcXG4rfVxcbitcXG4rI2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxcXFxuK1xcdC5uYW1lICAgPSBcXFwidHhxJWRfXFxcIiNfc3RhdF9pdGVtLCBcXFxcXFxuK1xcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcXFxcbitcXHRcXHQgICsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGhpbmljM190eHFfc3RhdHMsIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9zdGF0X2l0ZW0pIFxcXFxcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBoaW5pYzNfc3RhdHMgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW10gPSB7XFxuK1xcdEhJTklDM19SWFFfU1RBVChjc3VtX2Vycm9ycyksXFxuK1xcdEhJTklDM19SWFFfU1RBVChvdGhlcl9lcnJvcnMpLFxcbitcXHRISU5JQzNfUlhRX1NUQVQocnhfYnVmX2VtcHR5KSxcXG4rXFx0SElOSUMzX1JYUV9TVEFUKGFsbG9jX3NrYl9lcnIpLFxcbitcXHRISU5JQzNfUlhRX1NUQVQoYWxsb2NfcnhfYnVmX2VyciksXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfdHhfcXVldWVfc3RhdHNbXSA9IHtcXG4rXFx0SElOSUMzX1RYUV9TVEFUKGJ1c3kpLFxcbitcXHRISU5JQzNfVFhRX1NUQVQoc2tiX3BhZF9lcnIpLFxcbitcXHRISU5JQzNfVFhRX1NUQVQob2ZmbG9hZF9jb3dfc2tiX2VyciksXFxuK1xcdEhJTklDM19UWFFfU1RBVChtYXBfZnJhZ19lcnIpLFxcbitcXHRISU5JQzNfVFhRX1NUQVQodW5rbm93bl90dW5uZWxfcGt0KSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgSElOSUMzX0ZVTkNfU1RBVChfc3RhdF9pdGVtKSB7XFx0XFxcXFxcbitcXHQubmFtZSAgID0gI19zdGF0X2l0ZW0sIFxcXFxcXG4rXFx0Lm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBsMm5pY192cG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXFxcXFxcbitcXHRcXHQgICsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzLCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxcXFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19mdW5jdGlvbl9zdGF0c1tdID0ge1xcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X3VuaWNhc3RfcGt0c192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQodHhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X211bHRpY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksXFxuK1xcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X3VuaWNhc3RfcGt0c192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfdW5pY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X211bHRpY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksXFxuK1xcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Rpc2NhcmRfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Rpc2NhcmRfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Vycl92cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfZXJyX3Zwb3J0KSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgSElOSUMzX1BPUlRfU1RBVChfc3RhdF9pdGVtKSB7IFxcXFxcXG4rXFx0Lm5hbWUgICA9ICNfc3RhdF9pdGVtLCBcXFxcXFxuK1xcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzLCBfc3RhdF9pdGVtKSBcXFxcXFxuK1xcdFxcdCAgKyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzLCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxcXFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19wb3J0X3N0YXRzW10gPSB7XFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2ZyYWdtZW50X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcnNpemVfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3VuZGVybWluX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4XzE1MTlfbWF4X2dvb2RfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X292ZXJzaXplX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9qYWJiZXJfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfYmFkX29jdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF90b3RhbF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdW5pX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkwX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpMV9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTJfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkzX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpNF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTVfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk2X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpN19wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZXJyX2FsbF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfZ29vZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfYmFkX3BrdF9udW0pLFxcbitcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5kZXJtaW5fcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9iYWRfb2N0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3RvdGFsX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmlfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTBfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmkxX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTNfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk0X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTZfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk3X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9iYWRfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZmlsdGVyX3BrdF9udW0pLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBoaW5pYzNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0aW50IGNvdW50LCBxX251bTtcXG4rXFxuK1xcdHN3aXRjaCAoc3NldCkge1xcbitcXHRjYXNlIEVUSF9TU19TVEFUUzpcXG4rXFx0XFx0cV9udW0gPSBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzO1xcbitcXHRcXHRjb3VudCA9IEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKSArXFxuK1xcdFxcdFxcdChBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cykgK1xcbitcXHRcXHRcXHQgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpKSAqXFxuK1xcdFxcdFxcdHFfbnVtO1xcbitcXG4rXFx0XFx0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cXHUwMDNlaHdkZXYpKVxcbitcXHRcXHRcXHRjb3VudCArPSBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTtcXG4rXFxuK1xcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2X3F1ZXVlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB0eHFfc3RhdHMgPSB7fTtcXG4rXFx0c3RydWN0IGhpbmljM19yeHFfc3RhdHMgcnhxX3N0YXRzID0ge307XFxuK1xcdHUxNiBpID0gMCwgaiwgcWlkO1xcbitcXHRjaGFyICpwO1xcbitcXG4rXFx0Zm9yIChxaWQgPSAwOyBxaWQgXFx1MDAzYyBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBxaWQrKykge1xcbitcXHRcXHRpZiAoIW5pY19kZXYtXFx1MDAzZXR4cXMpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aGluaWMzX3R4cV9nZXRfc3RhdHMoXFx1MDAyNm5pY19kZXYtXFx1MDAzZXR4cXNbcWlkXSwgXFx1MDAyNnR4cV9zdGF0cyk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XFxuK1xcdFxcdFxcdHAgPSAoY2hhciAqKVxcdTAwMjZ0eHFfc3RhdHMgK1xcbitcXHRcXHRcXHQgICAgaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcXG4rXFx0XFx0XFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpID0gbmljX2Rldi1cXHUwMDNlcV9wYXJhbXMubnVtX3FwcyAqIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTtcXG4rXFx0Zm9yIChxaWQgPSAwOyBxaWQgXFx1MDAzYyBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBxaWQrKykge1xcbitcXHRcXHRpZiAoIW5pY19kZXYtXFx1MDAzZXJ4cXMpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aGluaWMzX3J4cV9nZXRfc3RhdHMoXFx1MDAyNm5pY19kZXYtXFx1MDAzZXJ4cXNbcWlkXSwgXFx1MDAyNnJ4cV9zdGF0cyk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XFxuK1xcdFxcdFxcdHAgPSAoY2hhciAqKVxcdTAwMjZyeHFfc3RhdHMgK1xcbitcXHRcXHRcXHQgICAgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcXG4rXFx0XFx0XFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xcbitcXHR1MTYgaSA9IDAsIGo7XFxuK1xcdGNoYXIgKnA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XFxuK1xcdGlmICghcHMpXFxuK1xcdFxcdGdvdG8gZXJyX3plcm9fc3RhdHM7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBwcyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgcG9ydCBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfemVyb19zdGF0cztcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3BvcnRfc3RhdHMpOyBqKyssIGkrKykge1xcbitcXHRcXHRwID0gKGNoYXIgKilwcyArIGhpbmljM19wb3J0X3N0YXRzW2pdLm9mZnNldDtcXG4rXFx0XFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUocHMpO1xcbitcXG4rXFx0cmV0dXJuIGk7XFxuK1xcbitlcnJfemVyb19zdGF0czpcXG4rXFx0bWVtc2V0KFxcdTAwMjZkYXRhW2ldLCAwLCBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKSAqIHNpemVvZigqZGF0YSkpO1xcbitcXG4rXFx0cmV0dXJuIGkgKyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XFxuK1xcdHUxNiBpID0gMCwgajtcXG4rXFx0Y2hhciAqcDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGhpbmljM19nZXRfdnBvcnRfc3RhdHMobmljX2Rldi1cXHUwMDNlaHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgaGluaWMzX2dsb2JhbF9mdW5jX2lkKG5pY19kZXYtXFx1MDAzZWh3ZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dnBvcnRfc3RhdHMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZnVuY3Rpb24gc3RhdHMgZnJvbSBmd1xcXFxuXFxcIik7XFxuK1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfZnVuY3Rpb25fc3RhdHMpOyBqKyssIGkrKykge1xcbitcXHRcXHRwID0gKGNoYXIgKilcXHUwMDI2dnBvcnRfc3RhdHMgKyBoaW5pYzNfZnVuY3Rpb25fc3RhdHNbal0ub2Zmc2V0O1xcbitcXHRcXHRkYXRhW2ldID0gKih1NjQgKilwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LVxcdTAwM2Vod2RldikpXFxuK1xcdFxcdGkgKz0gaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMobmV0ZGV2LCBkYXRhICsgaSk7XFxuK1xcbitcXHRoaW5pYzNfZ2V0X2Rydl9xdWV1ZV9zdGF0cyhuZXRkZXYsIGRhdGEgKyBpKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2h3X3N0YXRzX3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqcClcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MTYgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cyk7IGkrKykge1xcbitcXHRcXHRtZW1jcHkocCwgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XFxuK1xcdFxcdHAgKz0gRVRIX0dTVFJJTkdfTEVOO1xcbitcXHRcXHRjbnQrKztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cXHUwMDNlaHdkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsgaSsrKSB7XFxuK1xcdFxcdFxcdG1lbWNweShwLCBoaW5pYzNfcG9ydF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pO1xcbitcXHRcXHRcXHRwICs9IEVUSF9HU1RSSU5HX0xFTjtcXG4rXFx0XFx0XFx0Y250Kys7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNudDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNoYXIgKnApXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0dTggKmRhdGEgPSBwO1xcbitcXHR1MTYgaSwgajtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsgaisrKVxcbitcXHRcXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdGhpbmljM190eF9xdWV1ZV9zdGF0c1tqXS5uYW1lLCBpKTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpOyBqKyspXFxuK1xcdFxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0aGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXFxuK3tcXG4rXFx0Y2hhciAqcCA9IChjaGFyICopZGF0YTtcXG4rXFx0dTE2IG9mZnNldDtcXG4rXFxuK1xcdHN3aXRjaCAoc3RyaW5nc2V0KSB7XFxuK1xcdGNhc2UgRVRIX1NTX1NUQVRTOlxcbitcXHRcXHRvZmZzZXQgPSBoaW5pYzNfZ2V0X2h3X3N0YXRzX3N0cmluZ3MobmV0ZGV2LCBwKTtcXG4rXFx0XFx0aGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHAgKyBvZmZzZXQgKiBFVEhfR1NUUklOR19MRU4pO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkludmFsaWQgc3RyaW5nIHNldCAldS5cXFxcblxcXCIsIHN0cmluZ3NldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfcGh5X3N0YXRzICpwaHlfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoSElOSUMzX0lTX1ZGKG5pY19kZXYtXFx1MDAzZWh3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xcbitcXHRpZiAoIXBzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBwcyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZXRoIHBoeSBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwaHlfc3RhdHMtXFx1MDAzZVN5bWJvbEVycm9yRHVyaW5nQ2FycmllciA9IHBzLVxcdTAwM2VtYWNfcnhfc3ltX2Vycl9wa3RfbnVtO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XFxuK1xcdGlmICghcHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cXHUwMDNlaHdkZXYsIHBzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrZnJlZShwcyk7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiRmFpbGVkIHRvIGdldCBldGggbWFjIHN0YXRzIGZyb20gZndcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHBzLVxcdTAwM2VtYWNfdHhfZ29vZF9wa3RfbnVtO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSBwcy1cXHUwMDNlbWFjX3J4X2dvb2RfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSBwcy1cXHUwMDNlbWFjX3J4X2Zjc19lcnJfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gcHMtXFx1MDAzZW1hY190eF9nb29kX29jdF9udW07XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyA9IHBzLVxcdTAwM2VtYWNfcnhfZ29vZF9vY3RfbnVtO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHBzLVxcdTAwM2VtYWNfdHhfbXVsdGlfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy1cXHUwMDNlbWFjX3R4X2Jyb2FkX3BrdF9udW07XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVxcdTAwM2VtYWNfcnhfbXVsdGlfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtXFx1MDAzZW1hY19yeF9icm9hZF9wa3RfbnVtO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xcbitcXHRpZiAoIXBzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBwcyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZXRoIGN0cmwgc3RhdHMgZnJvbSBmd1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Y3RybF9zdGF0cy1cXHUwMDNlTUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID0gcHMtXFx1MDAzZW1hY190eF9jb250cm9sX3BrdF9udW07XFxuK1xcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHBzLVxcdTAwM2VtYWNfcnhfY29udHJvbF9wa3RfbnVtO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGhpbmljM19ybW9uX3Jhbmdlc1tdID0ge1xcbitcXHR7ICAgICAwLCAgICA2NCB9LFxcbitcXHR7ICAgIDY1LCAgIDEyNyB9LFxcbitcXHR7ICAgMTI4LCAgIDI1NSB9LFxcbitcXHR7ICAgMjU2LCAgIDUxMSB9LFxcbitcXHR7ICAgNTEyLCAgMTAyMyB9LFxcbitcXHR7ICAxMDI0LCAgMTUxOCB9LFxcbitcXHR7ICAxNTE5LCAgMjA0NyB9LFxcbitcXHR7ICAyMDQ4LCAgNDA5NSB9LFxcbitcXHR7ICA0MDk2LCAgODE5MSB9LFxcbitcXHR7ICA4MTkyLCAgOTIxNiB9LFxcbitcXHR7ICA5MjE3LCAxMjI4NyB9LFxcbitcXHR7fVxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XFxuK1xcdGlmICghcHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cXHUwMDNlaHdkZXYsIHBzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrZnJlZShwcyk7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiRmFpbGVkIHRvIGdldCBldGggcm1vbiBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2V1bmRlcnNpemVfcGt0c1xcdD0gcHMtXFx1MDAzZW1hY19yeF91bmRlcnNpemVfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0c1xcdD0gcHMtXFx1MDAzZW1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHNcXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfZnJhZ21lbnRfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlamFiYmVyc1xcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF9qYWJiZXJfcGt0X251bTtcXG4rXFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbMF1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfNjRfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbMV1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfNjVfMTI3X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzJdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3J4XzEyOF8yNTVfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbM11cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs0XVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF81MTJfMTAyM19vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs1XVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF8xMDI0XzE1MThfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNl1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzddXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3J4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs4XVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF80MDk2XzgxOTFfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbOV1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzEwXVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xcbitcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFswXVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF82NF9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFsxXVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF82NV8xMjdfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMl1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfdHhfMTI4XzI1NV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF8yNTZfNTExX29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzRdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzVdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs2XVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbN11cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfdHhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzhdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs5XVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMTBdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XFxuK1xcbitcXHQqcmFuZ2VzID0gaGluaWMzX3Jtb25fcmFuZ2VzO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHBzID0ga21hbGxvY19vYmooKnBzKTtcXG4rXFx0aWYgKCFwcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVxcdTAwM2Vod2RldiwgcHMpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtmcmVlKHBzKTtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJGYWlsZWQgdG8gZ2V0IGV0aCBwYXVzZSBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwYXVzZV9zdGF0cy1cXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gcHMtXFx1MDAzZW1hY190eF9wYXVzZV9udW07XFxuK1xcdHBhdXNlX3N0YXRzLVxcdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSBwcy1cXHUwMDNlbWFjX3J4X3BhdXNlX251bTtcXG4rXFxuK1xcdGtmcmVlKHBzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBxX2lkLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmNvYWwsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbDtcXG4rXFx0c3RydWN0IGhpbmljM19pbnRlcnJ1cHRfaW5mbyBpbmZvID0ge307XFxuK1xcdGJvb2wgaXNfYWN0aXZlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdGlzX2FjdGl2ZSA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcXHUwMDI2bmljX2Rldi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAocV9pZCBcXHUwMDNjIG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLm51bV9xcHMpO1xcbitcXG4rXFx0aWYgKGlzX2FjdGl2ZSkge1xcbitcXHRcXHRpbmZvLm1zaXhfaW5kZXggPVxcbitcXHRcXHRcXHRuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4O1xcbitcXHRcXHRpbmZvLnJlc2VuZF90aW1lcl9jZmcgPVxcbitcXHRcXHRcXHRuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdGlmIChpc19hY3RpdmUpIHtcXG4rXFx0XFx0aW5mby5pbnRlcnJ1cHRfY29hbGVzY19zZXQgPSAxO1xcbitcXHRcXHRpbmZvLmNvYWxlc2NfdGltZXJfY2ZnID0gY29hbC1cXHUwMDNlY29hbGVzY2VfdGltZXJfY2ZnO1xcbitcXHRcXHRpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLVxcdTAwM2VwZW5kaW5nX2xpbWl0O1xcbitcXG4rXFx0XFx0ZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBpbmZvKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJGYWlsZWQgdG8gc2V0IHF1ZXVlJXUgY29hbGVzY2VcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcV9pZCk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdGludHJfY29hbCA9IFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdO1xcbitcXHRpbnRyX2NvYWwtXFx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZyA9IGNvYWwtXFx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZztcXG4rXFx0aW50cl9jb2FsLVxcdTAwM2VwZW5kaW5nX2xpbWl0ID0gY29hbC1cXHUwMDNlcGVuZGluZ19saW1pdDtcXG4rXFx0aW50cl9jb2FsLVxcdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IGNvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93O1xcbitcXHRpbnRyX2NvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCA9IGNvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb25zdCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qge1xcbitcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRcXHR1MzIgdmFsdWU7XFxuK1xcdFxcdHUzMiBsaW1pdDtcXG4rXFx0fSBjb2FsZXNjZV9saW1pdHNbXSA9IHtcXG4rXFx0XFx0e1xcXCJyeF9jb2FsZXNjZV91c2Vjc1xcXCIsXFxuK1xcdFxcdCBjb2FsLVxcdTAwM2VyeF9jb2FsZXNjZV91c2VjcyxcXG4rXFx0XFx0IENPQUxFU0NFX01BWF9USU1FUl9DRkd9LFxcbitcXHRcXHR7XFxcInJ4X21heF9jb2FsZXNjZWRfZnJhbWVzXFxcIixcXG4rXFx0XFx0IGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxcbitcXHRcXHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxcbitcXHRcXHR7XFxcInJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvd1xcXCIsXFxuK1xcdFxcdCBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csXFxuK1xcdFxcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXFxuK1xcdFxcdHtcXFwicnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaFxcXCIsXFxuK1xcdFxcdCBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoLFxcbitcXHRcXHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxcbitcXHR9O1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNvYWxlc2NlX2xpbWl0cyk7IGkrKykge1xcbitcXHRcXHRpZiAoY29hbGVzY2VfbGltaXRzW2ldLnZhbHVlIFxcdTAwM2UgY29hbGVzY2VfbGltaXRzW2ldLmxpbWl0KSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcXFwiJXMgb3V0IG9mIHJhbmdlICVkLSVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvYWxlc2NlX2xpbWl0c1tpXS5uYW1lLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29hbGVzY2VfbGltaXRzW2ldLmxpbWl0KTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29uc3Qgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb2FsLCBleHRhY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyBcXHUwMDNlXFxuK1xcdCAgICBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcImludmFsaWQgY29hbGVzY2UgZnJhbWUgaGlnaCAldSwgbG93ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cpO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCB1MzIgaXRlbSwgdTMyIHVuaXQsIGNvbnN0IGNoYXIgKnN0cilcXG4re1xcbitcXHRpZiAoaXRlbSAlIHVuaXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKG5ldGRldiwgXFxcIiVzIGluICV1IHVuaXRzLCBjaGFuZ2UgdG8gJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBzdHIsIHVuaXQsIGl0ZW0gLSBpdGVtICUgdW5pdCk7XFxuK31cXG4rXFxuKyNkZWZpbmUgQ0hFQ0tfQ09BTEVTQ0VfQUxJR04obWVtYmVyLCB1bml0KSBcXFxcXFxuK1xcdGNoZWNrX2NvYWxlc2NlX2FsaWduKG5ldGRldiwgbWVtYmVyLCB1bml0LCAjbWVtYmVyKVxcbitcXG4rc3RhdGljIHZvaWQgY2hlY2tfY29hbGVzY2VfY2hhbmdlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICB1MzIgaXRlbSwgdTMyIHVuaXQsIHUzMiBvcmlfdmFsLFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpvYmpfc3RyLCBjb25zdCBjaGFyICpzdHIpXFxuK3tcXG4rXFx0aWYgKChpdGVtIC8gdW5pdCkgIT0gb3JpX3ZhbClcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJDaGFuZ2UgJXMgZnJvbSAldSB0byAldSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgc3RyLCBvcmlfdmFsICogdW5pdCwgaXRlbSAtIGl0ZW0gJSB1bml0LCBvYmpfc3RyKTtcXG4rfVxcbitcXG4rI2RlZmluZSBDSEVDS19DT0FMRVNDRV9DSEFOR0VEKG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0cikgXFxcXFxcbitcXHRjaGVja19jb2FsZXNjZV9jaGFuZ2VkKG5ldGRldiwgbWVtYmVyLCB1bml0LCBvcmlfdmFsLCBvYmpfc3RyLCAjbWVtYmVyKVxcbitcXG4rc3RhdGljIGludCBoaW5pYzNfc2V0X2h3X2NvYWxfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvbGRfY29hbDtcXG4rXFx0dTE2IGksIGo7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRvbGRfY29hbCA9IGtjYWxsb2MobmljX2Rldi1cXHUwMDNlbWF4X3Fwcywgc2l6ZW9mKCpvbGRfY29hbCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIW9sZF9jb2FsKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm5pY19kZXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmljX2Rldi1cXHUwMDNlbWF4X3FwczsgaSsrKVxcbitcXHRcXHRvbGRfY29hbFtpXSA9IG5pY19kZXYtXFx1MDAzZWludHJfY29hbGVzY2VbaV07XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmljX2Rldi1cXHUwMDNlbWF4X3FwczsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2UobmV0ZGV2LCBpLCBpbnRyX2NvYWwsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gcm9sbGJhY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKG9sZF9jb2FsKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityb2xsYmFjazpcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKylcXG4rXFx0XFx0aGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShuZXRkZXYsIGosIFxcdTAwMjZvbGRfY29hbFtqXSwgTlVMTCk7XFxuK1xcbitcXHRrZnJlZShvbGRfY29hbCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGluaWMzX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludGVycnVwdF9pbmZvO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRpbnRlcnJ1cHRfaW5mbyA9IFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xcbitcXG4rXFx0Y29hbC1cXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlID0gUkVBRF9PTkNFKG5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpO1xcbitcXG4rXFx0Y29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93ID1cXG4rXFx0XFx0aW50ZXJydXB0X2luZm8tXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93ICpcXG4rXFx0XFx0Q09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUO1xcbitcXG4rXFx0Y29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCA9XFxuK1xcdFxcdGludGVycnVwdF9pbmZvLVxcdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2hpZ2ggKlxcbitcXHRcXHRDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7XFxuK1xcbitcXHQvKiBUWC9SWCB1c2VzIHRoZSBzYW1lIGludGVycnVwdC5cXG4rXFx0ICogU28gd2Ugb25seSBkZWNsYXJlIFJYIGV0aHRvb2xfY29hbGVzY2UgcGFyYW1ldGVycy5cXG4rXFx0ICovXFxuK1xcdGNvYWwtXFx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzID0gaW50ZXJydXB0X2luZm8tXFx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZyAqXFxuK1xcdFxcdFxcdFxcdCAgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQ7XFxuK1xcbitcXHRjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGludGVycnVwdF9pbmZvLVxcdTAwM2VwZW5kaW5nX2xpbWl0ICpcXG4rXFx0XFx0XFx0XFx0XFx0Q09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhpbmljM19zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX2NvYWxlc2NlICprZXJuZWxfY29hbCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvcmlfaW50cl9jb2FsO1xcbitcXHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvIGludHJfY29hbCA9IHt9O1xcbitcXHRjb25zdCBjaGFyICpvYmpfc3RyID0gXFxcImZvciBuZXRkZXZcXFwiO1xcbitcXHRib29sIG9sZF9hZGFwdGl2ZSwgbmV3X2FkYXB0aXZlO1xcbitcXHRzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxID0gTlVMTDtcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29hbCwgZXh0YWNrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXFx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxcbitcXHRcXHRcXHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXFxuK1xcdFxcdFxcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcXG4rXFx0Q0hFQ0tfQ09BTEVTQ0VfQUxJR04oY29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxcbitcXHRcXHRcXHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0b3JpX2ludHJfY29hbCA9IFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xcbitcXG4rXFx0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVxcdTAwM2VyeF9jb2FsZXNjZV91c2VjcywgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQsXFxuK1xcdFxcdFxcdCAgICAgICBvcmlfaW50cl9jb2FsLVxcdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpO1xcbitcXHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxcbitcXHRcXHRcXHQgICAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklULFxcbitcXHRcXHRcXHQgICAgICAgb3JpX2ludHJfY29hbC1cXHUwMDNlcGVuZGluZ19saW1pdCwgb2JqX3N0cik7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcXG4rXFx0XFx0XFx0ICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCxcXG4rXFx0XFx0XFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCwgb2JqX3N0cik7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxcbitcXHRcXHRcXHQgICAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklULFxcbitcXHRcXHRcXHQgICAgICAgb3JpX2ludHJfY29hbC1cXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5pY19kZXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0b2xkX2FkYXB0aXZlID0gUkVBRF9PTkNFKG5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpO1xcbitcXHRuZXdfYWRhcHRpdmUgPSAhIWNvYWwtXFx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTtcXG4rXFxuK1xcdGlmIChvbGRfYWRhcHRpdmUpIHtcXG4rXFx0XFx0Ym9vbCBpc191cDtcXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UobmljX2Rldi1cXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0XFx0aXNfdXAgPSB0ZXN0X2JpdChISU5JQzNfSU5URl9VUCwgXFx1MDAyNm5pY19kZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdFxcdGlmIChpc191cCkge1xcbitcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmljX2Rldi1cXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdHJ4cSA9IG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLmlycV9jZmdbaV0ucnhxO1xcbitcXHRcXHRcXHRcXHRpZiAoIXJ4cSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRcXHRuZXRfZGltX3dvcmtfY2FuY2VsKFxcdTAwMjZyeHEtXFx1MDAzZWRpbSk7XFxuK1xcdFxcdFxcdFxcdHJ4cS1cXHUwMDNlZGltLnN0YXRlID0gRElNX1NUQVJUX01FQVNVUkU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpbnRyX2NvYWwuY29hbGVzY2VfdGltZXJfY2ZnID1cXG4rXFx0XFx0KHU4KShjb2FsLVxcdTAwM2VyeF9jb2FsZXNjZV91c2VjcyAvIENPQUxFU0NFX1RJTUVSX0NGR19VTklUKTtcXG4rXFxuK1xcdGludHJfY29hbC5wZW5kaW5nX2xpbWl0ID1cXG4rXFx0XFx0KHU4KShjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyAvXFxuK1xcdFxcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcXG4rXFxuK1xcdGludHJfY29hbC5yeF9wZW5kaW5nX2xpbWl0X2hpZ2ggPVxcbitcXHRcXHQodTgpKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggL1xcbitcXHRcXHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XFxuK1xcbitcXHRpbnRyX2NvYWwucnhfcGVuZGluZ19saW1pdF9sb3cgPVxcbitcXHRcXHQodTgpKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAvXFxuK1xcdFxcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcXG4rXFxuK1xcdC8qIGNvYWxlc2NlIHRpbWVyIG9yIHBlbmRpbmcgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGNvYWxlc2NlICovXFxuK1xcdGlmICghbmV3X2FkYXB0aXZlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgfHwgIWludHJfY29hbC5wZW5kaW5nX2xpbWl0KSlcXG4rXFx0XFx0bmV0ZGV2X2luZm8obmV0ZGV2LCBcXFwiQ29hbGVzY2Ugd2lsbCBiZSBkaXNhYmxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfc2V0X2h3X2NvYWxfcGFyYW0obmV0ZGV2LCBcXHUwMDI2aW50cl9jb2FsLCBleHRhY2spO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChvbGRfYWRhcHRpdmUpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobmljX2Rldi1cXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgb2xkX2FkYXB0aXZlKTtcXG4rXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdFdSSVRFX09OQ0UobmljX2Rldi1cXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgbmV3X2FkYXB0aXZlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpbmljM19ldGh0b29sX29wcyA9IHtcXG4tXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfQ09BTEVTQ0VfUEtUX1JBVEVfUlhfVVNFQ1MsXFxuK1xcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zICAgICAgPSBFVEhUT09MX0NPQUxFU0NFX1JYX1VTRUNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVMgfFxcbitcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFX1JYIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVNfTE9XIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVNfSElHSCxcXG4gXFx0LmdldF9saW5rX2tzZXR0aW5ncyAgICAgICAgICAgICA9IGhpbmljM19nZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5nZXRfZHJ2aW5mbyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfbXNnbGV2ZWwgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X21zZ2xldmVsLFxcbiBcXHQuc2V0X21zZ2xldmVsICAgICAgICAgICAgICAgICAgID0gaGluaWMzX3NldF9tc2dsZXZlbCxcXG4gXFx0LmdldF9saW5rICAgICAgICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuK1xcdC5nZXRfc3NldF9jb3VudCAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3NzZXRfY291bnQsXFxuK1xcdC5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuK1xcdC5nZXRfc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3N0cmluZ3MsXFxuK1xcdC5nZXRfZXRoX3BoeV9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMsXFxuK1xcdC5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfZXRoX2N0cmxfc3RhdHMgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbitcXHQuZ2V0X3Jtb25fc3RhdHMgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9ybW9uX3N0YXRzLFxcbitcXHQuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cyxcXG4rXFx0LmdldF9jb2FsZXNjZSAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfY29hbGVzY2UsXFxuK1xcdC5zZXRfY29hbGVzY2UgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfc2V0X2NvYWxlc2NlLFxcbiB9O1xcbiBcXG4gdm9pZCBoaW5pYzNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxcbmluZGV4IGNmYzlkYWEzMDM0ZmUuLjZiMGY0ODZiYTU5MGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oXFxuQEAgLTUzLDYgKzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhXFxuIFxcdG1zZ19wYXJhbXMtXFx1MDAzZXRpbWVvdXRfbXMgPSAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWRcXG4rbWdtdF9tc2dfcGFyYW1zX2luaXRfaW5fb3V0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhbXMsIHZvaWQgKmluX2J1ZixcXG4rXFx0XFx0XFx0ICAgIHZvaWQgKm91dF9idWYsIHUzMiBpbl9idWZfc2l6ZSwgdTMyIG91dF9idWZfc2l6ZSlcXG4re1xcbitcXHRtc2dfcGFyYW1zLVxcdTAwM2VidWZfaW4gPSBpbl9idWY7XFxuK1xcdG1zZ19wYXJhbXMtXFx1MDAzZWJ1Zl9vdXQgPSBvdXRfYnVmO1xcbitcXHRtc2dfcGFyYW1zLVxcdTAwM2Vpbl9zaXplID0gaW5fYnVmX3NpemU7XFxuK1xcdG1zZ19wYXJhbXMtXFx1MDAzZWV4cGVjdGVkX291dF9zaXplID0gb3V0X2J1Zl9zaXplO1xcbitcXHRtc2dfcGFyYW1zLVxcdTAwM2V0aW1lb3V0X21zID0gMDtcXG4rfVxcbitcXG4gZW51bSBjZmdfY21kIHtcXG4gXFx0Q0ZHX0NNRF9HRVRfREVWX0NBUCA9IDAsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmNcXG5pbmRleCBlN2Q2YzIwMzNiNDUxLi5mNjY0NTM4NWM1NTI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmNcXG5AQCAtMjAsNyArMjAsNyBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfbmV0X2RpbShzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYsXFxuIFxcdHN0cnVjdCBkaW1fc2FtcGxlIHNhbXBsZSA9IHt9O1xcbiBcXG4gXFx0aWYgKCF0ZXN0X2JpdChISU5JQzNfSU5URl9VUCwgXFx1MDAyNm5pY19kZXYtXFx1MDAzZWZsYWdzKSB8fFxcbi1cXHQgICAgIW5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpXFxuK1xcdCAgICAhUkVBRF9PTkNFKG5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRkaW1fdXBkYXRlX3NhbXBsZShpcnFfY2ZnLVxcdTAwM2V0b3RhbF9ldmVudHMsIHJ4cS1cXHUwMDNlcnhxX3N0YXRzLnBhY2tldHMsXFxuQEAgLTE0OCwxMyArMTQ4LDkgQEAgc3RhdGljIGludCBoaW5pYzNfc2V0X2ludGVycnVwdF9tb2RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCxcXG4gXFx0XFx0bmljX2Rldi1cXHUwMDNlaW50cl9jb2FsZXNjZVtxX2lkXS5yZXNlbmRfdGltZXJfY2ZnO1xcbiBcXG4gXFx0ZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBpbmZvKTtcXG4tXFx0aWYgKGVycikge1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBtb2RpZnkgbW9kZXJhdGlvbiBmb3IgUXVldWU6ICV1XFxcXG5cXFwiLCBxX2lkKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bmljX2Rldi1cXHUwMDNlcnhxc1txX2lkXS5sYXN0X2NvYWxlc2NfdGltZXJfY2ZnID0gY29hbGVzY190aW1lcl9jZmc7XFxuLVxcdFxcdG5pY19kZXYtXFx1MDAzZXJ4cXNbcV9pZF0ubGFzdF9wZW5kaW5nX2xpbWl0ID0gcGVuZGluZ19saW1pdDtcXG4tXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmNcXG5pbmRleCAwYTg4OGZlNGM5NzViLi44Yzc0OTJlMTU0MDllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xcbkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfaW50cl9jb2FsX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdGluZm8tXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93ID0gSElOSUMzX1JYX1BFTkRJTkdfTElNSVRfTE9XO1xcbiBcXHR9XFxuIFxcbi1cXHRuaWNfZGV2LVxcdTAwM2VhZGFwdGl2ZV9yeF9jb2FsID0gMTtcXG4rXFx0V1JJVEVfT05DRShuaWNfZGV2LVxcdTAwM2VhZGFwdGl2ZV9yeF9jb2FsLCAxKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBoaW5pYzNfaW5pdF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgaW50IGhpbmljM19zd19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNm5pY19kZXYtXFx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFxuIFxcdG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLnNxX2RlcHRoID0gSElOSUMzX1NRX0RFUFRIO1xcbiBcXHRuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5ycV9kZXB0aCA9IEhJTklDM19SUV9ERVBUSDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcXG5pbmRleCBjNWJjYTNjNGFmOTYxLi43NmM2OTFmODI3MDNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXFxuQEAgLTE0Myw2ICsxNDMsNDEgQEAgc3RydWN0IGwybmljX2NtZF9zZXRfZGNiX3N0YXRlIHtcXG4gXFx0dTggICAgICAgICAgICAgICAgICAgcnN2ZFs3XTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8ge1xcbitcXHRzdHJ1Y3QgbWdtdF9tc2dfaGVhZCBtc2dfaGVhZDtcXG4rXFx0dTE2ICAgICAgICAgICAgICAgICAgZnVuY19pZDtcXG4rXFx0dTE2ICAgICAgICAgICAgICAgICAgcnN2ZDE7XFxuK307XFxuK1xcbitzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMge1xcbitcXHR1NjQgdHhfdW5pY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgdHhfdW5pY2FzdF9ieXRlc192cG9ydDtcXG4rXFx0dTY0IHR4X211bHRpY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgdHhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0O1xcbitcXHR1NjQgdHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XFxuK1xcdHU2NCB0eF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7XFxuK1xcbitcXHR1NjQgcnhfdW5pY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgcnhfdW5pY2FzdF9ieXRlc192cG9ydDtcXG4rXFx0dTY0IHJ4X211bHRpY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgcnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0O1xcbitcXHR1NjQgcnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XFxuK1xcdHU2NCByeF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7XFxuK1xcbitcXHR1NjQgdHhfZGlzY2FyZF92cG9ydDtcXG4rXFx0dTY0IHJ4X2Rpc2NhcmRfdnBvcnQ7XFxuK1xcdHU2NCB0eF9lcnJfdnBvcnQ7XFxuK1xcdHU2NCByeF9lcnJfdnBvcnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbDJuaWNfY21kX3Zwb3J0X3N0YXRzIHtcXG4rXFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgICAgIG1zZ19oZWFkO1xcbitcXHR1MzIgICAgICAgICAgICAgICAgICAgICAgc3RhdHNfc2l6ZTtcXG4rXFx0dTMyICAgICAgICAgICAgICAgICAgICAgIHJzdmQxO1xcbitcXHRzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgc3RhdHM7XFxuK1xcdHU2NCAgICAgICAgICAgICAgICAgICAgICByc3ZkMls2XTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBsMm5pY19jbWRfbHJvX2NvbmZpZyB7XFxuIFxcdHN0cnVjdCBtZ210X21zZ19oZWFkIG1zZ19oZWFkO1xcbiBcXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xcbkBAIC0yMzQsNiArMjY5LDcgQEAgZW51bSBsMm5pY19jbWQge1xcbiBcXHRMMk5JQ19DTURfU0VUX1ZQT1JUX0VOQUJMRSAgICA9IDYsXFxuIFxcdEwyTklDX0NNRF9TRVRfUlhfTU9ERSAgICAgICAgID0gNyxcXG4gXFx0TDJOSUNfQ01EX1NFVF9TUV9DSV9BVFRSICAgICAgPSA4LFxcbitcXHRMMk5JQ19DTURfR0VUX1ZQT1JUX1NUQVQgICAgICA9IDksXFxuIFxcdEwyTklDX0NNRF9DTEVBUl9RUF9SRVNPVVJDRSAgID0gMTEsXFxuIFxcdEwyTklDX0NNRF9DRkdfUlhfTFJPICAgICAgICAgID0gMTMsXFxuIFxcdEwyTklDX0NNRF9DRkdfTFJPX1RJTUVSICAgICAgID0gMTQsXFxuQEAgLTI3Miw2ICszMDgsNyBAQCBlbnVtIG1hZ19jbWQge1xcbiBcXHRNQUdfQ01EX1NFVF9QT1JUX0VOQUJMRSA9IDYsXFxuIFxcdE1BR19DTURfR0VUX0xJTktfU1RBVFVTID0gNyxcXG4gXFxuK1xcdE1BR19DTURfR0VUX1BPUlRfU1RBVCAgID0gMTUxLFxcbiBcXHRNQUdfQ01EX0dFVF9QT1JUX0lORk8gICA9IDE1MyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuY1xcbmluZGV4IGRhNzM4MTE2NDFhOWQuLmVkNDgxMGZhOTg1MmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXFxuQEAgLTM0MSw5ICszNDEsOSBAQCBzdGF0aWMgaW50IGhpbmljM19tYXliZV9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIGVuYWJsZSlcXG4gXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm5pY19kZXYtXFx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFx0ZXJyID0gaGluaWMzX3NldF9wb3J0X2VuYWJsZShuaWNfZGV2LVxcdTAwM2Vod2RldiwgZW5hYmxlKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2Vwb3J0X3N0YXRlX211dGV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jXFxuaW5kZXggZGU1YTc5ODRkMmNiOS4uMWIxNGRjODI0Y2UxZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcXG5AQCAtNjM5LDYgKzYzOSw0MiBAQCBpbnQgaGluaWMzX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgYm9vbCAqbGlua19zdGF0dXNfdXApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0c19pbmZvIHN0YXRzX2luZm8gPSB7fTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCAqcHM7XFxuK1xcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cHMgPSBremFsbG9jX29iaigqcHMpO1xcbitcXHRpZiAoIXBzKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHN0YXRzX2luZm8ucG9ydF9pZCA9IGhpbmljM19waHlzaWNhbF9wb3J0X2lkKGh3ZGV2KTtcXG4rXFxuK1xcdG1nbXRfbXNnX3BhcmFtc19pbml0X2luX291dChcXHUwMDI2bXNnX3BhcmFtcywgXFx1MDAyNnN0YXRzX2luZm8sIHBzLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKHN0YXRzX2luZm8pLCBzaXplb2YoKnBzKSk7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfc2VuZF9tYm94X3RvX21nbXQoaHdkZXYsIE1HTVRfTU9EX0hJTElOSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE1BR19DTURfR0VUX1BPUlRfU1RBVCwgXFx1MDAyNm1zZ19wYXJhbXMpO1xcbitcXG4rXFx0aWYgKGVyciB8fCBwcy1cXHUwMDNlaGVhZC5zdGF0dXMpIHtcXG4rXFx0XFx0ZGV2X2Vycihod2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBwb3J0IHN0YXRpc3RpY3MsIGVycjogJWQsIHN0YXR1czogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBwcy1cXHUwMDNlaGVhZC5zdGF0dXMpO1xcbitcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bWVtY3B5KHN0YXRzLCBcXHUwMDI2cHMtXFx1MDAzZWNvdW50ZXIsIHNpemVvZigqc3RhdHMpKTtcXG4rXFxuK291dDpcXG4rXFx0a2ZyZWUocHMpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxcbiBcXHRcXHRcXHQgc3RydWN0IGhpbmljM19uaWNfcG9ydF9pbmZvICpwb3J0X2luZm8pXFxuIHtcXG5AQCAtNzM4LDMgKzc3NCwzMSBAQCBpbnQgaGluaWMzX2dldF9wYXVzZV9pbmZvKHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldixcXG4gXFx0cmV0dXJuIGhpbmljM19jZmdfaHdfcGF1c2UobmljX2Rldi1cXHUwMDNlaHdkZXYsIE1HTVRfTVNHX0NNRF9PUF9HRVQsXFxuIFxcdFxcdFxcdFxcdCAgIG5pY19wYXVzZSk7XFxuIH1cXG4rXFxuK2ludCBoaW5pYzNfZ2V0X3Zwb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgbDJuaWNfY21kX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XFxuK1xcdHN0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8gc3RhdHNfaW5mbyA9IHt9O1xcbitcXHRzdHJ1Y3QgbWdtdF9tc2dfcGFyYW1zIG1zZ19wYXJhbXMgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHN0YXRzX2luZm8uZnVuY19pZCA9IGZ1bmNfaWQ7XFxuK1xcbitcXHRtZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoXFx1MDAyNm1zZ19wYXJhbXMsIFxcdTAwMjZzdGF0c19pbmZvLCBcXHUwMDI2dnBvcnRfc3RhdHMsXFxuK1xcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RhdHNfaW5mbyksIHNpemVvZih2cG9ydF9zdGF0cykpO1xcbitcXG4rXFx0ZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9MMk5JQyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEwyTklDX0NNRF9HRVRfVlBPUlRfU1RBVCwgXFx1MDAyNm1zZ19wYXJhbXMpO1xcbitcXG4rXFx0aWYgKGVyciB8fCB2cG9ydF9zdGF0cy5tc2dfaGVhZC5zdGF0dXMpIHtcXG4rXFx0XFx0ZGV2X2Vycihod2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgdnBvcnRfc3RhdHMubXNnX2hlYWQuc3RhdHVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbWNweShzdGF0cywgXFx1MDAyNnZwb3J0X3N0YXRzLnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmhcXG5pbmRleCA1ZDUyMjAyYThkNGViLi44MDU3M2MxMjE1Mzk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxcbkBAIC0xMjksNiArMTI5LDExMCBAQCBzdHJ1Y3QgbWFnX2NtZF9nZXRfeHNmcF9wcmVzZW50IHtcXG4gXFx0dTggICAgICAgICAgICAgICAgICAgcnN2ZFsyXTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMge1xcbitcXHR1NjQgbWFjX3R4X2ZyYWdtZW50X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfdW5kZXJzaXplX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfdW5kZXJtaW5fcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF82NF9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF82NV8xMjdfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfMTI4XzI1NV9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8yNTZfNTExX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfOTIxN18xMjI4N19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xNTE5X21heF9nb29kX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfb3ZlcnNpemVfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9qYWJiZXJfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9iYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9iYWRfb2N0X251bTtcXG4rXFx0dTY0IG1hY190eF9nb29kX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfZ29vZF9vY3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3RvdGFsX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfdG90YWxfb2N0X251bTtcXG4rXFx0dTY0IG1hY190eF91bmlfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9tdWx0aV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X2Jyb2FkX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGF1c2VfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wcmkwX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGZjX3ByaTFfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9wZmNfcHJpMl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wcmkzX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGZjX3ByaTRfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9wZmNfcHJpNV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wcmk2X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGZjX3ByaTdfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9jb250cm9sX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfZXJyX2FsbF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X2Zyb21fYXBwX2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9mcm9tX2FwcF9iYWRfcGt0X251bTtcXG4rXFxuK1xcdHU2NCBtYWNfcnhfZnJhZ21lbnRfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF91bmRlcnNpemVfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF91bmRlcm1pbl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzY0X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzY1XzEyN19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF8xMjhfMjU1X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzI1Nl81MTFfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfNTEyXzEwMjNfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfMTAyNF8xNTE4X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzE1MTlfMjA0N19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfNDA5Nl84MTkxX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzgxOTJfOTIxNl9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzE1MTlfbWF4X2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2phYmJlcl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2JhZF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2JhZF9vY3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9nb29kX29jdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfdG90YWxfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF90b3RhbF9vY3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3VuaV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X211bHRpX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfYnJvYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wYXVzZV9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3ByaTBfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wZmNfcHJpMV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3BmY19wcmkyX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3ByaTNfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wZmNfcHJpNF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3BmY19wcmk1X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3ByaTZfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wZmNfcHJpN19wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2NvbnRyb2xfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9zeW1fZXJyX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfZmNzX2Vycl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3NlbmRfYXBwX2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9zZW5kX2FwcF9iYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF91bmZpbHRlcl9wa3RfbnVtO1xcbit9O1xcbitcXG4rc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0c19pbmZvIHtcXG4rXFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgaGVhZDtcXG4rXFxuK1xcdHU4ICAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7XFxuK1xcdHU4ICAgICAgICAgICAgICAgICAgIHJzdmQwWzNdO1xcbit9O1xcbitcXG4rc3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCB7XFxuK1xcdHN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDtcXG4rXFxuK1xcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgY291bnRlcjtcXG4rXFx0dTY0ICAgICAgICAgICAgICAgICAgICAgICByc3ZkMVsxNV07XFxuK307XFxuK1xcbiBlbnVtIGxpbmtfZXJyX3R5cGUge1xcbiBcXHRMSU5LX0VSUl9NT0RVTEVfVU5SRUNPR0VOSVpFRCxcXG4gXFx0TElOS19FUlJfTlVNLFxcbkBAIC0yMDksNiArMzEzLDExIEBAIGludCBoaW5pYzNfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcXG4gXFx0XFx0XFx0IHN0cnVjdCBoaW5pYzNfbmljX3BvcnRfaW5mbyAqcG9ydF9pbmZvKTtcXG4gaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcXG4gXFx0XFx0XFx0ICAgIGJvb2wgZW5hYmxlKTtcXG4raW50IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnN0YXRzKTtcXG4raW50IGhpbmljM19nZXRfdnBvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiBmdW5jX2lkLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgKnN0YXRzKTtcXG4rXFxuIGludCBoaW5pYzNfYWRkX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7XFxuIGludCBoaW5pYzNfZGVsX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmhcXG5pbmRleCA5NTAyMjkzZmY3MTBjLi45NGEyYmFiNTI1NjQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxcbkBAIC0xMCw2ICsxMCw4IEBAXFxuICNpbmNsdWRlIFxcXCJoaW5pYzNfaHdfY2ZnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoaW5pYzNfaHdkZXYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhpbmljM19tZ210X2ludGVyZmFjZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaGluaWMzX3J4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoaW5pYzNfdHguaFxcXCJcXG4gXFxuICNkZWZpbmUgSElOSUMzX1ZMQU5fQklUTUFQX0JZVEVfU0laRShuaWNfZGV2KSAgKHNpemVvZigqKG5pY19kZXYpLVxcdTAwM2V2bGFuX2JpdG1hcCkpXFxuICNkZWZpbmUgSElOSUMzX1ZMQU5fQklUTUFQX1NJWkUobmljX2RldikgIFxcXFxcXG5AQCAtMTI3LDggKzEyOSw4IEBAIHN0cnVjdCBoaW5pYzNfbmljX2RldiB7XFxuIFxcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICAgICAgICAgKndvcmtxO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrICAgICAgICAgICAgIHBlcmlvZGljX3dvcms7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgcnhfbW9kZV93b3JrO1xcbi1cXHQvKiBsb2NrIGZvciBlbmFibGUvZGlzYWJsZSBwb3J0ICovXFxuLVxcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgcG9ydF9zdGF0ZV9tdXRleDtcXG4rXFx0LyogUHJvdGVjdHMgaW50ZXJmYWNlIHN0YXRlICovXFxuK1xcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgc3RhdGVfbG9jaztcXG4gXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgdWNfZmlsdGVyX2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgbWNfZmlsdGVyX2xpc3Q7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXFxuaW5kZXggMzA5YWI1OTAxMzc5Ny4uMjk4ZmMwODE3NjgwZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xcbkBAIC0yOCwxMCArMjgsNiBAQFxcbiBcXG4gI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQgICAgIDY2XFxuICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2ICAgICA4Nlxcbi0jZGVmaW5lIEhJTklDM19MUk9fUEtUX0hEUl9MRU4oY3FlKSBcXFxcXFxuLVxcdChSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVCgoY3FlKS1cXHUwMDNlb2ZmbG9hZF90eXBlLCBJUF9UWVBFKSA9PSBcXFxcXFxuLVxcdCBISU5JQzNfUlhfSVBWNl9QS1QgPyBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgOiBcXFxcXFxuLVxcdCBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQpXFxuIFxcbiBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpXFxuIHtcXG5AQCAtNDYsNyArNDIsNiBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpXFxuIFxcbiBcXHRyeHFfc3RhdHMtXFx1MDAzZWFsbG9jX3NrYl9lcnIgPSAwO1xcbiBcXHRyeHFfc3RhdHMtXFx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSAwO1xcbi1cXHRyeHFfc3RhdHMtXFx1MDAzZXJlc3RvcmVfZHJvcF9zZ2UgPSAwO1xcbiBcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhxX3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuIH1cXG4gXFxuQEAgLTE0Nyw2ICsxNDIsOCBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcXG4ge1xcbiBcXHR1MzIgaSwgZnJlZV93cWViYnMgPSByeHEtXFx1MDAzZWRlbHRhIC0gMTtcXG4gXFx0c3RydWN0IGhpbmljM19yeF9pbmZvICpyeF9pbmZvO1xcbitcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKnN5bmNwO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTU1LDggKzE1MiwxMyBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcXG4gXFxuIFxcdFxcdGVyciA9IHJ4X2FsbG9jX21hcHBlZF9wYWdlKHJ4cS1cXHUwMDNlcGFnZV9wb29sLCByeF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICByeHEtXFx1MDAzZWJ1Zl9sZW4pO1xcbi1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0c3luY3AgPSBcXHUwMDI2cnhxLVxcdTAwM2VyeHFfc3RhdHMuc3luY3A7XFxuK1xcdFxcdFxcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKHN5bmNwKTtcXG4rXFx0XFx0XFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMuYWxsb2NfcnhfYnVmX2VycisrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKHN5bmNwLCBmbGFncyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocnhfaW5mby1cXHUwMDNlcGFnZSkgK1xcbiBcXHRcXHRcXHRyeF9pbmZvLVxcdTAwM2VwYWdlX29mZnNldDtcXG5AQCAtMTcwLDYgKzE3MiwxMSBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcXG4gXFx0XFx0XFx0XFx0cnhxLVxcdTAwM2VuZXh0X3RvX3VwZGF0ZSBcXHUwMDNjXFx1MDAzYyBISU5JQzNfTk9STUFMX1JRX1dRRSk7XFxuIFxcdFxcdHJ4cS1cXHUwMDNlZGVsdGEgLT0gaTtcXG4gXFx0XFx0cnhxLVxcdTAwM2VuZXh0X3RvX2FsbG9jID0gcnhxLVxcdTAwM2VuZXh0X3RvX3VwZGF0ZTtcXG4rXFx0fSBlbHNlIGlmIChmcmVlX3dxZWJicyA9PSByeHEtXFx1MDAzZXFfZGVwdGggLSAxKSB7XFxuK1xcdFxcdHN5bmNwID0gXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xcbitcXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XFxuK1xcdFxcdHJ4cS1cXHUwMDNlcnhxX3N0YXRzLnJ4X2J1Zl9lbXB0eSsrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKHN5bmNwLCBmbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBpO1xcbkBAIC0zMzAsMTEgKzMzNywyNCBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfcnhfY3N1bShzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCB1MzIgb2ZmbG9hZF90eXBlLFxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcnhxLVxcdTAwM2VuZXRkZXY7XFxuIFxcdGJvb2wgbDJfdHVubmVsO1xcbiBcXG4rXFx0LyogSFcgZW5zdXJlcyB0aGF0IG9ubHkgMSBiaXQgaXMgc2V0IGluIGNzdW1fZXJyLiAqL1xcbitcXHRpZiAodW5saWtlbHkoY3N1bV9lcnIgPT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpKSB7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMub3RoZXJfZXJyb3JzKys7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeHEtXFx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQ1NVTSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShjc3VtX2VycikpIHtcXG4gXFx0XFx0LyogcGt0IHR5cGUgaXMgcmVjb2duaXplZCBieSBIVywgYW5kIGNzdW0gaXMgd3JvbmcgKi9cXG4rXFx0XFx0aWYgKGNzdW1fZXJyICE9IEhJTklDM19SWF9DU1VNX0hXX0NIRUNLX05PTkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNzdW1fZXJyICE9IEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMuY3N1bV9lcnJvcnMrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC0zODcsOCArNDA3LDEyIEBAIHN0YXRpYyBpbnQgcmVjdl9vbmVfcGt0KHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHN0cnVjdCBoaW5pYzNfcnFfY3FlICpyeF9jcWUsXFxuIFxcdHUxNiBudW1fbHJvO1xcbiBcXG4gXFx0c2tiID0gaGluaWMzX2ZldGNoX3J4X2J1ZmZlcihyeHEsIHBrdF9sZW4pO1xcbi1cXHRpZiAodW5saWtlbHkoIXNrYikpXFxuK1xcdGlmICh1bmxpa2VseSghc2tiKSkge1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeHEtXFx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHJ4cS1cXHUwMDNlcnhxX3N0YXRzLmFsbG9jX3NrYl9lcnIrKztcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdC8qIHBsYWNlIGhlYWRlciBpbiBsaW5lYXIgcG9ydGlvbiBvZiBidWZmZXIgKi9cXG4gXFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSlcXG5AQCAtNTUwLDExICs1NzQsMjkgQEAgaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rdm9pZCBoaW5pYzNfcnhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzID0gXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZyeHFfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZWNzdW1fZXJyb3JzID0gcnhxX3N0YXRzLVxcdTAwM2Vjc3VtX2Vycm9ycztcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZW90aGVyX2Vycm9ycyA9IHJ4cV9zdGF0cy1cXHUwMDNlb3RoZXJfZXJyb3JzO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfYnVmX2VtcHR5ID0gcnhxX3N0YXRzLVxcdTAwM2VyeF9idWZfZW1wdHk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VhbGxvY19za2JfZXJyID0gcnhxX3N0YXRzLVxcdTAwM2VhbGxvY19za2JfZXJyO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlYWxsb2NfcnhfYnVmX2VyciA9IHJ4cV9zdGF0cy1cXHUwMDNlYWxsb2NfcnhfYnVmX2VycjtcXG4rXFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZyeHFfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbit9XFxuK1xcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihyeHEtXFx1MDAzZW5ldGRldik7XFxuK1xcdHUzMiBpcF90eXBlLCBvZmZsb2FkX3R5cGUsIHBrdF9oZHJfbGVuO1xcbiBcXHR1MzIgc3dfY2ksIHN0YXR1cywgcGt0X2xlbiwgdmxhbl9sZW47XFxuIFxcdHN0cnVjdCBoaW5pYzNfcnFfY3FlICpyeF9jcWU7XFxuK1xcdHU2NCByeF9ieXRlcyA9IDA7XFxuIFxcdHUzMiBudW1fd3FlID0gMDtcXG4gXFx0aW50IG5yX3BrdHMgPSAwO1xcbiBcXHR1MTYgbnVtX2xybztcXG5AQCAtNTc0LDEwICs2MTYsMjAgQEAgaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpXFxuIFxcdFxcdGlmIChyZWN2X29uZV9wa3QocnhxLCByeF9jcWUsIHBrdF9sZW4sIHZsYW5fbGVuLCBzdGF0dXMpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdHJ4X2J5dGVzICs9IHBrdF9sZW47XFxuIFxcdFxcdG5yX3BrdHMrKztcXG4gXFx0XFx0bnVtX2xybyA9IFJRX0NRRV9TVEFUVVNfR0VUKHN0YXR1cywgTlVNX0xSTyk7XFxuLVxcdFxcdGlmIChudW1fbHJvKVxcbitcXHRcXHRpZiAobnVtX2xybykge1xcbitcXHRcXHRcXHRvZmZsb2FkX3R5cGUgPSBsZTMyX3RvX2NwdShyeF9jcWUtXFx1MDAzZW9mZmxvYWRfdHlwZSk7XFxuK1xcdFxcdFxcdGlwX3R5cGUgPSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVChvZmZsb2FkX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgSVBfVFlQRSk7XFxuK1xcdFxcdFxcdHBrdF9oZHJfbGVuID0gaXBfdHlwZSA9PSBISU5JQzNfUlhfSVBWNl9QS1QgP1xcbitcXHRcXHRcXHRcXHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgOlxcbitcXHRcXHRcXHRcXHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQ7XFxuK1xcbitcXHRcXHRcXHRyeF9ieXRlcyArPSAobnVtX2xybyAtIDEpICogcGt0X2hkcl9sZW47XFxuIFxcdFxcdFxcdG51bV93cWUgKz0gaGluaWMzX2dldF9zZ2VfbnVtKHJ4cSwgcGt0X2xlbik7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHJ4X2NxZS1cXHUwMDNlc3RhdHVzID0gMDtcXG4gXFxuQEAgLTU4OCw1ICs2NDAsMTAgQEAgaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpXFxuIFxcdGlmIChyeHEtXFx1MDAzZWRlbHRhIFxcdTAwM2U9IEhJTklDM19SWF9CVUZGRVJfV1JJVEUpXFxuIFxcdFxcdGhpbmljM19yeF9maWxsX2J1ZmZlcnMocnhxKTtcXG4gXFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMucGFja2V0cyArPSAodTY0KW5yX3BrdHM7XFxuK1xcdHJ4cS1cXHUwMDNlcnhxX3N0YXRzLmJ5dGVzICs9IHJ4X2J5dGVzO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhxLVxcdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xcbitcXG4gXFx0cmV0dXJuIG5yX3BrdHM7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcXG5pbmRleCAwNmQxYjMyOTllN2NmLi4yYWI2OTFlZDExYTkzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXFxuQEAgLTgsNiArOCwxNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGltLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gXFxuKy8qIHJ4IGNxZSBjaGVja3N1bSBlcnIgKi9cXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JUF9DU1VNX0VSUiAgICAgIEJJVCgwKVxcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX1RDUF9DU1VNX0VSUiAgICAgQklUKDEpXFxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVURQX0NTVU1fRVJSICAgICBCSVQoMilcXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JR01QX0NTVU1fRVJSICAgIEJJVCgzKVxcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lDTVBWNF9DU1VNX0VSUiAgQklUKDQpXFxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY2X0NTVU1fRVJSICBCSVQoNSlcXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9TQ1RQX0NSQ19FUlIgICAgIEJJVCg2KVxcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0hXX0NIRUNLX05PTkUgICAgQklUKDcpXFxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIgICBCSVQoOClcXG4rXFxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9QS1RfVFlQRV9NQVNLICAgICAgICAgICBHRU5NQVNLKDQsIDApXFxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9JUF9UWVBFX01BU0sgICAgICAgICAgICBHRU5NQVNLKDYsIDUpXFxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9UVU5ORUxfUEtUX0ZPUk1BVF9NQVNLICBHRU5NQVNLKDExLCA4KVxcbkBAIC0zOSw3ICs1MCw2IEBAIHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzIHtcXG4gXFx0dTY0ICAgICAgICAgICAgICAgICAgIHJ4X2J1Zl9lbXB0eTtcXG4gXFx0dTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3NrYl9lcnI7XFxuIFxcdHU2NCAgICAgICAgICAgICAgICAgICBhbGxvY19yeF9idWZfZXJyO1xcbi1cXHR1NjQgICAgICAgICAgICAgICAgICAgcmVzdG9yZV9kcm9wX3NnZTtcXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbiB9O1xcbiBcXG5AQCAtMTAxLDkgKzExMSw2IEBAIHN0cnVjdCBoaW5pYzNfcnhxIHtcXG4gXFx0ZG1hX2FkZHJfdCAgICAgICAgICAgICBjcWVfc3RhcnRfcGFkZHI7XFxuIFxcbiBcXHRzdHJ1Y3QgZGltICAgICAgICAgICAgIGRpbTtcXG4tXFxuLVxcdHU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2FsZXNjX3RpbWVyX2NmZztcXG4tXFx0dTggICAgICAgICAgICAgICAgICAgICBsYXN0X3BlbmRpbmdfbGltaXQ7XFxuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xcbiBcXG4gc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMge1xcbkBAIC0xMjMsNiArMTMwLDkgQEAgdm9pZCBoaW5pYzNfZnJlZV9yeHFzX3JlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxcbiBcXHRcXHRcXHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcXG4gaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxcbiBcXHRcXHRcXHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcXG4rXFxuK3ZvaWQgaGluaWMzX3J4cV9nZXRfc3RhdHMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqc3RhdHMpO1xcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcXG5pbmRleCA5MzA2YmYwMDIwY2FmLi42MjE5Y2MxMDkxOGRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXFxuQEAgLTI1LDExICsyNSw5IEBAIHN0YXRpYyB2b2lkIGhpbmljM190eHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnR4cV9zdGF0cylcXG4gXFx0dHhxX3N0YXRzLVxcdTAwM2Vkcm9wcGVkID0gMDtcXG4gXFxuIFxcdHR4cV9zdGF0cy1cXHUwMDNlc2tiX3BhZF9lcnIgPSAwO1xcbi1cXHR0eHFfc3RhdHMtXFx1MDAzZWZyYWdfbGVuX292ZXJmbG93ID0gMDtcXG4gXFx0dHhxX3N0YXRzLVxcdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyID0gMDtcXG4gXFx0dHhxX3N0YXRzLVxcdTAwM2VtYXBfZnJhZ19lcnIgPSAwO1xcbiBcXHR0eHFfc3RhdHMtXFx1MDAzZXVua25vd25fdHVubmVsX3BrdCA9IDA7XFxuLVxcdHR4cV9zdGF0cy1cXHUwMDNlZnJhZ19zaXplX2VyciA9IDA7XFxuIFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZ0eHFfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4gfVxcbiBcXG5AQCAtOTcsOCArOTUsMTIgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfbWFwX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0ZG1hX2luZm9bMF0uZG1hID0gZG1hX21hcF9zaW5nbGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2tiLVxcdTAwM2VkYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7XFxuLVxcdGlmIChkbWFfbWFwcGluZ19lcnJvcihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBkbWFfaW5mb1swXS5kbWEpKVxcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgZG1hX2luZm9bMF0uZG1hKSkge1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHR4cS1cXHUwMDNldHhxX3N0YXRzLm1hcF9mcmFnX2VycisrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbiBcXG4gXFx0ZG1hX2luZm9bMF0ubGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcXG4gXFxuQEAgLTExNyw2ICsxMTksOSBAQCBzdGF0aWMgaW50IGhpbmljM190eF9tYXBfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBETUFfVE9fREVWSUNFKTtcXG4gXFx0XFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGRtYV9pbmZvW2lkeF0uZG1hKSkge1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdHR4cS1cXHUwMDNldHhxX3N0YXRzLm1hcF9mcmFnX2VycisrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIGVycl91bm1hcF9wYWdlO1xcbiBcXHRcXHR9XFxuQEAgLTI2MCw2ICsyNjUsOSBAQCBzdGF0aWMgaW50IGhpbmljM190eF9jc3VtKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIHN0cnVjdCBoaW5pYzNfc3FfdGFzayAqdGFzayxcXG4gXFx0XFx0aWYgKGw0X3Byb3RvICE9IElQUFJPVE9fVURQIHx8XFxuIFxcdFxcdCAgICAoKHN0cnVjdCB1ZHBoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS1cXHUwMDNlZGVzdCAhPVxcbiBcXHRcXHQgICAgVlhMQU5fT0ZGTE9BRF9QT1JUX0xFKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0dHhxLVxcdTAwM2V0eHFfc3RhdHMudW5rbm93bl90dW5uZWxfcGt0Kys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuIFxcdFxcdFxcdC8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovXFxuIFxcdFxcdFxcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbkBAIC00MzMsNiArNDQxLDI3IEBAIHN0YXRpYyB1MzIgaGluaWMzX3R4X29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhpbmljM19zcV90YXNrICp0YXNrLFxcbiBcXHRyZXR1cm4gb2ZmbG9hZDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9wa3Rfc3RhdHMoc3RydWN0IGhpbmljM190eHEgKnR4cSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR1MzIgaGRyX2xlbiwgdHhfYnl0ZXM7XFxuK1xcdHVuc2lnbmVkIHNob3J0IHBrdHM7XFxuK1xcbitcXHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XFxuK1xcdFxcdGhkcl9sZW4gPSAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2VncyAtIDEpICpcXG4rXFx0XFx0XFx0ICBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XFxuK1xcdFxcdHR4X2J5dGVzID0gc2tiLVxcdTAwM2VsZW4gKyBoZHJfbGVuO1xcbitcXHRcXHRwa3RzID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2VncztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dHhfYnl0ZXMgPSBza2ItXFx1MDAzZWxlbiBcXHUwMDNlIEVUSF9aTEVOID8gc2tiLVxcdTAwM2VsZW4gOiBFVEhfWkxFTjtcXG4rXFx0XFx0cGt0cyA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0dHhxLVxcdTAwM2V0eHFfc3RhdHMuYnl0ZXMgKz0gdHhfYnl0ZXM7XFxuK1xcdHR4cS1cXHUwMDNldHhxX3N0YXRzLnBhY2tldHMgKz0gcGt0cztcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rfVxcbitcXG4gc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2FuZF91cGRhdGVfc3Ffb3duZXIoc3RydWN0IGhpbmljM19pb19xdWV1ZSAqc3EsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdTE2IGN1cnJfcGksIHUxNiB3cWViYl9jbnQpXFxuIHtcXG5AQCAtNTM5LDggKzU2OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTUlOX1NLQl9MRU4pKSB7XFxuLVxcdFxcdGlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItXFx1MDAzZWxlbikpXFxuK1xcdFxcdGlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItXFx1MDAzZWxlbikpIHtcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbitcXHRcXHRcXHR0eHEtXFx1MDAzZXR4cV9zdGF0cy5za2JfcGFkX2VycisrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHNrYi1cXHUwMDNlbGVuID0gTUlOX1NLQl9MRU47XFxuIFxcdH1cXG5AQCAtNTU3LDExICs1OTAsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0aGluaWMzX3dxX2ZyZWVfd3FlYmJzKFxcdTAwMjZ0eHEtXFx1MDAzZXNxLVxcdTAwM2V3cSksXFxuIFxcdFxcdFxcdFxcdFxcdHR4cS1cXHUwMDNldHhfc3RhcnRfdGhycyk7XFxuIFxcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHR4cS1cXHUwMDNldHhxX3N0YXRzLmJ1c3krKztcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbiBcXHRvZmZsb2FkID0gaGluaWMzX3R4X29mZmxvYWQoc2tiLCBcXHUwMDI2dGFzaywgXFx1MDAyNnF1ZXVlX2luZm8sIHR4cSk7XFxuIFxcdGlmICh1bmxpa2VseShvZmZsb2FkID09IEhJTklDM19UWF9PRkZMT0FEX0lOVkFMSUQpKSB7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0dHhxLVxcdTAwM2V0eHFfc3RhdHMub2ZmbG9hZF9jb3dfc2tiX2VycisrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRnb3RvIGVycl9kcm9wX3BrdDtcXG4gXFx0fSBlbHNlIGlmICghb2ZmbG9hZCkge1xcbiBcXHRcXHR3cWViYl9jbnQgLT0gMTtcXG5AQCAtNTk1LDYgKzYzNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoaW5pYzNfc2VuZF9vbmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgdHhxLVxcdTAwM2V0eF9zdG9wX3RocnMsXFxuIFxcdFxcdFxcdFxcdCAgdHhxLVxcdTAwM2V0eF9zdGFydF90aHJzKTtcXG4gXFxuK1xcdGhpbmljM19nZXRfcGt0X3N0YXRzKHR4cSwgc2tiKTtcXG4gXFx0aGluaWMzX3ByZXBhcmVfc3FfY3RybChcXHUwMDI2d3FlX2NvbWJvLCBxdWV1ZV9pbmZvLCBudW1fc2dlLCBvd25lcik7XFxuIFxcdGhpbmljM193cml0ZV9kYih0eHEtXFx1MDAzZXNxLCAwLCBEQl9DRkxBR19EUF9TUSxcXG4gXFx0XFx0XFx0aGluaWMzX2dldF9zcV9sb2NhbF9waSh0eHEtXFx1MDAzZXNxKSk7XFxuQEAgLTYwNCw2ICs2NDQsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gZXJyX2Ryb3BfcGt0OlxcbiBcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiBlcnJfb3V0OlxcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdHR4cS1cXHUwMDNldHhxX3N0YXRzLmRyb3BwZWQrKztcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuQEAgLTc1NCw2ICs3OTgsMjIgQEAgaW50IGhpbmljM19jb25maWd1cmVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3NxLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rdm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqdHhxX3N0YXRzID0gXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZ0eHFfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZWJ1c3kgPSB0eHFfc3RhdHMtXFx1MDAzZWJ1c3k7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2Vza2JfcGFkX2VyciA9IHR4cV9zdGF0cy1cXHUwMDNlc2tiX3BhZF9lcnI7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyID0gdHhxX3N0YXRzLVxcdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlbWFwX2ZyYWdfZXJyID0gdHhxX3N0YXRzLVxcdTAwM2VtYXBfZnJhZ19lcnI7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V1bmtub3duX3R1bm5lbF9wa3QgPSB0eHFfc3RhdHMtXFx1MDAzZXVua25vd25fdHVubmVsX3BrdDtcXG4rXFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZ0eHFfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbit9XFxuK1xcbiBib29sIGhpbmljM190eF9wb2xsKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIGludCBidWRnZXQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHR4cS1cXHUwMDNlbmV0ZGV2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxcbmluZGV4IDAwMTk0ZjJhMWJjYzEuLjZhYmY0NDNjYjkyN2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmhcXG5AQCAtMTA2LDExICsxMDYsOSBAQCBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB7XFxuIFxcdHU2NCAgICAgICAgICAgICAgICAgICBidXN5O1xcbiBcXHR1NjQgICAgICAgICAgICAgICAgICAgZHJvcHBlZDtcXG4gXFx0dTY0ICAgICAgICAgICAgICAgICAgIHNrYl9wYWRfZXJyO1xcbi1cXHR1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19sZW5fb3ZlcmZsb3c7XFxuIFxcdHU2NCAgICAgICAgICAgICAgICAgICBvZmZsb2FkX2Nvd19za2JfZXJyO1xcbiBcXHR1NjQgICAgICAgICAgICAgICAgICAgbWFwX2ZyYWdfZXJyO1xcbiBcXHR1NjQgICAgICAgICAgICAgICAgICAgdW5rbm93bl90dW5uZWxfcGt0O1xcbi1cXHR1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19zaXplX2VycjtcXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbiB9O1xcbiBcXG5AQCAtMTU3LDYgKzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSxcXG4gXFx0XFx0XFx0ICB1MzIgc3FfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV90eHFfcmVzICp0eHFzX3Jlcyk7XFxuIFxcbiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rdm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICpzdGF0cyk7XFxuIGJvb2wgaGluaWMzX3R4X3BvbGwoc3RydWN0IGhpbmljM190eHEgKnR4cSwgaW50IGJ1ZGdldCk7XFxuIHZvaWQgaGluaWMzX2ZsdXNoX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjoyMTowNS4yMDM3OTg4NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTYwMjc4NDE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhpbmljMyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBhZGFwdGVyIGRyaXZlciAoSHVhd2VpIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGQgZXRodG9vbCBzdGF0aXN0aWNzIGFuZCBjb2FsZXNjZSBzZXR0aW5ncywgd2hpY2ggaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZWVmNjMzYTA2MjRkMGU0MjkxMTZhNDAxZGZkMjYyN2IzOWFmMTQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MjE6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcbmluZGV4IDkwZmMxNjI4OGRlOTUuLjg5YTdiYTIxMTE3MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY1xuQEAgLTE3LDYgKzE3LDExIEBAXG4gI2luY2x1ZGUgXCJoaW5pYzNfbmljX2NmZy5oXCJcbiBcbiAjZGVmaW5lIEhJTklDM19NR01UX1ZFUlNJT05fTUFYX0xFTiAgICAgMzJcbisvKiBDb2FsZXNjZSB0aW1lIHByb3BlcnRpZXMgaW4gbWljcm9zZWNvbmRzICovXG4rI2RlZmluZSBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQgICAgIDhcbisjZGVmaW5lIENPQUxFU0NFX1RJTUVSX0NGR19VTklUICAgICAgICAgNVxuKyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVQgICAgICAoMjU1ICogQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKVxuKyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGRyAgICAgICAgICAoMjU1ICogQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpXG4gXG4gc3RhdGljIHZvaWQgaGluaWMzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG5AQCAtNDA5LDE0ICs0MTQsNzkxIEBAIGhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdHJ1Y3QgaGluaWMzX3N0YXRzIHtcbitcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xuK1x0aW50ICBvZmZzZXQ7XG4rfTtcbitcbisjZGVmaW5lIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0sodHlwZSwgbWVtYmVyKSBcXFxuK1x0QlVJTERfQlVHX09OX1pFUk8oc2l6ZW9mX2ZpZWxkKHR5cGUsIG1lbWJlcikgIT0gc2l6ZW9mKHU2NCkpXG4rXG4rI2RlZmluZSBISU5JQzNfUlhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuK1x0Lm5hbWUgICA9IFwicnhxJWRfXCIjX3N0YXRfaXRlbSwgXFxcbitcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbitcdFx0ICArIDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzLCBcXFxuK1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbit9XG4rXG4rI2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuK1x0Lm5hbWUgICA9IFwidHhxJWRfXCIjX3N0YXRfaXRlbSwgXFxcbitcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbitcdFx0ICArIDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBcXFxuK1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBoaW5pYzNfc3RhdHMgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW10gPSB7XG4rXHRISU5JQzNfUlhRX1NUQVQoY3N1bV9lcnJvcnMpLFxuK1x0SElOSUMzX1JYUV9TVEFUKG90aGVyX2Vycm9ycyksXG4rXHRISU5JQzNfUlhRX1NUQVQocnhfYnVmX2VtcHR5KSxcbitcdEhJTklDM19SWFFfU1RBVChhbGxvY19za2JfZXJyKSxcbitcdEhJTklDM19SWFFfU1RBVChhbGxvY19yeF9idWZfZXJyKSxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM190eF9xdWV1ZV9zdGF0c1tdID0ge1xuK1x0SElOSUMzX1RYUV9TVEFUKGJ1c3kpLFxuK1x0SElOSUMzX1RYUV9TVEFUKHNrYl9wYWRfZXJyKSxcbitcdEhJTklDM19UWFFfU1RBVChvZmZsb2FkX2Nvd19za2JfZXJyKSxcbitcdEhJTklDM19UWFFfU1RBVChtYXBfZnJhZ19lcnIpLFxuK1x0SElOSUMzX1RYUV9TVEFUKHVua25vd25fdHVubmVsX3BrdCksXG4rfTtcbitcbisjZGVmaW5lIEhJTklDM19GVU5DX1NUQVQoX3N0YXRfaXRlbSkge1x0XFxcbitcdC5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXFxcbitcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIF9zdGF0X2l0ZW0pIFxcXG4rXHRcdCAgKyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIFxcXG4rXHRcdFx0XHRcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxuK31cbitcbitzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfZnVuY3Rpb25fc3RhdHNbXSA9IHtcbitcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9wa3RzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksXG4rXHRISU5JQzNfRlVOQ19TVEFUKHR4X211bHRpY2FzdF9wa3RzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQpLFxuK1xuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X3BrdHNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X2J5dGVzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQocnhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfYnl0ZXNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF9icm9hZGNhc3RfcGt0c192cG9ydCksXG4rXHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksXG4rXG4rXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Rpc2NhcmRfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF9kaXNjYXJkX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfZXJyX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQocnhfZXJyX3Zwb3J0KSxcbit9O1xuK1xuKyNkZWZpbmUgSElOSUMzX1BPUlRfU1RBVChfc3RhdF9pdGVtKSB7IFxcXG4rXHQubmFtZSAgID0gI19zdGF0X2l0ZW0sIFxcXG4rXHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbitcdFx0ICArIDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMsIFxcXG4rXHRcdFx0XHRcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxuK31cbitcbitzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcG9ydF9zdGF0c1tdID0ge1xuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJhZ21lbnRfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcnNpemVfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcm1pbl9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4XzE1MTlfbWF4X2dvb2RfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2phYmJlcl9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9vY3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3RvdGFsX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdW5pX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTBfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpMV9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkyX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTNfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpNF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk1X3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTZfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpN19wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Vycl9hbGxfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9mcm9tX2FwcF9nb29kX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfYmFkX3BrdF9udW0pLFxuK1xuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5kZXJtaW5fcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF8xNTE5X21heF9iYWRfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX29jdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdG90YWxfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmlfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmkxX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTJfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpM19wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk0X3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTVfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk3X3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfc2VuZF9hcHBfZ29vZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZmlsdGVyX3BrdF9udW0pLFxuK307XG4rXG4rc3RhdGljIGludCBoaW5pYzNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGludCBjb3VudCwgcV9udW07XG4rXG4rXHRzd2l0Y2ggKHNzZXQpIHtcbitcdGNhc2UgRVRIX1NTX1NUQVRTOlxuK1x0XHRxX251bSA9IG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwcztcbitcdFx0Y291bnQgPSBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cykgK1xuK1x0XHRcdChBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cykgK1xuK1x0XHRcdCBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cykpICpcbitcdFx0XHRxX251bTtcbitcbitcdFx0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cdTAwM2Vod2RldikpXG4rXHRcdFx0Y291bnQgKz0gQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7XG4rXG4rXHRcdHJldHVybiBjb3VudDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9kcnZfcXVldWVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB0eHFfc3RhdHMgPSB7fTtcbitcdHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzIHJ4cV9zdGF0cyA9IHt9O1xuK1x0dTE2IGkgPSAwLCBqLCBxaWQ7XG4rXHRjaGFyICpwO1xuK1xuK1x0Zm9yIChxaWQgPSAwOyBxaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgcWlkKyspIHtcbitcdFx0aWYgKCFuaWNfZGV2LVx1MDAzZXR4cXMpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGhpbmljM190eHFfZ2V0X3N0YXRzKFx1MDAyNm5pY19kZXYtXHUwMDNldHhxc1txaWRdLCBcdTAwMjZ0eHFfc3RhdHMpO1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdFx0cCA9IChjaGFyICopXHUwMDI2dHhxX3N0YXRzICtcbitcdFx0XHQgICAgaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcbitcdFx0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpID0gbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzICogQVJSQVlfU0laRShoaW5pYzNfdHhfcXVldWVfc3RhdHMpO1xuK1x0Zm9yIChxaWQgPSAwOyBxaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgcWlkKyspIHtcbitcdFx0aWYgKCFuaWNfZGV2LVx1MDAzZXJ4cXMpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGhpbmljM19yeHFfZ2V0X3N0YXRzKFx1MDAyNm5pY19kZXYtXHUwMDNlcnhxc1txaWRdLCBcdTAwMjZyeHFfc3RhdHMpO1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdFx0cCA9IChjaGFyICopXHUwMDI2cnhxX3N0YXRzICtcbitcdFx0XHQgICAgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcbitcdFx0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB1MTYgaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdHUxNiBpID0gMCwgajtcbitcdGNoYXIgKnA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuK1x0aWYgKCFwcylcbitcdFx0Z290byBlcnJfemVyb19zdGF0cztcbitcbitcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShwcyk7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkZhaWxlZCB0byBnZXQgcG9ydCBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRnb3RvIGVycl96ZXJvX3N0YXRzO1xuK1x0fVxuK1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdHAgPSAoY2hhciAqKXBzICsgaGluaWMzX3BvcnRfc3RhdHNbal0ub2Zmc2V0O1xuK1x0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuK1x0fVxuK1xuK1x0a2ZyZWUocHMpO1xuK1xuK1x0cmV0dXJuIGk7XG4rXG4rZXJyX3plcm9fc3RhdHM6XG4rXHRtZW1zZXQoXHUwMDI2ZGF0YVtpXSwgMCwgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cykgKiBzaXplb2YoKmRhdGEpKTtcbitcbitcdHJldHVybiBpICsgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XG4rXHR1MTYgaSA9IDAsIGo7XG4rXHRjaGFyICpwO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IGhpbmljM19nZXRfdnBvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldixcbitcdFx0XHRcdCAgICAgaGluaWMzX2dsb2JhbF9mdW5jX2lkKG5pY19kZXYtXHUwMDNlaHdkZXYpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZ2cG9ydF9zdGF0cyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGZ1bmN0aW9uIHN0YXRzIGZyb20gZndcXG5cIik7XG4rXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdHAgPSAoY2hhciAqKVx1MDAyNnZwb3J0X3N0YXRzICsgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW2pdLm9mZnNldDtcbitcdFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcbitcdH1cbitcbitcdGlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuK1x0XHRpICs9IGhpbmljM19nZXRfZXRodG9vbF9wb3J0X3N0YXRzKG5ldGRldiwgZGF0YSArIGkpO1xuK1xuK1x0aGluaWMzX2dldF9kcnZfcXVldWVfc3RhdHMobmV0ZGV2LCBkYXRhICsgaSk7XG4rfVxuK1xuK3N0YXRpYyB1MTYgaGluaWMzX2dldF9od19zdGF0c19zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNoYXIgKnApXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBpLCBjbnQgPSAwO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfZnVuY3Rpb25fc3RhdHMpOyBpKyspIHtcbitcdFx0bWVtY3B5KHAsIGhpbmljM19mdW5jdGlvbl9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuK1x0XHRwICs9IEVUSF9HU1RSSU5HX0xFTjtcbitcdFx0Y250Kys7XG4rXHR9XG4rXG4rXHRpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LVx1MDAzZWh3ZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsgaSsrKSB7XG4rXHRcdFx0bWVtY3B5KHAsIGhpbmljM19wb3J0X3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XG4rXHRcdFx0cCArPSBFVEhfR1NUUklOR19MRU47XG4rXHRcdFx0Y250Kys7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBjbnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcXBfc3RhdHNfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjaGFyICpwKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1OCAqZGF0YSA9IHA7XG4rXHR1MTYgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsgaisrKVxuK1x0XHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLFxuK1x0XHRcdFx0XHRoaW5pYzNfdHhfcXVldWVfc3RhdHNbal0ubmFtZSwgaSk7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IGkrKykge1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cyk7IGorKylcbitcdFx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSxcbitcdFx0XHRcdFx0aGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXG4re1xuK1x0Y2hhciAqcCA9IChjaGFyICopZGF0YTtcbitcdHUxNiBvZmZzZXQ7XG4rXG4rXHRzd2l0Y2ggKHN0cmluZ3NldCkge1xuK1x0Y2FzZSBFVEhfU1NfU1RBVFM6XG4rXHRcdG9mZnNldCA9IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhuZXRkZXYsIHApO1xuK1x0XHRoaW5pYzNfZ2V0X3FwX3N0YXRzX3N0cmluZ3MobmV0ZGV2LFxuK1x0XHRcdFx0XHQgICAgcCArIG9mZnNldCAqIEVUSF9HU1RSSU5HX0xFTik7XG4rXG4rXHRcdHJldHVybjtcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkludmFsaWQgc3RyaW5nIHNldCAldS5cXG5cIiwgc3RyaW5nc2V0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX3BoeV9zdGF0cyAqcGh5X3N0YXRzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4rXHRpZiAoIXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHMpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGV0aCBwaHkgc3RhdHMgZnJvbSBmd1xcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGh5X3N0YXRzLVx1MDAzZVN5bWJvbEVycm9yRHVyaW5nQ2FycmllciA9IHBzLVx1MDAzZW1hY19yeF9zeW1fZXJyX3BrdF9udW07XG4rXG4rXHRrZnJlZShwcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xuK1x0aW50IGVycjtcbitcbitcdHBzID0ga21hbGxvY19vYmooKnBzKTtcbitcdGlmICghcHMpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShwcyk7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkZhaWxlZCB0byBnZXQgZXRoIG1hYyBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHBzLVx1MDAzZW1hY190eF9nb29kX3BrdF9udW07XG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVx1MDAzZW1hY19yeF9nb29kX3BrdF9udW07XG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gcHMtXHUwMDNlbWFjX3J4X2Zjc19lcnJfcGt0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gcHMtXHUwMDNlbWFjX3R4X2dvb2Rfb2N0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X2dvb2Rfb2N0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy1cdTAwM2VtYWNfdHhfbXVsdGlfcGt0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy1cdTAwM2VtYWNfdHhfYnJvYWRfcGt0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X211bHRpX3BrdF9udW07XG4rXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVx1MDAzZW1hY19yeF9icm9hZF9wa3RfbnVtO1xuK1xuK1x0a2ZyZWUocHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbit7XG4rXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuK1x0aWYgKCFwcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtmcmVlKHBzKTtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiRmFpbGVkIHRvIGdldCBldGggY3RybCBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHBzLVx1MDAzZW1hY190eF9jb250cm9sX3BrdF9udW07XG4rXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHBzLVx1MDAzZW1hY19yeF9jb250cm9sX3BrdF9udW07XG4rXG4rXHRrZnJlZShwcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgaGluaWMzX3Jtb25fcmFuZ2VzW10gPSB7XG4rXHR7ICAgICAwLCAgICA2NCB9LFxuK1x0eyAgICA2NSwgICAxMjcgfSxcbitcdHsgICAxMjgsICAgMjU1IH0sXG4rXHR7ICAgMjU2LCAgIDUxMSB9LFxuK1x0eyAgIDUxMiwgIDEwMjMgfSxcbitcdHsgIDEwMjQsICAxNTE4IH0sXG4rXHR7ICAxNTE5LCAgMjA0NyB9LFxuK1x0eyAgMjA0OCwgIDQwOTUgfSxcbitcdHsgIDQwOTYsICA4MTkxIH0sXG4rXHR7ICA4MTkyLCAgOTIxNiB9LFxuK1x0eyAgOTIxNywgMTIyODcgfSxcbitcdHt9XG4rfTtcbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdGludCBlcnI7XG4rXG4rXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4rXHRpZiAoIXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHMpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGV0aCBybW9uIHN0YXRzIGZyb20gZndcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHNcdD0gcHMtXHUwMDNlbWFjX3J4X3VuZGVyc2l6ZV9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzXHQ9IHBzLVx1MDAzZW1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VmcmFnbWVudHNcdFx0PSBwcy1cdTAwM2VtYWNfcnhfZnJhZ21lbnRfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlamFiYmVyc1x0XHQ9IHBzLVx1MDAzZW1hY19yeF9qYWJiZXJfcGt0X251bTtcbitcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFswXVx0XHQ9IHBzLVx1MDAzZW1hY19yeF82NF9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsxXVx0XHQ9IHBzLVx1MDAzZW1hY19yeF82NV8xMjdfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFszXVx0XHQ9IHBzLVx1MDAzZW1hY19yeF8yNTZfNTExX29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzRdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs2XVx0XHQ9IHBzLVx1MDAzZW1hY19yeF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbN11cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzhdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs5XVx0XHQ9IHBzLVx1MDAzZW1hY19yeF84MTkyXzkyMTZfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMTBdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4rXG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMF1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfNjRfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMV1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfNjVfMTI3X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzEyOF8yNTVfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbM11cdFx0PSBwcy1cdTAwM2VtYWNfdHhfMjU2XzUxMV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs0XVx0XHQ9IHBzLVx1MDAzZW1hY190eF81MTJfMTAyM19vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XVx0XHQ9IHBzLVx1MDAzZW1hY190eF8xMDI0XzE1MThfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNl1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzddXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs4XVx0XHQ9IHBzLVx1MDAzZW1hY190eF80MDk2XzgxOTFfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbOV1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzEwXVx0XHQ9IHBzLVx1MDAzZW1hY190eF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xuK1xuK1x0KnJhbmdlcyA9IGhpbmljM19ybW9uX3JhbmdlcztcbitcbitcdGtmcmVlKHBzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdGludCBlcnI7XG4rXG4rXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4rXHRpZiAoIXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHMpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGV0aCBwYXVzZSBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSBwcy1cdTAwM2VtYWNfdHhfcGF1c2VfbnVtO1xuK1x0cGF1c2Vfc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcHMtXHUwMDNlbWFjX3J4X3BhdXNlX251bTtcbitcbitcdGtmcmVlKHBzKTtcbit9XG4rXG4rc3RhdGljIGludCBoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBxX2lkLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpjb2FsLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbDtcbitcdHN0cnVjdCBoaW5pYzNfaW50ZXJydXB0X2luZm8gaW5mbyA9IHt9O1xuK1x0Ym9vbCBpc19hY3RpdmU7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0aXNfYWN0aXZlID0gdGVzdF9iaXQoSElOSUMzX0lOVEZfVVAsIFx1MDAyNm5pY19kZXYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHFfaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3Fwcyk7XG4rXG4rXHRpZiAoaXNfYWN0aXZlKSB7XG4rXHRcdGluZm8ubXNpeF9pbmRleCA9XG4rXHRcdFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4O1xuK1x0XHRpbmZvLnJlc2VuZF90aW1lcl9jZmcgPVxuK1x0XHRcdG5pY19kZXYtXHUwMDNlaW50cl9jb2FsZXNjZVtxX2lkXS5yZXNlbmRfdGltZXJfY2ZnO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRpZiAoaXNfYWN0aXZlKSB7XG4rXHRcdGluZm8uaW50ZXJydXB0X2NvYWxlc2Nfc2V0ID0gMTtcbitcdFx0aW5mby5jb2FsZXNjX3RpbWVyX2NmZyA9IGNvYWwtXHUwMDNlY29hbGVzY2VfdGltZXJfY2ZnO1xuK1x0XHRpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLVx1MDAzZXBlbmRpbmdfbGltaXQ7XG4rXG4rXHRcdGVyciA9IGhpbmljM19zZXRfaW50ZXJydXB0X2NmZyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBpbmZvKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJGYWlsZWQgdG8gc2V0IHF1ZXVlJXUgY29hbGVzY2VcIixcbitcdFx0XHRcdFx0ICAgICAgIHFfaWQpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdGludHJfY29hbCA9IFx1MDAyNm5pY19kZXYtXHUwMDNlaW50cl9jb2FsZXNjZVtxX2lkXTtcbitcdGludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcgPSBjb2FsLVx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZztcbitcdGludHJfY29hbC1cdTAwM2VwZW5kaW5nX2xpbWl0ID0gY29hbC1cdTAwM2VwZW5kaW5nX2xpbWl0O1xuK1x0aW50cl9jb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93ID0gY29hbC1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdztcbitcdGludHJfY29hbC1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2hpZ2ggPSBjb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaXNfY29hbGVzY2VfZXhjZWVkX2xpbWl0KGNvbnN0IHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRjb25zdCBzdHJ1Y3Qge1xuK1x0XHRjb25zdCBjaGFyICpuYW1lO1xuK1x0XHR1MzIgdmFsdWU7XG4rXHRcdHUzMiBsaW1pdDtcbitcdH0gY29hbGVzY2VfbGltaXRzW10gPSB7XG4rXHRcdHtcInJ4X2NvYWxlc2NlX3VzZWNzXCIsXG4rXHRcdCBjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLFxuK1x0XHQgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGR30sXG4rXHRcdHtcInJ4X21heF9jb2FsZXNjZWRfZnJhbWVzXCIsXG4rXHRcdCBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxuK1x0XHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxuK1x0XHR7XCJyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3dcIixcbitcdFx0IGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuK1x0XHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxuK1x0XHR7XCJyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoXCIsXG4rXHRcdCBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4rXHRcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXG4rXHR9O1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY29hbGVzY2VfbGltaXRzKTsgaSsrKSB7XG4rXHRcdGlmIChjb2FsZXNjZV9saW1pdHNbaV0udmFsdWUgXHUwMDNlIGNvYWxlc2NlX2xpbWl0c1tpXS5saW1pdCkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcIiVzIG91dCBvZiByYW5nZSAlZC0lZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgY29hbGVzY2VfbGltaXRzW2ldLm5hbWUsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBjb2FsZXNjZV9saW1pdHNbaV0ubGltaXQpO1xuK1x0XHRcdHJldHVybiAtRVJBTkdFO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29uc3Qgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBpc19jb2FsZXNjZV9leGNlZWRfbGltaXQoY29hbCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgXHUwMDNlXG4rXHQgICAgY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiaW52YWxpZCBjb2FsZXNjZSBmcmFtZSBoaWdoICV1LCBsb3cgJXVcIixcbitcdFx0XHRcdCAgICAgICBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4rXHRcdFx0XHQgICAgICAgY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cpO1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBjaGVja19jb2FsZXNjZV9hbGlnbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0IHUzMiBpdGVtLCB1MzIgdW5pdCwgY29uc3QgY2hhciAqc3RyKVxuK3tcbitcdGlmIChpdGVtICUgdW5pdClcbitcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcIiVzIGluICV1IHVuaXRzLCBjaGFuZ2UgdG8gJXVcXG5cIixcbitcdFx0XHQgICAgc3RyLCB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQpO1xuK31cbitcbisjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0FMSUdOKG1lbWJlciwgdW5pdCkgXFxcbitcdGNoZWNrX2NvYWxlc2NlX2FsaWduKG5ldGRldiwgbWVtYmVyLCB1bml0LCAjbWVtYmVyKVxuK1xuK3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2NoYW5nZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIHUzMiBpdGVtLCB1MzIgdW5pdCwgdTMyIG9yaV92YWwsXG4rXHRcdFx0XHQgICBjb25zdCBjaGFyICpvYmpfc3RyLCBjb25zdCBjaGFyICpzdHIpXG4re1xuK1x0aWYgKChpdGVtIC8gdW5pdCkgIT0gb3JpX3ZhbClcbitcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwiQ2hhbmdlICVzIGZyb20gJXUgdG8gJXUgJXNcXG5cIixcbitcdFx0XHQgICBzdHIsIG9yaV92YWwgKiB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQsIG9ial9zdHIpO1xuK31cbitcbisjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0NIQU5HRUQobWVtYmVyLCB1bml0LCBvcmlfdmFsLCBvYmpfc3RyKSBcXFxuK1x0Y2hlY2tfY29hbGVzY2VfY2hhbmdlZChuZXRkZXYsIG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0ciwgI21lbWJlcilcbitcbitzdGF0aWMgaW50IGhpbmljM19zZXRfaHdfY29hbF9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKm9sZF9jb2FsO1xuK1x0dTE2IGksIGo7XG4rXHRpbnQgZXJyO1xuK1xuK1x0b2xkX2NvYWwgPSBrY2FsbG9jKG5pY19kZXYtXHUwMDNlbWF4X3Fwcywgc2l6ZW9mKCpvbGRfY29hbCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFvbGRfY29hbClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZW1heF9xcHM7IGkrKylcbitcdFx0b2xkX2NvYWxbaV0gPSBuaWNfZGV2LVx1MDAzZWludHJfY29hbGVzY2VbaV07XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pY19kZXYtXHUwMDNlbWF4X3FwczsgaSsrKSB7XG4rXHRcdGVyciA9IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2UobmV0ZGV2LCBpLCBpbnRyX2NvYWwsIGV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byByb2xsYmFjaztcbitcdH1cbitcbitcdGtmcmVlKG9sZF9jb2FsKTtcbitcdHJldHVybiAwO1xuK1xuK3JvbGxiYWNrOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKG5ldGRldiwgaiwgXHUwMDI2b2xkX2NvYWxbal0sIE5VTEwpO1xuK1xuK1x0a2ZyZWUob2xkX2NvYWwpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBoaW5pYzNfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludGVycnVwdF9pbmZvO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0aW50ZXJydXB0X2luZm8gPSBcdTAwMjZuaWNfZGV2LVx1MDAzZWludHJfY29hbGVzY2VbMF07XG4rXG4rXHRjb2FsLVx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IFJFQURfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpO1xuK1xuK1x0Y29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgPVxuK1x0XHRpbnRlcnJ1cHRfaW5mby1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyAqXG4rXHRcdENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVDtcbitcbitcdGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCA9XG4rXHRcdGludGVycnVwdF9pbmZvLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCAqXG4rXHRcdENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVDtcbitcbitcdC8qIFRYL1JYIHVzZXMgdGhlIHNhbWUgaW50ZXJydXB0LlxuK1x0ICogU28gd2Ugb25seSBkZWNsYXJlIFJYIGV0aHRvb2xfY29hbGVzY2UgcGFyYW1ldGVycy5cbitcdCAqL1xuK1x0Y29hbC1cdTAwM2VyeF9jb2FsZXNjZV91c2VjcyA9IGludGVycnVwdF9pbmZvLVx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZyAqXG4rXHRcdFx0XHQgIENPQUxFU0NFX1RJTUVSX0NGR19VTklUO1xuK1xuK1x0Y29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGludGVycnVwdF9pbmZvLVx1MDAzZXBlbmRpbmdfbGltaXQgKlxuK1x0XHRcdFx0XHRDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGhpbmljM19zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9jb2FsZXNjZSAqa2VybmVsX2NvYWwsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGhpbmljM19pbnRyX2NvYWxfaW5mbyAqb3JpX2ludHJfY29hbDtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gaW50cl9jb2FsID0ge307XG4rXHRjb25zdCBjaGFyICpvYmpfc3RyID0gXCJmb3IgbmV0ZGV2XCI7XG4rXHRib29sIG9sZF9hZGFwdGl2ZSwgbmV3X2FkYXB0aXZlO1xuK1x0c3RydWN0IGhpbmljM19yeHEgKnJ4cSA9IE5VTEw7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGk7XG4rXG4rXHRlcnIgPSBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29hbCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7XG4rXHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxuK1x0XHRcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcbitcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbitcdFx0XHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XG4rXHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyxcbitcdFx0XHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRvcmlfaW50cl9jb2FsID0gXHUwMDI2bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xuK1xuK1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCxcbitcdFx0XHQgICAgICAgb3JpX2ludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpO1xuK1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxuK1x0XHRcdCAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsXG4rXHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcGVuZGluZ19saW1pdCwgb2JqX3N0cik7XG4rXHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbitcdFx0XHQgICAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklULFxuK1x0XHRcdCAgICAgICBvcmlfaW50cl9jb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCwgb2JqX3N0cik7XG4rXHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuK1x0XHRcdCAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsXG4rXHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRvbGRfYWRhcHRpdmUgPSBSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKTtcbitcdG5ld19hZGFwdGl2ZSA9ICEhY29hbC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7XG4rXG4rXHRpZiAob2xkX2FkYXB0aXZlKSB7XG4rXHRcdGJvb2wgaXNfdXA7XG4rXG4rXHRcdFdSSVRFX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsLCBmYWxzZSk7XG4rXG4rXHRcdHN5bmNocm9uaXplX25ldCgpO1xuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRcdGlzX3VwID0gdGVzdF9iaXQoSElOSUMzX0lOVEZfVVAsIFx1MDAyNm5pY19kZXYtXHUwMDNlZmxhZ3MpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdFx0aWYgKGlzX3VwKSB7XG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBpKyspIHtcbitcdFx0XHRcdHJ4cSA9IG5pY19kZXYtXHUwMDNlcV9wYXJhbXMuaXJxX2NmZ1tpXS5yeHE7XG4rXHRcdFx0XHRpZiAoIXJ4cSlcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0XHRuZXRfZGltX3dvcmtfY2FuY2VsKFx1MDAyNnJ4cS1cdTAwM2VkaW0pO1xuK1x0XHRcdFx0cnhxLVx1MDAzZWRpbS5zdGF0ZSA9IERJTV9TVEFSVF9NRUFTVVJFO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0aW50cl9jb2FsLmNvYWxlc2NlX3RpbWVyX2NmZyA9XG4rXHRcdCh1OCkoY29hbC1cdTAwM2VyeF9jb2FsZXNjZV91c2VjcyAvIENPQUxFU0NFX1RJTUVSX0NGR19VTklUKTtcbitcbitcdGludHJfY29hbC5wZW5kaW5nX2xpbWl0ID1cbitcdFx0KHU4KShjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzIC9cbitcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuK1xuK1x0aW50cl9jb2FsLnJ4X3BlbmRpbmdfbGltaXRfaGlnaCA9XG4rXHRcdCh1OCkoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoIC9cbitcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuK1xuK1x0aW50cl9jb2FsLnJ4X3BlbmRpbmdfbGltaXRfbG93ID1cbitcdFx0KHU4KShjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAvXG4rXHRcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcbitcbitcdC8qIGNvYWxlc2NlIHRpbWVyIG9yIHBlbmRpbmcgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGNvYWxlc2NlICovXG4rXHRpZiAoIW5ld19hZGFwdGl2ZSBcdTAwMjZcdTAwMjZcbitcdCAgICAoIWludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgfHwgIWludHJfY29hbC5wZW5kaW5nX2xpbWl0KSlcbitcdFx0bmV0ZGV2X2luZm8obmV0ZGV2LCBcIkNvYWxlc2NlIHdpbGwgYmUgZGlzYWJsZWRcXG5cIik7XG4rXG4rXHRlcnIgPSBoaW5pYzNfc2V0X2h3X2NvYWxfcGFyYW0obmV0ZGV2LCBcdTAwMjZpbnRyX2NvYWwsIGV4dGFjayk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGlmIChvbGRfYWRhcHRpdmUpXG4rXHRcdFx0V1JJVEVfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwsIG9sZF9hZGFwdGl2ZSk7XG4rXG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRXUklURV9PTkNFKG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgbmV3X2FkYXB0aXZlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpbmljM19ldGh0b29sX29wcyA9IHtcbi1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zICAgICAgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbi1cdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1BLVF9SQVRFX1JYX1VTRUNTLFxuK1x0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfUlhfVVNFQ1MgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FUyB8XG4rXHRcdFx0XHRcdCAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkVfUlggfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19MT1cgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19ISUdILFxuIFx0LmdldF9saW5rX2tzZXR0aW5ncyAgICAgICAgICAgICA9IGhpbmljM19nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuZ2V0X2RydmluZm8gICAgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfbXNnbGV2ZWwsXG4gXHQuc2V0X21zZ2xldmVsICAgICAgICAgICAgICAgICAgID0gaGluaWMzX3NldF9tc2dsZXZlbCxcbiBcdC5nZXRfbGluayAgICAgICAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLFxuK1x0LmdldF9zc2V0X2NvdW50ICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfc3NldF9jb3VudCxcbitcdC5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsXG4rXHQuZ2V0X3N0cmluZ3MgICAgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9zdHJpbmdzLFxuK1x0LmdldF9ldGhfcGh5X3N0YXRzICAgICAgICAgICAgICA9IGhpbmljM19nZXRfZXRoX3BoeV9zdGF0cyxcbitcdC5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsXG4rXHQuZ2V0X2V0aF9jdHJsX3N0YXRzICAgICAgICAgICAgID0gaGluaWMzX2dldF9ldGhfY3RybF9zdGF0cyxcbitcdC5nZXRfcm1vbl9zdGF0cyAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3Jtb25fc3RhdHMsXG4rXHQuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cyxcbitcdC5nZXRfY29hbGVzY2UgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2NvYWxlc2NlLFxuK1x0LnNldF9jb2FsZXNjZSAgICAgICAgICAgICAgICAgICA9IGhpbmljM19zZXRfY29hbGVzY2UsXG4gfTtcbiBcbiB2b2lkIGhpbmljM19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmhcbmluZGV4IGNmYzlkYWEzMDM0ZmUuLjZiMGY0ODZiYTU5MGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxuQEAgLTUzLDYgKzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhXG4gXHRtc2dfcGFyYW1zLVx1MDAzZXRpbWVvdXRfbXMgPSAwO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWRcbittZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoc3RydWN0IG1nbXRfbXNnX3BhcmFtcyAqbXNnX3BhcmFtcywgdm9pZCAqaW5fYnVmLFxuK1x0XHRcdCAgICB2b2lkICpvdXRfYnVmLCB1MzIgaW5fYnVmX3NpemUsIHUzMiBvdXRfYnVmX3NpemUpXG4re1xuK1x0bXNnX3BhcmFtcy1cdTAwM2VidWZfaW4gPSBpbl9idWY7XG4rXHRtc2dfcGFyYW1zLVx1MDAzZWJ1Zl9vdXQgPSBvdXRfYnVmO1xuK1x0bXNnX3BhcmFtcy1cdTAwM2Vpbl9zaXplID0gaW5fYnVmX3NpemU7XG4rXHRtc2dfcGFyYW1zLVx1MDAzZWV4cGVjdGVkX291dF9zaXplID0gb3V0X2J1Zl9zaXplO1xuK1x0bXNnX3BhcmFtcy1cdTAwM2V0aW1lb3V0X21zID0gMDtcbit9XG4rXG4gZW51bSBjZmdfY21kIHtcbiBcdENGR19DTURfR0VUX0RFVl9DQVAgPSAwLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19pcnEuY1xuaW5kZXggZTdkNmMyMDMzYjQ1MS4uZjY2NDUzODVjNTUyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19pcnEuY1xuQEAgLTIwLDcgKzIwLDcgQEAgc3RhdGljIHZvaWQgaGluaWMzX25ldF9kaW0oc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2LFxuIFx0c3RydWN0IGRpbV9zYW1wbGUgc2FtcGxlID0ge307XG4gXG4gXHRpZiAoIXRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcdTAwMjZuaWNfZGV2LVx1MDAzZWZsYWdzKSB8fFxuLVx0ICAgICFuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpXG4rXHQgICAgIVJFQURfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRkaW1fdXBkYXRlX3NhbXBsZShpcnFfY2ZnLVx1MDAzZXRvdGFsX2V2ZW50cywgcnhxLVx1MDAzZXJ4cV9zdGF0cy5wYWNrZXRzLFxuQEAgLTE0OCwxMyArMTQ4LDkgQEAgc3RhdGljIGludCBoaW5pYzNfc2V0X2ludGVycnVwdF9tb2RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCxcbiBcdFx0bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7XG4gXG4gXHRlcnIgPSBoaW5pYzNfc2V0X2ludGVycnVwdF9jZmcobmljX2Rldi1cdTAwM2Vod2RldiwgaW5mbyk7XG4tXHRpZiAoZXJyKSB7XG4rXHRpZiAoZXJyKVxuIFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiBcdFx0XHQgICBcIkZhaWxlZCB0byBtb2RpZnkgbW9kZXJhdGlvbiBmb3IgUXVldWU6ICV1XFxuXCIsIHFfaWQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bmljX2Rldi1cdTAwM2VyeHFzW3FfaWRdLmxhc3RfY29hbGVzY190aW1lcl9jZmcgPSBjb2FsZXNjX3RpbWVyX2NmZztcbi1cdFx0bmljX2Rldi1cdTAwM2VyeHFzW3FfaWRdLmxhc3RfcGVuZGluZ19saW1pdCA9IHBlbmRpbmdfbGltaXQ7XG4tXHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmNcbmluZGV4IDBhODg4ZmU0Yzk3NWIuLjhjNzQ5MmUxNTQwOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xuQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9pbnRyX2NvYWxfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0aW5mby1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IEhJTklDM19SWF9QRU5ESU5HX0xJTUlUX0xPVztcbiBcdH1cbiBcbi1cdG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCA9IDE7XG4rXHRXUklURV9PTkNFKG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgMSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGluaWMzX2luaXRfaW50cl9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgaW50IGhpbmljM19zd19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuIFxuIFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5zcV9kZXB0aCA9IEhJTklDM19TUV9ERVBUSDtcbiBcdG5pY19kZXYtXHUwMDNlcV9wYXJhbXMucnFfZGVwdGggPSBISU5JQzNfUlFfREVQVEg7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcbmluZGV4IGM1YmNhM2M0YWY5NjEuLjc2YzY5MWY4MjcwM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG5AQCAtMTQzLDYgKzE0Myw0MSBAQCBzdHJ1Y3QgbDJuaWNfY21kX3NldF9kY2Jfc3RhdGUge1xuIFx0dTggICAgICAgICAgICAgICAgICAgcnN2ZFs3XTtcbiB9O1xuIFxuK3N0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8ge1xuK1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4rXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xuK1x0dTE2ICAgICAgICAgICAgICAgICAgcnN2ZDE7XG4rfTtcbitcbitzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMge1xuK1x0dTY0IHR4X3VuaWNhc3RfcGt0c192cG9ydDtcbitcdHU2NCB0eF91bmljYXN0X2J5dGVzX3Zwb3J0O1xuK1x0dTY0IHR4X211bHRpY2FzdF9wa3RzX3Zwb3J0O1xuK1x0dTY0IHR4X211bHRpY2FzdF9ieXRlc192cG9ydDtcbitcdHU2NCB0eF9icm9hZGNhc3RfcGt0c192cG9ydDtcbitcdHU2NCB0eF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7XG4rXG4rXHR1NjQgcnhfdW5pY2FzdF9wa3RzX3Zwb3J0O1xuK1x0dTY0IHJ4X3VuaWNhc3RfYnl0ZXNfdnBvcnQ7XG4rXHR1NjQgcnhfbXVsdGljYXN0X3BrdHNfdnBvcnQ7XG4rXHR1NjQgcnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0O1xuK1x0dTY0IHJ4X2Jyb2FkY2FzdF9wa3RzX3Zwb3J0O1xuK1x0dTY0IHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydDtcbitcbitcdHU2NCB0eF9kaXNjYXJkX3Zwb3J0O1xuK1x0dTY0IHJ4X2Rpc2NhcmRfdnBvcnQ7XG4rXHR1NjQgdHhfZXJyX3Zwb3J0O1xuK1x0dTY0IHJ4X2Vycl92cG9ydDtcbit9O1xuK1xuK3N0cnVjdCBsMm5pY19jbWRfdnBvcnRfc3RhdHMge1xuK1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgICAgIG1zZ19oZWFkO1xuK1x0dTMyICAgICAgICAgICAgICAgICAgICAgIHN0YXRzX3NpemU7XG4rXHR1MzIgICAgICAgICAgICAgICAgICAgICAgcnN2ZDE7XG4rXHRzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgc3RhdHM7XG4rXHR1NjQgICAgICAgICAgICAgICAgICAgICAgcnN2ZDJbNl07XG4rfTtcbitcbiBzdHJ1Y3QgbDJuaWNfY21kX2xyb19jb25maWcge1xuIFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4gXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xuQEAgLTIzNCw2ICsyNjksNyBAQCBlbnVtIGwybmljX2NtZCB7XG4gXHRMMk5JQ19DTURfU0VUX1ZQT1JUX0VOQUJMRSAgICA9IDYsXG4gXHRMMk5JQ19DTURfU0VUX1JYX01PREUgICAgICAgICA9IDcsXG4gXHRMMk5JQ19DTURfU0VUX1NRX0NJX0FUVFIgICAgICA9IDgsXG4rXHRMMk5JQ19DTURfR0VUX1ZQT1JUX1NUQVQgICAgICA9IDksXG4gXHRMMk5JQ19DTURfQ0xFQVJfUVBfUkVTT1VSQ0UgICA9IDExLFxuIFx0TDJOSUNfQ01EX0NGR19SWF9MUk8gICAgICAgICAgPSAxMyxcbiBcdEwyTklDX0NNRF9DRkdfTFJPX1RJTUVSICAgICAgID0gMTQsXG5AQCAtMjcyLDYgKzMwOCw3IEBAIGVudW0gbWFnX2NtZCB7XG4gXHRNQUdfQ01EX1NFVF9QT1JUX0VOQUJMRSA9IDYsXG4gXHRNQUdfQ01EX0dFVF9MSU5LX1NUQVRVUyA9IDcsXG4gXG4rXHRNQUdfQ01EX0dFVF9QT1JUX1NUQVQgICA9IDE1MSxcbiBcdE1BR19DTURfR0VUX1BPUlRfSU5GTyAgID0gMTUzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXG5pbmRleCBkYTczODExNjQxYTlkLi5lZDQ4MTBmYTk4NTJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uZXRkZXZfb3BzLmNcbkBAIC0zNDEsOSArMzQxLDkgQEAgc3RhdGljIGludCBoaW5pYzNfbWF5YmVfc2V0X3BvcnRfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCBlbmFibGUpXG4gXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IGVycjtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2Vwb3J0X3N0YXRlX211dGV4KTtcbitcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGVyciA9IGhpbmljM19zZXRfcG9ydF9lbmFibGUobmljX2Rldi1cdTAwM2Vod2RldiwgZW5hYmxlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcbmluZGV4IGRlNWE3OTg0ZDJjYjkuLjFiMTRkYzgyNGNlMWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuY1xuQEAgLTYzOSw2ICs2MzksNDIgQEAgaW50IGhpbmljM19nZXRfbGlua19zdGF0dXMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIGJvb2wgKmxpbmtfc3RhdHVzX3VwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyBzdGF0c19pbmZvID0ge307XG4rXHRzdHJ1Y3QgbWFnX2NtZF9nZXRfcG9ydF9zdGF0ICpwcztcbitcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdHBzID0ga3phbGxvY19vYmooKnBzKTtcbitcdGlmICghcHMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0c3RhdHNfaW5mby5wb3J0X2lkID0gaGluaWMzX3BoeXNpY2FsX3BvcnRfaWQoaHdkZXYpO1xuK1xuK1x0bWdtdF9tc2dfcGFyYW1zX2luaXRfaW5fb3V0KFx1MDAyNm1zZ19wYXJhbXMsIFx1MDAyNnN0YXRzX2luZm8sIHBzLFxuK1x0XHRcdFx0ICAgIHNpemVvZihzdGF0c19pbmZvKSwgc2l6ZW9mKCpwcykpO1xuK1xuK1x0ZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9ISUxJTkssXG4rXHRcdFx0XHQgICAgICAgTUFHX0NNRF9HRVRfUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbitcbitcdGlmIChlcnIgfHwgcHMtXHUwMDNlaGVhZC5zdGF0dXMpIHtcbitcdFx0ZGV2X2Vycihod2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJGYWlsZWQgdG8gZ2V0IHBvcnQgc3RhdGlzdGljcywgZXJyOiAlZCwgc3RhdHVzOiAweCV4XFxuXCIsXG4rXHRcdFx0ZXJyLCBwcy1cdTAwM2VoZWFkLnN0YXR1cyk7XG4rXHRcdGVyciA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZwcy1cdTAwM2Vjb3VudGVyLCBzaXplb2YoKnN0YXRzKSk7XG4rXG4rb3V0OlxuK1x0a2ZyZWUocHMpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuIFx0XHRcdCBzdHJ1Y3QgaGluaWMzX25pY19wb3J0X2luZm8gKnBvcnRfaW5mbylcbiB7XG5AQCAtNzM4LDMgKzc3NCwzMSBAQCBpbnQgaGluaWMzX2dldF9wYXVzZV9pbmZvKHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldixcbiBcdHJldHVybiBoaW5pYzNfY2ZnX2h3X3BhdXNlKG5pY19kZXYtXHUwMDNlaHdkZXYsIE1HTVRfTVNHX0NNRF9PUF9HRVQsXG4gXHRcdFx0XHQgICBuaWNfcGF1c2UpO1xuIH1cbitcbitpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsXG4rXHRcdFx0ICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cylcbit7XG4rXHRzdHJ1Y3QgbDJuaWNfY21kX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XG4rXHRzdHJ1Y3QgbDJuaWNfcG9ydF9zdGF0c19pbmZvIHN0YXRzX2luZm8gPSB7fTtcbitcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdHN0YXRzX2luZm8uZnVuY19pZCA9IGZ1bmNfaWQ7XG4rXG4rXHRtZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoXHUwMDI2bXNnX3BhcmFtcywgXHUwMDI2c3RhdHNfaW5mbywgXHUwMDI2dnBvcnRfc3RhdHMsXG4rXHRcdFx0XHQgICAgc2l6ZW9mKHN0YXRzX2luZm8pLCBzaXplb2YodnBvcnRfc3RhdHMpKTtcbitcbitcdGVyciA9IGhpbmljM19zZW5kX21ib3hfdG9fbWdtdChod2RldiwgTUdNVF9NT0RfTDJOSUMsXG4rXHRcdFx0XHQgICAgICAgTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbitcbitcdGlmIChlcnIgfHwgdnBvcnRfc3RhdHMubXNnX2hlYWQuc3RhdHVzKSB7XG4rXHRcdGRldl9lcnIoaHdkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcXG5cIixcbitcdFx0XHRlcnIsIHZwb3J0X3N0YXRzLm1zZ19oZWFkLnN0YXR1cyk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZ2cG9ydF9zdGF0cy5zdGF0cywgc2l6ZW9mKCpzdGF0cykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxuaW5kZXggNWQ1MjIwMmE4ZDRlYi4uODA1NzNjMTIxNTM5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oXG5AQCAtMTI5LDYgKzEyOSwxMTAgQEAgc3RydWN0IG1hZ19jbWRfZ2V0X3hzZnBfcHJlc2VudCB7XG4gXHR1OCAgICAgICAgICAgICAgICAgICByc3ZkWzJdO1xuIH07XG4gXG4rc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyB7XG4rXHR1NjQgbWFjX3R4X2ZyYWdtZW50X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3VuZGVyc2l6ZV9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF91bmRlcm1pbl9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF82NF9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfNjVfMTI3X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8xMjhfMjU1X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8yNTZfNTExX29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF81MTJfMTAyM19vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfMTAyNF8xNTE4X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfNDA5Nl84MTkxX29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF9qYWJiZXJfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfYmFkX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2JhZF9vY3RfbnVtO1xuK1x0dTY0IG1hY190eF9nb29kX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2dvb2Rfb2N0X251bTtcbitcdHU2NCBtYWNfdHhfdG90YWxfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfdG90YWxfb2N0X251bTtcbitcdHU2NCBtYWNfdHhfdW5pX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X211bHRpX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2Jyb2FkX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BhdXNlX251bTtcbitcdHU2NCBtYWNfdHhfcGZjX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkwX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkxX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkyX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkzX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk1X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk2X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk3X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2NvbnRyb2xfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfZXJyX2FsbF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF9mcm9tX2FwcF9nb29kX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2Zyb21fYXBwX2JhZF9wa3RfbnVtO1xuK1xuK1x0dTY0IG1hY19yeF9mcmFnbWVudF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF91bmRlcnNpemVfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfdW5kZXJtaW5fcGt0X251bTtcbitcdHU2NCBtYWNfcnhfNjRfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzY1XzEyN19vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfNTEyXzEwMjNfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMTUxOV9tYXhfYmFkX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzE1MTlfbWF4X2dvb2RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfb3ZlcnNpemVfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfamFiYmVyX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X2JhZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9iYWRfb2N0X251bTtcbitcdHU2NCBtYWNfcnhfZ29vZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9nb29kX29jdF9udW07XG4rXHR1NjQgbWFjX3J4X3RvdGFsX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X3RvdGFsX29jdF9udW07XG4rXHR1NjQgbWFjX3J4X3VuaV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9tdWx0aV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9icm9hZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wYXVzZV9udW07XG4rXHR1NjQgbWFjX3J4X3BmY19wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpMV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpM19wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpNF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpN19wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9jb250cm9sX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X3N5bV9lcnJfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfZmNzX2Vycl9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF91bmZpbHRlcl9wa3RfbnVtO1xuK307XG4rXG4rc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0c19pbmZvIHtcbitcdHN0cnVjdCBtZ210X21zZ19oZWFkIGhlYWQ7XG4rXG4rXHR1OCAgICAgICAgICAgICAgICAgICBwb3J0X2lkO1xuK1x0dTggICAgICAgICAgICAgICAgICAgcnN2ZDBbM107XG4rfTtcbitcbitzdHJ1Y3QgbWFnX2NtZF9nZXRfcG9ydF9zdGF0IHtcbitcdHN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDtcbitcbitcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgY291bnRlcjtcbitcdHU2NCAgICAgICAgICAgICAgICAgICAgICAgcnN2ZDFbMTVdO1xuK307XG4rXG4gZW51bSBsaW5rX2Vycl90eXBlIHtcbiBcdExJTktfRVJSX01PRFVMRV9VTlJFQ09HRU5JWkVELFxuIFx0TElOS19FUlJfTlVNLFxuQEAgLTIwOSw2ICszMTMsMTEgQEAgaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuIFx0XHRcdCBzdHJ1Y3QgaGluaWMzX25pY19wb3J0X2luZm8gKnBvcnRfaW5mbyk7XG4gaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcbiBcdFx0XHQgICAgYm9vbCBlbmFibGUpO1xuK2ludCBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnN0YXRzKTtcbitpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsXG4rXHRcdFx0ICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cyk7XG4rXG4gaW50IGhpbmljM19hZGRfdmxhbihzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IHZsYW5faWQsIHUxNiBmdW5jX2lkKTtcbiBpbnQgaGluaWMzX2RlbF92bGFuKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgdmxhbl9pZCwgdTE2IGZ1bmNfaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxuaW5kZXggOTUwMjI5M2ZmNzEwYy4uOTRhMmJhYjUyNTY0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oXG5AQCAtMTAsNiArMTAsOCBAQFxuICNpbmNsdWRlIFwiaGluaWMzX2h3X2NmZy5oXCJcbiAjaW5jbHVkZSBcImhpbmljM19od2Rldi5oXCJcbiAjaW5jbHVkZSBcImhpbmljM19tZ210X2ludGVyZmFjZS5oXCJcbisjaW5jbHVkZSBcImhpbmljM19yeC5oXCJcbisjaW5jbHVkZSBcImhpbmljM190eC5oXCJcbiBcbiAjZGVmaW5lIEhJTklDM19WTEFOX0JJVE1BUF9CWVRFX1NJWkUobmljX2RldikgIChzaXplb2YoKihuaWNfZGV2KS1cdTAwM2V2bGFuX2JpdG1hcCkpXG4gI2RlZmluZSBISU5JQzNfVkxBTl9CSVRNQVBfU0laRShuaWNfZGV2KSAgXFxcbkBAIC0xMjcsOCArMTI5LDggQEAgc3RydWN0IGhpbmljM19uaWNfZGV2IHtcbiBcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICAgICAgICAgKndvcmtxO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayAgICAgICAgICAgICBwZXJpb2RpY193b3JrO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgICAgICByeF9tb2RlX3dvcms7XG4tXHQvKiBsb2NrIGZvciBlbmFibGUvZGlzYWJsZSBwb3J0ICovXG4tXHRzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIHBvcnRfc3RhdGVfbXV0ZXg7XG4rXHQvKiBQcm90ZWN0cyBpbnRlcmZhY2Ugc3RhdGUgKi9cbitcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgc3RhdGVfbG9jaztcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgdWNfZmlsdGVyX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIG1jX2ZpbHRlcl9saXN0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXG5pbmRleCAzMDlhYjU5MDEzNzk3Li4yOThmYzA4MTc2ODBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuQEAgLTI4LDEwICsyOCw2IEBAXG4gXG4gI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQgICAgIDY2XG4gI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgICAgIDg2XG4tI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOKGNxZSkgXFxcbi1cdChSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVCgoY3FlKS1cdTAwM2VvZmZsb2FkX3R5cGUsIElQX1RZUEUpID09IFxcXG4tXHQgSElOSUMzX1JYX0lQVjZfUEtUID8gSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2IDogXFxcbi1cdCBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQpXG4gXG4gc3RhdGljIHZvaWQgaGluaWMzX3J4cV9jbGVhbl9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzKVxuIHtcbkBAIC00Niw3ICs0Miw2IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cylcbiBcbiBcdHJ4cV9zdGF0cy1cdTAwM2VhbGxvY19za2JfZXJyID0gMDtcbiBcdHJ4cV9zdGF0cy1cdTAwM2VhbGxvY19yeF9idWZfZXJyID0gMDtcbi1cdHJ4cV9zdGF0cy1cdTAwM2VyZXN0b3JlX2Ryb3Bfc2dlID0gMDtcbiBcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4gfVxuIFxuQEAgLTE0Nyw2ICsxNDIsOCBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcbiB7XG4gXHR1MzIgaSwgZnJlZV93cWViYnMgPSByeHEtXHUwMDNlZGVsdGEgLSAxO1xuIFx0c3RydWN0IGhpbmljM19yeF9pbmZvICpyeF9pbmZvO1xuK1x0c3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuIFx0aW50IGVycjtcbiBcbkBAIC0xNTUsOCArMTUyLDEzIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKVxuIFxuIFx0XHRlcnIgPSByeF9hbGxvY19tYXBwZWRfcGFnZShyeHEtXHUwMDNlcGFnZV9wb29sLCByeF9pbmZvLFxuIFx0XHRcdFx0XHQgICByeHEtXHUwMDNlYnVmX2xlbik7XG4tXHRcdGlmICh1bmxpa2VseShlcnIpKVxuK1x0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuK1x0XHRcdHN5bmNwID0gXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcDtcbitcdFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XG4rXHRcdFx0cnhxLVx1MDAzZXJ4cV9zdGF0cy5hbGxvY19yeF9idWZfZXJyKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShzeW5jcCwgZmxhZ3MpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXG4gXHRcdGRtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihyeF9pbmZvLVx1MDAzZXBhZ2UpICtcbiBcdFx0XHRyeF9pbmZvLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuQEAgLTE3MCw2ICsxNzIsMTEgQEAgc3RhdGljIHUzMiBoaW5pYzNfcnhfZmlsbF9idWZmZXJzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEpXG4gXHRcdFx0XHRyeHEtXHUwMDNlbmV4dF90b191cGRhdGUgXHUwMDNjXHUwMDNjIEhJTklDM19OT1JNQUxfUlFfV1FFKTtcbiBcdFx0cnhxLVx1MDAzZWRlbHRhIC09IGk7XG4gXHRcdHJ4cS1cdTAwM2VuZXh0X3RvX2FsbG9jID0gcnhxLVx1MDAzZW5leHRfdG9fdXBkYXRlO1xuK1x0fSBlbHNlIGlmIChmcmVlX3dxZWJicyA9PSByeHEtXHUwMDNlcV9kZXB0aCAtIDEpIHtcbitcdFx0c3luY3AgPSBcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xuK1x0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XG4rXHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMucnhfYnVmX2VtcHR5Kys7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoc3luY3AsIGZsYWdzKTtcbiBcdH1cbiBcbiBcdHJldHVybiBpO1xuQEAgLTMzMCwxMSArMzM3LDI0IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeF9jc3VtKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHUzMiBvZmZsb2FkX3R5cGUsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcnhxLVx1MDAzZW5ldGRldjtcbiBcdGJvb2wgbDJfdHVubmVsO1xuIFxuK1x0LyogSFcgZW5zdXJlcyB0aGF0IG9ubHkgMSBiaXQgaXMgc2V0IGluIGNzdW1fZXJyLiAqL1xuK1x0aWYgKHVubGlrZWx5KGNzdW1fZXJyID09IEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSKSkge1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuK1x0XHRyeHEtXHUwMDNlcnhxX3N0YXRzLm90aGVyX2Vycm9ycysrO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbitcdH1cbitcbiBcdGlmICghKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodW5saWtlbHkoY3N1bV9lcnIpKSB7XG4gXHRcdC8qIHBrdCB0eXBlIGlzIHJlY29nbml6ZWQgYnkgSFcsIGFuZCBjc3VtIGlzIHdyb25nICovXG4rXHRcdGlmIChjc3VtX2VyciAhPSBISU5JQzNfUlhfQ1NVTV9IV19DSEVDS19OT05FIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpIHtcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuK1x0XHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuY3N1bV9lcnJvcnMrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbitcdFx0fVxuIFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTM4Nyw4ICs0MDcsMTIgQEAgc3RhdGljIGludCByZWN2X29uZV9wa3Qoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZSxcbiBcdHUxNiBudW1fbHJvO1xuIFxuIFx0c2tiID0gaGluaWMzX2ZldGNoX3J4X2J1ZmZlcihyeHEsIHBrdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKVxuK1x0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4rXHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuYWxsb2Nfc2tiX2VycisrO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4gXG4gXHQvKiBwbGFjZSBoZWFkZXIgaW4gbGluZWFyIHBvcnRpb24gb2YgYnVmZmVyICovXG4gXHRpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKVxuQEAgLTU1MCwxMSArNTc0LDI5IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3J4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbit2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsXG4rXHRcdFx0ICBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqc3RhdHMpXG4re1xuK1x0c3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cyA9IFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHM7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4rXG4rXHRkbyB7XG4rXHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJ4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4rXHRcdHN0YXRzLVx1MDAzZWNzdW1fZXJyb3JzID0gcnhxX3N0YXRzLVx1MDAzZWNzdW1fZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VvdGhlcl9lcnJvcnMgPSByeHFfc3RhdHMtXHUwMDNlb3RoZXJfZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9idWZfZW1wdHkgPSByeHFfc3RhdHMtXHUwMDNlcnhfYnVmX2VtcHR5O1xuK1x0XHRzdGF0cy1cdTAwM2VhbGxvY19za2JfZXJyID0gcnhxX3N0YXRzLVx1MDAzZWFsbG9jX3NrYl9lcnI7XG4rXHRcdHN0YXRzLVx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSByeHFfc3RhdHMtXHUwMDNlYWxsb2NfcnhfYnVmX2VycjtcbitcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyeHFfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4rfVxuK1xuIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KHJ4cS1cdTAwM2VuZXRkZXYpO1xuK1x0dTMyIGlwX3R5cGUsIG9mZmxvYWRfdHlwZSwgcGt0X2hkcl9sZW47XG4gXHR1MzIgc3dfY2ksIHN0YXR1cywgcGt0X2xlbiwgdmxhbl9sZW47XG4gXHRzdHJ1Y3QgaGluaWMzX3JxX2NxZSAqcnhfY3FlO1xuK1x0dTY0IHJ4X2J5dGVzID0gMDtcbiBcdHUzMiBudW1fd3FlID0gMDtcbiBcdGludCBucl9wa3RzID0gMDtcbiBcdHUxNiBudW1fbHJvO1xuQEAgLTU3NCwxMCArNjE2LDIwIEBAIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAocmVjdl9vbmVfcGt0KHJ4cSwgcnhfY3FlLCBwa3RfbGVuLCB2bGFuX2xlbiwgc3RhdHVzKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0cnhfYnl0ZXMgKz0gcGt0X2xlbjtcbiBcdFx0bnJfcGt0cysrO1xuIFx0XHRudW1fbHJvID0gUlFfQ1FFX1NUQVRVU19HRVQoc3RhdHVzLCBOVU1fTFJPKTtcbi1cdFx0aWYgKG51bV9scm8pXG4rXHRcdGlmIChudW1fbHJvKSB7XG4rXHRcdFx0b2ZmbG9hZF90eXBlID0gbGUzMl90b19jcHUocnhfY3FlLVx1MDAzZW9mZmxvYWRfdHlwZSk7XG4rXHRcdFx0aXBfdHlwZSA9IFJRX0NRRV9PRkZPTEFEX1RZUEVfR0VUKG9mZmxvYWRfdHlwZSxcbitcdFx0XHRcdFx0XHRcdCAgSVBfVFlQRSk7XG4rXHRcdFx0cGt0X2hkcl9sZW4gPSBpcF90eXBlID09IEhJTklDM19SWF9JUFY2X1BLVCA/XG4rXHRcdFx0XHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgOlxuK1x0XHRcdFx0ICAgICAgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0O1xuK1xuK1x0XHRcdHJ4X2J5dGVzICs9IChudW1fbHJvIC0gMSkgKiBwa3RfaGRyX2xlbjtcbiBcdFx0XHRudW1fd3FlICs9IGhpbmljM19nZXRfc2dlX251bShyeHEsIHBrdF9sZW4pO1xuK1x0XHR9XG4gXG4gXHRcdHJ4X2NxZS1cdTAwM2VzdGF0dXMgPSAwO1xuIFxuQEAgLTU4OCw1ICs2NDAsMTAgQEAgaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpXG4gXHRpZiAocnhxLVx1MDAzZWRlbHRhIFx1MDAzZT0gSElOSUMzX1JYX0JVRkZFUl9XUklURSlcbiBcdFx0aGluaWMzX3J4X2ZpbGxfYnVmZmVycyhyeHEpO1xuIFxuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbitcdHJ4cS1cdTAwM2VyeHFfc3RhdHMucGFja2V0cyArPSAodTY0KW5yX3BrdHM7XG4rXHRyeHEtXHUwMDNlcnhxX3N0YXRzLmJ5dGVzICs9IHJ4X2J5dGVzO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4rXG4gXHRyZXR1cm4gbnJfcGt0cztcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcbmluZGV4IDA2ZDFiMzI5OWU3Y2YuLjJhYjY5MWVkMTFhOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG5AQCAtOCw2ICs4LDE3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGltLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuIFxuKy8qIHJ4IGNxZSBjaGVja3N1bSBlcnIgKi9cbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lQX0NTVU1fRVJSICAgICAgQklUKDApXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9UQ1BfQ1NVTV9FUlIgICAgIEJJVCgxKVxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVURQX0NTVU1fRVJSICAgICBCSVQoMilcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lHTVBfQ1NVTV9FUlIgICAgQklUKDMpXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JQ01QVjRfQ1NVTV9FUlIgIEJJVCg0KVxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY2X0NTVU1fRVJSICBCSVQoNSlcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX1NDVFBfQ1JDX0VSUiAgICAgQklUKDYpXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9IV19DSEVDS19OT05FICAgIEJJVCg3KVxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIgICBCSVQoOClcbitcbiAjZGVmaW5lIFJRX0NRRV9PRkZPTEFEX1RZUEVfUEtUX1RZUEVfTUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKVxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9JUF9UWVBFX01BU0sgICAgICAgICAgICBHRU5NQVNLKDYsIDUpXG4gI2RlZmluZSBSUV9DUUVfT0ZGT0xBRF9UWVBFX1RVTk5FTF9QS1RfRk9STUFUX01BU0sgIEdFTk1BU0soMTEsIDgpXG5AQCAtMzksNyArNTAsNiBAQCBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyB7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgcnhfYnVmX2VtcHR5O1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3NrYl9lcnI7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgYWxsb2NfcnhfYnVmX2Vycjtcbi1cdHU2NCAgICAgICAgICAgICAgICAgICByZXN0b3JlX2Ryb3Bfc2dlO1xuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuIH07XG4gXG5AQCAtMTAxLDkgKzExMSw2IEBAIHN0cnVjdCBoaW5pYzNfcnhxIHtcbiBcdGRtYV9hZGRyX3QgICAgICAgICAgICAgY3FlX3N0YXJ0X3BhZGRyO1xuIFxuIFx0c3RydWN0IGRpbSAgICAgICAgICAgICBkaW07XG4tXG4tXHR1OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfY29hbGVzY190aW1lcl9jZmc7XG4tXHR1OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfcGVuZGluZ19saW1pdDtcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBcbiBzdHJ1Y3QgaGluaWMzX2R5bmFfcnhxX3JlcyB7XG5AQCAtMTIzLDYgKzEzMCw5IEBAIHZvaWQgaGluaWMzX2ZyZWVfcnhxc19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSxcbiBcdFx0XHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcbiBpbnQgaGluaWMzX2NvbmZpZ3VyZV9yeHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fcnEsXG4gXHRcdFx0ICB1MzIgcnFfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzICpyeHFzX3Jlcyk7XG4rXG4rdm9pZCBoaW5pYzNfcnhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLFxuK1x0XHRcdCAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKTtcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcbmluZGV4IDkzMDZiZjAwMjBjYWYuLjYyMTljYzEwOTE4ZGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG5AQCAtMjUsMTEgKzI1LDkgQEAgc3RhdGljIHZvaWQgaGluaWMzX3R4cV9jbGVhbl9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqdHhxX3N0YXRzKVxuIFx0dHhxX3N0YXRzLVx1MDAzZWRyb3BwZWQgPSAwO1xuIFxuIFx0dHhxX3N0YXRzLVx1MDAzZXNrYl9wYWRfZXJyID0gMDtcbi1cdHR4cV9zdGF0cy1cdTAwM2VmcmFnX2xlbl9vdmVyZmxvdyA9IDA7XG4gXHR0eHFfc3RhdHMtXHUwMDNlb2ZmbG9hZF9jb3dfc2tiX2VyciA9IDA7XG4gXHR0eHFfc3RhdHMtXHUwMDNlbWFwX2ZyYWdfZXJyID0gMDtcbiBcdHR4cV9zdGF0cy1cdTAwM2V1bmtub3duX3R1bm5lbF9wa3QgPSAwO1xuLVx0dHhxX3N0YXRzLVx1MDAzZWZyYWdfc2l6ZV9lcnIgPSAwO1xuIFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxX3N0YXRzLVx1MDAzZXN5bmNwKTtcbiB9XG4gXG5AQCAtOTcsOCArOTUsMTIgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfbWFwX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0ZG1hX2luZm9bMF0uZG1hID0gZG1hX21hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNrYi1cdTAwM2VkYXRhLFxuIFx0XHRcdFx0XHQgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7XG4tXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvWzBdLmRtYSkpXG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvWzBdLmRtYSkpIHtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbitcdFx0dHhxLVx1MDAzZXR4cV9zdGF0cy5tYXBfZnJhZ19lcnIrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuIFxuIFx0ZG1hX2luZm9bMF0ubGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcbiBcbkBAIC0xMTcsNiArMTE5LDkgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfbWFwX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSxcbiBcdFx0XHRcdFx0XHQgICAgIERNQV9UT19ERVZJQ0UpO1xuIFx0XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvW2lkeF0uZG1hKSkge1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4rXHRcdFx0dHhxLVx1MDAzZXR4cV9zdGF0cy5tYXBfZnJhZ19lcnIrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZXJyX3VubWFwX3BhZ2U7XG4gXHRcdH1cbkBAIC0yNjAsNiArMjY1LDkgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfY3N1bShzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBzdHJ1Y3QgaGluaWMzX3NxX3Rhc2sgKnRhc2ssXG4gXHRcdGlmIChsNF9wcm90byAhPSBJUFBST1RPX1VEUCB8fFxuIFx0XHQgICAgKChzdHJ1Y3QgdWRwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktXHUwMDNlZGVzdCAhPVxuIFx0XHQgICAgVlhMQU5fT0ZGTE9BRF9QT1JUX0xFKSB7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbitcdFx0XHR0eHEtXHUwMDNldHhxX3N0YXRzLnVua25vd25fdHVubmVsX3BrdCsrO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuIFx0XHRcdC8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovXG4gXHRcdFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC00MzMsNiArNDQxLDI3IEBAIHN0YXRpYyB1MzIgaGluaWMzX3R4X29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhpbmljM19zcV90YXNrICp0YXNrLFxuIFx0cmV0dXJuIG9mZmxvYWQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcGt0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0dTMyIGhkcl9sZW4sIHR4X2J5dGVzO1xuK1x0dW5zaWduZWQgc2hvcnQgcGt0cztcbitcbitcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcbitcdFx0aGRyX2xlbiA9IChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3MgLSAxKSAqXG4rXHRcdFx0ICBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XG4rXHRcdHR4X2J5dGVzID0gc2tiLVx1MDAzZWxlbiArIGhkcl9sZW47XG4rXHRcdHBrdHMgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3M7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eF9ieXRlcyA9IHNrYi1cdTAwM2VsZW4gXHUwMDNlIEVUSF9aTEVOID8gc2tiLVx1MDAzZWxlbiA6IEVUSF9aTEVOO1xuK1x0XHRwa3RzID0gMTtcbitcdH1cbitcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4rXHR0eHEtXHUwMDNldHhxX3N0YXRzLmJ5dGVzICs9IHR4X2J5dGVzO1xuK1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5wYWNrZXRzICs9IHBrdHM7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbit9XG4rXG4gc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2FuZF91cGRhdGVfc3Ffb3duZXIoc3RydWN0IGhpbmljM19pb19xdWV1ZSAqc3EsXG4gXHRcdFx0XHRcdCAgdTE2IGN1cnJfcGksIHUxNiB3cWViYl9jbnQpXG4ge1xuQEAgLTUzOSw4ICs1NjgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTUlOX1NLQl9MRU4pKSB7XG4tXHRcdGlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItXHUwMDNlbGVuKSlcbitcdFx0aWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi1cdTAwM2VsZW4pKSB7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbitcdFx0XHR0eHEtXHUwMDNldHhxX3N0YXRzLnNrYl9wYWRfZXJyKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4gXG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBNSU5fU0tCX0xFTjtcbiBcdH1cbkBAIC01NTcsMTEgKzU5MCwxNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHRoaW5pYzNfd3FfZnJlZV93cWViYnMoXHUwMDI2dHhxLVx1MDAzZXNxLVx1MDAzZXdxKSxcbiBcdFx0XHRcdFx0dHhxLVx1MDAzZXR4X3N0YXJ0X3RocnMpO1xuIFxuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuK1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLmJ1c3krKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbiBcdG9mZmxvYWQgPSBoaW5pYzNfdHhfb2ZmbG9hZChza2IsIFx1MDAyNnRhc2ssIFx1MDAyNnF1ZXVlX2luZm8sIHR4cSk7XG4gXHRpZiAodW5saWtlbHkob2ZmbG9hZCA9PSBISU5JQzNfVFhfT0ZGTE9BRF9JTlZBTElEKSkge1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuK1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLm9mZmxvYWRfY293X3NrYl9lcnIrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdGdvdG8gZXJyX2Ryb3BfcGt0O1xuIFx0fSBlbHNlIGlmICghb2ZmbG9hZCkge1xuIFx0XHR3cWViYl9jbnQgLT0gMTtcbkBAIC01OTUsNiArNjM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0b3BfdGhycyxcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0YXJ0X3RocnMpO1xuIFxuK1x0aGluaWMzX2dldF9wa3Rfc3RhdHModHhxLCBza2IpO1xuIFx0aGluaWMzX3ByZXBhcmVfc3FfY3RybChcdTAwMjZ3cWVfY29tYm8sIHF1ZXVlX2luZm8sIG51bV9zZ2UsIG93bmVyKTtcbiBcdGhpbmljM193cml0ZV9kYih0eHEtXHUwMDNlc3EsIDAsIERCX0NGTEFHX0RQX1NRLFxuIFx0XHRcdGhpbmljM19nZXRfc3FfbG9jYWxfcGkodHhxLVx1MDAzZXNxKSk7XG5AQCAtNjA0LDYgKzY0NCwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycl9kcm9wX3BrdDpcbiBcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gZXJyX291dDpcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4rXHR0eHEtXHUwMDNldHhxX3N0YXRzLmRyb3BwZWQrKztcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuK1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtNzU0LDYgKzc5OCwyMiBAQCBpbnQgaGluaWMzX2NvbmZpZ3VyZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fc3EsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rdm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxuK1x0XHRcdCAgc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICp0eHFfc3RhdHMgPSBcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzO1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZ0eHFfc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0XHRzdGF0cy1cdTAwM2VidXN5ID0gdHhxX3N0YXRzLVx1MDAzZWJ1c3k7XG4rXHRcdHN0YXRzLVx1MDAzZXNrYl9wYWRfZXJyID0gdHhxX3N0YXRzLVx1MDAzZXNrYl9wYWRfZXJyO1xuK1x0XHRzdGF0cy1cdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyID0gdHhxX3N0YXRzLVx1MDAzZW9mZmxvYWRfY293X3NrYl9lcnI7XG4rXHRcdHN0YXRzLVx1MDAzZW1hcF9mcmFnX2VyciA9IHR4cV9zdGF0cy1cdTAwM2VtYXBfZnJhZ19lcnI7XG4rXHRcdHN0YXRzLVx1MDAzZXVua25vd25fdHVubmVsX3BrdCA9IHR4cV9zdGF0cy1cdTAwM2V1bmtub3duX3R1bm5lbF9wa3Q7XG4rXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2dHhxX3N0YXRzLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuK31cbitcbiBib29sIGhpbmljM190eF9wb2xsKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIGludCBidWRnZXQpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHR4cS1cdTAwM2VuZXRkZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmhcbmluZGV4IDAwMTk0ZjJhMWJjYzEuLjZhYmY0NDNjYjkyN2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oXG5AQCAtMTA2LDExICsxMDYsOSBAQCBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgYnVzeTtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBkcm9wcGVkO1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIHNrYl9wYWRfZXJyO1xuLVx0dTY0ICAgICAgICAgICAgICAgICAgIGZyYWdfbGVuX292ZXJmbG93O1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIG9mZmxvYWRfY293X3NrYl9lcnI7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgbWFwX2ZyYWdfZXJyO1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIHVua25vd25fdHVubmVsX3BrdDtcbi1cdHU2NCAgICAgICAgICAgICAgICAgICBmcmFnX3NpemVfZXJyO1xuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuIH07XG4gXG5AQCAtMTU3LDYgKzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSxcbiBcdFx0XHQgIHUzMiBzcV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3R4cV9yZXMgKnR4cXNfcmVzKTtcbiBcbiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIGhpbmljM190eHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsXG4rXHRcdFx0ICBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqc3RhdHMpO1xuIGJvb2wgaGluaWMzX3R4X3BvbGwoc3RydWN0IGhpbmljM190eHEgKnR4cSwgaW50IGJ1ZGdldCk7XG4gdm9pZCBoaW5pYzNfZmx1c2hfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjA1LjIwMzgwMDI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNjMxODczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXcgUGF0Y2ggZm9yIHRoZSBIdWF3ZWkgaGluaWMzIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY2AgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIExvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSBlc3NlbnRpYWwgZXRodG9vbCBmdW5jdGlvbmFsaXR5OiBzdGF0aXN0aWNzLCBjb2FsZXNjZSBzZXR0aW5ncywgYW5kIGEgZmV3IHF1aWNrIGZpeGVzLiBUaGF0J3MgYSBnb29kIHN0YXJ0LiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIHRoZSBgaGluaWMzYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgdGhlIEh1YXdlaSBJbnRlbGxpZ2VudCBOSUMgZHJpdmVyLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGlzIHNvbWV0aGluZyBJIGNhbiBldmVuIHRvdWNoIGluIG15IHVzdWFsIFFFTVUgZW52aXJvbm1lbnQ/XG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHBoeXNpY2FsIE5JQyBkcml2ZXIgb3IgaWYgdGhlcmUncyBhbnkgZW11bGF0aW9uIGF2YWlsYWJsZS4gXCJIdWF3ZWkgSW50ZWxsaWdlbnQgTklDXCIg4oCTIHRoYXQgcGhyYXNlIHVzdWFsbHkgc2NyZWFtcyAqcGh5c2ljYWwgaGFyZHdhcmUqLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCB0cnV0aCBsaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA1NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjEwLjYyMDEyMTkzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTc5MTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElOSUMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc6Njpjb25maWcgSElOSUMzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkh1YXdlaSAzcmQgZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChISU5JQzMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjEwLjY4MTkxNzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNDc1NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWdgIGZpbGUsIGFzIGlmIGl0J3MgcnVubmluZyB0aHJvdWdoIG15IGV4cGVydCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBIdWF3ZWkgaGluaWMzIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGlzIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIG9wdGlvbnMgaXQgcHJvdmlkZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYSBkcml2ZXIncyBmZWF0dXJlIHNldCBsYWlkIG91dCBpbiBhIGhpZXJhcmNoaWNhbCBmYXNoaW9uLCBjb250cm9sbGVkIGJ5IHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbkZpcnN0LCBJJ20gc2Nhbm5pbmcgZm9yIHRoZSBnZW5lcmFsIGBjb25maWdgIGJsb2NrIOKAkyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRyaXZlciBpcyBkZWZpbmVkLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgbWFpbiBzeW1ib2wsIGxpa2UgYEhJTklDM2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCByZXByZXNlbnRzIHRoZSByb290IGVuYWJsaW5nIHRoZSBkcml2ZXIuIFRoZW4sIEnigJlsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIGRyaXZlciBiZWNvbWVzIHJlbGV2YW50PyBUaGluZ3MgbGlrZSBQQ0kgc3VwcG9ydCwgRE1BIGVuZ2luZSBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgbmV0d29yay1yZWxhdGVkIHN1YnN5c3RlbXMgYXJlIGFsbCBvbiBteSByYWRhci5cblxuTmV4dCwgSSdsbCBiZSBkcmlsbGluZyBkb3duIGludG8gdGhlIHNwZWNpZmljIGBjb25maWdgIG9wdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgZmVhdHVyZXMgdGhlIGRyaXZlciBvZmZlcnMuIEFyZSB0aGVyZSBkaWZmZXJlbnQgaGFyZHdhcmUgZ2VuZXJhdGlvbnMgc3VwcG9ydGVkPyBBcmUgdGhlcmUgZGVidWdnaW5nIG9wdGlvbnM/IEFyZSB0aGVyZSBwZXJmb3JtYW5jZSB0dW5hYmxlcyBsaWtlIGludGVycnVwdCBjb2FsZXNjaW5nIG9yIGZsb3cgY29udHJvbCBvcHRpb25zPyBJJ20gc2Nhbm5pbmcgZm9yIGtleXdvcmRzIHRoYXQgaGludCBhdCB0aGVzZSBjYXBhYmlsaXRpZXMuIEknbSBsb29raW5nIGZvciBjbGVhciwgY29uY2lzZSBkZXNjcmlwdGlvbnMsIGJ1dCBJJ20gYWxzbyBtaW5kZnVsIG9mIHBvdGVudGlhbCBjb21wbGV4aXRpZXMuIE9mdGVuLCB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscyB3aGVuIGl0IGNvbWVzIHRvIE5JQyBjb25maWd1cmF0aW9uLlxuXG5JIGV4cGVjdCB0byBzZWUgYGJvb2xgLCBgdHJpc3RhdGVgLCBvciBgaW50YCBvcHRpb25zLCBhbmQgSSdsbCBiZSBhc3Nlc3NpbmcgaG93IHRoZXNlIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlLiBJZiB0aGVyZSBhcmUgYWR2YW5jZWQgZmVhdHVyZXMsIEknbSBodW50aW5nIGZvciB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXM7IHRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmUgaW50ZXJhY3Rpb25zLiBJdCBpcyBub3QgdW5jb21tb24gZm9yIGRyaXZlcnMgdG8gaGF2ZSBmZWF0dXJlIG9wdGlvbnMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucywgYW5kIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgdGhvc2UuXG5cbkZpbmFsbHksIEnigJlsbCBsb29rIGZvciBhbnkgXCJoZWxwXCIgdGV4dCDigJMgdGhpcyBpcyBnb2xkIGZvciBxdWlja2x5IHVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGUgY2xhcml0eSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZSBcImhlbHBcIiB0ZXh0IGFyZSBhIGdvb2QgaW5kaWNhdG9yIG9mIHRoZSBtYWludGFpbmVycycgZGlsaWdlbmNlIGFuZCB0aGUgb3ZlcmFsbCBxdWFsaXR5IG9mIHRoZSBkcml2ZXIncyBjb25maWd1cmF0aW9uLiBJ4oCZbSBhbHNvIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlZmF1bHQgdmFsdWVzIOKAkyBhcmUgdGhleSBzZW5zaWJsZSBmb3IgdGhlIGdlbmVyYWwgY2FzZSwgb3IgYXJlIHRoZXkgZ2VhcmVkIHRvd2FyZCBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVudmlyb25tZW50P1xuXG5VbHRpbWF0ZWx5LCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBibHVlcHJpbnQgZm9yIGhvdyB0aGUgaGluaWMzIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIGtlcm5lbC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGFuZCBhY2N1cmF0ZWx5IGNvbXByZWhlbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBwaGlsb3NvcGh5IGJlaGluZCB0aGUgZHJpdmVyJ3MgYnVpbGQtdGltZSBzZXR0aW5ncy4gSXQncyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2Ygd2hhdCdzIHBvc3NpYmxlLCBhbmQgYmVpbmcgYWJsZSB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBob3cgdG8gY29uZmlndXJlIHRoaXMgZHJpdmVyIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU0NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjE2LjIwNjY3NjI3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSHVhd2VpIGRyaXZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBISU5JQzNcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIdWF3ZWkgM3JkIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoSElOSUMzKSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0IyBGaWVsZHMgb2YgSFcgYW5kIG1hbmFnZW1lbnQgc3RydWN0dXJlcyBhcmUgbGl0dGxlIGVuZGlhbiBhbmQgYXJlXFxuICAgOTpcXHRcXHQjIGN1cnJlbnRseSBub3QgY29udmVydGVkXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uICFDUFVfQklHX0VORElBTlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG4gIDEzOlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuICAxNDpcXHRcXHRzZWxlY3QgRElNTElCXFxuICAxNTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEhpTklDIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyIChISU5JQzMpLlxcbiAgMTg6XFx0XFx0ICBUaGUgZHJpdmVyIGlzIHN1cHBvcnRlZCBvbiBYODZfNjQgYW5kIEFSTTY0IGxpdHRsZSBlbmRpYW4uXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gIDIxOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoaW5pYzMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjE2LjIwNjc0MzQ3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1OTk4MDU5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBIaW5pYzMgRHJpdmVyIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGEgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHNvbWV0aGluZyByZWxhdGVkIHRvIGBoaW5pYzNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGlzIGRyaXZlciBpcyBldmVuIHJlbGV2YW50IGZvciBmdXp6aW5nLCBhbmQgdGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBjbGVhciBhYm91dCB0aGF0LlxuXG5JIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBoaW5pYzNgIGhhcyBhbnkgUUVNVSBlbXVsYXRpb24uIFVzdWFsbHksIHRoZXNlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IGZvciBTbWFydE5JQ3MsIGRvbid0IHBsYXkgd2VsbCB3aXRoIHN0YW5kYXJkIFFFTVUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3MgbGlrZWx5IG5vdCBlbXVsYXRlZC4gVGhlbiwgSSBub3RpY2UgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIG1lbnRpb25zIGBldGh0b29sYCBzdGF0cyBhbmQgY29hbGVzY2Ugc2V0dGluZ3MuIE9rYXksIGBldGh0b29sYCBzdGF0cyBhcmUgYmFzaWNhbGx5IGp1c3QgcmVhZHMgZnJvbSB0aGUgaGFyZHdhcmUsIG5vdCBjb21wbGV4IGxvZ2ljLCBhbmQgY29hbGVzY2Ugc2V0dGluZ3MganVzdCBpbnZvbHZlIHdyaXRpbmcgdG8gaGFyZHdhcmUgcmVnaXN0ZXJzLiBJIGdldCB0aGF0LlxuXG5CdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBndWlkZWxpbmVzLiBMZXQgbWUgY2hlY2sgdGhlIHJ1bGVz4oCmIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSB3aXRoaW4gXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc+KApiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIHNob3VsZCBiZSBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIHByZXR0eSBjb25maWRlbnQgdGhhdCBgaGluaWMzYCAoSHVhd2VpJ3MgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4gSXQgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgZGVwZW5kcyBvbiBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBTaW5jZSB0aGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIHRoYXQgaXMgKmRlZmluaXRlbHkqIHRpZWQgdG8gYSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkLCBhbmQgaXMgbGlrZWx5IG5vdCB0byBydW4gdW5kZXIgUUVNVSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MDksIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MjE6MjQuODA2NTUzNDE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoaW5pYzMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgKEh1YXdlaSAzcmQgZ2VuIE5ldHdvcmsgQWRhcHRlcikuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQWRkaXRpb25hbGx5LCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkIGV0aHRvb2wgc3RhdGlzdGljcyBhbmQgY29hbGVzY2Ugc2V0dGluZ3MsIHdoaWNoIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MjE6MjQuODA2NTg1NTI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhtwpc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 02:19:14 +0000 UTC FinishedAt: 2026-08-17 02:21:25 +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+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhpbmljMyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBhZGFwdGVyIGRyaXZlciAoSHVhd2VpIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGQgZXRodG9vbCBzdGF0aXN0aWNzIGFuZCBjb2FsZXNjZSBzZXR0aW5ncywgd2hpY2ggaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWVlZjYzM2EwNjI0ZDBlNDI5MTE2YTQwMWRmZDI2MjdiMzlhZjE0OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDAyOjIxOjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY1xuaW5kZXggOTBmYzE2Mjg4ZGU5NS4uODlhN2JhMjExMTczMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jXG5AQCAtMTcsNiAmIzQzOzE3LDExIEBAXG4gI2luY2x1ZGUgXCYjMzQ7aGluaWMzX25pY19jZmcuaFwmIzM0O1xuIFxuICNkZWZpbmUgSElOSUMzX01HTVRfVkVSU0lPTl9NQVhfTEVOICAgICAzMlxuJiM0MzsvKiBDb2FsZXNjZSB0aW1lIHByb3BlcnRpZXMgaW4gbWljcm9zZWNvbmRzICovXG4mIzQzOyNkZWZpbmUgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUICAgICA4XG4mIzQzOyNkZWZpbmUgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQgICAgICAgICA1XG4mIzQzOyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVQgICAgICAoMjU1ICogQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKVxuJiM0MzsjZGVmaW5lIENPQUxFU0NFX01BWF9USU1FUl9DRkcgICAgICAgICAgKDI1NSAqIENPQUxFU0NFX1RJTUVSX0NGR19VTklUKVxuIFxuIHN0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKVxuQEAgLTQwOSwxNCAmIzQzOzQxNCw3OTEgQEAgaGluaWMzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgaGluaWMzX3N0YXRzIHtcbiYjNDM7XHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcbiYjNDM7XHRpbnQgIG9mZnNldDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSElOSUMzX1NUQVRfU0laRV9DSEVDSyh0eXBlLCBtZW1iZXIpIFxcXG4mIzQzO1x0QlVJTERfQlVHX09OX1pFUk8oc2l6ZW9mX2ZpZWxkKHR5cGUsIG1lbWJlcikgIT0gc2l6ZW9mKHU2NCkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhJTklDM19SWFFfU1RBVChfc3RhdF9pdGVtKSB7IFxcXG4mIzQzO1x0Lm5hbWUgICA9IFwmIzM0O3J4cSVkX1wmIzM0OyNfc3RhdF9pdGVtLCBcXFxuJiM0MztcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbiYjNDM7XHRcdCAgJiM0MzsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGhpbmljM19yeHFfc3RhdHMsIFxcXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuJiM0MztcdC5uYW1lICAgPSBcJiMzNDt0eHElZF9cJiMzNDsjX3N0YXRfaXRlbSwgXFxcbiYjNDM7XHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGhpbmljM190eHFfc3RhdHMsIF9zdGF0X2l0ZW0pIFxcXG4mIzQzO1x0XHQgICYjNDM7IDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBcXFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIF9zdGF0X2l0ZW0pIFxcXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19yeF9xdWV1ZV9zdGF0c1tdID0ge1xuJiM0MztcdEhJTklDM19SWFFfU1RBVChjc3VtX2Vycm9ycyksXG4mIzQzO1x0SElOSUMzX1JYUV9TVEFUKG90aGVyX2Vycm9ycyksXG4mIzQzO1x0SElOSUMzX1JYUV9TVEFUKHJ4X2J1Zl9lbXB0eSksXG4mIzQzO1x0SElOSUMzX1JYUV9TVEFUKGFsbG9jX3NrYl9lcnIpLFxuJiM0MztcdEhJTklDM19SWFFfU1RBVChhbGxvY19yeF9idWZfZXJyKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM190eF9xdWV1ZV9zdGF0c1tdID0ge1xuJiM0MztcdEhJTklDM19UWFFfU1RBVChidXN5KSxcbiYjNDM7XHRISU5JQzNfVFhRX1NUQVQoc2tiX3BhZF9lcnIpLFxuJiM0MztcdEhJTklDM19UWFFfU1RBVChvZmZsb2FkX2Nvd19za2JfZXJyKSxcbiYjNDM7XHRISU5JQzNfVFhRX1NUQVQobWFwX2ZyYWdfZXJyKSxcbiYjNDM7XHRISU5JQzNfVFhRX1NUQVQodW5rbm93bl90dW5uZWxfcGt0KSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSElOSUMzX0ZVTkNfU1RBVChfc3RhdF9pdGVtKSB7XHRcXFxuJiM0MztcdC5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXFxcbiYjNDM7XHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzLCBfc3RhdF9pdGVtKSBcXFxuJiM0MztcdFx0ICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIFxcXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBoaW5pYzNfc3RhdHMgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW10gPSB7XG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF91bmljYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9tdWx0aWNhc3RfcGt0c192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9tdWx0aWNhc3RfYnl0ZXNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0KSxcbiYjNDM7XG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQocnhfdW5pY2FzdF9ieXRlc192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfcGt0c192cG9ydCksXG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfYnl0ZXNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0KSxcbiYjNDM7XG4mIzQzO1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9kaXNjYXJkX3Zwb3J0KSxcbiYjNDM7XHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Rpc2NhcmRfdnBvcnQpLFxuJiM0MztcdEhJTklDM19GVU5DX1NUQVQodHhfZXJyX3Zwb3J0KSxcbiYjNDM7XHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Vycl92cG9ydCksXG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhJTklDM19QT1JUX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuJiM0MztcdC5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXFxcbiYjNDM7XHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbiYjNDM7XHRcdCAgJiM0MzsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgXFxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcG9ydF9zdGF0c1tdID0ge1xuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2ZyYWdtZW50X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3VuZGVyc2l6ZV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcm1pbl9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9qYWJiZXJfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfYmFkX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9vY3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF90b3RhbF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmlfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkwX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkxX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkyX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkzX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk0X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk1X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk2X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk3X3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Vycl9hbGxfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfZ29vZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9mcm9tX2FwcF9iYWRfcGt0X251bSksXG4mIzQzO1xuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZGVybWluX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X2JhZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9iYWRfb2N0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdG90YWxfcGt0X251bSksXG4mIzQzO1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5pX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpM19wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpN19wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW0pLFxuJiM0MztcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtKSxcbiYjNDM7XHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmZpbHRlcl9wa3RfbnVtKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGluaWMzX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBzc2V0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRpbnQgY291bnQsIHFfbnVtO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdHFfbnVtID0gbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzO1xuJiM0MztcdFx0Y291bnQgPSBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cykgJiM0MztcbiYjNDM7XHRcdFx0KEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKSAmIzQzO1xuJiM0MztcdFx0XHQgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpKSAqXG4mIzQzO1x0XHRcdHFfbnVtO1xuJiM0MztcbiYjNDM7XHRcdGlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuJiM0MztcdFx0XHRjb3VudCAmIzQzOz0gQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2Rydl9xdWV1ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHR4cV9zdGF0cyA9IHt9O1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzIHJ4cV9zdGF0cyA9IHt9O1xuJiM0MztcdHUxNiBpID0gMCwgaiwgcWlkO1xuJiM0MztcdGNoYXIgKnA7XG4mIzQzO1xuJiM0MztcdGZvciAocWlkID0gMDsgcWlkIFx1MDAzYyBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IHFpZCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghbmljX2Rldi1cdTAwM2V0eHFzKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRoaW5pYzNfdHhxX2dldF9zdGF0cyhcdTAwMjZuaWNfZGV2LVx1MDAzZXR4cXNbcWlkXSwgXHUwMDI2dHhxX3N0YXRzKTtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHAgPSAoY2hhciAqKVx1MDAyNnR4cV9zdGF0cyAmIzQzO1xuJiM0MztcdFx0XHQgICAgaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcbiYjNDM7XHRcdFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGkgPSBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHMgKiBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7XG4mIzQzO1x0Zm9yIChxaWQgPSAwOyBxaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgcWlkJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuaWNfZGV2LVx1MDAzZXJ4cXMpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGhpbmljM19yeHFfZ2V0X3N0YXRzKFx1MDAyNm5pY19kZXYtXHUwMDNlcnhxc1txaWRdLCBcdTAwMjZyeHFfc3RhdHMpO1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpOyBqJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0cCA9IChjaGFyICopXHUwMDI2cnhxX3N0YXRzICYjNDM7XG4mIzQzO1x0XHRcdCAgICBoaW5pYzNfcnhfcXVldWVfc3RhdHNbal0ub2Zmc2V0O1xuJiM0MztcdFx0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBoaW5pYzNfZ2V0X2V0aHRvb2xfcG9ydF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1NjQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xuJiM0MztcdHUxNiBpID0gMCwgajtcbiYjNDM7XHRjaGFyICpwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHBzID0ga21hbGxvY19vYmooKnBzKTtcbiYjNDM7XHRpZiAoIXBzKVxuJiM0MztcdFx0Z290byBlcnJfemVyb19zdGF0cztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHMpO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgcG9ydCBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gZXJyX3plcm9fc3RhdHM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwID0gKGNoYXIgKilwcyAmIzQzOyBoaW5pYzNfcG9ydF9zdGF0c1tqXS5vZmZzZXQ7XG4mIzQzO1x0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaTtcbiYjNDM7XG4mIzQzO2Vycl96ZXJvX3N0YXRzOlxuJiM0MztcdG1lbXNldChcdTAwMjZkYXRhW2ldLCAwLCBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKSAqIHNpemVvZigqZGF0YSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaSAmIzQzOyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XG4mIzQzO1x0dTE2IGkgPSAwLCBqO1xuJiM0MztcdGNoYXIgKnA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF92cG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgaGluaWMzX2dsb2JhbF9mdW5jX2lkKG5pY19kZXYtXHUwMDNlaHdkZXYpLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2dnBvcnRfc3RhdHMpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfZnVuY3Rpb25fc3RhdHMpOyBqJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHAgPSAoY2hhciAqKVx1MDAyNnZwb3J0X3N0YXRzICYjNDM7IGhpbmljM19mdW5jdGlvbl9zdGF0c1tqXS5vZmZzZXQ7XG4mIzQzO1x0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cdTAwM2Vod2RldikpXG4mIzQzO1x0XHRpICYjNDM7PSBoaW5pYzNfZ2V0X2V0aHRvb2xfcG9ydF9zdGF0cyhuZXRkZXYsIGRhdGEgJiM0MzsgaSk7XG4mIzQzO1xuJiM0MztcdGhpbmljM19nZXRfZHJ2X3F1ZXVlX3N0YXRzKG5ldGRldiwgZGF0YSAmIzQzOyBpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBoaW5pYzNfZ2V0X2h3X3N0YXRzX3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTE2IGksIGNudCA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG1lbWNweShwLCBoaW5pYzNfZnVuY3Rpb25fc3RhdHNbaV0ubmFtZSwgRVRIX0dTVFJJTkdfTEVOKTtcbiYjNDM7XHRcdHAgJiM0Mzs9IEVUSF9HU1RSSU5HX0xFTjtcbiYjNDM7XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LVx1MDAzZWh3ZGV2KSkge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdG1lbWNweShwLCBoaW5pYzNfcG9ydF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuJiM0MztcdFx0XHRwICYjNDM7PSBFVEhfR1NUUklOR19MRU47XG4mIzQzO1x0XHRcdGNudCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gY250O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3FwX3N0YXRzX3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTggKmRhdGEgPSBwO1xuJiM0MztcdHUxNiBpLCBqO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSxcbiYjNDM7XHRcdFx0XHRcdGhpbmljM190eF9xdWV1ZV9zdGF0c1tqXS5uYW1lLCBpKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3J4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLFxuJiM0MztcdFx0XHRcdFx0aGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdGNoYXIgKnAgPSAoY2hhciAqKWRhdGE7XG4mIzQzO1x0dTE2IG9mZnNldDtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdG9mZnNldCA9IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhuZXRkZXYsIHApO1xuJiM0MztcdFx0aGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBwICYjNDM7IG9mZnNldCAqIEVUSF9HU1RSSU5HX0xFTik7XG4mIzQzO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7SW52YWxpZCBzdHJpbmcgc2V0ICV1LlxcblwmIzM0Oywgc3RyaW5nc2V0KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX3BoeV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX3BoeV9zdGF0cyAqcGh5X3N0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4mIzQzO1x0aWYgKCFwcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHMpO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIHBoeSBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBoeV9zdGF0cy1cdTAwM2VTeW1ib2xFcnJvckR1cmluZ0NhcnJpZXIgPSBwcy1cdTAwM2VtYWNfcnhfc3ltX2Vycl9wa3RfbnVtO1xuJiM0MztcbiYjNDM7XHRrZnJlZShwcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4mIzQzO1x0aWYgKCFwcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0a2ZyZWUocHMpO1xuJiM0MztcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIG1hYyBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VGcmFtZXNUcmFuc21pdHRlZE9LID0gcHMtXHUwMDNlbWFjX3R4X2dvb2RfcGt0X251bTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVx1MDAzZW1hY19yeF9nb29kX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9ycyA9IHBzLVx1MDAzZW1hY19yeF9mY3NfZXJyX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZU9jdGV0c1RyYW5zbWl0dGVkT0sgPSBwcy1cdTAwM2VtYWNfdHhfZ29vZF9vY3RfbnVtO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X2dvb2Rfb2N0X251bTtcbiYjNDM7XHRtYWNfc3RhdHMtXHUwMDNlTXVsdGljYXN0RnJhbWVzWG1pdHRlZE9LID0gcHMtXHUwMDNlbWFjX3R4X211bHRpX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHBzLVx1MDAzZW1hY190eF9icm9hZF9wa3RfbnVtO1xuJiM0MztcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X211bHRpX3BrdF9udW07XG4mIzQzO1x0bWFjX3N0YXRzLVx1MDAzZUJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0sgPSBwcy1cdTAwM2VtYWNfcnhfYnJvYWRfcGt0X251bTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHBzID0ga21hbGxvY19vYmooKnBzKTtcbiYjNDM7XHRpZiAoIXBzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRrZnJlZShwcyk7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIGdldCBldGggY3RybCBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0cmxfc3RhdHMtXHUwMDNlTUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID0gcHMtXHUwMDNlbWFjX3R4X2NvbnRyb2xfcGt0X251bTtcbiYjNDM7XHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHBzLVx1MDAzZW1hY19yeF9jb250cm9sX3BrdF9udW07XG4mIzQzO1xuJiM0MztcdGtmcmVlKHBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBoaW5pYzNfcm1vbl9yYW5nZXNbXSA9IHtcbiYjNDM7XHR7ICAgICAwLCAgICA2NCB9LFxuJiM0MztcdHsgICAgNjUsICAgMTI3IH0sXG4mIzQzO1x0eyAgIDEyOCwgICAyNTUgfSxcbiYjNDM7XHR7ICAgMjU2LCAgIDUxMSB9LFxuJiM0MztcdHsgICA1MTIsICAxMDIzIH0sXG4mIzQzO1x0eyAgMTAyNCwgIDE1MTggfSxcbiYjNDM7XHR7ICAxNTE5LCAgMjA0NyB9LFxuJiM0MztcdHsgIDIwNDgsICA0MDk1IH0sXG4mIzQzO1x0eyAgNDA5NiwgIDgxOTEgfSxcbiYjNDM7XHR7ICA4MTkyLCAgOTIxNiB9LFxuJiM0MztcdHsgIDkyMTcsIDEyMjg3IH0sXG4mIzQzO1x0e31cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbiYjNDM7XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuJiM0MztcdGlmICghcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtmcmVlKHBzKTtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBybW9uIHN0YXRzIGZyb20gZndcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0c1x0PSBwcy1cdTAwM2VtYWNfcnhfdW5kZXJzaXplX3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzXHQ9IHBzLVx1MDAzZW1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlZnJhZ21lbnRzXHRcdD0gcHMtXHUwMDNlbWFjX3J4X2ZyYWdtZW50X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzXHRcdD0gcHMtXHUwMDNlbWFjX3J4X2phYmJlcl9wa3RfbnVtO1xuJiM0MztcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMF1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfNjRfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzFdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzY1XzEyN19vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbM11cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNF1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfNTEyXzEwMjNfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbNl1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs3XVx0XHQ9IHBzLVx1MDAzZW1hY19yeF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzhdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbOV1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsxMF1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfOTIxN18xMjI4N19vY3RfcGt0X251bTtcbiYjNDM7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzBdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzY0X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFsxXVx0XHQ9IHBzLVx1MDAzZW1hY190eF82NV8xMjdfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzEyOF8yNTVfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzNdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzI1Nl81MTFfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzRdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XVx0XHQ9IHBzLVx1MDAzZW1hY190eF8xMDI0XzE1MThfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzZdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzE1MTlfMjA0N19vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbN11cdFx0PSBwcy1cdTAwM2VtYWNfdHhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs4XVx0XHQ9IHBzLVx1MDAzZW1hY190eF80MDk2XzgxOTFfb2N0X3BrdF9udW07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzldXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzgxOTJfOTIxNl9vY3RfcGt0X251bTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMTBdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4mIzQzO1xuJiM0MztcdCpyYW5nZXMgPSBoaW5pYzNfcm1vbl9yYW5nZXM7XG4mIzQzO1xuJiM0MztcdGtmcmVlKHBzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuJiM0MztcdGlmICghcHMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtmcmVlKHBzKTtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBwYXVzZSBzdGF0cyBmcm9tIGZ3XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBhdXNlX3N0YXRzLVx1MDAzZXR4X3BhdXNlX2ZyYW1lcyA9IHBzLVx1MDAzZW1hY190eF9wYXVzZV9udW07XG4mIzQzO1x0cGF1c2Vfc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcHMtXHUwMDNlbWFjX3J4X3BhdXNlX251bTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHFfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpjb2FsLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICppbnRyX2NvYWw7XG4mIzQzO1x0c3RydWN0IGhpbmljM19pbnRlcnJ1cHRfaW5mbyBpbmZvID0ge307XG4mIzQzO1x0Ym9vbCBpc19hY3RpdmU7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdGlzX2FjdGl2ZSA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcdTAwMjZuaWNfZGV2LVx1MDAzZWZsYWdzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAocV9pZCBcdTAwM2MgbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2FjdGl2ZSkge1xuJiM0MztcdFx0aW5mby5tc2l4X2luZGV4ID1cbiYjNDM7XHRcdFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4O1xuJiM0MztcdFx0aW5mby5yZXNlbmRfdGltZXJfY2ZnID1cbiYjNDM7XHRcdFx0bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoaXNfYWN0aXZlKSB7XG4mIzQzO1x0XHRpbmZvLmludGVycnVwdF9jb2FsZXNjX3NldCA9IDE7XG4mIzQzO1x0XHRpbmZvLmNvYWxlc2NfdGltZXJfY2ZnID0gY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmc7XG4mIzQzO1x0XHRpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLVx1MDAzZXBlbmRpbmdfbGltaXQ7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtXHUwMDNlaHdkZXYsIGluZm8pO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBcJiMzNDtGYWlsZWQgdG8gc2V0IHF1ZXVlJXUgY29hbGVzY2VcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcV9pZCk7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0aW50cl9jb2FsID0gXHUwMDI2bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdO1xuJiM0MztcdGludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcgPSBjb2FsLVx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZztcbiYjNDM7XHRpbnRyX2NvYWwtXHUwMDNlcGVuZGluZ19saW1pdCA9IGNvYWwtXHUwMDNlcGVuZGluZ19saW1pdDtcbiYjNDM7XHRpbnRyX2NvYWwtXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3cgPSBjb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93O1xuJiM0MztcdGludHJfY29hbC1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2hpZ2ggPSBjb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaDtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaXNfY29hbGVzY2VfZXhjZWVkX2xpbWl0KGNvbnN0IHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHRcdHUzMiB2YWx1ZTtcbiYjNDM7XHRcdHUzMiBsaW1pdDtcbiYjNDM7XHR9IGNvYWxlc2NlX2xpbWl0c1tdID0ge1xuJiM0MztcdFx0e1wmIzM0O3J4X2NvYWxlc2NlX3VzZWNzXCYjMzQ7LFxuJiM0MztcdFx0IGNvYWwtXHUwMDNlcnhfY29hbGVzY2VfdXNlY3MsXG4mIzQzO1x0XHQgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGR30sXG4mIzQzO1x0XHR7XCYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNcJiMzNDssXG4mIzQzO1x0XHQgY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyxcbiYjNDM7XHRcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXG4mIzQzO1x0XHR7XCYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93XCYjMzQ7LFxuJiM0MztcdFx0IGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuJiM0MztcdFx0IENPQUxFU0NFX01BWF9QRU5ESU5HX0xJTUlUfSxcbiYjNDM7XHRcdHtcJiMzNDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoXCYjMzQ7LFxuJiM0MztcdFx0IGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbiYjNDM7XHRcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY29hbGVzY2VfbGltaXRzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChjb2FsZXNjZV9saW1pdHNbaV0udmFsdWUgXHUwMDNlIGNvYWxlc2NlX2xpbWl0c1tpXS5saW1pdCkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7JXMgb3V0IG9mIHJhbmdlICVkLSVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGNvYWxlc2NlX2xpbWl0c1tpXS5uYW1lLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGNvYWxlc2NlX2xpbWl0c1tpXS5saW1pdCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29uc3Qgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb2FsLCBleHRhY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgXHUwMDNlXG4mIzQzO1x0ICAgIGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O2ludmFsaWQgY29hbGVzY2UgZnJhbWUgaGlnaCAldSwgbG93ICV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgICBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93KTtcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0IHUzMiBpdGVtLCB1MzIgdW5pdCwgY29uc3QgY2hhciAqc3RyKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGl0ZW0gJSB1bml0KVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcJiMzNDslcyBpbiAldSB1bml0cywgY2hhbmdlIHRvICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgc3RyLCB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0FMSUdOKG1lbWJlciwgdW5pdCkgXFxcbiYjNDM7XHRjaGVja19jb2FsZXNjZV9hbGlnbihuZXRkZXYsIG1lbWJlciwgdW5pdCwgI21lbWJlcilcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2NoYW5nZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0XHQgICB1MzIgaXRlbSwgdTMyIHVuaXQsIHUzMiBvcmlfdmFsLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm9ial9zdHIsIGNvbnN0IGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdGlmICgoaXRlbSAvIHVuaXQpICE9IG9yaV92YWwpXG4mIzQzO1x0XHRuZXRkZXZfZGJnKG5ldGRldiwgXCYjMzQ7Q2hhbmdlICVzIGZyb20gJXUgdG8gJXUgJXNcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHN0ciwgb3JpX3ZhbCAqIHVuaXQsIGl0ZW0gLSBpdGVtICUgdW5pdCwgb2JqX3N0cik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgQ0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChtZW1iZXIsIHVuaXQsIG9yaV92YWwsIG9ial9zdHIpIFxcXG4mIzQzO1x0Y2hlY2tfY29hbGVzY2VfY2hhbmdlZChuZXRkZXYsIG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0ciwgI21lbWJlcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGluaWMzX3NldF9od19jb2FsX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvbGRfY29hbDtcbiYjNDM7XHR1MTYgaSwgajtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRvbGRfY29hbCA9IGtjYWxsb2MobmljX2Rldi1cdTAwM2VtYXhfcXBzLCBzaXplb2YoKm9sZF9jb2FsKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFvbGRfY29hbClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmljX2Rldi1cdTAwM2VtYXhfcXBzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdG9sZF9jb2FsW2ldID0gbmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW2ldO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZW1heF9xcHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRlcnIgPSBoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKG5ldGRldiwgaSwgaW50cl9jb2FsLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0Z290byByb2xsYmFjaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKG9sZF9jb2FsKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JvbGxiYWNrOlxuJiM0MztcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0aGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShuZXRkZXYsIGosIFx1MDAyNm9sZF9jb2FsW2pdLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0a2ZyZWUob2xkX2NvYWwpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGluaWMzX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICppbnRlcnJ1cHRfaW5mbztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpbnRlcnJ1cHRfaW5mbyA9IFx1MDAyNm5pY19kZXYtXHUwMDNlaW50cl9jb2FsZXNjZVswXTtcbiYjNDM7XG4mIzQzO1x0Y29hbC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSBSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKTtcbiYjNDM7XG4mIzQzO1x0Y29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgPVxuJiM0MztcdFx0aW50ZXJydXB0X2luZm8tXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3cgKlxuJiM0MztcdFx0Q09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUO1xuJiM0MztcbiYjNDM7XHRjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggPVxuJiM0MztcdFx0aW50ZXJydXB0X2luZm8tXHUwMDNlcnhfcGVuZGluZ19saW1pdF9oaWdoICpcbiYjNDM7XHRcdENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVDtcbiYjNDM7XG4mIzQzO1x0LyogVFgvUlggdXNlcyB0aGUgc2FtZSBpbnRlcnJ1cHQuXG4mIzQzO1x0ICogU28gd2Ugb25seSBkZWNsYXJlIFJYIGV0aHRvb2xfY29hbGVzY2UgcGFyYW1ldGVycy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzID0gaW50ZXJydXB0X2luZm8tXHUwMDNlY29hbGVzY2VfdGltZXJfY2ZnICpcbiYjNDM7XHRcdFx0XHQgIENPQUxFU0NFX1RJTUVSX0NGR19VTklUO1xuJiM0MztcbiYjNDM7XHRjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID0gaW50ZXJydXB0X2luZm8tXHUwMDNlcGVuZGluZ19saW1pdCAqXG4mIzQzO1x0XHRcdFx0XHRDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoaW5pYzNfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9jb2FsZXNjZSAqa2VybmVsX2NvYWwsXG4mIzQzO1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKm9yaV9pbnRyX2NvYWw7XG4mIzQzO1x0c3RydWN0IGhpbmljM19pbnRyX2NvYWxfaW5mbyBpbnRyX2NvYWwgPSB7fTtcbiYjNDM7XHRjb25zdCBjaGFyICpvYmpfc3RyID0gXCYjMzQ7Zm9yIG5ldGRldlwmIzM0OztcbiYjNDM7XHRib29sIG9sZF9hZGFwdGl2ZSwgbmV3X2FkYXB0aXZlO1xuJiM0MztcdHN0cnVjdCBoaW5pYzNfcnhxICpyeHEgPSBOVUxMO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM192YWxpZGF0ZV9jb2FsZXNjZShjb2FsLCBleHRhY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7XG4mIzQzO1x0Q0hFQ0tfQ09BTEVTQ0VfQUxJR04oY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyxcbiYjNDM7XHRcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbiYjNDM7XHRcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuJiM0MztcdFx0XHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XHRvcmlfaW50cl9jb2FsID0gXHUwMDI2bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xuJiM0MztcbiYjNDM7XHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXHUwMDNlcnhfY29hbGVzY2VfdXNlY3MsIENPQUxFU0NFX1RJTUVSX0NGR19VTklULFxuJiM0MztcdFx0XHQgICAgICAgb3JpX2ludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpO1xuJiM0MztcdENIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyxcbiYjNDM7XHRcdFx0ICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCxcbiYjNDM7XHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcGVuZGluZ19saW1pdCwgb2JqX3N0cik7XG4mIzQzO1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4mIzQzO1x0XHRcdCAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsXG4mIzQzO1x0XHRcdCAgICAgICBvcmlfaW50cl9jb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCwgb2JqX3N0cik7XG4mIzQzO1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyxcbiYjNDM7XHRcdFx0ICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCxcbiYjNDM7XHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcbiYjNDM7XHRvbGRfYWRhcHRpdmUgPSBSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKTtcbiYjNDM7XHRuZXdfYWRhcHRpdmUgPSAhIWNvYWwtXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkX2FkYXB0aXZlKSB7XG4mIzQzO1x0XHRib29sIGlzX3VwO1xuJiM0MztcbiYjNDM7XHRcdFdSSVRFX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0c3luY2hyb25pemVfbmV0KCk7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuJiM0MztcdFx0aXNfdXAgPSB0ZXN0X2JpdChISU5JQzNfSU5URl9VUCwgXHUwMDI2bmljX2Rldi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaXNfdXApIHtcbiYjNDM7XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdHJ4cSA9IG5pY19kZXYtXHUwMDNlcV9wYXJhbXMuaXJxX2NmZ1tpXS5yeHE7XG4mIzQzO1x0XHRcdFx0aWYgKCFyeHEpXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0bmV0X2RpbV93b3JrX2NhbmNlbChcdTAwMjZyeHEtXHUwMDNlZGltKTtcbiYjNDM7XHRcdFx0XHRyeHEtXHUwMDNlZGltLnN0YXRlID0gRElNX1NUQVJUX01FQVNVUkU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgPVxuJiM0MztcdFx0KHU4KShjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzIC8gQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpO1xuJiM0MztcbiYjNDM7XHRpbnRyX2NvYWwucGVuZGluZ19saW1pdCA9XG4mIzQzO1x0XHQodTgpKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgL1xuJiM0MztcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcbiYjNDM7XHRpbnRyX2NvYWwucnhfcGVuZGluZ19saW1pdF9oaWdoID1cbiYjNDM7XHRcdCh1OCkoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoIC9cbiYjNDM7XHRcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcbiYjNDM7XG4mIzQzO1x0aW50cl9jb2FsLnJ4X3BlbmRpbmdfbGltaXRfbG93ID1cbiYjNDM7XHRcdCh1OCkoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgL1xuJiM0MztcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuJiM0MztcbiYjNDM7XHQvKiBjb2FsZXNjZSB0aW1lciBvciBwZW5kaW5nIHNldCB0byB6ZXJvIHdpbGwgZGlzYWJsZSBjb2FsZXNjZSAqL1xuJiM0MztcdGlmICghbmV3X2FkYXB0aXZlIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgfHwgIWludHJfY29hbC5wZW5kaW5nX2xpbWl0KSlcbiYjNDM7XHRcdG5ldGRldl9pbmZvKG5ldGRldiwgXCYjMzQ7Q29hbGVzY2Ugd2lsbCBiZSBkaXNhYmxlZFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGhpbmljM19zZXRfaHdfY29hbF9wYXJhbShuZXRkZXYsIFx1MDAyNmludHJfY29hbCwgZXh0YWNrKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRpZiAob2xkX2FkYXB0aXZlKVxuJiM0MztcdFx0XHRXUklURV9PTkNFKG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgb2xkX2FkYXB0aXZlKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwsIG5ld19hZGFwdGl2ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaGluaWMzX2V0aHRvb2xfb3BzID0ge1xuLVx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuLVx0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUEtUX1JBVEVfUlhfVVNFQ1MsXG4mIzQzO1x0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfUlhfVVNFQ1MgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVMgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1VTRV9BREFQVElWRV9SWCB8XG4mIzQzO1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19MT1cgfFxuJiM0MztcdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVNfSElHSCxcbiBcdC5nZXRfbGlua19rc2V0dGluZ3MgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9kcnZpbmZvICAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbXNnbGV2ZWwgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X21zZ2xldmVsLFxuIFx0LnNldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19zZXRfbXNnbGV2ZWwsXG4gXHQuZ2V0X2xpbmsgICAgICAgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluayxcbiYjNDM7XHQuZ2V0X3NzZXRfY291bnQgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9zc2V0X2NvdW50LFxuJiM0MztcdC5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsXG4mIzQzO1x0LmdldF9zdHJpbmdzICAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfc3RyaW5ncyxcbiYjNDM7XHQuZ2V0X2V0aF9waHlfc3RhdHMgICAgICAgICAgICAgID0gaGluaWMzX2dldF9ldGhfcGh5X3N0YXRzLFxuJiM0MztcdC5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsXG4mIzQzO1x0LmdldF9ldGhfY3RybF9zdGF0cyAgICAgICAgICAgICA9IGhpbmljM19nZXRfZXRoX2N0cmxfc3RhdHMsXG4mIzQzO1x0LmdldF9ybW9uX3N0YXRzICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfcm1vbl9zdGF0cyxcbiYjNDM7XHQuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cyxcbiYjNDM7XHQuZ2V0X2NvYWxlc2NlICAgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9jb2FsZXNjZSxcbiYjNDM7XHQuc2V0X2NvYWxlc2NlICAgICAgICAgICAgICAgICAgID0gaGluaWMzX3NldF9jb2FsZXNjZSxcbiB9O1xuIFxuIHZvaWQgaGluaWMzX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxuaW5kZXggY2ZjOWRhYTMwMzRmZS4uNmIwZjQ4NmJhNTkwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oXG5AQCAtNTMsNiAmIzQzOzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhXG4gXHRtc2dfcGFyYW1zLVx1MDAzZXRpbWVvdXRfbXMgPSAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkXG4mIzQzO21nbXRfbXNnX3BhcmFtc19pbml0X2luX291dChzdHJ1Y3QgbWdtdF9tc2dfcGFyYW1zICptc2dfcGFyYW1zLCB2b2lkICppbl9idWYsXG4mIzQzO1x0XHRcdCAgICB2b2lkICpvdXRfYnVmLCB1MzIgaW5fYnVmX3NpemUsIHUzMiBvdXRfYnVmX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRtc2dfcGFyYW1zLVx1MDAzZWJ1Zl9pbiA9IGluX2J1ZjtcbiYjNDM7XHRtc2dfcGFyYW1zLVx1MDAzZWJ1Zl9vdXQgPSBvdXRfYnVmO1xuJiM0MztcdG1zZ19wYXJhbXMtXHUwMDNlaW5fc2l6ZSA9IGluX2J1Zl9zaXplO1xuJiM0MztcdG1zZ19wYXJhbXMtXHUwMDNlZXhwZWN0ZWRfb3V0X3NpemUgPSBvdXRfYnVmX3NpemU7XG4mIzQzO1x0bXNnX3BhcmFtcy1cdTAwM2V0aW1lb3V0X21zID0gMDtcbiYjNDM7fVxuJiM0MztcbiBlbnVtIGNmZ19jbWQge1xuIFx0Q0ZHX0NNRF9HRVRfREVWX0NBUCA9IDAsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19pcnEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXG5pbmRleCBlN2Q2YzIwMzNiNDUxLi5mNjY0NTM4NWM1NTI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXG5AQCAtMjAsNyAmIzQzOzIwLDcgQEAgc3RhdGljIHZvaWQgaGluaWMzX25ldF9kaW0oc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2LFxuIFx0c3RydWN0IGRpbV9zYW1wbGUgc2FtcGxlID0ge307XG4gXG4gXHRpZiAoIXRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcdTAwMjZuaWNfZGV2LVx1MDAzZWZsYWdzKSB8fFxuLVx0ICAgICFuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpXG4mIzQzO1x0ICAgICFSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0ZGltX3VwZGF0ZV9zYW1wbGUoaXJxX2NmZy1cdTAwM2V0b3RhbF9ldmVudHMsIHJ4cS1cdTAwM2VyeHFfc3RhdHMucGFja2V0cyxcbkBAIC0xNDgsMTMgJiM0MzsxNDgsOSBAQCBzdGF0aWMgaW50IGhpbmljM19zZXRfaW50ZXJydXB0X21vZGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBxX2lkLFxuIFx0XHRuaWNfZGV2LVx1MDAzZWludHJfY29hbGVzY2VbcV9pZF0ucmVzZW5kX3RpbWVyX2NmZztcbiBcbiBcdGVyciA9IGhpbmljM19zZXRfaW50ZXJydXB0X2NmZyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBpbmZvKTtcbi1cdGlmIChlcnIpIHtcbiYjNDM7XHRpZiAoZXJyKVxuIFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiBcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IG1vZGVyYXRpb24gZm9yIFF1ZXVlOiAldVxcblwmIzM0OywgcV9pZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRuaWNfZGV2LVx1MDAzZXJ4cXNbcV9pZF0ubGFzdF9jb2FsZXNjX3RpbWVyX2NmZyA9IGNvYWxlc2NfdGltZXJfY2ZnO1xuLVx0XHRuaWNfZGV2LVx1MDAzZXJ4cXNbcV9pZF0ubGFzdF9wZW5kaW5nX2xpbWl0ID0gcGVuZGluZ19saW1pdDtcbi1cdH1cbiBcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xuaW5kZXggMGE4ODhmZTRjOTc1Yi4uOGM3NDkyZTE1NDA5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWFpbi5jXG5AQCAtNTEsNyAmIzQzOzUxLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9pbnRyX2NvYWxfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0aW5mby1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IEhJTklDM19SWF9QRU5ESU5HX0xJTUlUX0xPVztcbiBcdH1cbiBcbi1cdG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCA9IDE7XG4mIzQzO1x0V1JJVEVfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwsIDEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhpbmljM19pbml0X2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0xNzgsNyAmIzQzOzE3OCw3IEBAIHN0YXRpYyBpbnQgaGluaWMzX3N3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcbiBcdGludCBlcnI7XG4gXG4tXHRtdXRleF9pbml0KFx1MDAyNm5pY19kZXYtXHUwMDNlcG9ydF9zdGF0ZV9tdXRleCk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuIFxuIFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5zcV9kZXB0aCA9IEhJTklDM19TUV9ERVBUSDtcbiBcdG5pY19kZXYtXHUwMDNlcV9wYXJhbXMucnFfZGVwdGggPSBISU5JQzNfUlFfREVQVEg7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcbmluZGV4IGM1YmNhM2M0YWY5NjEuLjc2YzY5MWY4MjcwM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG5AQCAtMTQzLDYgJiM0MzsxNDMsNDEgQEAgc3RydWN0IGwybmljX2NtZF9zZXRfZGNiX3N0YXRlIHtcbiBcdHU4ICAgICAgICAgICAgICAgICAgIHJzdmRbN107XG4gfTtcbiBcbiYjNDM7c3RydWN0IGwybmljX3BvcnRfc3RhdHNfaW5mbyB7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4mIzQzO1x0dTE2ICAgICAgICAgICAgICAgICAgZnVuY19pZDtcbiYjNDM7XHR1MTYgICAgICAgICAgICAgICAgICByc3ZkMTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBsMm5pY192cG9ydF9zdGF0cyB7XG4mIzQzO1x0dTY0IHR4X3VuaWNhc3RfcGt0c192cG9ydDtcbiYjNDM7XHR1NjQgdHhfdW5pY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgdHhfbXVsdGljYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHR4X211bHRpY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgdHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHR4X2Jyb2FkY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XG4mIzQzO1x0dTY0IHJ4X3VuaWNhc3RfcGt0c192cG9ydDtcbiYjNDM7XHR1NjQgcnhfdW5pY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgcnhfbXVsdGljYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHJ4X211bHRpY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XHR1NjQgcnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XG4mIzQzO1x0dTY0IHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydDtcbiYjNDM7XG4mIzQzO1x0dTY0IHR4X2Rpc2NhcmRfdnBvcnQ7XG4mIzQzO1x0dTY0IHJ4X2Rpc2NhcmRfdnBvcnQ7XG4mIzQzO1x0dTY0IHR4X2Vycl92cG9ydDtcbiYjNDM7XHR1NjQgcnhfZXJyX3Zwb3J0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGwybmljX2NtZF92cG9ydF9zdGF0cyB7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgICAgIG1zZ19oZWFkO1xuJiM0MztcdHUzMiAgICAgICAgICAgICAgICAgICAgICBzdGF0c19zaXplO1xuJiM0MztcdHUzMiAgICAgICAgICAgICAgICAgICAgICByc3ZkMTtcbiYjNDM7XHRzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgc3RhdHM7XG4mIzQzO1x0dTY0ICAgICAgICAgICAgICAgICAgICAgIHJzdmQyWzZdO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgbDJuaWNfY21kX2xyb19jb25maWcge1xuIFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4gXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xuQEAgLTIzNCw2ICYjNDM7MjY5LDcgQEAgZW51bSBsMm5pY19jbWQge1xuIFx0TDJOSUNfQ01EX1NFVF9WUE9SVF9FTkFCTEUgICAgPSA2LFxuIFx0TDJOSUNfQ01EX1NFVF9SWF9NT0RFICAgICAgICAgPSA3LFxuIFx0TDJOSUNfQ01EX1NFVF9TUV9DSV9BVFRSICAgICAgPSA4LFxuJiM0MztcdEwyTklDX0NNRF9HRVRfVlBPUlRfU1RBVCAgICAgID0gOSxcbiBcdEwyTklDX0NNRF9DTEVBUl9RUF9SRVNPVVJDRSAgID0gMTEsXG4gXHRMMk5JQ19DTURfQ0ZHX1JYX0xSTyAgICAgICAgICA9IDEzLFxuIFx0TDJOSUNfQ01EX0NGR19MUk9fVElNRVIgICAgICAgPSAxNCxcbkBAIC0yNzIsNiAmIzQzOzMwOCw3IEBAIGVudW0gbWFnX2NtZCB7XG4gXHRNQUdfQ01EX1NFVF9QT1JUX0VOQUJMRSA9IDYsXG4gXHRNQUdfQ01EX0dFVF9MSU5LX1NUQVRVUyA9IDcsXG4gXG4mIzQzO1x0TUFHX0NNRF9HRVRfUE9SVF9TVEFUICAgPSAxNTEsXG4gXHRNQUdfQ01EX0dFVF9QT1JUX0lORk8gICA9IDE1MyxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuY1xuaW5kZXggZGE3MzgxMTY0MWE5ZC4uZWQ0ODEwZmE5ODUyZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXG5AQCAtMzQxLDkgJiM0MzszNDEsOSBAQCBzdGF0aWMgaW50IGhpbmljM19tYXliZV9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIGVuYWJsZSlcbiBcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGVyciA9IGhpbmljM19zZXRfcG9ydF9lbmFibGUobmljX2Rldi1cdTAwM2Vod2RldiwgZW5hYmxlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jXG5pbmRleCBkZTVhNzk4NGQyY2I5Li4xYjE0ZGM4MjRjZTFlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcbkBAIC02MzksNiAmIzQzOzYzOSw0MiBAQCBpbnQgaGluaWMzX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgYm9vbCAqbGlua19zdGF0dXNfdXApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpzdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyBzdGF0c19pbmZvID0ge307XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCAqcHM7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX3BhcmFtcyBtc2dfcGFyYW1zID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0cHMgPSBremFsbG9jX29iaigqcHMpO1xuJiM0MztcdGlmICghcHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0c3RhdHNfaW5mby5wb3J0X2lkID0gaGluaWMzX3BoeXNpY2FsX3BvcnRfaWQoaHdkZXYpO1xuJiM0MztcbiYjNDM7XHRtZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoXHUwMDI2bXNnX3BhcmFtcywgXHUwMDI2c3RhdHNfaW5mbywgcHMsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVvZihzdGF0c19pbmZvKSwgc2l6ZW9mKCpwcykpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBoaW5pYzNfc2VuZF9tYm94X3RvX21nbXQoaHdkZXYsIE1HTVRfTU9EX0hJTElOSyxcbiYjNDM7XHRcdFx0XHQgICAgICAgTUFHX0NNRF9HRVRfUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciB8fCBwcy1cdTAwM2VoZWFkLnN0YXR1cykge1xuJiM0MztcdFx0ZGV2X2Vycihod2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0ZhaWxlZCB0byBnZXQgcG9ydCBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgcHMtXHUwMDNlaGVhZC5zdGF0dXMpO1xuJiM0MztcdFx0ZXJyID0gLUVGQVVMVDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZwcy1cdTAwM2Vjb3VudGVyLCBzaXplb2YoKnN0YXRzKSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0a2ZyZWUocHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBoaW5pYzNfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcbiBcdFx0XHQgc3RydWN0IGhpbmljM19uaWNfcG9ydF9pbmZvICpwb3J0X2luZm8pXG4ge1xuQEAgLTczOCwzICYjNDM7Nzc0LDMxIEBAIGludCBoaW5pYzNfZ2V0X3BhdXNlX2luZm8oc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2LFxuIFx0cmV0dXJuIGhpbmljM19jZmdfaHdfcGF1c2UobmljX2Rldi1cdTAwM2Vod2RldiwgTUdNVF9NU0dfQ01EX09QX0dFVCxcbiBcdFx0XHRcdCAgIG5pY19wYXVzZSk7XG4gfVxuJiM0MztcbiYjNDM7aW50IGhpbmljM19nZXRfdnBvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiBmdW5jX2lkLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGwybmljX2NtZF92cG9ydF9zdGF0cyB2cG9ydF9zdGF0cyA9IHt9O1xuJiM0MztcdHN0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8gc3RhdHNfaW5mbyA9IHt9O1xuJiM0MztcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHN0YXRzX2luZm8uZnVuY19pZCA9IGZ1bmNfaWQ7XG4mIzQzO1xuJiM0MztcdG1nbXRfbXNnX3BhcmFtc19pbml0X2luX291dChcdTAwMjZtc2dfcGFyYW1zLCBcdTAwMjZzdGF0c19pbmZvLCBcdTAwMjZ2cG9ydF9zdGF0cyxcbiYjNDM7XHRcdFx0XHQgICAgc2l6ZW9mKHN0YXRzX2luZm8pLCBzaXplb2YodnBvcnRfc3RhdHMpKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9MMk5JQyxcbiYjNDM7XHRcdFx0XHQgICAgICAgTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciB8fCB2cG9ydF9zdGF0cy5tc2dfaGVhZC5zdGF0dXMpIHtcbiYjNDM7XHRcdGRldl9lcnIoaHdkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZ2V0IGZ1bmN0aW9uIHN0YXRpc3RpY3MsIGVycjogJWQsIHN0YXR1czogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyLCB2cG9ydF9zdGF0cy5tc2dfaGVhZC5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZW1jcHkoc3RhdHMsIFx1MDAyNnZwb3J0X3N0YXRzLnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oXG5pbmRleCA1ZDUyMjAyYThkNGViLi44MDU3M2MxMjE1Mzk3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmhcbkBAIC0xMjksNiAmIzQzOzEyOSwxMTAgQEAgc3RydWN0IG1hZ19jbWRfZ2V0X3hzZnBfcHJlc2VudCB7XG4gXHR1OCAgICAgICAgICAgICAgICAgICByc3ZkWzJdO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMge1xuJiM0MztcdHU2NCBtYWNfdHhfZnJhZ21lbnRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3VuZGVyc2l6ZV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfdW5kZXJtaW5fcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzY0X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfNjVfMTI3X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfMTI4XzI1NV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzI1Nl81MTFfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF81MTJfMTAyM19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzE1MTlfMjA0N19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzgxOTJfOTIxNl9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4XzE1MTlfbWF4X2JhZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfb3ZlcnNpemVfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X2phYmJlcl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfYmFkX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9iYWRfb2N0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X2dvb2RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X2dvb2Rfb2N0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3RvdGFsX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF90b3RhbF9vY3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfdW5pX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9tdWx0aV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfYnJvYWRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BhdXNlX251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfcGZjX3ByaTBfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wcmkxX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9wZmNfcHJpMl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfcGZjX3ByaTNfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wcmk0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9wZmNfcHJpNV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfdHhfcGZjX3ByaTZfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3R4X3BmY19wcmk3X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9jb250cm9sX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9lcnJfYWxsX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9mcm9tX2FwcF9nb29kX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY190eF9mcm9tX2FwcF9iYWRfcGt0X251bTtcbiYjNDM7XG4mIzQzO1x0dTY0IG1hY19yeF9mcmFnbWVudF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfdW5kZXJzaXplX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF91bmRlcm1pbl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfNjRfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF82NV8xMjdfb2N0X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF8xMjhfMjU1X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMTAyNF8xNTE4X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfNDA5Nl84MTkxX29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfOTIxN18xMjI4N19vY3RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfMTUxOV9tYXhfYmFkX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfamFiYmVyX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9iYWRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X2JhZF9vY3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfZ29vZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfZ29vZF9vY3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfdG90YWxfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3RvdGFsX29jdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF91bmlfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X211bHRpX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9icm9hZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGF1c2VfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3ByaTFfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3BmY19wcmkyX3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9wZmNfcHJpM19wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3ByaTRfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3BmY19wcmk1X3BrdF9udW07XG4mIzQzO1x0dTY0IG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfcGZjX3ByaTdfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X2NvbnRyb2xfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3N5bV9lcnJfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X2Zjc19lcnJfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3NlbmRfYXBwX2dvb2RfcGt0X251bTtcbiYjNDM7XHR1NjQgbWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtO1xuJiM0MztcdHU2NCBtYWNfcnhfdW5maWx0ZXJfcGt0X251bTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyB7XG4mIzQzO1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgaGVhZDtcbiYjNDM7XG4mIzQzO1x0dTggICAgICAgICAgICAgICAgICAgcG9ydF9pZDtcbiYjNDM7XHR1OCAgICAgICAgICAgICAgICAgICByc3ZkMFszXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBtYWdfY21kX2dldF9wb3J0X3N0YXQge1xuJiM0MztcdHN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyBjb3VudGVyO1xuJiM0MztcdHU2NCAgICAgICAgICAgICAgICAgICAgICAgcnN2ZDFbMTVdO1xuJiM0Mzt9O1xuJiM0MztcbiBlbnVtIGxpbmtfZXJyX3R5cGUge1xuIFx0TElOS19FUlJfTU9EVUxFX1VOUkVDT0dFTklaRUQsXG4gXHRMSU5LX0VSUl9OVU0sXG5AQCAtMjA5LDYgJiM0MzszMTMsMTEgQEAgaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuIFx0XHRcdCBzdHJ1Y3QgaGluaWMzX25pY19wb3J0X2luZm8gKnBvcnRfaW5mbyk7XG4gaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcbiBcdFx0XHQgICAgYm9vbCBlbmFibGUpO1xuJiM0MztpbnQgaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpO1xuJiM0MztpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBsMm5pY192cG9ydF9zdGF0cyAqc3RhdHMpO1xuJiM0MztcbiBpbnQgaGluaWMzX2FkZF92bGFuKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgdmxhbl9pZCwgdTE2IGZ1bmNfaWQpO1xuIGludCBoaW5pYzNfZGVsX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oXG5pbmRleCA5NTAyMjkzZmY3MTBjLi45NGEyYmFiNTI1NjQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmhcbkBAIC0xMCw2ICYjNDM7MTAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2hpbmljM19od19jZmcuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hpbmljM19od2Rldi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aGluaWMzX21nbXRfaW50ZXJmYWNlLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGluaWMzX3J4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aGluaWMzX3R4LmhcJiMzNDtcbiBcbiAjZGVmaW5lIEhJTklDM19WTEFOX0JJVE1BUF9CWVRFX1NJWkUobmljX2RldikgIChzaXplb2YoKihuaWNfZGV2KS1cdTAwM2V2bGFuX2JpdG1hcCkpXG4gI2RlZmluZSBISU5JQzNfVkxBTl9CSVRNQVBfU0laRShuaWNfZGV2KSAgXFxcbkBAIC0xMjcsOCAmIzQzOzEyOSw4IEBAIHN0cnVjdCBoaW5pYzNfbmljX2RldiB7XG4gXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAgICAgICAgICp3b3JrcTtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgICAgICAgICAgICAgcGVyaW9kaWNfd29yaztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgcnhfbW9kZV93b3JrO1xuLVx0LyogbG9jayBmb3IgZW5hYmxlL2Rpc2FibGUgcG9ydCAqL1xuLVx0c3RydWN0IG11dGV4ICAgICAgICAgICAgICAgICAgICBwb3J0X3N0YXRlX211dGV4O1xuJiM0MztcdC8qIFByb3RlY3RzIGludGVyZmFjZSBzdGF0ZSAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgc3RhdGVfbG9jaztcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgdWNfZmlsdGVyX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIG1jX2ZpbHRlcl9saXN0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXG5pbmRleCAzMDlhYjU5MDEzNzk3Li4yOThmYzA4MTc2ODBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuQEAgLTI4LDEwICYjNDM7MjgsNiBAQFxuIFxuICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0ICAgICA2NlxuICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2ICAgICA4NlxuLSNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTihjcWUpIFxcXG4tXHQoUlFfQ1FFX09GRk9MQURfVFlQRV9HRVQoKGNxZSktXHUwMDNlb2ZmbG9hZF90eXBlLCBJUF9UWVBFKSA9PSBcXFxuLVx0IEhJTklDM19SWF9JUFY2X1BLVCA/IEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNiA6IFxcXG4tXHQgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0KVxuIFxuIHN0YXRpYyB2b2lkIGhpbmljM19yeHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cylcbiB7XG5AQCAtNDYsNyAmIzQzOzQyLDYgQEAgc3RhdGljIHZvaWQgaGluaWMzX3J4cV9jbGVhbl9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzKVxuIFxuIFx0cnhxX3N0YXRzLVx1MDAzZWFsbG9jX3NrYl9lcnIgPSAwO1xuIFx0cnhxX3N0YXRzLVx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSAwO1xuLVx0cnhxX3N0YXRzLVx1MDAzZXJlc3RvcmVfZHJvcF9zZ2UgPSAwO1xuIFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxX3N0YXRzLVx1MDAzZXN5bmNwKTtcbiB9XG4gXG5AQCAtMTQ3LDYgJiM0MzsxNDIsOCBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcbiB7XG4gXHR1MzIgaSwgZnJlZV93cWViYnMgPSByeHEtXHUwMDNlZGVsdGEgLSAxO1xuIFx0c3RydWN0IGhpbmljM19yeF9pbmZvICpyeF9pbmZvO1xuJiM0MztcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyAqc3luY3A7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTE1NSw4ICYjNDM7MTUyLDEzIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKVxuIFxuIFx0XHRlcnIgPSByeF9hbGxvY19tYXBwZWRfcGFnZShyeHEtXHUwMDNlcGFnZV9wb29sLCByeF9pbmZvLFxuIFx0XHRcdFx0XHQgICByeHEtXHUwMDNlYnVmX2xlbik7XG4tXHRcdGlmICh1bmxpa2VseShlcnIpKVxuJiM0MztcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjNDM7XHRcdFx0c3luY3AgPSBcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xuJiM0MztcdFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XG4mIzQzO1x0XHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuYWxsb2NfcnhfYnVmX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoc3luY3AsIGZsYWdzKTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcbiBcdFx0ZG1hX2FkZHIgPSBwYWdlX3Bvb2xfZ2V0X2RtYV9hZGRyKHJ4X2luZm8tXHUwMDNlcGFnZSkgJiM0MztcbiBcdFx0XHRyeF9pbmZvLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuQEAgLTE3MCw2ICYjNDM7MTcyLDExIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKVxuIFx0XHRcdFx0cnhxLVx1MDAzZW5leHRfdG9fdXBkYXRlIFx1MDAzY1x1MDAzYyBISU5JQzNfTk9STUFMX1JRX1dRRSk7XG4gXHRcdHJ4cS1cdTAwM2VkZWx0YSAtPSBpO1xuIFx0XHRyeHEtXHUwMDNlbmV4dF90b19hbGxvYyA9IHJ4cS1cdTAwM2VuZXh0X3RvX3VwZGF0ZTtcbiYjNDM7XHR9IGVsc2UgaWYgKGZyZWVfd3FlYmJzID09IHJ4cS1cdTAwM2VxX2RlcHRoIC0gMSkge1xuJiM0MztcdFx0c3luY3AgPSBcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xuJiM0MztcdFx0ZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoc3luY3ApO1xuJiM0MztcdFx0cnhxLVx1MDAzZXJ4cV9zdGF0cy5yeF9idWZfZW1wdHkmIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShzeW5jcCwgZmxhZ3MpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGk7XG5AQCAtMzMwLDExICYjNDM7MzM3LDI0IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeF9jc3VtKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHUzMiBvZmZsb2FkX3R5cGUsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcnhxLVx1MDAzZW5ldGRldjtcbiBcdGJvb2wgbDJfdHVubmVsO1xuIFxuJiM0MztcdC8qIEhXIGVuc3VyZXMgdGhhdCBvbmx5IDEgYml0IGlzIHNldCBpbiBjc3VtX2Vyci4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoY3N1bV9lcnIgPT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpKSB7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0cnhxLVx1MDAzZXJ4cV9zdGF0cy5vdGhlcl9lcnJvcnMmIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodW5saWtlbHkoY3N1bV9lcnIpKSB7XG4gXHRcdC8qIHBrdCB0eXBlIGlzIHJlY29nbml6ZWQgYnkgSFcsIGFuZCBjc3VtIGlzIHdyb25nICovXG4mIzQzO1x0XHRpZiAoY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjc3VtX2VyciAhPSBISU5JQzNfUlhfQ1NVTV9JUFNVX09USEVSX0VSUikge1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHRyeHEtXHUwMDNlcnhxX3N0YXRzLmNzdW1fZXJyb3JzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR9XG4gXHRcdHNrYi1cdTAwM2VpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzg3LDggJiM0Mzs0MDcsMTIgQEAgc3RhdGljIGludCByZWN2X29uZV9wa3Qoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZSxcbiBcdHUxNiBudW1fbHJvO1xuIFxuIFx0c2tiID0gaGluaWMzX2ZldGNoX3J4X2J1ZmZlcihyeHEsIHBrdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKVxuJiM0MztcdGlmICh1bmxpa2VseSghc2tiKSkge1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuYWxsb2Nfc2tiX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0LyogcGxhY2UgaGVhZGVyIGluIGxpbmVhciBwb3J0aW9uIG9mIGJ1ZmZlciAqL1xuIFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSlcbkBAIC01NTAsMTEgJiM0Mzs1NzQsMjkgQEAgaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0Mzt2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cyA9IFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZyeHFfc3RhdHMtXHUwMDNlc3luY3ApO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlY3N1bV9lcnJvcnMgPSByeHFfc3RhdHMtXHUwMDNlY3N1bV9lcnJvcnM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VvdGhlcl9lcnJvcnMgPSByeHFfc3RhdHMtXHUwMDNlb3RoZXJfZXJyb3JzO1xuJiM0MztcdFx0c3RhdHMtXHUwMDNlcnhfYnVmX2VtcHR5ID0gcnhxX3N0YXRzLVx1MDAzZXJ4X2J1Zl9lbXB0eTtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZWFsbG9jX3NrYl9lcnIgPSByeHFfc3RhdHMtXHUwMDNlYWxsb2Nfc2tiX2VycjtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSByeHFfc3RhdHMtXHUwMDNlYWxsb2NfcnhfYnVmX2VycjtcbiYjNDM7XHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2cnhxX3N0YXRzLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KHJ4cS1cdTAwM2VuZXRkZXYpO1xuJiM0MztcdHUzMiBpcF90eXBlLCBvZmZsb2FkX3R5cGUsIHBrdF9oZHJfbGVuO1xuIFx0dTMyIHN3X2NpLCBzdGF0dXMsIHBrdF9sZW4sIHZsYW5fbGVuO1xuIFx0c3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZTtcbiYjNDM7XHR1NjQgcnhfYnl0ZXMgPSAwO1xuIFx0dTMyIG51bV93cWUgPSAwO1xuIFx0aW50IG5yX3BrdHMgPSAwO1xuIFx0dTE2IG51bV9scm87XG5AQCAtNTc0LDEwICYjNDM7NjE2LDIwIEBAIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAocmVjdl9vbmVfcGt0KHJ4cSwgcnhfY3FlLCBwa3RfbGVuLCB2bGFuX2xlbiwgc3RhdHVzKSlcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdHJ4X2J5dGVzICYjNDM7PSBwa3RfbGVuO1xuIFx0XHRucl9wa3RzJiM0MzsmIzQzOztcbiBcdFx0bnVtX2xybyA9IFJRX0NRRV9TVEFUVVNfR0VUKHN0YXR1cywgTlVNX0xSTyk7XG4tXHRcdGlmIChudW1fbHJvKVxuJiM0MztcdFx0aWYgKG51bV9scm8pIHtcbiYjNDM7XHRcdFx0b2ZmbG9hZF90eXBlID0gbGUzMl90b19jcHUocnhfY3FlLVx1MDAzZW9mZmxvYWRfdHlwZSk7XG4mIzQzO1x0XHRcdGlwX3R5cGUgPSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVChvZmZsb2FkX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBJUF9UWVBFKTtcbiYjNDM7XHRcdFx0cGt0X2hkcl9sZW4gPSBpcF90eXBlID09IEhJTklDM19SWF9JUFY2X1BLVCA/XG4mIzQzO1x0XHRcdFx0ICAgICAgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2IDpcbiYjNDM7XHRcdFx0XHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQ7XG4mIzQzO1xuJiM0MztcdFx0XHRyeF9ieXRlcyAmIzQzOz0gKG51bV9scm8gLSAxKSAqIHBrdF9oZHJfbGVuO1xuIFx0XHRcdG51bV93cWUgJiM0Mzs9IGhpbmljM19nZXRfc2dlX251bShyeHEsIHBrdF9sZW4pO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRyeF9jcWUtXHUwMDNlc3RhdHVzID0gMDtcbiBcbkBAIC01ODgsNSAmIzQzOzY0MCwxMCBAQCBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldClcbiBcdGlmIChyeHEtXHUwMDNlZGVsdGEgXHUwMDNlPSBISU5JQzNfUlhfQlVGRkVSX1dSSVRFKVxuIFx0XHRoaW5pYzNfcnhfZmlsbF9idWZmZXJzKHJ4cSk7XG4gXG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRyeHEtXHUwMDNlcnhxX3N0YXRzLnBhY2tldHMgJiM0Mzs9ICh1NjQpbnJfcGt0cztcbiYjNDM7XHRyeHEtXHUwMDNlcnhxX3N0YXRzLmJ5dGVzICYjNDM7PSByeF9ieXRlcztcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XG4gXHRyZXR1cm4gbnJfcGt0cztcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcbmluZGV4IDA2ZDFiMzI5OWU3Y2YuLjJhYjY5MWVkMTFhOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG5AQCAtOCw2ICYjNDM7OCwxNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RpbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiBcbiYjNDM7LyogcnggY3FlIGNoZWNrc3VtIGVyciAqL1xuJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lQX0NTVU1fRVJSICAgICAgQklUKDApXG4mIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVENQX0NTVU1fRVJSICAgICBCSVQoMSlcbiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9VRFBfQ1NVTV9FUlIgICAgIEJJVCgyKVxuJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lHTVBfQ1NVTV9FUlIgICAgQklUKDMpXG4mIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY0X0NTVU1fRVJSICBCSVQoNClcbiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JQ01QVjZfQ1NVTV9FUlIgIEJJVCg1KVxuJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX1NDVFBfQ1JDX0VSUiAgICAgQklUKDYpXG4mIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSAgICBCSVQoNylcbiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JUFNVX09USEVSX0VSUiAgIEJJVCg4KVxuJiM0MztcbiAjZGVmaW5lIFJRX0NRRV9PRkZPTEFEX1RZUEVfUEtUX1RZUEVfTUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKVxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9JUF9UWVBFX01BU0sgICAgICAgICAgICBHRU5NQVNLKDYsIDUpXG4gI2RlZmluZSBSUV9DUUVfT0ZGT0xBRF9UWVBFX1RVTk5FTF9QS1RfRk9STUFUX01BU0sgIEdFTk1BU0soMTEsIDgpXG5AQCAtMzksNyAmIzQzOzUwLDYgQEAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMge1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIHJ4X2J1Zl9lbXB0eTtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBhbGxvY19za2JfZXJyO1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3J4X2J1Zl9lcnI7XG4tXHR1NjQgICAgICAgICAgICAgICAgICAgcmVzdG9yZV9kcm9wX3NnZTtcbiBcdHN0cnVjdCB1NjRfc3RhdHNfc3luYyBzeW5jcDtcbiB9O1xuIFxuQEAgLTEwMSw5ICYjNDM7MTExLDYgQEAgc3RydWN0IGhpbmljM19yeHEge1xuIFx0ZG1hX2FkZHJfdCAgICAgICAgICAgICBjcWVfc3RhcnRfcGFkZHI7XG4gXG4gXHRzdHJ1Y3QgZGltICAgICAgICAgICAgIGRpbTtcbi1cbi1cdHU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2FsZXNjX3RpbWVyX2NmZztcbi1cdHU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZW5kaW5nX2xpbWl0O1xuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xuIFxuIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzIHtcbkBAIC0xMjMsNiAmIzQzOzEzMCw5IEBAIHZvaWQgaGluaWMzX2ZyZWVfcnhxc19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSxcbiBcdFx0XHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcbiBpbnQgaGluaWMzX2NvbmZpZ3VyZV9yeHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fcnEsXG4gXHRcdFx0ICB1MzIgcnFfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzICpyeHFzX3Jlcyk7XG4mIzQzO1xuJiM0Mzt2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsXG4mIzQzO1x0XHRcdCAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKTtcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcbmluZGV4IDkzMDZiZjAwMjBjYWYuLjYyMTljYzEwOTE4ZGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG5AQCAtMjUsMTEgJiM0MzsyNSw5IEBAIHN0YXRpYyB2b2lkIGhpbmljM190eHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnR4cV9zdGF0cylcbiBcdHR4cV9zdGF0cy1cdTAwM2Vkcm9wcGVkID0gMDtcbiBcbiBcdHR4cV9zdGF0cy1cdTAwM2Vza2JfcGFkX2VyciA9IDA7XG4tXHR0eHFfc3RhdHMtXHUwMDNlZnJhZ19sZW5fb3ZlcmZsb3cgPSAwO1xuIFx0dHhxX3N0YXRzLVx1MDAzZW9mZmxvYWRfY293X3NrYl9lcnIgPSAwO1xuIFx0dHhxX3N0YXRzLVx1MDAzZW1hcF9mcmFnX2VyciA9IDA7XG4gXHR0eHFfc3RhdHMtXHUwMDNldW5rbm93bl90dW5uZWxfcGt0ID0gMDtcbi1cdHR4cV9zdGF0cy1cdTAwM2VmcmFnX3NpemVfZXJyID0gMDtcbiBcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4gfVxuIFxuQEAgLTk3LDggJiM0Mzs5NSwxMiBAQCBzdGF0aWMgaW50IGhpbmljM190eF9tYXBfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gXHRkbWFfaW5mb1swXS5kbWEgPSBkbWFfbWFwX3NpbmdsZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2tiLVx1MDAzZWRhdGEsXG4gXHRcdFx0XHRcdCBza2JfaGVhZGxlbihza2IpLCBETUFfVE9fREVWSUNFKTtcbi1cdGlmIChkbWFfbWFwcGluZ19lcnJvcihcdTAwMjZwZGV2LVx1MDAzZWRldiwgZG1hX2luZm9bMF0uZG1hKSlcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvWzBdLmRtYSkpIHtcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLm1hcF9mcmFnX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0fVxuIFxuIFx0ZG1hX2luZm9bMF0ubGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcbiBcbkBAIC0xMTcsNiAmIzQzOzExOSw5IEBAIHN0YXRpYyBpbnQgaGluaWMzX3R4X21hcF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0XHQgICAgIHNrYl9mcmFnX3NpemUoZnJhZyksXG4gXHRcdFx0XHRcdFx0ICAgICBETUFfVE9fREVWSUNFKTtcbiBcdFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBkbWFfaW5mb1tpZHhdLmRtYSkpIHtcbiYjNDM7XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdFx0dHhxLVx1MDAzZXR4cV9zdGF0cy5tYXBfZnJhZ19lcnImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZXJyX3VubWFwX3BhZ2U7XG4gXHRcdH1cbkBAIC0yNjAsNiAmIzQzOzI2NSw5IEBAIHN0YXRpYyBpbnQgaGluaWMzX3R4X2NzdW0oc3RydWN0IGhpbmljM190eHEgKnR4cSwgc3RydWN0IGhpbmljM19zcV90YXNrICp0YXNrLFxuIFx0XHRpZiAobDRfcHJvdG8gIT0gSVBQUk9UT19VRFAgfHxcbiBcdFx0ICAgICgoc3RydWN0IHVkcGhkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikpLVx1MDAzZWRlc3QgIT1cbiBcdFx0ICAgIFZYTEFOX09GRkxPQURfUE9SVF9MRSkge1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuJiM0MztcdFx0XHR0eHEtXHUwMDNldHhxX3N0YXRzLnVua25vd25fdHVubmVsX3BrdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuIFx0XHRcdC8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovXG4gXHRcdFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC00MzMsNiAmIzQzOzQ0MSwyNyBAQCBzdGF0aWMgdTMyIGhpbmljM190eF9vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoaW5pYzNfc3FfdGFzayAqdGFzayxcbiBcdHJldHVybiBvZmZsb2FkO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9wa3Rfc3RhdHMoc3RydWN0IGhpbmljM190eHEgKnR4cSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHUzMiBoZHJfbGVuLCB0eF9ieXRlcztcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBwa3RzO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XG4mIzQzO1x0XHRoZHJfbGVuID0gKHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vnc29fc2VncyAtIDEpICpcbiYjNDM7XHRcdFx0ICBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XG4mIzQzO1x0XHR0eF9ieXRlcyA9IHNrYi1cdTAwM2VsZW4gJiM0MzsgaGRyX2xlbjtcbiYjNDM7XHRcdHBrdHMgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3M7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR4X2J5dGVzID0gc2tiLVx1MDAzZWxlbiBcdTAwM2UgRVRIX1pMRU4gPyBza2ItXHUwMDNlbGVuIDogRVRIX1pMRU47XG4mIzQzO1x0XHRwa3RzID0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5ieXRlcyAmIzQzOz0gdHhfYnl0ZXM7XG4mIzQzO1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5wYWNrZXRzICYjNDM7PSBwa3RzO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB1MTYgaGluaWMzX2dldF9hbmRfdXBkYXRlX3NxX293bmVyKHN0cnVjdCBoaW5pYzNfaW9fcXVldWUgKnNxLFxuIFx0XHRcdFx0XHQgIHUxNiBjdXJyX3BpLCB1MTYgd3FlYmJfY250KVxuIHtcbkBAIC01MzksOCAmIzQzOzU2OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aW50IGVycjtcbiBcbiBcdGlmICh1bmxpa2VseShza2ItXHUwMDNlbGVuIFx1MDAzYyBNSU5fU0tCX0xFTikpIHtcbi1cdFx0aWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi1cdTAwM2VsZW4pKVxuJiM0MztcdFx0aWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi1cdTAwM2VsZW4pKSB7XG4mIzQzO1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHRcdHR4cS1cdTAwM2V0eHFfc3RhdHMuc2tiX3BhZF9lcnImIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBNSU5fU0tCX0xFTjtcbiBcdH1cbkBAIC01NTcsMTEgJiM0Mzs1OTAsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0aGluaWMzX3dxX2ZyZWVfd3FlYmJzKFx1MDAyNnR4cS1cdTAwM2VzcS1cdTAwM2V3cSksXG4gXHRcdFx0XHRcdHR4cS1cdTAwM2V0eF9zdGFydF90aHJzKTtcbiBcbiYjNDM7XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLmJ1c3kmIzQzOyYjNDM7O1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbiBcdG9mZmxvYWQgPSBoaW5pYzNfdHhfb2ZmbG9hZChza2IsIFx1MDAyNnRhc2ssIFx1MDAyNnF1ZXVlX2luZm8sIHR4cSk7XG4gXHRpZiAodW5saWtlbHkob2ZmbG9hZCA9PSBISU5JQzNfVFhfT0ZGTE9BRF9JTlZBTElEKSkge1xuJiM0MztcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XHRcdHR4cS1cdTAwM2V0eHFfc3RhdHMub2ZmbG9hZF9jb3dfc2tiX2VyciYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0Z290byBlcnJfZHJvcF9wa3Q7XG4gXHR9IGVsc2UgaWYgKCFvZmZsb2FkKSB7XG4gXHRcdHdxZWJiX2NudCAtPSAxO1xuQEAgLTU5NSw2ICYjNDM7NjM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0b3BfdGhycyxcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0YXJ0X3RocnMpO1xuIFxuJiM0MztcdGhpbmljM19nZXRfcGt0X3N0YXRzKHR4cSwgc2tiKTtcbiBcdGhpbmljM19wcmVwYXJlX3NxX2N0cmwoXHUwMDI2d3FlX2NvbWJvLCBxdWV1ZV9pbmZvLCBudW1fc2dlLCBvd25lcik7XG4gXHRoaW5pYzNfd3JpdGVfZGIodHhxLVx1MDAzZXNxLCAwLCBEQl9DRkxBR19EUF9TUSxcbiBcdFx0XHRoaW5pYzNfZ2V0X3NxX2xvY2FsX3BpKHR4cS1cdTAwM2VzcSkpO1xuQEAgLTYwNCw2ICYjNDM7NjQ0LDEwIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoaW5pYzNfc2VuZF9vbmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyX2Ryb3BfcGt0OlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBlcnJfb3V0OlxuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4mIzQzO1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5kcm9wcGVkJiM0MzsmIzQzOztcbiYjNDM7XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiYjNDM7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbkBAIC03NTQsNiAmIzQzOzc5OCwyMiBAQCBpbnQgaGluaWMzX2NvbmZpZ3VyZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fc3EsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3ZvaWQgaGluaWMzX3R4cV9nZXRfc3RhdHMoc3RydWN0IGhpbmljM190eHEgKnR4cSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqdHhxX3N0YXRzID0gXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnR4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2VidXN5ID0gdHhxX3N0YXRzLVx1MDAzZWJ1c3k7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2Vza2JfcGFkX2VyciA9IHR4cV9zdGF0cy1cdTAwM2Vza2JfcGFkX2VycjtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZW9mZmxvYWRfY293X3NrYl9lcnIgPSB0eHFfc3RhdHMtXHUwMDNlb2ZmbG9hZF9jb3dfc2tiX2VycjtcbiYjNDM7XHRcdHN0YXRzLVx1MDAzZW1hcF9mcmFnX2VyciA9IHR4cV9zdGF0cy1cdTAwM2VtYXBfZnJhZ19lcnI7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V1bmtub3duX3R1bm5lbF9wa3QgPSB0eHFfc3RhdHMtXHUwMDNldW5rbm93bl90dW5uZWxfcGt0O1xuJiM0MztcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZ0eHFfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBoaW5pYzNfdHhfcG9sbChzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0eHEtXHUwMDNlbmV0ZGV2O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oXG5pbmRleCAwMDE5NGYyYTFiY2MxLi42YWJmNDQzY2I5MjdjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxuQEAgLTEwNiwxMSAmIzQzOzEwNiw5IEBAIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBidXN5O1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIGRyb3BwZWQ7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgc2tiX3BhZF9lcnI7XG4tXHR1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19sZW5fb3ZlcmZsb3c7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgb2ZmbG9hZF9jb3dfc2tiX2VycjtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBtYXBfZnJhZ19lcnI7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgdW5rbm93bl90dW5uZWxfcGt0O1xuLVx0dTY0ICAgICAgICAgICAgICAgICAgIGZyYWdfc2l6ZV9lcnI7XG4gXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7XG4gfTtcbiBcbkBAIC0xNTcsNiAmIzQzOzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSxcbiBcdFx0XHQgIHUzMiBzcV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3R4cV9yZXMgKnR4cXNfcmVzKTtcbiBcbiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiYjNDM7dm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxuJiM0MztcdFx0XHQgIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICpzdGF0cyk7XG4gYm9vbCBoaW5pYzNfdHhfcG9sbChzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBpbnQgYnVkZ2V0KTtcbiB2b2lkIGhpbmljM19mbHVzaF90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZWVmNjMzYTA2MjRkMGU0MjkxMTZhNDAxZGZkMjYyN2IzOWFmMTQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTcgMDI6MjE6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMKaW5kZXggOTBmYzE2Mjg4ZGU5NS4uODlhN2JhMjExMTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYwpAQCAtMTcsNiAmIzQzOzE3LDExIEBACiAjaW5jbHVkZSAmIzM0O2hpbmljM19uaWNfY2ZnLmgmIzM0OwogCiAjZGVmaW5lIEhJTklDM19NR01UX1ZFUlNJT05fTUFYX0xFTiAgICAgMzIKJiM0MzsvKiBDb2FsZXNjZSB0aW1lIHByb3BlcnRpZXMgaW4gbWljcm9zZWNvbmRzICovCiYjNDM7I2RlZmluZSBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQgICAgIDgKJiM0MzsjZGVmaW5lIENPQUxFU0NFX1RJTUVSX0NGR19VTklUICAgICAgICAgNQomIzQzOyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVQgICAgICAoMjU1ICogQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKQomIzQzOyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGRyAgICAgICAgICAoMjU1ICogQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpCiAKIHN0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCkBAIC00MDksMTQgJiM0Mzs0MTQsNzkxIEBAIGhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0cnVjdCBoaW5pYzNfc3RhdHMgewomIzQzOwljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKJiM0MzsJaW50ICBvZmZzZXQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0sodHlwZSwgbWVtYmVyKSBcCiYjNDM7CUJVSUxEX0JVR19PTl9aRVJPKHNpemVvZl9maWVsZCh0eXBlLCBtZW1iZXIpICE9IHNpemVvZih1NjQpKQomIzQzOwomIzQzOyNkZWZpbmUgSElOSUMzX1JYUV9TVEFUKF9zdGF0X2l0ZW0pIHsgXAomIzQzOwkubmFtZSAgID0gJiMzNDtyeHElZF8mIzM0OyNfc3RhdF9pdGVtLCBcCiYjNDM7CS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXAomIzQzOwkJICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgXAomIzQzOwkJCQkJICAgICAgIF9zdGF0X2l0ZW0pIFwKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcCiYjNDM7CS5uYW1lICAgPSAmIzM0O3R4cSVkXyYjMzQ7I19zdGF0X2l0ZW0sIFwKJiM0MzsJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBfc3RhdF9pdGVtKSBcCiYjNDM7CQkgICYjNDM7IDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBcCiYjNDM7CQkJCQkgICAgICAgX3N0YXRfaXRlbSkgXAomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcnhfcXVldWVfc3RhdHNbXSA9IHsKJiM0MzsJSElOSUMzX1JYUV9TVEFUKGNzdW1fZXJyb3JzKSwKJiM0MzsJSElOSUMzX1JYUV9TVEFUKG90aGVyX2Vycm9ycyksCiYjNDM7CUhJTklDM19SWFFfU1RBVChyeF9idWZfZW1wdHkpLAomIzQzOwlISU5JQzNfUlhRX1NUQVQoYWxsb2Nfc2tiX2VyciksCiYjNDM7CUhJTklDM19SWFFfU1RBVChhbGxvY19yeF9idWZfZXJyKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM190eF9xdWV1ZV9zdGF0c1tdID0gewomIzQzOwlISU5JQzNfVFhRX1NUQVQoYnVzeSksCiYjNDM7CUhJTklDM19UWFFfU1RBVChza2JfcGFkX2VyciksCiYjNDM7CUhJTklDM19UWFFfU1RBVChvZmZsb2FkX2Nvd19za2JfZXJyKSwKJiM0MzsJSElOSUMzX1RYUV9TVEFUKG1hcF9mcmFnX2VyciksCiYjNDM7CUhJTklDM19UWFFfU1RBVCh1bmtub3duX3R1bm5lbF9wa3QpLAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBISU5JQzNfRlVOQ19TVEFUKF9zdGF0X2l0ZW0pIHsJXAomIzQzOwkubmFtZSAgID0gI19zdGF0X2l0ZW0sIFwKJiM0MzsJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBsMm5pY192cG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXAomIzQzOwkJICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIFwKJiM0MzsJCQkJCSAgICAgICBfc3RhdF9pdGVtKSBcCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19mdW5jdGlvbl9zdGF0c1tdID0gewomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHR4X3VuaWNhc3RfcGt0c192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQodHhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLAomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHR4X211bHRpY2FzdF9ieXRlc192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLAomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHR4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksCiYjNDM7CiYjNDM7CUhJTklDM19GVU5DX1NUQVQocnhfdW5pY2FzdF9wa3RzX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X2J5dGVzX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfcGt0c192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQocnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF9icm9hZGNhc3RfcGt0c192cG9ydCksCiYjNDM7CUhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0KSwKJiM0MzsKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVCh0eF9kaXNjYXJkX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVChyeF9kaXNjYXJkX3Zwb3J0KSwKJiM0MzsJSElOSUMzX0ZVTkNfU1RBVCh0eF9lcnJfdnBvcnQpLAomIzQzOwlISU5JQzNfRlVOQ19TVEFUKHJ4X2Vycl92cG9ydCksCiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEhJTklDM19QT1JUX1NUQVQoX3N0YXRfaXRlbSkgeyBcCiYjNDM7CS5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXAomIzQzOwkub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXAomIzQzOwkJICAmIzQzOyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzLCBcCiYjNDM7CQkJCQkgICAgICAgX3N0YXRfaXRlbSkgXAomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcG9ydF9zdGF0c1tdID0gewomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9mcmFnbWVudF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdW5kZXJzaXplX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcm1pbl9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfMTUxOV9tYXhfYmFkX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF8xNTE5X21heF9nb29kX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfamFiYmVyX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9iYWRfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9vY3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdG90YWxfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X3VuaV9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpMF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTFfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkyX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpM19wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTRfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk1X3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpNl9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTdfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Vycl9hbGxfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Zyb21fYXBwX2dvb2RfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Zyb21fYXBwX2JhZF9wa3RfbnVtKSwKJiM0MzsKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5kZXJtaW5fcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9iYWRfb2N0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3RvdGFsX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmlfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTBfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmkxX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTNfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk0X3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtKSwKJiM0MzsJSElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTZfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk3X3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW0pLAomIzQzOwlISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9iYWRfcGt0X251bSksCiYjNDM7CUhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZmlsdGVyX3BrdF9udW0pLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBoaW5pYzNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlpbnQgY291bnQsIHFfbnVtOwomIzQzOwomIzQzOwlzd2l0Y2ggKHNzZXQpIHsKJiM0MzsJY2FzZSBFVEhfU1NfU1RBVFM6CiYjNDM7CQlxX251bSA9IG5pY19kZXYtJmd0O3FfcGFyYW1zLm51bV9xcHM7CiYjNDM7CQljb3VudCA9IEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKSAmIzQzOwomIzQzOwkJCShBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cykgJiM0MzsKJiM0MzsJCQkgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpKSAqCiYjNDM7CQkJcV9udW07CiYjNDM7CiYjNDM7CQlpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LSZndDtod2RldikpCiYjNDM7CQkJY291bnQgJiM0Mzs9IEFSUkFZX1NJWkUoaGluaWMzX3BvcnRfc3RhdHMpOwomIzQzOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2X3F1ZXVlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHR4cV9zdGF0cyA9IHt9OwomIzQzOwlzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyByeHFfc3RhdHMgPSB7fTsKJiM0MzsJdTE2IGkgPSAwLCBqLCBxaWQ7CiYjNDM7CWNoYXIgKnA7CiYjNDM7CiYjNDM7CWZvciAocWlkID0gMDsgcWlkICZsdDsgbmljX2Rldi0mZ3Q7cV9wYXJhbXMubnVtX3FwczsgcWlkJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCFuaWNfZGV2LSZndDt0eHFzKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaGluaWMzX3R4cV9nZXRfc3RhdHMoJmFtcDtuaWNfZGV2LSZndDt0eHFzW3FpZF0sICZhbXA7dHhxX3N0YXRzKTsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGomIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXAgPSAoY2hhciAqKSZhbXA7dHhxX3N0YXRzICYjNDM7CiYjNDM7CQkJICAgIGhpbmljM190eF9xdWV1ZV9zdGF0c1tqXS5vZmZzZXQ7CiYjNDM7CQkJZGF0YVtpXSA9ICoodTY0ICopcDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpID0gbmljX2Rldi0mZ3Q7cV9wYXJhbXMubnVtX3FwcyAqIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsKJiM0MzsJZm9yIChxaWQgPSAwOyBxaWQgJmx0OyBuaWNfZGV2LSZndDtxX3BhcmFtcy5udW1fcXBzOyBxaWQmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoIW5pY19kZXYtJmd0O3J4cXMpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQloaW5pYzNfcnhxX2dldF9zdGF0cygmYW1wO25pY19kZXYtJmd0O3J4cXNbcWlkXSwgJmFtcDtyeHFfc3RhdHMpOwomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX3J4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJcCA9IChjaGFyICopJmFtcDtyeHFfc3RhdHMgJiM0MzsKJiM0MzsJCQkgICAgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDsKJiM0MzsJCQlkYXRhW2ldID0gKih1NjQgKilwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MTYgaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7CiYjNDM7CXUxNiBpID0gMCwgajsKJiM0MzsJY2hhciAqcDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcHMgPSBrbWFsbG9jX29iaigqcHMpOwomIzQzOwlpZiAoIXBzKQomIzQzOwkJZ290byBlcnJfemVyb19zdGF0czsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LSZndDtod2RldiwgcHMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IHBvcnQgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJZ290byBlcnJfemVyb19zdGF0czsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKGogPSAwOyBqICZsdDsgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7IGomIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJcCA9IChjaGFyICopcHMgJiM0MzsgaGluaWMzX3BvcnRfc3RhdHNbal0ub2Zmc2V0OwomIzQzOwkJZGF0YVtpXSA9ICoodTY0ICopcDsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShwcyk7CiYjNDM7CiYjNDM7CXJldHVybiBpOwomIzQzOwomIzQzO2Vycl96ZXJvX3N0YXRzOgomIzQzOwltZW1zZXQoJmFtcDtkYXRhW2ldLCAwLCBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKSAqIHNpemVvZigqZGF0YSkpOwomIzQzOwomIzQzOwlyZXR1cm4gaSAmIzQzOyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgdnBvcnRfc3RhdHMgPSB7fTsKJiM0MzsJdTE2IGkgPSAwLCBqOwomIzQzOwljaGFyICpwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfZ2V0X3Zwb3J0X3N0YXRzKG5pY19kZXYtJmd0O2h3ZGV2LAomIzQzOwkJCQkgICAgIGhpbmljM19nbG9iYWxfZnVuY19pZChuaWNfZGV2LSZndDtod2RldiksCiYjNDM7CQkJCSAgICAgJmFtcDt2cG9ydF9zdGF0cyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGZ1bmN0aW9uIHN0YXRzIGZyb20gZndcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKTsgaiYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlwID0gKGNoYXIgKikmYW1wO3Zwb3J0X3N0YXRzICYjNDM7IGhpbmljM19mdW5jdGlvbl9zdGF0c1tqXS5vZmZzZXQ7CiYjNDM7CQlkYXRhW2ldID0gKih1NjQgKilwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtJmd0O2h3ZGV2KSkKJiM0MzsJCWkgJiM0Mzs9IGhpbmljM19nZXRfZXRodG9vbF9wb3J0X3N0YXRzKG5ldGRldiwgZGF0YSAmIzQzOyBpKTsKJiM0MzsKJiM0MzsJaGluaWMzX2dldF9kcnZfcXVldWVfc3RhdHMobmV0ZGV2LCBkYXRhICYjNDM7IGkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjaGFyICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTE2IGksIGNudCA9IDA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQltZW1jcHkocCwgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CQlwICYjNDM7PSBFVEhfR1NUUklOR19MRU47CiYjNDM7CQljbnQmIzQzOyYjNDM7OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtJmd0O2h3ZGV2KSkgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX3BvcnRfc3RhdHMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCW1lbWNweShwLCBoaW5pYzNfcG9ydF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pOwomIzQzOwkJCXAgJiM0Mzs9IEVUSF9HU1RSSU5HX0xFTjsKJiM0MzsJCQljbnQmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBjbnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcXBfc3RhdHNfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjaGFyICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJdTggKmRhdGEgPSBwOwomIzQzOwl1MTYgaSwgajsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG5pY19kZXYtJmd0O3FfcGFyYW1zLm51bV9xcHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgQVJSQVlfU0laRShoaW5pYzNfdHhfcXVldWVfc3RhdHMpOyBqJiM0MzsmIzQzOykKJiM0MzsJCQlldGh0b29sX3NwcmludGYoJmFtcDtkYXRhLAomIzQzOwkJCQkJaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBuaWNfZGV2LSZndDtxX3BhcmFtcy5udW1fcXBzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZm9yIChqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoaGluaWMzX3J4X3F1ZXVlX3N0YXRzKTsgaiYjNDM7JiM0MzspCiYjNDM7CQkJZXRodG9vbF9zcHJpbnRmKCZhbXA7ZGF0YSwKJiM0MzsJCQkJCWhpbmljM19yeF9xdWV1ZV9zdGF0c1tqXS5uYW1lLCBpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCiYjNDM7ewomIzQzOwljaGFyICpwID0gKGNoYXIgKilkYXRhOwomIzQzOwl1MTYgb2Zmc2V0OwomIzQzOwomIzQzOwlzd2l0Y2ggKHN0cmluZ3NldCkgewomIzQzOwljYXNlIEVUSF9TU19TVEFUUzoKJiM0MzsJCW9mZnNldCA9IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhuZXRkZXYsIHApOwomIzQzOwkJaGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKG5ldGRldiwKJiM0MzsJCQkJCSAgICBwICYjNDM7IG9mZnNldCAqIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CiYjNDM7CQlyZXR1cm47CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtJbnZhbGlkIHN0cmluZyBzZXQgJXUuXG4mIzM0Oywgc3RyaW5nc2V0KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfcGh5X3N0YXRzICpwaHlfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKEhJTklDM19JU19WRihuaWNfZGV2LSZndDtod2RldikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXBzID0ga21hbGxvY19vYmooKnBzKTsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LSZndDtod2RldiwgcHMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBwaHkgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBoeV9zdGF0cy0mZ3Q7U3ltYm9sRXJyb3JEdXJpbmdDYXJyaWVyID0gcHMtJmd0O21hY19yeF9zeW1fZXJyX3BrdF9udW07CiYjNDM7CiYjNDM7CWtmcmVlKHBzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXBzID0ga21hbGxvY19vYmooKnBzKTsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LSZndDtod2RldiwgcHMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShwcyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldiwgJiMzNDtGYWlsZWQgdG8gZ2V0IGV0aCBtYWMgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hY19zdGF0cy0mZ3Q7RnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHBzLSZndDttYWNfdHhfZ29vZF9wa3RfbnVtOwomIzQzOwltYWNfc3RhdHMtJmd0O0ZyYW1lc1JlY2VpdmVkT0sgPSBwcy0mZ3Q7bWFjX3J4X2dvb2RfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSBwcy0mZ3Q7bWFjX3J4X2Zjc19lcnJfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtPY3RldHNUcmFuc21pdHRlZE9LID0gcHMtJmd0O21hY190eF9nb29kX29jdF9udW07CiYjNDM7CW1hY19zdGF0cy0mZ3Q7T2N0ZXRzUmVjZWl2ZWRPSyA9IHBzLSZndDttYWNfcnhfZ29vZF9vY3RfbnVtOwomIzQzOwltYWNfc3RhdHMtJmd0O011bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHBzLSZndDttYWNfdHhfbXVsdGlfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy0mZ3Q7bWFjX3R4X2Jyb2FkX3BrdF9udW07CiYjNDM7CW1hY19zdGF0cy0mZ3Q7TXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHBzLSZndDttYWNfcnhfbXVsdGlfcGt0X251bTsKJiM0MzsJbWFjX3N0YXRzLSZndDtCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtJmd0O21hY19yeF9icm9hZF9wa3RfbnVtOwomIzQzOwomIzQzOwlrZnJlZShwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZXRoX2N0cmxfc3RhdHMgKmN0cmxfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcHMgPSBrbWFsbG9jX29iaigqcHMpOwomIzQzOwlpZiAoIXBzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtJmd0O2h3ZGV2LCBwcyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKHBzKTsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIGN0cmwgc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0cmxfc3RhdHMtJmd0O01BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHBzLSZndDttYWNfdHhfY29udHJvbF9wa3RfbnVtOwomIzQzOwljdHJsX3N0YXRzLSZndDtNQUNDb250cm9sRnJhbWVzUmVjZWl2ZWQgPSBwcy0mZ3Q7bWFjX3J4X2NvbnRyb2xfcGt0X251bTsKJiM0MzsKJiM0MzsJa2ZyZWUocHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGhpbmljM19ybW9uX3Jhbmdlc1tdID0gewomIzQzOwl7ICAgICAwLCAgICA2NCB9LAomIzQzOwl7ICAgIDY1LCAgIDEyNyB9LAomIzQzOwl7ICAgMTI4LCAgIDI1NSB9LAomIzQzOwl7ICAgMjU2LCAgIDUxMSB9LAomIzQzOwl7ICAgNTEyLCAgMTAyMyB9LAomIzQzOwl7ICAxMDI0LCAgMTUxOCB9LAomIzQzOwl7ICAxNTE5LCAgMjA0NyB9LAomIzQzOwl7ICAyMDQ4LCAgNDA5NSB9LAomIzQzOwl7ICA0MDk2LCAgODE5MSB9LAomIzQzOwl7ICA4MTkyLCAgOTIxNiB9LAomIzQzOwl7ICA5MjE3LCAxMjI4NyB9LAomIzQzOwl7fQomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaGluaWMzX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cywKJiM0MzsJCQkJICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwczsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJcHMgPSBrbWFsbG9jX29iaigqcHMpOwomIzQzOwlpZiAoIXBzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtJmd0O2h3ZGV2LCBwcyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWtmcmVlKHBzKTsKJiM0MzsJCW5ldGRldl9lcnIobmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byBnZXQgZXRoIHJtb24gc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJtb25fc3RhdHMtJmd0O3VuZGVyc2l6ZV9wa3RzCT0gcHMtJmd0O21hY19yeF91bmRlcnNpemVfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7b3ZlcnNpemVfcGt0cwk9IHBzLSZndDttYWNfcnhfb3ZlcnNpemVfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7ZnJhZ21lbnRzCQk9IHBzLSZndDttYWNfcnhfZnJhZ21lbnRfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7amFiYmVycwkJPSBwcy0mZ3Q7bWFjX3J4X2phYmJlcl9wa3RfbnVtOwomIzQzOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzBdCQk9IHBzLSZndDttYWNfcnhfNjRfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RbMV0JCT0gcHMtJmd0O21hY19yeF82NV8xMjdfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RbMl0JCT0gcHMtJmd0O21hY19yeF8xMjhfMjU1X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzNdCQk9IHBzLSZndDttYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdFs0XQkJPSBwcy0mZ3Q7bWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzVdCQk9IHBzLSZndDttYWNfcnhfMTAyNF8xNTE4X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzZdCQk9IHBzLSZndDttYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzddCQk9IHBzLSZndDttYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzhdCQk9IHBzLSZndDttYWNfcnhfNDA5Nl84MTkxX29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzldCQk9IHBzLSZndDttYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0WzEwXQkJPSBwcy0mZ3Q7bWFjX3J4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07CiYjNDM7CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMF0JCT0gcHMtJmd0O21hY190eF82NF9vY3RfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsxXQkJPSBwcy0mZ3Q7bWFjX3R4XzY1XzEyN19vY3RfcGt0X251bTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7aGlzdF90eFsyXQkJPSBwcy0mZ3Q7bWFjX3R4XzEyOF8yNTVfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbM10JCT0gcHMtJmd0O21hY190eF8yNTZfNTExX29jdF9wa3RfbnVtOwomIzQzOwlybW9uX3N0YXRzLSZndDtoaXN0X3R4WzRdCQk9IHBzLSZndDttYWNfdHhfNTEyXzEwMjNfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNV0JCT0gcHMtJmd0O21hY190eF8xMDI0XzE1MThfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbNl0JCT0gcHMtJmd0O21hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbN10JCT0gcHMtJmd0O21hY190eF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbOF0JCT0gcHMtJmd0O21hY190eF80MDk2XzgxOTFfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbOV0JCT0gcHMtJmd0O21hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2hpc3RfdHhbMTBdCQk9IHBzLSZndDttYWNfdHhfOTIxN18xMjI4N19vY3RfcGt0X251bTsKJiM0MzsKJiM0MzsJKnJhbmdlcyA9IGhpbmljM19ybW9uX3JhbmdlczsKJiM0MzsKJiM0MzsJa2ZyZWUocHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlwcyA9IGttYWxsb2Nfb2JqKCpwcyk7CiYjNDM7CWlmICghcHMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi0mZ3Q7aHdkZXYsIHBzKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJa2ZyZWUocHMpOwomIzQzOwkJbmV0ZGV2X2VycihuZXRkZXYsICYjMzQ7RmFpbGVkIHRvIGdldCBldGggcGF1c2Ugc3RhdHMgZnJvbSBmd1xuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBhdXNlX3N0YXRzLSZndDt0eF9wYXVzZV9mcmFtZXMgPSBwcy0mZ3Q7bWFjX3R4X3BhdXNlX251bTsKJiM0MzsJcGF1c2Vfc3RhdHMtJmd0O3J4X3BhdXNlX2ZyYW1lcyA9IHBzLSZndDttYWNfcnhfcGF1c2VfbnVtOwomIzQzOwomIzQzOwlrZnJlZShwcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpjb2FsLAomIzQzOwkJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbDsKJiM0MzsJc3RydWN0IGhpbmljM19pbnRlcnJ1cHRfaW5mbyBpbmZvID0ge307CiYjNDM7CWJvb2wgaXNfYWN0aXZlOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CWlzX2FjdGl2ZSA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCAmYW1wO25pY19kZXYtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKHFfaWQgJmx0OyBuaWNfZGV2LSZndDtxX3BhcmFtcy5udW1fcXBzKTsKJiM0MzsKJiM0MzsJaWYgKGlzX2FjdGl2ZSkgewomIzQzOwkJaW5mby5tc2l4X2luZGV4ID0KJiM0MzsJCQluaWNfZGV2LSZndDtxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4OwomIzQzOwkJaW5mby5yZXNlbmRfdGltZXJfY2ZnID0KJiM0MzsJCQluaWNfZGV2LSZndDtpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChpc19hY3RpdmUpIHsKJiM0MzsJCWluZm8uaW50ZXJydXB0X2NvYWxlc2Nfc2V0ID0gMTsKJiM0MzsJCWluZm8uY29hbGVzY190aW1lcl9jZmcgPSBjb2FsLSZndDtjb2FsZXNjZV90aW1lcl9jZmc7CiYjNDM7CQlpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLSZndDtwZW5kaW5nX2xpbWl0OwomIzQzOwomIzQzOwkJZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtJmd0O2h3ZGV2LCBpbmZvKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICAgICAmIzM0O0ZhaWxlZCB0byBzZXQgcXVldWUldSBjb2FsZXNjZSYjMzQ7LAomIzQzOwkJCQkJICAgICAgIHFfaWQpOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlpbnRyX2NvYWwgPSAmYW1wO25pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbcV9pZF07CiYjNDM7CWludHJfY29hbC0mZ3Q7Y29hbGVzY2VfdGltZXJfY2ZnID0gY29hbC0mZ3Q7Y29hbGVzY2VfdGltZXJfY2ZnOwomIzQzOwlpbnRyX2NvYWwtJmd0O3BlbmRpbmdfbGltaXQgPSBjb2FsLSZndDtwZW5kaW5nX2xpbWl0OwomIzQzOwlpbnRyX2NvYWwtJmd0O3J4X3BlbmRpbmdfbGltaXRfbG93ID0gY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9sb3c7CiYjNDM7CWludHJfY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9oaWdoID0gY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9oaWdoOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaXNfY29hbGVzY2VfZXhjZWVkX2xpbWl0KGNvbnN0IHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHsKJiM0MzsJCWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CQl1MzIgdmFsdWU7CiYjNDM7CQl1MzIgbGltaXQ7CiYjNDM7CX0gY29hbGVzY2VfbGltaXRzW10gPSB7CiYjNDM7CQl7JiMzNDtyeF9jb2FsZXNjZV91c2VjcyYjMzQ7LAomIzQzOwkJIGNvYWwtJmd0O3J4X2NvYWxlc2NlX3VzZWNzLAomIzQzOwkJIENPQUxFU0NFX01BWF9USU1FUl9DRkd9LAomIzQzOwkJeyYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMmIzM0OywKJiM0MzsJCSBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcywKJiM0MzsJCSBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sCiYjNDM7CQl7JiMzNDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cmIzM0OywKJiM0MzsJCSBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csCiYjNDM7CQkgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LAomIzQzOwkJeyYjMzQ7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCYjMzQ7LAomIzQzOwkJIGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LAomIzQzOwl9OwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoY29hbGVzY2VfbGltaXRzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChjb2FsZXNjZV9saW1pdHNbaV0udmFsdWUgJmd0OyBjb2FsZXNjZV9saW1pdHNbaV0ubGltaXQpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgJiMzNDslcyBvdXQgb2YgcmFuZ2UgJWQtJWQmIzM0OywKJiM0MzsJCQkJCSAgICAgICBjb2FsZXNjZV9saW1pdHNbaV0ubmFtZSwgMCwKJiM0MzsJCQkJCSAgICAgICBjb2FsZXNjZV9saW1pdHNbaV0ubGltaXQpOwomIzQzOwkJCXJldHVybiAtRVJBTkdFOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhpbmljM192YWxpZGF0ZV9jb2FsZXNjZShjb25zdCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb2FsLCBleHRhY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJaWYgKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAmZ3Q7CiYjNDM7CSAgICBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgICAgICYjMzQ7aW52YWxpZCBjb2FsZXNjZSBmcmFtZSBoaWdoICV1LCBsb3cgJXUmIzM0OywKJiM0MzsJCQkJICAgICAgIGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkJCSAgICAgICBjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSB1MzIgaXRlbSwgdTMyIHVuaXQsIGNvbnN0IGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CWlmIChpdGVtICUgdW5pdCkKJiM0MzsJCW5ldGRldl93YXJuKG5ldGRldiwgJiMzNDslcyBpbiAldSB1bml0cywgY2hhbmdlIHRvICV1XG4mIzM0OywKJiM0MzsJCQkgICAgc3RyLCB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQpOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0FMSUdOKG1lbWJlciwgdW5pdCkgXAomIzQzOwljaGVja19jb2FsZXNjZV9hbGlnbihuZXRkZXYsIG1lbWJlciwgdW5pdCwgI21lbWJlcikKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjaGVja19jb2FsZXNjZV9jaGFuZ2VkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgIHUzMiBpdGVtLCB1MzIgdW5pdCwgdTMyIG9yaV92YWwsCiYjNDM7CQkJCSAgIGNvbnN0IGNoYXIgKm9ial9zdHIsIGNvbnN0IGNoYXIgKnN0cikKJiM0Mzt7CiYjNDM7CWlmICgoaXRlbSAvIHVuaXQpICE9IG9yaV92YWwpCiYjNDM7CQluZXRkZXZfZGJnKG5ldGRldiwgJiMzNDtDaGFuZ2UgJXMgZnJvbSAldSB0byAldSAlc1xuJiMzNDssCiYjNDM7CQkJICAgc3RyLCBvcmlfdmFsICogdW5pdCwgaXRlbSAtIGl0ZW0gJSB1bml0LCBvYmpfc3RyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2RlZmluZSBDSEVDS19DT0FMRVNDRV9DSEFOR0VEKG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0cikgXAomIzQzOwljaGVja19jb2FsZXNjZV9jaGFuZ2VkKG5ldGRldiwgbWVtYmVyLCB1bml0LCBvcmlfdmFsLCBvYmpfc3RyLCAjbWVtYmVyKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGluaWMzX3NldF9od19jb2FsX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICppbnRyX2NvYWwsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvbGRfY29hbDsKJiM0MzsJdTE2IGksIGo7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW9sZF9jb2FsID0ga2NhbGxvYyhuaWNfZGV2LSZndDttYXhfcXBzLCBzaXplb2YoKm9sZF9jb2FsKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghb2xkX2NvYWwpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmljX2Rldi0mZ3Q7bWF4X3FwczsgaSYjNDM7JiM0MzspCiYjNDM7CQlvbGRfY29hbFtpXSA9IG5pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbaV07CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbmljX2Rldi0mZ3Q7bWF4X3FwczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2UobmV0ZGV2LCBpLCBpbnRyX2NvYWwsIGV4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gcm9sbGJhY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUob2xkX2NvYWwpOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0Mztyb2xsYmFjazoKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQomIzQzOwkJaGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShuZXRkZXYsIGosICZhbXA7b2xkX2NvYWxbal0sIE5VTEwpOwomIzQzOwomIzQzOwlrZnJlZShvbGRfY29hbCk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGluaWMzX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCwKJiM0MzsJCQkgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX2NvYWxlc2NlICprZXJuZWxfY29hbCwKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGhpbmljM19pbnRyX2NvYWxfaW5mbyAqaW50ZXJydXB0X2luZm87CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJaW50ZXJydXB0X2luZm8gPSAmYW1wO25pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbMF07CiYjNDM7CiYjNDM7CWNvYWwtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IFJFQURfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsKTsKJiM0MzsKJiM0MzsJY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93ID0KJiM0MzsJCWludGVycnVwdF9pbmZvLSZndDtyeF9wZW5kaW5nX2xpbWl0X2xvdyAqCiYjNDM7CQlDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7CiYjNDM7CiYjNDM7CWNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggPQomIzQzOwkJaW50ZXJydXB0X2luZm8tJmd0O3J4X3BlbmRpbmdfbGltaXRfaGlnaCAqCiYjNDM7CQlDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7CiYjNDM7CiYjNDM7CS8qIFRYL1JYIHVzZXMgdGhlIHNhbWUgaW50ZXJydXB0LgomIzQzOwkgKiBTbyB3ZSBvbmx5IGRlY2xhcmUgUlggZXRodG9vbF9jb2FsZXNjZSBwYXJhbWV0ZXJzLgomIzQzOwkgKi8KJiM0MzsJY29hbC0mZ3Q7cnhfY29hbGVzY2VfdXNlY3MgPSBpbnRlcnJ1cHRfaW5mby0mZ3Q7Y29hbGVzY2VfdGltZXJfY2ZnICoKJiM0MzsJCQkJICBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVDsKJiM0MzsKJiM0MzsJY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBpbnRlcnJ1cHRfaW5mby0mZ3Q7cGVuZGluZ19saW1pdCAqCiYjNDM7CQkJCQlDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoaW5pYzNfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiYjNDM7CQkJICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvcmlfaW50cl9jb2FsOwomIzQzOwlzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvIGludHJfY29hbCA9IHt9OwomIzQzOwljb25zdCBjaGFyICpvYmpfc3RyID0gJiMzNDtmb3IgbmV0ZGV2JiMzNDs7CiYjNDM7CWJvb2wgb2xkX2FkYXB0aXZlLCBuZXdfYWRhcHRpdmU7CiYjNDM7CXN0cnVjdCBoaW5pYzNfcnhxICpyeHEgPSBOVUxMOwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX3ZhbGlkYXRlX2NvYWxlc2NlKGNvYWwsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLSZndDtyeF9jb2FsZXNjZV91c2VjcywgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcywKJiM0MzsJCQkgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7CiYjNDM7CUNIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkJICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csCiYjNDM7CQkJICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CW9yaV9pbnRyX2NvYWwgPSAmYW1wO25pY19kZXYtJmd0O2ludHJfY29hbGVzY2VbMF07CiYjNDM7CiYjNDM7CUNIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC0mZ3Q7cnhfY29hbGVzY2VfdXNlY3MsIENPQUxFU0NFX1RJTUVSX0NGR19VTklULAomIzQzOwkJCSAgICAgICBvcmlfaW50cl9jb2FsLSZndDtjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzLAomIzQzOwkJCSAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsCiYjNDM7CQkJICAgICAgIG9yaV9pbnRyX2NvYWwtJmd0O3BlbmRpbmdfbGltaXQsIG9ial9zdHIpOwomIzQzOwlDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsCiYjNDM7CQkJICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCwKJiM0MzsJCQkgICAgICAgb3JpX2ludHJfY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9oaWdoLCBvYmpfc3RyKTsKJiM0MzsJQ0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLSZndDtyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csCiYjNDM7CQkJICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCwKJiM0MzsJCQkgICAgICAgb3JpX2ludHJfY29hbC0mZ3Q7cnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsKJiM0MzsJb2xkX2FkYXB0aXZlID0gUkVBRF9PTkNFKG5pY19kZXYtJmd0O2FkYXB0aXZlX3J4X2NvYWwpOwomIzQzOwluZXdfYWRhcHRpdmUgPSAhIWNvYWwtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKJiM0MzsKJiM0MzsJaWYgKG9sZF9hZGFwdGl2ZSkgewomIzQzOwkJYm9vbCBpc191cDsKJiM0MzsKJiM0MzsJCVdSSVRFX09OQ0UobmljX2Rldi0mZ3Q7YWRhcHRpdmVfcnhfY29hbCwgZmFsc2UpOwomIzQzOwomIzQzOwkJc3luY2hyb25pemVfbmV0KCk7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7c3RhdGVfbG9jayk7CiYjNDM7CQlpc191cCA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCAmYW1wO25pY19kZXYtJmd0O2ZsYWdzKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwomIzQzOwomIzQzOwkJaWYgKGlzX3VwKSB7CiYjNDM7CQkJZm9yIChpID0gMDsgaSAmbHQ7IG5pY19kZXYtJmd0O3FfcGFyYW1zLm51bV9xcHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCXJ4cSA9IG5pY19kZXYtJmd0O3FfcGFyYW1zLmlycV9jZmdbaV0ucnhxOwomIzQzOwkJCQlpZiAoIXJ4cSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCQluZXRfZGltX3dvcmtfY2FuY2VsKCZhbXA7cnhxLSZndDtkaW0pOwomIzQzOwkJCQlyeHEtJmd0O2RpbS5zdGF0ZSA9IERJTV9TVEFSVF9NRUFTVVJFOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpbnRyX2NvYWwuY29hbGVzY2VfdGltZXJfY2ZnID0KJiM0MzsJCSh1OCkoY29hbC0mZ3Q7cnhfY29hbGVzY2VfdXNlY3MgLyBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7CiYjNDM7CiYjNDM7CWludHJfY29hbC5wZW5kaW5nX2xpbWl0ID0KJiM0MzsJCSh1OCkoY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgLwomIzQzOwkJICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpOwomIzQzOwomIzQzOwlpbnRyX2NvYWwucnhfcGVuZGluZ19saW1pdF9oaWdoID0KJiM0MzsJCSh1OCkoY29hbC0mZ3Q7cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCAvCiYjNDM7CQkgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7CiYjNDM7CiYjNDM7CWludHJfY29hbC5yeF9wZW5kaW5nX2xpbWl0X2xvdyA9CiYjNDM7CQkodTgpKGNvYWwtJmd0O3J4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAvCiYjNDM7CQkgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7CiYjNDM7CiYjNDM7CS8qIGNvYWxlc2NlIHRpbWVyIG9yIHBlbmRpbmcgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGNvYWxlc2NlICovCiYjNDM7CWlmICghbmV3X2FkYXB0aXZlICZhbXA7JmFtcDsKJiM0MzsJICAgICghaW50cl9jb2FsLmNvYWxlc2NlX3RpbWVyX2NmZyB8fCAhaW50cl9jb2FsLnBlbmRpbmdfbGltaXQpKQomIzQzOwkJbmV0ZGV2X2luZm8obmV0ZGV2LCAmIzM0O0NvYWxlc2NlIHdpbGwgYmUgZGlzYWJsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX3NldF9od19jb2FsX3BhcmFtKG5ldGRldiwgJmFtcDtpbnRyX2NvYWwsIGV4dGFjayk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChvbGRfYWRhcHRpdmUpCiYjNDM7CQkJV1JJVEVfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsLCBvbGRfYWRhcHRpdmUpOwomIzQzOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlXUklURV9PTkNFKG5pY19kZXYtJmd0O2FkYXB0aXZlX3J4X2NvYWwsIG5ld19hZGFwdGl2ZSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgaGluaWMzX2V0aHRvb2xfb3BzID0gewotCS5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zICAgICAgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHwKLQkJCQkJICBFVEhUT09MX0NPQUxFU0NFX1BLVF9SQVRFX1JYX1VTRUNTLAomIzQzOwkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyAgICAgID0gRVRIVE9PTF9DT0FMRVNDRV9SWF9VU0VDUyB8CiYjNDM7CQkJCQkgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FUyB8CiYjNDM7CQkJCQkgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFX1JYIHwKJiM0MzsJCQkJCSAgRVRIVE9PTF9DT0FMRVNDRV9SWF9NQVhfRlJBTUVTX0xPVyB8CiYjNDM7CQkJCQkgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19ISUdILAogCS5nZXRfbGlua19rc2V0dGluZ3MgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2xpbmtfa3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19zZXRfbXNnbGV2ZWwsCiAJLmdldF9saW5rICAgICAgICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiYjNDM7CS5nZXRfc3NldF9jb3VudCAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3NzZXRfY291bnQsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsCiYjNDM7CS5nZXRfc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3N0cmluZ3MsCiYjNDM7CS5nZXRfZXRoX3BoeV9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMsCiYjNDM7CS5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsCiYjNDM7CS5nZXRfZXRoX2N0cmxfc3RhdHMgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzLAomIzQzOwkuZ2V0X3Jtb25fc3RhdHMgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9ybW9uX3N0YXRzLAomIzQzOwkuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cywKJiM0MzsJLmdldF9jb2FsZXNjZSAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfc2V0X2NvYWxlc2NlLAogfTsKIAogdm9pZCBoaW5pYzNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmgKaW5kZXggY2ZjOWRhYTMwMzRmZS4uNmIwZjQ4NmJhNTkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaApAQCAtNTMsNiAmIzQzOzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhCiAJbXNnX3BhcmFtcy0mZ3Q7dGltZW91dF9tcyA9IDA7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQKJiM0MzttZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoc3RydWN0IG1nbXRfbXNnX3BhcmFtcyAqbXNnX3BhcmFtcywgdm9pZCAqaW5fYnVmLAomIzQzOwkJCSAgICB2b2lkICpvdXRfYnVmLCB1MzIgaW5fYnVmX3NpemUsIHUzMiBvdXRfYnVmX3NpemUpCiYjNDM7ewomIzQzOwltc2dfcGFyYW1zLSZndDtidWZfaW4gPSBpbl9idWY7CiYjNDM7CW1zZ19wYXJhbXMtJmd0O2J1Zl9vdXQgPSBvdXRfYnVmOwomIzQzOwltc2dfcGFyYW1zLSZndDtpbl9zaXplID0gaW5fYnVmX3NpemU7CiYjNDM7CW1zZ19wYXJhbXMtJmd0O2V4cGVjdGVkX291dF9zaXplID0gb3V0X2J1Zl9zaXplOwomIzQzOwltc2dfcGFyYW1zLSZndDt0aW1lb3V0X21zID0gMDsKJiM0Mzt9CiYjNDM7CiBlbnVtIGNmZ19jbWQgewogCUNGR19DTURfR0VUX0RFVl9DQVAgPSAwLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMKaW5kZXggZTdkNmMyMDMzYjQ1MS4uZjY2NDUzODVjNTUyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMKQEAgLTIwLDcgJiM0MzsyMCw3IEBAIHN0YXRpYyB2b2lkIGhpbmljM19uZXRfZGltKHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiwKIAlzdHJ1Y3QgZGltX3NhbXBsZSBzYW1wbGUgPSB7fTsKIAogCWlmICghdGVzdF9iaXQoSElOSUMzX0lOVEZfVVAsICZhbXA7bmljX2Rldi0mZ3Q7ZmxhZ3MpIHx8Ci0JICAgICFuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsKQomIzQzOwkgICAgIVJFQURfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsKSkKIAkJcmV0dXJuOwogCiAJZGltX3VwZGF0ZV9zYW1wbGUoaXJxX2NmZy0mZ3Q7dG90YWxfZXZlbnRzLCByeHEtJmd0O3J4cV9zdGF0cy5wYWNrZXRzLApAQCAtMTQ4LDEzICYjNDM7MTQ4LDkgQEAgc3RhdGljIGludCBoaW5pYzNfc2V0X2ludGVycnVwdF9tb2RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCwKIAkJbmljX2Rldi0mZ3Q7aW50cl9jb2FsZXNjZVtxX2lkXS5yZXNlbmRfdGltZXJfY2ZnOwogCiAJZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtJmd0O2h3ZGV2LCBpbmZvKTsKLQlpZiAoZXJyKSB7CiYjNDM7CWlmIChlcnIpCiAJCW5ldGRldl9lcnIobmV0ZGV2LAogCQkJICAgJiMzNDtGYWlsZWQgdG8gbW9kaWZ5IG1vZGVyYXRpb24gZm9yIFF1ZXVlOiAldVxuJiMzNDssIHFfaWQpOwotCX0gZWxzZSB7Ci0JCW5pY19kZXYtJmd0O3J4cXNbcV9pZF0ubGFzdF9jb2FsZXNjX3RpbWVyX2NmZyA9IGNvYWxlc2NfdGltZXJfY2ZnOwotCQluaWNfZGV2LSZndDtyeHFzW3FfaWRdLmxhc3RfcGVuZGluZ19saW1pdCA9IHBlbmRpbmdfbGltaXQ7Ci0JfQogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uYwppbmRleCAwYTg4OGZlNGM5NzViLi44Yzc0OTJlMTU0MDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWFpbi5jCkBAIC01MSw3ICYjNDM7NTEsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2ludHJfY29hbF9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlpbmZvLSZndDtyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IEhJTklDM19SWF9QRU5ESU5HX0xJTUlUX0xPVzsKIAl9CiAKLQluaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsID0gMTsKJiM0MzsJV1JJVEVfT05DRShuaWNfZGV2LSZndDthZGFwdGl2ZV9yeF9jb2FsLCAxKTsKIH0KIAogc3RhdGljIGludCBoaW5pYzNfaW5pdF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0xNzgsNyAmIzQzOzE3OCw3IEBAIHN0YXRpYyBpbnQgaGluaWMzX3N3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJaW50IGVycjsKIAotCW11dGV4X2luaXQoJmFtcDtuaWNfZGV2LSZndDtwb3J0X3N0YXRlX211dGV4KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO25pY19kZXYtJmd0O3N0YXRlX2xvY2spOwogCiAJbmljX2Rldi0mZ3Q7cV9wYXJhbXMuc3FfZGVwdGggPSBISU5JQzNfU1FfREVQVEg7CiAJbmljX2Rldi0mZ3Q7cV9wYXJhbXMucnFfZGVwdGggPSBISU5JQzNfUlFfREVQVEg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaAppbmRleCBjNWJjYTNjNGFmOTYxLi43NmM2OTFmODI3MDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmgKQEAgLTE0Myw2ICYjNDM7MTQzLDQxIEBAIHN0cnVjdCBsMm5pY19jbWRfc2V0X2RjYl9zdGF0ZSB7CiAJdTggICAgICAgICAgICAgICAgICAgcnN2ZFs3XTsKIH07CiAKJiM0MztzdHJ1Y3QgbDJuaWNfcG9ydF9zdGF0c19pbmZvIHsKJiM0MzsJc3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7CiYjNDM7CXUxNiAgICAgICAgICAgICAgICAgIGZ1bmNfaWQ7CiYjNDM7CXUxNiAgICAgICAgICAgICAgICAgIHJzdmQxOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHsKJiM0MzsJdTY0IHR4X3VuaWNhc3RfcGt0c192cG9ydDsKJiM0MzsJdTY0IHR4X3VuaWNhc3RfYnl0ZXNfdnBvcnQ7CiYjNDM7CXU2NCB0eF9tdWx0aWNhc3RfcGt0c192cG9ydDsKJiM0MzsJdTY0IHR4X211bHRpY2FzdF9ieXRlc192cG9ydDsKJiM0MzsJdTY0IHR4X2Jyb2FkY2FzdF9wa3RzX3Zwb3J0OwomIzQzOwl1NjQgdHhfYnJvYWRjYXN0X2J5dGVzX3Zwb3J0OwomIzQzOwomIzQzOwl1NjQgcnhfdW5pY2FzdF9wa3RzX3Zwb3J0OwomIzQzOwl1NjQgcnhfdW5pY2FzdF9ieXRlc192cG9ydDsKJiM0MzsJdTY0IHJ4X211bHRpY2FzdF9wa3RzX3Zwb3J0OwomIzQzOwl1NjQgcnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0OwomIzQzOwl1NjQgcnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7CiYjNDM7CXU2NCByeF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7CiYjNDM7CiYjNDM7CXU2NCB0eF9kaXNjYXJkX3Zwb3J0OwomIzQzOwl1NjQgcnhfZGlzY2FyZF92cG9ydDsKJiM0MzsJdTY0IHR4X2Vycl92cG9ydDsKJiM0MzsJdTY0IHJ4X2Vycl92cG9ydDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBsMm5pY19jbWRfdnBvcnRfc3RhdHMgewomIzQzOwlzdHJ1Y3QgbWdtdF9tc2dfaGVhZCAgICAgbXNnX2hlYWQ7CiYjNDM7CXUzMiAgICAgICAgICAgICAgICAgICAgICBzdGF0c19zaXplOwomIzQzOwl1MzIgICAgICAgICAgICAgICAgICAgICAgcnN2ZDE7CiYjNDM7CXN0cnVjdCBsMm5pY192cG9ydF9zdGF0cyBzdGF0czsKJiM0MzsJdTY0ICAgICAgICAgICAgICAgICAgICAgIHJzdmQyWzZdOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbDJuaWNfY21kX2xyb19jb25maWcgewogCXN0cnVjdCBtZ210X21zZ19oZWFkIG1zZ19oZWFkOwogCXUxNiAgICAgICAgICAgICAgICAgIGZ1bmNfaWQ7CkBAIC0yMzQsNiAmIzQzOzI2OSw3IEBAIGVudW0gbDJuaWNfY21kIHsKIAlMMk5JQ19DTURfU0VUX1ZQT1JUX0VOQUJMRSAgICA9IDYsCiAJTDJOSUNfQ01EX1NFVF9SWF9NT0RFICAgICAgICAgPSA3LAogCUwyTklDX0NNRF9TRVRfU1FfQ0lfQVRUUiAgICAgID0gOCwKJiM0MzsJTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFUICAgICAgPSA5LAogCUwyTklDX0NNRF9DTEVBUl9RUF9SRVNPVVJDRSAgID0gMTEsCiAJTDJOSUNfQ01EX0NGR19SWF9MUk8gICAgICAgICAgPSAxMywKIAlMMk5JQ19DTURfQ0ZHX0xST19USU1FUiAgICAgICA9IDE0LApAQCAtMjcyLDYgJiM0MzszMDgsNyBAQCBlbnVtIG1hZ19jbWQgewogCU1BR19DTURfU0VUX1BPUlRfRU5BQkxFID0gNiwKIAlNQUdfQ01EX0dFVF9MSU5LX1NUQVRVUyA9IDcsCiAKJiM0MzsJTUFHX0NNRF9HRVRfUE9SVF9TVEFUICAgPSAxNTEsCiAJTUFHX0NNRF9HRVRfUE9SVF9JTkZPICAgPSAxNTMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uZXRkZXZfb3BzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uZXRkZXZfb3BzLmMKaW5kZXggZGE3MzgxMTY0MWE5ZC4uZWQ0ODEwZmE5ODUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuYwpAQCAtMzQxLDkgJiM0MzszNDEsOSBAQCBzdGF0aWMgaW50IGhpbmljM19tYXliZV9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIGVuYWJsZSkKIAlzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnI7CiAKLQltdXRleF9sb2NrKCZhbXA7bmljX2Rldi0mZ3Q7cG9ydF9zdGF0ZV9tdXRleCk7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKIAllcnIgPSBoaW5pYzNfc2V0X3BvcnRfZW5hYmxlKG5pY19kZXYtJmd0O2h3ZGV2LCBlbmFibGUpOwotCW11dGV4X3VubG9jaygmYW1wO25pY19kZXYtJmd0O3BvcnRfc3RhdGVfbXV0ZXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuaWNfZGV2LSZndDtzdGF0ZV9sb2NrKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmMKaW5kZXggZGU1YTc5ODRkMmNiOS4uMWIxNGRjODI0Y2UxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuYwpAQCAtNjM5LDYgJiM0Mzs2MzksNDIgQEAgaW50IGhpbmljM19nZXRfbGlua19zdGF0dXMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIGJvb2wgKmxpbmtfc3RhdHVzX3VwKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzX2luZm8gc3RhdHNfaW5mbyA9IHt9OwomIzQzOwlzdHJ1Y3QgbWFnX2NtZF9nZXRfcG9ydF9zdGF0ICpwczsKJiM0MzsJc3RydWN0IG1nbXRfbXNnX3BhcmFtcyBtc2dfcGFyYW1zID0ge307CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXBzID0ga3phbGxvY19vYmooKnBzKTsKJiM0MzsJaWYgKCFwcykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlzdGF0c19pbmZvLnBvcnRfaWQgPSBoaW5pYzNfcGh5c2ljYWxfcG9ydF9pZChod2Rldik7CiYjNDM7CiYjNDM7CW1nbXRfbXNnX3BhcmFtc19pbml0X2luX291dCgmYW1wO21zZ19wYXJhbXMsICZhbXA7c3RhdHNfaW5mbywgcHMsCiYjNDM7CQkJCSAgICBzaXplb2Yoc3RhdHNfaW5mbyksIHNpemVvZigqcHMpKTsKJiM0MzsKJiM0MzsJZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9ISUxJTkssCiYjNDM7CQkJCSAgICAgICBNQUdfQ01EX0dFVF9QT1JUX1NUQVQsICZhbXA7bXNnX3BhcmFtcyk7CiYjNDM7CiYjNDM7CWlmIChlcnIgfHwgcHMtJmd0O2hlYWQuc3RhdHVzKSB7CiYjNDM7CQlkZXZfZXJyKGh3ZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtGYWlsZWQgdG8gZ2V0IHBvcnQgc3RhdGlzdGljcywgZXJyOiAlZCwgc3RhdHVzOiAweCV4XG4mIzM0OywKJiM0MzsJCQllcnIsIHBzLSZndDtoZWFkLnN0YXR1cyk7CiYjNDM7CQllcnIgPSAtRUZBVUxUOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWVtY3B5KHN0YXRzLCAmYW1wO3BzLSZndDtjb3VudGVyLCBzaXplb2YoKnN0YXRzKSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlrZnJlZShwcyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwogaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LAogCQkJIHN0cnVjdCBoaW5pYzNfbmljX3BvcnRfaW5mbyAqcG9ydF9pbmZvKQogewpAQCAtNzM4LDMgJiM0Mzs3NzQsMzEgQEAgaW50IGhpbmljM19nZXRfcGF1c2VfaW5mbyhzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYsCiAJcmV0dXJuIGhpbmljM19jZmdfaHdfcGF1c2UobmljX2Rldi0mZ3Q7aHdkZXYsIE1HTVRfTVNHX0NNRF9PUF9HRVQsCiAJCQkJICAgbmljX3BhdXNlKTsKIH0KJiM0MzsKJiM0MztpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsCiYjNDM7CQkJICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBsMm5pY19jbWRfdnBvcnRfc3RhdHMgdnBvcnRfc3RhdHMgPSB7fTsKJiM0MzsJc3RydWN0IGwybmljX3BvcnRfc3RhdHNfaW5mbyBzdGF0c19pbmZvID0ge307CiYjNDM7CXN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzdGF0c19pbmZvLmZ1bmNfaWQgPSBmdW5jX2lkOwomIzQzOwomIzQzOwltZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoJmFtcDttc2dfcGFyYW1zLCAmYW1wO3N0YXRzX2luZm8sICZhbXA7dnBvcnRfc3RhdHMsCiYjNDM7CQkJCSAgICBzaXplb2Yoc3RhdHNfaW5mbyksIHNpemVvZih2cG9ydF9zdGF0cykpOwomIzQzOwomIzQzOwllcnIgPSBoaW5pYzNfc2VuZF9tYm94X3RvX21nbXQoaHdkZXYsIE1HTVRfTU9EX0wyTklDLAomIzQzOwkJCQkgICAgICAgTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFULCAmYW1wO21zZ19wYXJhbXMpOwomIzQzOwomIzQzOwlpZiAoZXJyIHx8IHZwb3J0X3N0YXRzLm1zZ19oZWFkLnN0YXR1cykgewomIzQzOwkJZGV2X2Vycihod2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcbiYjMzQ7LAomIzQzOwkJCWVyciwgdnBvcnRfc3RhdHMubXNnX2hlYWQuc3RhdHVzKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbWNweShzdGF0cywgJmFtcDt2cG9ydF9zdGF0cy5zdGF0cywgc2l6ZW9mKCpzdGF0cykpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmgKaW5kZXggNWQ1MjIwMmE4ZDRlYi4uODA1NzNjMTIxNTM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaApAQCAtMTI5LDYgJiM0MzsxMjksMTEwIEBAIHN0cnVjdCBtYWdfY21kX2dldF94c2ZwX3ByZXNlbnQgewogCXU4ICAgICAgICAgICAgICAgICAgIHJzdmRbMl07CiB9OwogCiYjNDM7c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyB7CiYjNDM7CXU2NCBtYWNfdHhfZnJhZ21lbnRfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF91bmRlcnNpemVfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF91bmRlcm1pbl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzY0X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzY1XzEyN19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF8xMjhfMjU1X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzI1Nl81MTFfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfNTEyXzEwMjNfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfMTAyNF8xNTE4X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzE1MTlfMjA0N19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfNDA5Nl84MTkxX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzgxOTJfOTIxNl9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF85MjE3XzEyMjg3X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzE1MTlfbWF4X2JhZF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4XzE1MTlfbWF4X2dvb2RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2phYmJlcl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2JhZF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2JhZF9vY3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2dvb2RfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9nb29kX29jdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfdG90YWxfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF90b3RhbF9vY3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X3VuaV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X211bHRpX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfYnJvYWRfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wYXVzZV9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3ByaTBfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wZmNfcHJpMV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X3BmY19wcmkyX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3ByaTNfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wZmNfcHJpNF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X3BmY19wcmk1X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfcGZjX3ByaTZfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9wZmNfcHJpN19wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2NvbnRyb2xfcGt0X251bTsKJiM0MzsJdTY0IG1hY190eF9lcnJfYWxsX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfdHhfZnJvbV9hcHBfZ29vZF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3R4X2Zyb21fYXBwX2JhZF9wa3RfbnVtOwomIzQzOwomIzQzOwl1NjQgbWFjX3J4X2ZyYWdtZW50X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdW5kZXJzaXplX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdW5kZXJtaW5fcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF82NF9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF82NV8xMjdfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8yNTZfNTExX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xNTE5XzIwNDdfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF84MTkyXzkyMTZfb2N0X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfOTIxN18xMjI4N19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xNTE5X21heF9iYWRfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfb3ZlcnNpemVfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9qYWJiZXJfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9iYWRfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9iYWRfb2N0X251bTsKJiM0MzsJdTY0IG1hY19yeF9nb29kX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfZ29vZF9vY3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3RvdGFsX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdG90YWxfb2N0X251bTsKJiM0MzsJdTY0IG1hY19yeF91bmlfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9tdWx0aV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X2Jyb2FkX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGF1c2VfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wcmkwX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGZjX3ByaTFfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wcmkzX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGZjX3ByaTRfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X3BmY19wcmk2X3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfcGZjX3ByaTdfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9jb250cm9sX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfc3ltX2Vycl9wa3RfbnVtOwomIzQzOwl1NjQgbWFjX3J4X2Zjc19lcnJfcGt0X251bTsKJiM0MzsJdTY0IG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfc2VuZF9hcHBfYmFkX3BrdF9udW07CiYjNDM7CXU2NCBtYWNfcnhfdW5maWx0ZXJfcGt0X251bTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyB7CiYjNDM7CXN0cnVjdCBtZ210X21zZ19oZWFkIGhlYWQ7CiYjNDM7CiYjNDM7CXU4ICAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7CiYjNDM7CXU4ICAgICAgICAgICAgICAgICAgIHJzdmQwWzNdOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCB7CiYjNDM7CXN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDsKJiM0MzsKJiM0MzsJc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyBjb3VudGVyOwomIzQzOwl1NjQgICAgICAgICAgICAgICAgICAgICAgIHJzdmQxWzE1XTsKJiM0Mzt9OwomIzQzOwogZW51bSBsaW5rX2Vycl90eXBlIHsKIAlMSU5LX0VSUl9NT0RVTEVfVU5SRUNPR0VOSVpFRCwKIAlMSU5LX0VSUl9OVU0sCkBAIC0yMDksNiAmIzQzOzMxMywxMSBAQCBpbnQgaGluaWMzX2dldF9wb3J0X2luZm8oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsCiAJCQkgc3RydWN0IGhpbmljM19uaWNfcG9ydF9pbmZvICpwb3J0X2luZm8pOwogaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCwKIAkJCSAgICBib29sIGVuYWJsZSk7CiYjNDM7aW50IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpOwomIzQzO2ludCBoaW5pYzNfZ2V0X3Zwb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCwKJiM0MzsJCQkgICBzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgKnN0YXRzKTsKJiM0MzsKIGludCBoaW5pYzNfYWRkX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7CiBpbnQgaGluaWMzX2RlbF92bGFuKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgdmxhbl9pZCwgdTE2IGZ1bmNfaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmgKaW5kZXggOTUwMjI5M2ZmNzEwYy4uOTRhMmJhYjUyNTY0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaApAQCAtMTAsNiAmIzQzOzEwLDggQEAKICNpbmNsdWRlICYjMzQ7aGluaWMzX2h3X2NmZy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGluaWMzX2h3ZGV2LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoaW5pYzNfcnguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtoaW5pYzNfdHguaCYjMzQ7CiAKICNkZWZpbmUgSElOSUMzX1ZMQU5fQklUTUFQX0JZVEVfU0laRShuaWNfZGV2KSAgKHNpemVvZigqKG5pY19kZXYpLSZndDt2bGFuX2JpdG1hcCkpCiAjZGVmaW5lIEhJTklDM19WTEFOX0JJVE1BUF9TSVpFKG5pY19kZXYpICBcCkBAIC0xMjcsOCAmIzQzOzEyOSw4IEBAIHN0cnVjdCBoaW5pYzNfbmljX2RldiB7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgICAgICAgICAqd29ya3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAgICAgICAgICAgICBwZXJpb2RpY193b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgcnhfbW9kZV93b3JrOwotCS8qIGxvY2sgZm9yIGVuYWJsZS9kaXNhYmxlIHBvcnQgKi8KLQlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIHBvcnRfc3RhdGVfbXV0ZXg7CiYjNDM7CS8qIFByb3RlY3RzIGludGVyZmFjZSBzdGF0ZSAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIHN0YXRlX2xvY2s7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIHVjX2ZpbHRlcl9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgbWNfZmlsdGVyX2xpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguYwppbmRleCAzMDlhYjU5MDEzNzk3Li4yOThmYzA4MTc2ODBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMKQEAgLTI4LDEwICYjNDM7MjgsNiBAQAogCiAjZGVmaW5lIEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNCAgICAgNjYKICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2ICAgICA4NgotI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOKGNxZSkgXAotCShSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVCgoY3FlKS0mZ3Q7b2ZmbG9hZF90eXBlLCBJUF9UWVBFKSA9PSBcCi0JIEhJTklDM19SWF9JUFY2X1BLVCA/IEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNiA6IFwKLQkgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0KQogCiBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpCiB7CkBAIC00Niw3ICYjNDM7NDIsNiBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpCiAKIAlyeHFfc3RhdHMtJmd0O2FsbG9jX3NrYl9lcnIgPSAwOwogCXJ4cV9zdGF0cy0mZ3Q7YWxsb2NfcnhfYnVmX2VyciA9IDA7Ci0JcnhxX3N0YXRzLSZndDtyZXN0b3JlX2Ryb3Bfc2dlID0gMDsKIAl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cV9zdGF0cy0mZ3Q7c3luY3ApOwogfQogCkBAIC0xNDcsNiAmIzQzOzE0Miw4IEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKQogewogCXUzMiBpLCBmcmVlX3dxZWJicyA9IHJ4cS0mZ3Q7ZGVsdGEgLSAxOwogCXN0cnVjdCBoaW5pYzNfcnhfaW5mbyAqcnhfaW5mbzsKJiM0MzsJc3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCWludCBlcnI7CiAKQEAgLTE1NSw4ICYjNDM7MTUyLDEzIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKQogCiAJCWVyciA9IHJ4X2FsbG9jX21hcHBlZF9wYWdlKHJ4cS0mZ3Q7cGFnZV9wb29sLCByeF9pbmZvLAogCQkJCQkgICByeHEtJmd0O2J1Zl9sZW4pOwotCQlpZiAodW5saWtlbHkoZXJyKSkKJiM0MzsJCWlmICh1bmxpa2VseShlcnIpKSB7CiYjNDM7CQkJc3luY3AgPSAmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwOwomIzQzOwkJCWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKHN5bmNwKTsKJiM0MzsJCQlyeHEtJmd0O3J4cV9zdGF0cy5hbGxvY19yeF9idWZfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKHN5bmNwLCBmbGFncyk7CiAJCQlicmVhazsKJiM0MzsJCX0KIAogCQlkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocnhfaW5mby0mZ3Q7cGFnZSkgJiM0MzsKIAkJCXJ4X2luZm8tJmd0O3BhZ2Vfb2Zmc2V0OwpAQCAtMTcwLDYgJiM0MzsxNzIsMTEgQEAgc3RhdGljIHUzMiBoaW5pYzNfcnhfZmlsbF9idWZmZXJzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEpCiAJCQkJcnhxLSZndDtuZXh0X3RvX3VwZGF0ZSAmbHQ7Jmx0OyBISU5JQzNfTk9STUFMX1JRX1dRRSk7CiAJCXJ4cS0mZ3Q7ZGVsdGEgLT0gaTsKIAkJcnhxLSZndDtuZXh0X3RvX2FsbG9jID0gcnhxLSZndDtuZXh0X3RvX3VwZGF0ZTsKJiM0MzsJfSBlbHNlIGlmIChmcmVlX3dxZWJicyA9PSByeHEtJmd0O3FfZGVwdGggLSAxKSB7CiYjNDM7CQlzeW5jcCA9ICZhbXA7cnhxLSZndDtyeHFfc3RhdHMuc3luY3A7CiYjNDM7CQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7CiYjNDM7CQlyeHEtJmd0O3J4cV9zdGF0cy5yeF9idWZfZW1wdHkmIzQzOyYjNDM7OwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShzeW5jcCwgZmxhZ3MpOwogCX0KIAogCXJldHVybiBpOwpAQCAtMzMwLDExICYjNDM7MzM3LDI0IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeF9jc3VtKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHUzMiBvZmZsb2FkX3R5cGUsCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHJ4cS0mZ3Q7bmV0ZGV2OwogCWJvb2wgbDJfdHVubmVsOwogCiYjNDM7CS8qIEhXIGVuc3VyZXMgdGhhdCBvbmx5IDEgYml0IGlzIHNldCBpbiBjc3VtX2Vyci4gKi8KJiM0MzsJaWYgKHVubGlrZWx5KGNzdW1fZXJyID09IEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSKSkgewomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCXJ4cS0mZ3Q7cnhxX3N0YXRzLm90aGVyX2Vycm9ycyYjNDM7JiM0Mzs7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJfQomIzQzOwogCWlmICghKG5ldGRldi0mZ3Q7ZmVhdHVyZXMgJmFtcDsgTkVUSUZfRl9SWENTVU0pKQogCQlyZXR1cm47CiAKIAlpZiAodW5saWtlbHkoY3N1bV9lcnIpKSB7CiAJCS8qIHBrdCB0eXBlIGlzIHJlY29nbml6ZWQgYnkgSFcsIGFuZCBjc3VtIGlzIHdyb25nICovCiYjNDM7CQlpZiAoY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpIHsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7cnhxLSZndDtyeHFfc3RhdHMuc3luY3ApOwomIzQzOwkJCXJ4cS0mZ3Q7cnhxX3N0YXRzLmNzdW1fZXJyb3JzJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCX0KIAkJc2tiLSZndDtpcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQlyZXR1cm47CiAJfQpAQCAtMzg3LDggJiM0Mzs0MDcsMTIgQEAgc3RhdGljIGludCByZWN2X29uZV9wa3Qoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZSwKIAl1MTYgbnVtX2xybzsKIAogCXNrYiA9IGhpbmljM19mZXRjaF9yeF9idWZmZXIocnhxLCBwa3RfbGVuKTsKLQlpZiAodW5saWtlbHkoIXNrYikpCiYjNDM7CWlmICh1bmxpa2VseSghc2tiKSkgewomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCXJ4cS0mZ3Q7cnhxX3N0YXRzLmFsbG9jX3NrYl9lcnImIzQzOyYjNDM7OwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtyeHEtJmd0O3J4cV9zdGF0cy5zeW5jcCk7CiAJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiAKIAkvKiBwbGFjZSBoZWFkZXIgaW4gbGluZWFyIHBvcnRpb24gb2YgYnVmZmVyICovCiAJaWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSkKQEAgLTU1MCwxMSAmIzQzOzU3NCwyOSBAQCBpbnQgaGluaWMzX2NvbmZpZ3VyZV9yeHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fcnEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mzt2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsCiYjNDM7CQkJICBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzID0gJmFtcDtyeHEtJmd0O3J4cV9zdGF0czsKJiM0MzsJdW5zaWduZWQgaW50IHN0YXJ0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbigmYW1wO3J4cV9zdGF0cy0mZ3Q7c3luY3ApOwomIzQzOwkJc3RhdHMtJmd0O2NzdW1fZXJyb3JzID0gcnhxX3N0YXRzLSZndDtjc3VtX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDtvdGhlcl9lcnJvcnMgPSByeHFfc3RhdHMtJmd0O290aGVyX2Vycm9yczsKJiM0MzsJCXN0YXRzLSZndDtyeF9idWZfZW1wdHkgPSByeHFfc3RhdHMtJmd0O3J4X2J1Zl9lbXB0eTsKJiM0MzsJCXN0YXRzLSZndDthbGxvY19za2JfZXJyID0gcnhxX3N0YXRzLSZndDthbGxvY19za2JfZXJyOwomIzQzOwkJc3RhdHMtJmd0O2FsbG9jX3J4X2J1Zl9lcnIgPSByeHFfc3RhdHMtJmd0O2FsbG9jX3J4X2J1Zl9lcnI7CiYjNDM7CX0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeSgmYW1wO3J4cV9zdGF0cy0mZ3Q7c3luY3AsIHN0YXJ0KSk7CiYjNDM7fQomIzQzOwogaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYocnhxLSZndDtuZXRkZXYpOwomIzQzOwl1MzIgaXBfdHlwZSwgb2ZmbG9hZF90eXBlLCBwa3RfaGRyX2xlbjsKIAl1MzIgc3dfY2ksIHN0YXR1cywgcGt0X2xlbiwgdmxhbl9sZW47CiAJc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZTsKJiM0MzsJdTY0IHJ4X2J5dGVzID0gMDsKIAl1MzIgbnVtX3dxZSA9IDA7CiAJaW50IG5yX3BrdHMgPSAwOwogCXUxNiBudW1fbHJvOwpAQCAtNTc0LDEwICYjNDM7NjE2LDIwIEBAIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KQogCQlpZiAocmVjdl9vbmVfcGt0KHJ4cSwgcnhfY3FlLCBwa3RfbGVuLCB2bGFuX2xlbiwgc3RhdHVzKSkKIAkJCWJyZWFrOwogCiYjNDM7CQlyeF9ieXRlcyAmIzQzOz0gcGt0X2xlbjsKIAkJbnJfcGt0cyYjNDM7JiM0Mzs7CiAJCW51bV9scm8gPSBSUV9DUUVfU1RBVFVTX0dFVChzdGF0dXMsIE5VTV9MUk8pOwotCQlpZiAobnVtX2xybykKJiM0MzsJCWlmIChudW1fbHJvKSB7CiYjNDM7CQkJb2ZmbG9hZF90eXBlID0gbGUzMl90b19jcHUocnhfY3FlLSZndDtvZmZsb2FkX3R5cGUpOwomIzQzOwkJCWlwX3R5cGUgPSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVChvZmZsb2FkX3R5cGUsCiYjNDM7CQkJCQkJCSAgSVBfVFlQRSk7CiYjNDM7CQkJcGt0X2hkcl9sZW4gPSBpcF90eXBlID09IEhJTklDM19SWF9JUFY2X1BLVCA/CiYjNDM7CQkJCSAgICAgIEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNiA6CiYjNDM7CQkJCSAgICAgIEhJTklDM19MUk9fUEtUX0hEUl9MRU5fSVBWNDsKJiM0MzsKJiM0MzsJCQlyeF9ieXRlcyAmIzQzOz0gKG51bV9scm8gLSAxKSAqIHBrdF9oZHJfbGVuOwogCQkJbnVtX3dxZSAmIzQzOz0gaGluaWMzX2dldF9zZ2VfbnVtKHJ4cSwgcGt0X2xlbik7CiYjNDM7CQl9CiAKIAkJcnhfY3FlLSZndDtzdGF0dXMgPSAwOwogCkBAIC01ODgsNSAmIzQzOzY0MCwxMCBAQCBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCkKIAlpZiAocnhxLSZndDtkZWx0YSAmZ3Q7PSBISU5JQzNfUlhfQlVGRkVSX1dSSVRFKQogCQloaW5pYzNfcnhfZmlsbF9idWZmZXJzKHJ4cSk7CiAKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3J4cS0mZ3Q7cnhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJcnhxLSZndDtyeHFfc3RhdHMucGFja2V0cyAmIzQzOz0gKHU2NClucl9wa3RzOwomIzQzOwlyeHEtJmd0O3J4cV9zdGF0cy5ieXRlcyAmIzQzOz0gcnhfYnl0ZXM7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7cnhxLSZndDtyeHFfc3RhdHMuc3luY3ApOwomIzQzOwogCXJldHVybiBucl9wa3RzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmgKaW5kZXggMDZkMWIzMjk5ZTdjZi4uMmFiNjkxZWQxMWE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oCkBAIC04LDYgJiM0Mzs4LDE3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZGltLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAKJiM0MzsvKiByeCBjcWUgY2hlY2tzdW0gZXJyICovCiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JUF9DU1VNX0VSUiAgICAgIEJJVCgwKQomIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVENQX0NTVU1fRVJSICAgICBCSVQoMSkKJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX1VEUF9DU1VNX0VSUiAgICAgQklUKDIpCiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JR01QX0NTVU1fRVJSICAgIEJJVCgzKQomIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY0X0NTVU1fRVJSICBCSVQoNCkKJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lDTVBWNl9DU1VNX0VSUiAgQklUKDUpCiYjNDM7I2RlZmluZSBISU5JQzNfUlhfQ1NVTV9TQ1RQX0NSQ19FUlIgICAgIEJJVCg2KQomIzQzOyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSFdfQ0hFQ0tfTk9ORSAgICBCSVQoNykKJiM0MzsjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSICAgQklUKDgpCiYjNDM7CiAjZGVmaW5lIFJRX0NRRV9PRkZPTEFEX1RZUEVfUEtUX1RZUEVfTUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKQogI2RlZmluZSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0lQX1RZUEVfTUFTSyAgICAgICAgICAgIEdFTk1BU0soNiwgNSkKICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9UVU5ORUxfUEtUX0ZPUk1BVF9NQVNLICBHRU5NQVNLKDExLCA4KQpAQCAtMzksNyAmIzQzOzUwLDYgQEAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgewogCXU2NCAgICAgICAgICAgICAgICAgICByeF9idWZfZW1wdHk7CiAJdTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3NrYl9lcnI7CiAJdTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3J4X2J1Zl9lcnI7Ci0JdTY0ICAgICAgICAgICAgICAgICAgIHJlc3RvcmVfZHJvcF9zZ2U7CiAJc3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwOwogfTsKIApAQCAtMTAxLDkgJiM0MzsxMTEsNiBAQCBzdHJ1Y3QgaGluaWMzX3J4cSB7CiAJZG1hX2FkZHJfdCAgICAgICAgICAgICBjcWVfc3RhcnRfcGFkZHI7CiAKIAlzdHJ1Y3QgZGltICAgICAgICAgICAgIGRpbTsKLQotCXU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2FsZXNjX3RpbWVyX2NmZzsKLQl1OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfcGVuZGluZ19saW1pdDsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBzdHJ1Y3QgaGluaWMzX2R5bmFfcnhxX3JlcyB7CkBAIC0xMjMsNiAmIzQzOzEzMCw5IEBAIHZvaWQgaGluaWMzX2ZyZWVfcnhxc19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSwKIAkJCSAgdTMyIHJxX2RlcHRoLCBzdHJ1Y3QgaGluaWMzX2R5bmFfcnhxX3JlcyAqcnhxc19yZXMpOwogaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLAogCQkJICB1MzIgcnFfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzICpyeHFzX3Jlcyk7CiYjNDM7CiYjNDM7dm9pZCBoaW5pYzNfcnhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLAomIzQzOwkJCSAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKTsKIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYwppbmRleCA5MzA2YmYwMDIwY2FmLi42MjE5Y2MxMDkxOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmMKQEAgLTI1LDExICYjNDM7MjUsOSBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfdHhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICp0eHFfc3RhdHMpCiAJdHhxX3N0YXRzLSZndDtkcm9wcGVkID0gMDsKIAogCXR4cV9zdGF0cy0mZ3Q7c2tiX3BhZF9lcnIgPSAwOwotCXR4cV9zdGF0cy0mZ3Q7ZnJhZ19sZW5fb3ZlcmZsb3cgPSAwOwogCXR4cV9zdGF0cy0mZ3Q7b2ZmbG9hZF9jb3dfc2tiX2VyciA9IDA7CiAJdHhxX3N0YXRzLSZndDttYXBfZnJhZ19lcnIgPSAwOwogCXR4cV9zdGF0cy0mZ3Q7dW5rbm93bl90dW5uZWxfcGt0ID0gMDsKLQl0eHFfc3RhdHMtJmd0O2ZyYWdfc2l6ZV9lcnIgPSAwOwogCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxX3N0YXRzLSZndDtzeW5jcCk7CiB9CiAKQEAgLTk3LDggJiM0Mzs5NSwxMiBAQCBzdGF0aWMgaW50IGhpbmljM190eF9tYXBfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAlkbWFfaW5mb1swXS5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmYW1wO3BkZXYtJmd0O2Rldiwgc2tiLSZndDtkYXRhLAogCQkJCQkgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7Ci0JaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhbXA7cGRldi0mZ3Q7ZGV2LCBkbWFfaW5mb1swXS5kbWEpKQomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmFtcDtwZGV2LSZndDtkZXYsIGRtYV9pbmZvWzBdLmRtYSkpIHsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQl0eHEtJmd0O3R4cV9zdGF0cy5tYXBfZnJhZ19lcnImIzQzOyYjNDM7OwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiAKIAlkbWFfaW5mb1swXS5sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCkBAIC0xMTcsNiAmIzQzOzExOSw5IEBAIHN0YXRpYyBpbnQgaGluaWMzX3R4X21hcF9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSwKIAkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYW1wO3BkZXYtJmd0O2RldiwgZG1hX2luZm9baWR4XS5kbWEpKSB7CiYjNDM7CQkJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3R4cS0mZ3Q7dHhxX3N0YXRzLnN5bmNwKTsKJiM0MzsJCQl0eHEtJmd0O3R4cV9zdGF0cy5tYXBfZnJhZ19lcnImIzQzOyYjNDM7OwomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyX3VubWFwX3BhZ2U7CiAJCX0KQEAgLTI2MCw2ICYjNDM7MjY1LDkgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfY3N1bShzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBzdHJ1Y3QgaGluaWMzX3NxX3Rhc2sgKnRhc2ssCiAJCWlmIChsNF9wcm90byAhPSBJUFBST1RPX1VEUCB8fAogCQkgICAgKChzdHJ1Y3QgdWRwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktJmd0O2Rlc3QgIT0KIAkJICAgIFZYTEFOX09GRkxPQURfUE9SVF9MRSkgewomIzQzOwkJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQkJdHhxLSZndDt0eHFfc3RhdHMudW5rbm93bl90dW5uZWxfcGt0JiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3R4cS0mZ3Q7dHhxX3N0YXRzLnN5bmNwKTsKIAkJCS8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovCiAJCQlza2JfY2hlY2tzdW1faGVscChza2IpOwogCQkJcmV0dXJuIDA7CkBAIC00MzMsNiAmIzQzOzQ0MSwyNyBAQCBzdGF0aWMgdTMyIGhpbmljM190eF9vZmZsb2FkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoaW5pYzNfc3FfdGFzayAqdGFzaywKIAlyZXR1cm4gb2ZmbG9hZDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcGt0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwl1MzIgaGRyX2xlbiwgdHhfYnl0ZXM7CiYjNDM7CXVuc2lnbmVkIHNob3J0IHBrdHM7CiYjNDM7CiYjNDM7CWlmIChza2JfaXNfZ3NvKHNrYikpIHsKJiM0MzsJCWhkcl9sZW4gPSAoc2tiX3NoaW5mbyhza2IpLSZndDtnc29fc2VncyAtIDEpICoKJiM0MzsJCQkgIHNrYl90Y3BfYWxsX2hlYWRlcnMoc2tiKTsKJiM0MzsJCXR4X2J5dGVzID0gc2tiLSZndDtsZW4gJiM0MzsgaGRyX2xlbjsKJiM0MzsJCXBrdHMgPSBza2Jfc2hpbmZvKHNrYiktJmd0O2dzb19zZWdzOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdHhfYnl0ZXMgPSBza2ItJmd0O2xlbiAmZ3Q7IEVUSF9aTEVOID8gc2tiLSZndDtsZW4gOiBFVEhfWkxFTjsKJiM0MzsJCXBrdHMgPSAxOwomIzQzOwl9CiYjNDM7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CXR4cS0mZ3Q7dHhxX3N0YXRzLmJ5dGVzICYjNDM7PSB0eF9ieXRlczsKJiM0MzsJdHhxLSZndDt0eHFfc3RhdHMucGFja2V0cyAmIzQzOz0gcGt0czsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2FuZF91cGRhdGVfc3Ffb3duZXIoc3RydWN0IGhpbmljM19pb19xdWV1ZSAqc3EsCiAJCQkJCSAgdTE2IGN1cnJfcGksIHUxNiB3cWViYl9jbnQpCiB7CkBAIC01MzksOCAmIzQzOzU2OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWludCBlcnI7CiAKIAlpZiAodW5saWtlbHkoc2tiLSZndDtsZW4gJmx0OyBNSU5fU0tCX0xFTikpIHsKLQkJaWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi0mZ3Q7bGVuKSkKJiM0MzsJCWlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItJmd0O2xlbikpIHsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwomIzQzOwkJCXR4cS0mZ3Q7dHhxX3N0YXRzLnNrYl9wYWRfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCQl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3R4cS0mZ3Q7dHhxX3N0YXRzLnN5bmNwKTsKIAkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KIAogCQlza2ItJmd0O2xlbiA9IE1JTl9TS0JfTEVOOwogCX0KQEAgLTU1NywxMSAmIzQzOzU5MCwxNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQloaW5pYzNfd3FfZnJlZV93cWViYnMoJmFtcDt0eHEtJmd0O3NxLSZndDt3cSksCiAJCQkJCXR4cS0mZ3Q7dHhfc3RhcnRfdGhycyk7CiAKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQl0eHEtJmd0O3R4cV9zdGF0cy5idXN5JiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCiAJb2ZmbG9hZCA9IGhpbmljM190eF9vZmZsb2FkKHNrYiwgJmFtcDt0YXNrLCAmYW1wO3F1ZXVlX2luZm8sIHR4cSk7CiAJaWYgKHVubGlrZWx5KG9mZmxvYWQgPT0gSElOSUMzX1RYX09GRkxPQURfSU5WQUxJRCkpIHsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CQl0eHEtJmd0O3R4cV9zdGF0cy5vZmZsb2FkX2Nvd19za2JfZXJyJiM0MzsmIzQzOzsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwogCQlnb3RvIGVycl9kcm9wX3BrdDsKIAl9IGVsc2UgaWYgKCFvZmZsb2FkKSB7CiAJCXdxZWJiX2NudCAtPSAxOwpAQCAtNTk1LDYgJiM0Mzs2MzQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgdHhxLSZndDt0eF9zdG9wX3RocnMsCiAJCQkJICB0eHEtJmd0O3R4X3N0YXJ0X3RocnMpOwogCiYjNDM7CWhpbmljM19nZXRfcGt0X3N0YXRzKHR4cSwgc2tiKTsKIAloaW5pYzNfcHJlcGFyZV9zcV9jdHJsKCZhbXA7d3FlX2NvbWJvLCBxdWV1ZV9pbmZvLCBudW1fc2dlLCBvd25lcik7CiAJaGluaWMzX3dyaXRlX2RiKHR4cS0mZ3Q7c3EsIDAsIERCX0NGTEFHX0RQX1NRLAogCQkJaGluaWMzX2dldF9zcV9sb2NhbF9waSh0eHEtJmd0O3NxKSk7CkBAIC02MDQsNiAmIzQzOzY0NCwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogZXJyX2Ryb3BfcGt0OgogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiBlcnJfb3V0OgomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7dHhxLSZndDt0eHFfc3RhdHMuc3luY3ApOwomIzQzOwl0eHEtJmd0O3R4cV9zdGF0cy5kcm9wcGVkJiM0MzsmIzQzOzsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDt0eHEtJmd0O3R4cV9zdGF0cy5zeW5jcCk7CiYjNDM7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtNzU0LDYgJiM0Mzs3OTgsMjIgQEAgaW50IGhpbmljM19jb25maWd1cmVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3NxLAogCXJldHVybiAwOwogfQogCiYjNDM7dm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLAomIzQzOwkJCSAgc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnN0YXRzKQomIzQzO3sKJiM0MzsJc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnR4cV9zdGF0cyA9ICZhbXA7dHhxLSZndDt0eHFfc3RhdHM7CiYjNDM7CXVuc2lnbmVkIGludCBzdGFydDsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW4oJmFtcDt0eHFfc3RhdHMtJmd0O3N5bmNwKTsKJiM0MzsJCXN0YXRzLSZndDtidXN5ID0gdHhxX3N0YXRzLSZndDtidXN5OwomIzQzOwkJc3RhdHMtJmd0O3NrYl9wYWRfZXJyID0gdHhxX3N0YXRzLSZndDtza2JfcGFkX2VycjsKJiM0MzsJCXN0YXRzLSZndDtvZmZsb2FkX2Nvd19za2JfZXJyID0gdHhxX3N0YXRzLSZndDtvZmZsb2FkX2Nvd19za2JfZXJyOwomIzQzOwkJc3RhdHMtJmd0O21hcF9mcmFnX2VyciA9IHR4cV9zdGF0cy0mZ3Q7bWFwX2ZyYWdfZXJyOwomIzQzOwkJc3RhdHMtJmd0O3Vua25vd25fdHVubmVsX3BrdCA9IHR4cV9zdGF0cy0mZ3Q7dW5rbm93bl90dW5uZWxfcGt0OwomIzQzOwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoJmFtcDt0eHFfc3RhdHMtJmd0O3N5bmNwLCBzdGFydCkpOwomIzQzO30KJiM0MzsKIGJvb2wgaGluaWMzX3R4X3BvbGwoc3RydWN0IGhpbmljM190eHEgKnR4cSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdHhxLSZndDtuZXRkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaAppbmRleCAwMDE5NGYyYTFiY2MxLi42YWJmNDQzY2I5MjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmgKQEAgLTEwNiwxMSAmIzQzOzEwNiw5IEBAIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzIHsKIAl1NjQgICAgICAgICAgICAgICAgICAgYnVzeTsKIAl1NjQgICAgICAgICAgICAgICAgICAgZHJvcHBlZDsKIAl1NjQgICAgICAgICAgICAgICAgICAgc2tiX3BhZF9lcnI7Ci0JdTY0ICAgICAgICAgICAgICAgICAgIGZyYWdfbGVuX292ZXJmbG93OwogCXU2NCAgICAgICAgICAgICAgICAgICBvZmZsb2FkX2Nvd19za2JfZXJyOwogCXU2NCAgICAgICAgICAgICAgICAgICBtYXBfZnJhZ19lcnI7CiAJdTY0ICAgICAgICAgICAgICAgICAgIHVua25vd25fdHVubmVsX3BrdDsKLQl1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19zaXplX2VycjsKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7CiB9OwogCkBAIC0xNTcsNiAmIzQzOzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSwKIAkJCSAgdTMyIHNxX2RlcHRoLCBzdHJ1Y3QgaGluaWMzX2R5bmFfdHhxX3JlcyAqdHhxc19yZXMpOwogCiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKJiM0Mzt2b2lkIGhpbmljM190eHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsCiYjNDM7CQkJICBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqc3RhdHMpOwogYm9vbCBoaW5pYzNfdHhfcG9sbChzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBpbnQgYnVkZ2V0KTsKIHZvaWQgaGluaWMzX2ZsdXNoX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYwNTcKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV3IFBhdGNoIGZvciB0aGUgSHVhd2VpIGhpbmljMyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY2AgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgYWRkaW5nIHNvbWUgZXNzZW50aWFsIGV0aHRvb2wgZnVuY3Rpb25hbGl0eTogc3RhdGlzdGljcywgY29hbGVzY2Ugc2V0dGluZ3MsIGFuZCBhIGZldyBxdWljayBmaXhlcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuIFRoZSBkcml2ZXIgaW4gcXVlc3Rpb24gaXMgdGhlIGBoaW5pYzNgLCB3aGljaCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhcyB0aGUgSHVhd2VpIEludGVsbGlnZW50IE5JQyBkcml2ZXIuIEJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIGlzIHRoaXMgc29tZXRoaW5nIEkgY2FuIGV2ZW4gdG91Y2ggaW4gbXkgdXN1YWwgUUVNVSBlbnZpcm9ubWVudD8KClRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHBoeXNpY2FsIE5JQyBkcml2ZXIgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGVtdWxhdGlvbiBhdmFpbGFibGUuICYjMzQ7SHVhd2VpIEludGVsbGlnZW50IE5JQyYjMzQ7IOKAkyB0aGF0IHBocmFzZSB1c3VhbGx5IHNjcmVhbXMgKnBoeXNpY2FsIGhhcmR3YXJlKi4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IHN1c3BpY2lvbi4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHRydXRoIGxpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIGRldmljZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhJTklDMyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzo2OmNvbmZpZyBISU5JQzNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7SHVhd2VpIDNyZCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKEhJTklDMykgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDAyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NTQ2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZ2AgZmlsZSwgYXMgaWYgaXQmIzM5O3MgcnVubmluZyB0aHJvdWdoIG15IGV4cGVydCB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBIdWF3ZWkgaGluaWMzIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGlzIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCYjMzk7cyBidWlsZCBzeXN0ZW0gYW5kIHRoZSBvcHRpb25zIGl0IHByb3ZpZGVzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBhIGRyaXZlciYjMzk7cyBmZWF0dXJlIHNldCBsYWlkIG91dCBpbiBhIGhpZXJhcmNoaWNhbCBmYXNoaW9uLCBjb250cm9sbGVkIGJ5IHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKRmlyc3QsIEkmIzM5O20gc2Nhbm5pbmcgZm9yIHRoZSBnZW5lcmFsIGBjb25maWdgIGJsb2NrIOKAkyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRyaXZlciBpcyBkZWZpbmVkLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgbWFpbiBzeW1ib2wsIGxpa2UgYEhJTklDM2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCByZXByZXNlbnRzIHRoZSByb290IGVuYWJsaW5nIHRoZSBkcml2ZXIuIFRoZW4sIEnigJlsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIGRyaXZlciBiZWNvbWVzIHJlbGV2YW50PyBUaGluZ3MgbGlrZSBQQ0kgc3VwcG9ydCwgRE1BIGVuZ2luZSBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgbmV0d29yay1yZWxhdGVkIHN1YnN5c3RlbXMgYXJlIGFsbCBvbiBteSByYWRhci4KCk5leHQsIEkmIzM5O2xsIGJlIGRyaWxsaW5nIGRvd24gaW50byB0aGUgc3BlY2lmaWMgYGNvbmZpZ2Agb3B0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgdmFyaW91cyBmZWF0dXJlcyB0aGUgZHJpdmVyIG9mZmVycy4gQXJlIHRoZXJlIGRpZmZlcmVudCBoYXJkd2FyZSBnZW5lcmF0aW9ucyBzdXBwb3J0ZWQ/IEFyZSB0aGVyZSBkZWJ1Z2dpbmcgb3B0aW9ucz8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIHR1bmFibGVzIGxpa2UgaW50ZXJydXB0IGNvYWxlc2Npbmcgb3IgZmxvdyBjb250cm9sIG9wdGlvbnM/IEkmIzM5O20gc2Nhbm5pbmcgZm9yIGtleXdvcmRzIHRoYXQgaGludCBhdCB0aGVzZSBjYXBhYmlsaXRpZXMuIEkmIzM5O20gbG9va2luZyBmb3IgY2xlYXIsIGNvbmNpc2UgZGVzY3JpcHRpb25zLCBidXQgSSYjMzk7bSBhbHNvIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbXBsZXhpdGllcy4gT2Z0ZW4sIHRoZSBkZXZpbCYjMzk7cyBpbiB0aGUgZGV0YWlscyB3aGVuIGl0IGNvbWVzIHRvIE5JQyBjb25maWd1cmF0aW9uLgoKSSBleHBlY3QgdG8gc2VlIGBib29sYCwgYHRyaXN0YXRlYCwgb3IgYGludGAgb3B0aW9ucywgYW5kIEkmIzM5O2xsIGJlIGFzc2Vzc2luZyBob3cgdGhlc2UgYXJlIHN0cnVjdHVyZWQsIGFuZCBob3cgdGhleSByZWxhdGUuIElmIHRoZXJlIGFyZSBhZHZhbmNlZCBmZWF0dXJlcywgSSYjMzk7bSBodW50aW5nIGZvciB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXM7IHRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmUgaW50ZXJhY3Rpb25zLiBJdCBpcyBub3QgdW5jb21tb24gZm9yIGRyaXZlcnMgdG8gaGF2ZSBmZWF0dXJlIG9wdGlvbnMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucywgYW5kIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgdGhvc2UuCgpGaW5hbGx5LCBJ4oCZbGwgbG9vayBmb3IgYW55ICYjMzQ7aGVscCYjMzQ7IHRleHQg4oCTIHRoaXMgaXMgZ29sZCBmb3IgcXVpY2tseSB1bmRlcnN0YW5kaW5nIHRoZSBwdXJwb3NlIGFuZCBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhlIGNsYXJpdHkgYW5kIGNvbXBsZXRlbmVzcyBvZiB0aGUgJiMzNDtoZWxwJiMzNDsgdGV4dCBhcmUgYSBnb29kIGluZGljYXRvciBvZiB0aGUgbWFpbnRhaW5lcnMmIzM5OyBkaWxpZ2VuY2UgYW5kIHRoZSBvdmVyYWxsIHF1YWxpdHkgb2YgdGhlIGRyaXZlciYjMzk7cyBjb25maWd1cmF0aW9uLiBJ4oCZbSBhbHNvIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlZmF1bHQgdmFsdWVzIOKAkyBhcmUgdGhleSBzZW5zaWJsZSBmb3IgdGhlIGdlbmVyYWwgY2FzZSwgb3IgYXJlIHRoZXkgZ2VhcmVkIHRvd2FyZCBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVudmlyb25tZW50PwoKVWx0aW1hdGVseSwgdGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgYmx1ZXByaW50IGZvciBob3cgdGhlIGhpbmljMyBkcml2ZXIgaW50ZWdyYXRlcyBpbnRvIHRoZSBrZXJuZWwuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBhbmQgYWNjdXJhdGVseSBjb21wcmVoZW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcGhpbG9zb3BoeSBiZWhpbmQgdGhlIGRyaXZlciYjMzk7cyBidWlsZC10aW1lIHNldHRpbmdzLiBJdCYjMzk7cyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2Ygd2hhdCYjMzk7cyBwb3NzaWJsZSwgYW5kIGJlaW5nIGFibGUgdG8gbWFrZSBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGlzIGRyaXZlciBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgY29tcGF0aWJpbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBIdWF3ZWkgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEhJTklDM1xuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7SHVhd2VpIDNyZCBnZW5lcmF0aW9uIG5ldHdvcmsgYWRhcHRlcnMgKEhJTklDMykgc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0IyBGaWVsZHMgb2YgSFcgYW5kIG1hbmFnZW1lbnQgc3RydWN0dXJlcyBhcmUgbGl0dGxlIGVuZGlhbiBhbmQgYXJlXG4gICA5Olx0XHQjIGN1cnJlbnRseSBub3QgY29udmVydGVkXG4gIDEwOlx0XHRkZXBlbmRzIG9uICFDUFVfQklHX0VORElBTlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXG4gIDEyOlx0XHRkZXBlbmRzIG9uIFBDSV9NU0kgXHUwMDI2XHUwMDI2IDY0QklUXG4gIDEzOlx0XHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuICAxNDpcdFx0c2VsZWN0IERJTUxJQlxuICAxNTpcdFx0c2VsZWN0IFBBR0VfUE9PTFxuICAxNjpcdFx0aGVscFxuICAxNzpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBIaU5JQyAzcmQgZ2VuIE5ldHdvcmsgQWRhcHRlciAoSElOSUMzKS5cbiAgMTg6XHRcdCAgVGhlIGRyaXZlciBpcyBzdXBwb3J0ZWQgb24gWDg2XzY0IGFuZCBBUk02NCBsaXR0bGUgZW5kaWFuLlxuICAxOTpcdFxuICAyMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuICAyMTpcdFx0ICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhpbmljMy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUwOQoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiA0MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPWZhbHNlOiBIaW5pYzMgRHJpdmVyIFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYSBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYGhpbmljM2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzY2VydGFpbiB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGV2ZW4gcmVsZXZhbnQgZm9yIGZ1enppbmcsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSB2ZXJ5IGNsZWFyIGFib3V0IHRoYXQuCgpJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBoaW5pYzNgIGhhcyBhbnkgUUVNVSBlbXVsYXRpb24uIFVzdWFsbHksIHRoZXNlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IGZvciBTbWFydE5JQ3MsIGRvbiYjMzk7dCBwbGF5IHdlbGwgd2l0aCBzdGFuZGFyZCBRRU1VLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgbm90IGVtdWxhdGVkLiBUaGVuLCBJIG5vdGljZSB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYGV0aHRvb2xgIHN0YXRzIGFuZCBjb2FsZXNjZSBzZXR0aW5ncy4gT2theSwgYGV0aHRvb2xgIHN0YXRzIGFyZSBiYXNpY2FsbHkganVzdCByZWFkcyBmcm9tIHRoZSBoYXJkd2FyZSwgbm90IGNvbXBsZXggbG9naWMsIGFuZCBjb2FsZXNjZSBzZXR0aW5ncyBqdXN0IGludm9sdmUgd3JpdGluZyB0byBoYXJkd2FyZSByZWdpc3RlcnMuIEkgZ2V0IHRoYXQuCgpCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBndWlkZWxpbmVzLiBMZXQgbWUgY2hlY2sgdGhlIHJ1bGVz4oCmIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSB3aXRoaW4gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc+KApiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IHNob3VsZCBiZSBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIHByZXR0eSBjb25maWRlbnQgdGhhdCBgaGluaWMzYCAoSHVhd2VpJiMzOTtzIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyKSBmYWxscyBzcXVhcmVseSBpbnRvIHRoYXQgY2F0ZWdvcnkuIEl0IGlzIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIGRyaXZlciB0aGF0IGRlcGVuZHMgb24gcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gU2luY2UgdGhpcyBwYXRjaCBpbnZvbHZlcyBhIGRyaXZlciB0aGF0IGlzICpkZWZpbml0ZWx5KiB0aWVkIHRvIGEgcGh5c2ljYWwgaGFyZHdhcmUgY2FyZCwgYW5kIGlzIGxpa2VseSBub3QgdG8gcnVuIHVuZGVyIFFFTVUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoaW5pYzMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgKEh1YXdlaSAzcmQgZ2VuIE5ldHdvcmsgQWRhcHRlcikuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQWRkaXRpb25hbGx5LCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkIGV0aHRvb2wgc3RhdGlzdGljcyBhbmQgY29hbGVzY2Ugc2V0dGluZ3MsIHdoaWNoIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwMjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MjE6MDMuNzM4MjY2NDA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNjgzMzMzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjAzLjczODI3MjE4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2NDgzODM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDFlZWY2MzNhMDYyNGQwZTQyOTExNmE0MDFkZmQyNjI3YjM5YWYxNDhcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MjE6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jXFxuaW5kZXggOTBmYzE2Mjg4ZGU5NS4uODlhN2JhMjExMTczMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcXG5AQCAtMTcsNiArMTcsMTEgQEBcXG4gI2luY2x1ZGUgXFxcImhpbmljM19uaWNfY2ZnLmhcXFwiXFxuIFxcbiAjZGVmaW5lIEhJTklDM19NR01UX1ZFUlNJT05fTUFYX0xFTiAgICAgMzJcXG4rLyogQ29hbGVzY2UgdGltZSBwcm9wZXJ0aWVzIGluIG1pY3Jvc2Vjb25kcyAqL1xcbisjZGVmaW5lIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCAgICAgOFxcbisjZGVmaW5lIENPQUxFU0NFX1RJTUVSX0NGR19VTklUICAgICAgICAgNVxcbisjZGVmaW5lIENPQUxFU0NFX01BWF9QRU5ESU5HX0xJTUlUICAgICAgKDI1NSAqIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVClcXG4rI2RlZmluZSBDT0FMRVNDRV9NQVhfVElNRVJfQ0ZHICAgICAgICAgICgyNTUgKiBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVClcXG4gXFxuIHN0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbylcXG5AQCAtNDA5LDE0ICs0MTQsNzkxIEBAIGhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0cnVjdCBoaW5pYzNfc3RhdHMge1xcbitcXHRjaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTtcXG4rXFx0aW50ICBvZmZzZXQ7XFxuK307XFxuK1xcbisjZGVmaW5lIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0sodHlwZSwgbWVtYmVyKSBcXFxcXFxuK1xcdEJVSUxEX0JVR19PTl9aRVJPKHNpemVvZl9maWVsZCh0eXBlLCBtZW1iZXIpICE9IHNpemVvZih1NjQpKVxcbitcXG4rI2RlZmluZSBISU5JQzNfUlhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxcXFxuK1xcdC5uYW1lICAgPSBcXFwicnhxJWRfXFxcIiNfc3RhdF9pdGVtLCBcXFxcXFxuK1xcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcXFxcbitcXHRcXHQgICsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGhpbmljM19yeHFfc3RhdHMsIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9zdGF0X2l0ZW0pIFxcXFxcXG4rfVxcbitcXG4rI2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxcXFxuK1xcdC5uYW1lICAgPSBcXFwidHhxJWRfXFxcIiNfc3RhdF9pdGVtLCBcXFxcXFxuK1xcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcXFxcbitcXHRcXHQgICsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGhpbmljM190eHFfc3RhdHMsIFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIF9zdGF0X2l0ZW0pIFxcXFxcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBoaW5pYzNfc3RhdHMgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW10gPSB7XFxuK1xcdEhJTklDM19SWFFfU1RBVChjc3VtX2Vycm9ycyksXFxuK1xcdEhJTklDM19SWFFfU1RBVChvdGhlcl9lcnJvcnMpLFxcbitcXHRISU5JQzNfUlhRX1NUQVQocnhfYnVmX2VtcHR5KSxcXG4rXFx0SElOSUMzX1JYUV9TVEFUKGFsbG9jX3NrYl9lcnIpLFxcbitcXHRISU5JQzNfUlhRX1NUQVQoYWxsb2NfcnhfYnVmX2VyciksXFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfdHhfcXVldWVfc3RhdHNbXSA9IHtcXG4rXFx0SElOSUMzX1RYUV9TVEFUKGJ1c3kpLFxcbitcXHRISU5JQzNfVFhRX1NUQVQoc2tiX3BhZF9lcnIpLFxcbitcXHRISU5JQzNfVFhRX1NUQVQob2ZmbG9hZF9jb3dfc2tiX2VyciksXFxuK1xcdEhJTklDM19UWFFfU1RBVChtYXBfZnJhZ19lcnIpLFxcbitcXHRISU5JQzNfVFhRX1NUQVQodW5rbm93bl90dW5uZWxfcGt0KSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgSElOSUMzX0ZVTkNfU1RBVChfc3RhdF9pdGVtKSB7XFx0XFxcXFxcbitcXHQubmFtZSAgID0gI19zdGF0X2l0ZW0sIFxcXFxcXG4rXFx0Lm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBsMm5pY192cG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXFxcXFxcbitcXHRcXHQgICsgMCAqIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0soc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzLCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxcXFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19mdW5jdGlvbl9zdGF0c1tdID0ge1xcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X3VuaWNhc3RfcGt0c192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQodHhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X211bHRpY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksXFxuK1xcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X3VuaWNhc3RfcGt0c192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfdW5pY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X211bHRpY2FzdF9ieXRlc192cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksXFxuK1xcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Rpc2NhcmRfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Rpc2NhcmRfdnBvcnQpLFxcbitcXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Vycl92cG9ydCksXFxuK1xcdEhJTklDM19GVU5DX1NUQVQocnhfZXJyX3Zwb3J0KSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgSElOSUMzX1BPUlRfU1RBVChfc3RhdF9pdGVtKSB7IFxcXFxcXG4rXFx0Lm5hbWUgICA9ICNfc3RhdF9pdGVtLCBcXFxcXFxuK1xcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzLCBfc3RhdF9pdGVtKSBcXFxcXFxuK1xcdFxcdCAgKyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzLCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxcXFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM19wb3J0X3N0YXRzW10gPSB7XFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2ZyYWdtZW50X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcnNpemVfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3VuZGVybWluX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4XzE1MTlfbWF4X2dvb2RfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X292ZXJzaXplX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9qYWJiZXJfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfYmFkX29jdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF90b3RhbF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdW5pX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkwX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpMV9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTJfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkzX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpNF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTVfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk2X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpN19wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZXJyX2FsbF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfZ29vZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfYmFkX3BrdF9udW0pLFxcbitcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5kZXJtaW5fcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9iYWRfb2N0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3RvdGFsX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmlfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTBfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmkxX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTNfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk0X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtKSxcXG4rXFx0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTZfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk3X3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW0pLFxcbitcXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9zZW5kX2FwcF9iYWRfcGt0X251bSksXFxuK1xcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZmlsdGVyX3BrdF9udW0pLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBoaW5pYzNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0aW50IGNvdW50LCBxX251bTtcXG4rXFxuK1xcdHN3aXRjaCAoc3NldCkge1xcbitcXHRjYXNlIEVUSF9TU19TVEFUUzpcXG4rXFx0XFx0cV9udW0gPSBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzO1xcbitcXHRcXHRjb3VudCA9IEFSUkFZX1NJWkUoaGluaWMzX2Z1bmN0aW9uX3N0YXRzKSArXFxuK1xcdFxcdFxcdChBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cykgK1xcbitcXHRcXHRcXHQgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpKSAqXFxuK1xcdFxcdFxcdHFfbnVtO1xcbitcXG4rXFx0XFx0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cXHUwMDNlaHdkZXYpKVxcbitcXHRcXHRcXHRjb3VudCArPSBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTtcXG4rXFxuK1xcdFxcdHJldHVybiBjb3VudDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZHJ2X3F1ZXVlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCAqZGF0YSlcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB0eHFfc3RhdHMgPSB7fTtcXG4rXFx0c3RydWN0IGhpbmljM19yeHFfc3RhdHMgcnhxX3N0YXRzID0ge307XFxuK1xcdHUxNiBpID0gMCwgaiwgcWlkO1xcbitcXHRjaGFyICpwO1xcbitcXG4rXFx0Zm9yIChxaWQgPSAwOyBxaWQgXFx1MDAzYyBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBxaWQrKykge1xcbitcXHRcXHRpZiAoIW5pY19kZXYtXFx1MDAzZXR4cXMpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aGluaWMzX3R4cV9nZXRfc3RhdHMoXFx1MDAyNm5pY19kZXYtXFx1MDAzZXR4cXNbcWlkXSwgXFx1MDAyNnR4cV9zdGF0cyk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XFxuK1xcdFxcdFxcdHAgPSAoY2hhciAqKVxcdTAwMjZ0eHFfc3RhdHMgK1xcbitcXHRcXHRcXHQgICAgaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcXG4rXFx0XFx0XFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpID0gbmljX2Rldi1cXHUwMDNlcV9wYXJhbXMubnVtX3FwcyAqIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTtcXG4rXFx0Zm9yIChxaWQgPSAwOyBxaWQgXFx1MDAzYyBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBxaWQrKykge1xcbitcXHRcXHRpZiAoIW5pY19kZXYtXFx1MDAzZXJ4cXMpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aGluaWMzX3J4cV9nZXRfc3RhdHMoXFx1MDAyNm5pY19kZXYtXFx1MDAzZXJ4cXNbcWlkXSwgXFx1MDAyNnJ4cV9zdGF0cyk7XFxuK1xcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XFxuK1xcdFxcdFxcdHAgPSAoY2hhciAqKVxcdTAwMjZyeHFfc3RhdHMgK1xcbitcXHRcXHRcXHQgICAgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcXG4rXFx0XFx0XFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xcbitcXHR1MTYgaSA9IDAsIGo7XFxuK1xcdGNoYXIgKnA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XFxuK1xcdGlmICghcHMpXFxuK1xcdFxcdGdvdG8gZXJyX3plcm9fc3RhdHM7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBwcyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgcG9ydCBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfemVyb19zdGF0cztcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3BvcnRfc3RhdHMpOyBqKyssIGkrKykge1xcbitcXHRcXHRwID0gKGNoYXIgKilwcyArIGhpbmljM19wb3J0X3N0YXRzW2pdLm9mZnNldDtcXG4rXFx0XFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcXG4rXFx0fVxcbitcXG4rXFx0a2ZyZWUocHMpO1xcbitcXG4rXFx0cmV0dXJuIGk7XFxuK1xcbitlcnJfemVyb19zdGF0czpcXG4rXFx0bWVtc2V0KFxcdTAwMjZkYXRhW2ldLCAwLCBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKSAqIHNpemVvZigqZGF0YSkpO1xcbitcXG4rXFx0cmV0dXJuIGkgKyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XFxuK1xcdHUxNiBpID0gMCwgajtcXG4rXFx0Y2hhciAqcDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGhpbmljM19nZXRfdnBvcnRfc3RhdHMobmljX2Rldi1cXHUwMDNlaHdkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgaGluaWMzX2dsb2JhbF9mdW5jX2lkKG5pY19kZXYtXFx1MDAzZWh3ZGV2KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dnBvcnRfc3RhdHMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZnVuY3Rpb24gc3RhdHMgZnJvbSBmd1xcXFxuXFxcIik7XFxuK1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfZnVuY3Rpb25fc3RhdHMpOyBqKyssIGkrKykge1xcbitcXHRcXHRwID0gKGNoYXIgKilcXHUwMDI2dnBvcnRfc3RhdHMgKyBoaW5pYzNfZnVuY3Rpb25fc3RhdHNbal0ub2Zmc2V0O1xcbitcXHRcXHRkYXRhW2ldID0gKih1NjQgKilwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LVxcdTAwM2Vod2RldikpXFxuK1xcdFxcdGkgKz0gaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMobmV0ZGV2LCBkYXRhICsgaSk7XFxuK1xcbitcXHRoaW5pYzNfZ2V0X2Rydl9xdWV1ZV9zdGF0cyhuZXRkZXYsIGRhdGEgKyBpKTtcXG4rfVxcbitcXG4rc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2h3X3N0YXRzX3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY2hhciAqcClcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHR1MTYgaSwgY250ID0gMDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cyk7IGkrKykge1xcbitcXHRcXHRtZW1jcHkocCwgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XFxuK1xcdFxcdHAgKz0gRVRIX0dTVFJJTkdfTEVOO1xcbitcXHRcXHRjbnQrKztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cXHUwMDNlaHdkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsgaSsrKSB7XFxuK1xcdFxcdFxcdG1lbWNweShwLCBoaW5pYzNfcG9ydF9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pO1xcbitcXHRcXHRcXHRwICs9IEVUSF9HU1RSSU5HX0xFTjtcXG4rXFx0XFx0XFx0Y250Kys7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNudDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNoYXIgKnApXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0dTggKmRhdGEgPSBwO1xcbitcXHR1MTYgaSwgajtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBpKyspIHtcXG4rXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsgaisrKVxcbitcXHRcXHRcXHRldGh0b29sX3NwcmludGYoXFx1MDAyNmRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdGhpbmljM190eF9xdWV1ZV9zdGF0c1tqXS5uYW1lLCBpKTtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IGkrKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcnhfcXVldWVfc3RhdHMpOyBqKyspXFxuK1xcdFxcdFxcdGV0aHRvb2xfc3ByaW50ZihcXHUwMDI2ZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0aGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXFxuK3tcXG4rXFx0Y2hhciAqcCA9IChjaGFyICopZGF0YTtcXG4rXFx0dTE2IG9mZnNldDtcXG4rXFxuK1xcdHN3aXRjaCAoc3RyaW5nc2V0KSB7XFxuK1xcdGNhc2UgRVRIX1NTX1NUQVRTOlxcbitcXHRcXHRvZmZzZXQgPSBoaW5pYzNfZ2V0X2h3X3N0YXRzX3N0cmluZ3MobmV0ZGV2LCBwKTtcXG4rXFx0XFx0aGluaWMzX2dldF9xcF9zdGF0c19zdHJpbmdzKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHAgKyBvZmZzZXQgKiBFVEhfR1NUUklOR19MRU4pO1xcbitcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkludmFsaWQgc3RyaW5nIHNldCAldS5cXFxcblxcXCIsIHN0cmluZ3NldCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfcGh5X3N0YXRzICpwaHlfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoSElOSUMzX0lTX1ZGKG5pY19kZXYtXFx1MDAzZWh3ZGV2KSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xcbitcXHRpZiAoIXBzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBwcyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZXRoIHBoeSBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwaHlfc3RhdHMtXFx1MDAzZVN5bWJvbEVycm9yRHVyaW5nQ2FycmllciA9IHBzLVxcdTAwM2VtYWNfcnhfc3ltX2Vycl9wa3RfbnVtO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XFxuK1xcdGlmICghcHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cXHUwMDNlaHdkZXYsIHBzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrZnJlZShwcyk7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiRmFpbGVkIHRvIGdldCBldGggbWFjIHN0YXRzIGZyb20gZndcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHBzLVxcdTAwM2VtYWNfdHhfZ29vZF9wa3RfbnVtO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZUZyYW1lc1JlY2VpdmVkT0sgPSBwcy1cXHUwMDNlbWFjX3J4X2dvb2RfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VGcmFtZUNoZWNrU2VxdWVuY2VFcnJvcnMgPSBwcy1cXHUwMDNlbWFjX3J4X2Zjc19lcnJfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gcHMtXFx1MDAzZW1hY190eF9nb29kX29jdF9udW07XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlT2N0ZXRzUmVjZWl2ZWRPSyA9IHBzLVxcdTAwM2VtYWNfcnhfZ29vZF9vY3RfbnVtO1xcbitcXHRtYWNfc3RhdHMtXFx1MDAzZU11bHRpY2FzdEZyYW1lc1htaXR0ZWRPSyA9IHBzLVxcdTAwM2VtYWNfdHhfbXVsdGlfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy1cXHUwMDNlbWFjX3R4X2Jyb2FkX3BrdF9udW07XFxuK1xcdG1hY19zdGF0cy1cXHUwMDNlTXVsdGljYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVxcdTAwM2VtYWNfcnhfbXVsdGlfcGt0X251bTtcXG4rXFx0bWFjX3N0YXRzLVxcdTAwM2VCcm9hZGNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtXFx1MDAzZW1hY19yeF9icm9hZF9wa3RfbnVtO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xcbitcXHRpZiAoIXBzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBwcyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUocHMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKG5ldGRldiwgXFxcIkZhaWxlZCB0byBnZXQgZXRoIGN0cmwgc3RhdHMgZnJvbSBmd1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0Y3RybF9zdGF0cy1cXHUwMDNlTUFDQ29udHJvbEZyYW1lc1RyYW5zbWl0dGVkID0gcHMtXFx1MDAzZW1hY190eF9jb250cm9sX3BrdF9udW07XFxuK1xcdGN0cmxfc3RhdHMtXFx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHBzLVxcdTAwM2VtYWNfcnhfY29udHJvbF9wa3RfbnVtO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIGhpbmljM19ybW9uX3Jhbmdlc1tdID0ge1xcbitcXHR7ICAgICAwLCAgICA2NCB9LFxcbitcXHR7ICAgIDY1LCAgIDEyNyB9LFxcbitcXHR7ICAgMTI4LCAgIDI1NSB9LFxcbitcXHR7ICAgMjU2LCAgIDUxMSB9LFxcbitcXHR7ICAgNTEyLCAgMTAyMyB9LFxcbitcXHR7ICAxMDI0LCAgMTUxOCB9LFxcbitcXHR7ICAxNTE5LCAgMjA0NyB9LFxcbitcXHR7ICAyMDQ4LCAgNDA5NSB9LFxcbitcXHR7ICA0MDk2LCAgODE5MSB9LFxcbitcXHR7ICA4MTkyLCAgOTIxNiB9LFxcbitcXHR7ICA5MjE3LCAxMjI4NyB9LFxcbitcXHR7fVxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXFxuK3tcXG4rXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XFxuK1xcdGlmICghcHMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cXHUwMDNlaHdkZXYsIHBzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRrZnJlZShwcyk7XFxuK1xcdFxcdG5ldGRldl9lcnIobmV0ZGV2LCBcXFwiRmFpbGVkIHRvIGdldCBldGggcm1vbiBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2V1bmRlcnNpemVfcGt0c1xcdD0gcHMtXFx1MDAzZW1hY19yeF91bmRlcnNpemVfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlb3ZlcnNpemVfcGt0c1xcdD0gcHMtXFx1MDAzZW1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHNcXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfZnJhZ21lbnRfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlamFiYmVyc1xcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF9qYWJiZXJfcGt0X251bTtcXG4rXFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbMF1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfNjRfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbMV1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfNjVfMTI3X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzJdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3J4XzEyOF8yNTVfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbM11cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs0XVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF81MTJfMTAyM19vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs1XVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF8xMDI0XzE1MThfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbNl1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzddXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3J4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdFs4XVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF80MDk2XzgxOTFfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbOV1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0WzEwXVxcdFxcdD0gcHMtXFx1MDAzZW1hY19yeF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xcbitcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFswXVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF82NF9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFsxXVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF82NV8xMjdfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMl1cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfdHhfMTI4XzI1NV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFszXVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF8yNTZfNTExX29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzRdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzVdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs2XVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbN11cXHRcXHQ9IHBzLVxcdTAwM2VtYWNfdHhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VoaXN0X3R4WzhdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlaGlzdF90eFs5XVxcdFxcdD0gcHMtXFx1MDAzZW1hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbMTBdXFx0XFx0PSBwcy1cXHUwMDNlbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XFxuK1xcbitcXHQqcmFuZ2VzID0gaGluaWMzX3Jtb25fcmFuZ2VzO1xcbitcXG4rXFx0a2ZyZWUocHMpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHBzID0ga21hbGxvY19vYmooKnBzKTtcXG4rXFx0aWYgKCFwcylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVxcdTAwM2Vod2RldiwgcHMpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGtmcmVlKHBzKTtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXYsIFxcXCJGYWlsZWQgdG8gZ2V0IGV0aCBwYXVzZSBzdGF0cyBmcm9tIGZ3XFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRwYXVzZV9zdGF0cy1cXHUwMDNldHhfcGF1c2VfZnJhbWVzID0gcHMtXFx1MDAzZW1hY190eF9wYXVzZV9udW07XFxuK1xcdHBhdXNlX3N0YXRzLVxcdTAwM2VyeF9wYXVzZV9mcmFtZXMgPSBwcy1cXHUwMDNlbWFjX3J4X3BhdXNlX251bTtcXG4rXFxuK1xcdGtmcmVlKHBzKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBxX2lkLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmNvYWwsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbDtcXG4rXFx0c3RydWN0IGhpbmljM19pbnRlcnJ1cHRfaW5mbyBpbmZvID0ge307XFxuK1xcdGJvb2wgaXNfYWN0aXZlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdGlzX2FjdGl2ZSA9IHRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcXHUwMDI2bmljX2Rldi1cXHUwMDNlZmxhZ3MpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAocV9pZCBcXHUwMDNjIG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLm51bV9xcHMpO1xcbitcXG4rXFx0aWYgKGlzX2FjdGl2ZSkge1xcbitcXHRcXHRpbmZvLm1zaXhfaW5kZXggPVxcbitcXHRcXHRcXHRuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4O1xcbitcXHRcXHRpbmZvLnJlc2VuZF90aW1lcl9jZmcgPVxcbitcXHRcXHRcXHRuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdGlmIChpc19hY3RpdmUpIHtcXG4rXFx0XFx0aW5mby5pbnRlcnJ1cHRfY29hbGVzY19zZXQgPSAxO1xcbitcXHRcXHRpbmZvLmNvYWxlc2NfdGltZXJfY2ZnID0gY29hbC1cXHUwMDNlY29hbGVzY2VfdGltZXJfY2ZnO1xcbitcXHRcXHRpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLVxcdTAwM2VwZW5kaW5nX2xpbWl0O1xcbitcXG4rXFx0XFx0ZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBpbmZvKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJGYWlsZWQgdG8gc2V0IHF1ZXVlJXUgY29hbGVzY2VcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcV9pZCk7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdGludHJfY29hbCA9IFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdO1xcbitcXHRpbnRyX2NvYWwtXFx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZyA9IGNvYWwtXFx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZztcXG4rXFx0aW50cl9jb2FsLVxcdTAwM2VwZW5kaW5nX2xpbWl0ID0gY29hbC1cXHUwMDNlcGVuZGluZ19saW1pdDtcXG4rXFx0aW50cl9jb2FsLVxcdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IGNvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93O1xcbitcXHRpbnRyX2NvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCA9IGNvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaDtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb25zdCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqY29hbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qge1xcbitcXHRcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRcXHR1MzIgdmFsdWU7XFxuK1xcdFxcdHUzMiBsaW1pdDtcXG4rXFx0fSBjb2FsZXNjZV9saW1pdHNbXSA9IHtcXG4rXFx0XFx0e1xcXCJyeF9jb2FsZXNjZV91c2Vjc1xcXCIsXFxuK1xcdFxcdCBjb2FsLVxcdTAwM2VyeF9jb2FsZXNjZV91c2VjcyxcXG4rXFx0XFx0IENPQUxFU0NFX01BWF9USU1FUl9DRkd9LFxcbitcXHRcXHR7XFxcInJ4X21heF9jb2FsZXNjZWRfZnJhbWVzXFxcIixcXG4rXFx0XFx0IGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxcbitcXHRcXHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxcbitcXHRcXHR7XFxcInJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvd1xcXCIsXFxuK1xcdFxcdCBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3csXFxuK1xcdFxcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXFxuK1xcdFxcdHtcXFwicnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaFxcXCIsXFxuK1xcdFxcdCBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoLFxcbitcXHRcXHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxcbitcXHR9O1xcbitcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNvYWxlc2NlX2xpbWl0cyk7IGkrKykge1xcbitcXHRcXHRpZiAoY29hbGVzY2VfbGltaXRzW2ldLnZhbHVlIFxcdTAwM2UgY29hbGVzY2VfbGltaXRzW2ldLmxpbWl0KSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcXFwiJXMgb3V0IG9mIHJhbmdlICVkLSVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvYWxlc2NlX2xpbWl0c1tpXS5uYW1lLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29hbGVzY2VfbGltaXRzW2ldLmxpbWl0KTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29uc3Qgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IGlzX2NvYWxlc2NlX2V4Y2VlZF9saW1pdChjb2FsLCBleHRhY2spO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0aWYgKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyBcXHUwMDNlXFxuK1xcdCAgICBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcImludmFsaWQgY29hbGVzY2UgZnJhbWUgaGlnaCAldSwgbG93ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cpO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCB1MzIgaXRlbSwgdTMyIHVuaXQsIGNvbnN0IGNoYXIgKnN0cilcXG4re1xcbitcXHRpZiAoaXRlbSAlIHVuaXQpXFxuK1xcdFxcdG5ldGRldl93YXJuKG5ldGRldiwgXFxcIiVzIGluICV1IHVuaXRzLCBjaGFuZ2UgdG8gJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBzdHIsIHVuaXQsIGl0ZW0gLSBpdGVtICUgdW5pdCk7XFxuK31cXG4rXFxuKyNkZWZpbmUgQ0hFQ0tfQ09BTEVTQ0VfQUxJR04obWVtYmVyLCB1bml0KSBcXFxcXFxuK1xcdGNoZWNrX2NvYWxlc2NlX2FsaWduKG5ldGRldiwgbWVtYmVyLCB1bml0LCAjbWVtYmVyKVxcbitcXG4rc3RhdGljIHZvaWQgY2hlY2tfY29hbGVzY2VfY2hhbmdlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICB1MzIgaXRlbSwgdTMyIHVuaXQsIHUzMiBvcmlfdmFsLFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICpvYmpfc3RyLCBjb25zdCBjaGFyICpzdHIpXFxuK3tcXG4rXFx0aWYgKChpdGVtIC8gdW5pdCkgIT0gb3JpX3ZhbClcXG4rXFx0XFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFxcXCJDaGFuZ2UgJXMgZnJvbSAldSB0byAldSAlc1xcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgc3RyLCBvcmlfdmFsICogdW5pdCwgaXRlbSAtIGl0ZW0gJSB1bml0LCBvYmpfc3RyKTtcXG4rfVxcbitcXG4rI2RlZmluZSBDSEVDS19DT0FMRVNDRV9DSEFOR0VEKG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0cikgXFxcXFxcbitcXHRjaGVja19jb2FsZXNjZV9jaGFuZ2VkKG5ldGRldiwgbWVtYmVyLCB1bml0LCBvcmlfdmFsLCBvYmpfc3RyLCAjbWVtYmVyKVxcbitcXG4rc3RhdGljIGludCBoaW5pYzNfc2V0X2h3X2NvYWxfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvbGRfY29hbDtcXG4rXFx0dTE2IGksIGo7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRvbGRfY29hbCA9IGtjYWxsb2MobmljX2Rldi1cXHUwMDNlbWF4X3Fwcywgc2l6ZW9mKCpvbGRfY29hbCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIW9sZF9jb2FsKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNm5pY19kZXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmljX2Rldi1cXHUwMDNlbWF4X3FwczsgaSsrKVxcbitcXHRcXHRvbGRfY29hbFtpXSA9IG5pY19kZXYtXFx1MDAzZWludHJfY29hbGVzY2VbaV07XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmljX2Rldi1cXHUwMDNlbWF4X3FwczsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2UobmV0ZGV2LCBpLCBpbnRyX2NvYWwsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdGdvdG8gcm9sbGJhY2s7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKG9sZF9jb2FsKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbityb2xsYmFjazpcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKylcXG4rXFx0XFx0aGluaWMzX3NldF9xdWV1ZV9jb2FsZXNjZShuZXRkZXYsIGosIFxcdTAwMjZvbGRfY29hbFtqXSwgTlVMTCk7XFxuK1xcbitcXHRrZnJlZShvbGRfY29hbCk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGluaWMzX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludGVycnVwdF9pbmZvO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2bmljX2Rldi1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcbitcXHRpbnRlcnJ1cHRfaW5mbyA9IFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xcbitcXG4rXFx0Y29hbC1cXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlID0gUkVBRF9PTkNFKG5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpO1xcbitcXG4rXFx0Y29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93ID1cXG4rXFx0XFx0aW50ZXJydXB0X2luZm8tXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93ICpcXG4rXFx0XFx0Q09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUO1xcbitcXG4rXFx0Y29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCA9XFxuK1xcdFxcdGludGVycnVwdF9pbmZvLVxcdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2hpZ2ggKlxcbitcXHRcXHRDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7XFxuK1xcbitcXHQvKiBUWC9SWCB1c2VzIHRoZSBzYW1lIGludGVycnVwdC5cXG4rXFx0ICogU28gd2Ugb25seSBkZWNsYXJlIFJYIGV0aHRvb2xfY29hbGVzY2UgcGFyYW1ldGVycy5cXG4rXFx0ICovXFxuK1xcdGNvYWwtXFx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzID0gaW50ZXJydXB0X2luZm8tXFx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZyAqXFxuK1xcdFxcdFxcdFxcdCAgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQ7XFxuK1xcbitcXHRjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGludGVycnVwdF9pbmZvLVxcdTAwM2VwZW5kaW5nX2xpbWl0ICpcXG4rXFx0XFx0XFx0XFx0XFx0Q09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUO1xcbitcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhpbmljM19zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX2NvYWxlc2NlICprZXJuZWxfY29hbCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpvcmlfaW50cl9jb2FsO1xcbitcXHRzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvIGludHJfY29hbCA9IHt9O1xcbitcXHRjb25zdCBjaGFyICpvYmpfc3RyID0gXFxcImZvciBuZXRkZXZcXFwiO1xcbitcXHRib29sIG9sZF9hZGFwdGl2ZSwgbmV3X2FkYXB0aXZlO1xcbitcXHRzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxID0gTlVMTDtcXG4rXFx0aW50IGVycjtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29hbCwgZXh0YWNrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXFx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxcbitcXHRcXHRcXHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXFxuK1xcdFxcdFxcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcXG4rXFx0Q0hFQ0tfQ09BTEVTQ0VfQUxJR04oY29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxcbitcXHRcXHRcXHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0b3JpX2ludHJfY29hbCA9IFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xcbitcXG4rXFx0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVxcdTAwM2VyeF9jb2FsZXNjZV91c2VjcywgQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQsXFxuK1xcdFxcdFxcdCAgICAgICBvcmlfaW50cl9jb2FsLVxcdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpO1xcbitcXHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxcbitcXHRcXHRcXHQgICAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklULFxcbitcXHRcXHRcXHQgICAgICAgb3JpX2ludHJfY29hbC1cXHUwMDNlcGVuZGluZ19saW1pdCwgb2JqX3N0cik7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcXG4rXFx0XFx0XFx0ICAgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCxcXG4rXFx0XFx0XFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCwgb2JqX3N0cik7XFxuK1xcdENIRUNLX0NPQUxFU0NFX0NIQU5HRUQoY29hbC1cXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxcbitcXHRcXHRcXHQgICAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklULFxcbitcXHRcXHRcXHQgICAgICAgb3JpX2ludHJfY29hbC1cXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5pY19kZXYtXFx1MDAzZXN0YXRlX2xvY2spO1xcbitcXG4rXFx0b2xkX2FkYXB0aXZlID0gUkVBRF9PTkNFKG5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpO1xcbitcXHRuZXdfYWRhcHRpdmUgPSAhIWNvYWwtXFx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTtcXG4rXFxuK1xcdGlmIChvbGRfYWRhcHRpdmUpIHtcXG4rXFx0XFx0Ym9vbCBpc191cDtcXG4rXFxuK1xcdFxcdFdSSVRFX09OQ0UobmljX2Rldi1cXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0c3luY2hyb25pemVfbmV0KCk7XFxuK1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFx0XFx0aXNfdXAgPSB0ZXN0X2JpdChISU5JQzNfSU5URl9VUCwgXFx1MDAyNm5pY19kZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4rXFxuK1xcdFxcdGlmIChpc191cCkge1xcbitcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmljX2Rldi1cXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdHJ4cSA9IG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLmlycV9jZmdbaV0ucnhxO1xcbitcXHRcXHRcXHRcXHRpZiAoIXJ4cSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRcXHRuZXRfZGltX3dvcmtfY2FuY2VsKFxcdTAwMjZyeHEtXFx1MDAzZWRpbSk7XFxuK1xcdFxcdFxcdFxcdHJ4cS1cXHUwMDNlZGltLnN0YXRlID0gRElNX1NUQVJUX01FQVNVUkU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpbnRyX2NvYWwuY29hbGVzY2VfdGltZXJfY2ZnID1cXG4rXFx0XFx0KHU4KShjb2FsLVxcdTAwM2VyeF9jb2FsZXNjZV91c2VjcyAvIENPQUxFU0NFX1RJTUVSX0NGR19VTklUKTtcXG4rXFxuK1xcdGludHJfY29hbC5wZW5kaW5nX2xpbWl0ID1cXG4rXFx0XFx0KHU4KShjb2FsLVxcdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyAvXFxuK1xcdFxcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcXG4rXFxuK1xcdGludHJfY29hbC5yeF9wZW5kaW5nX2xpbWl0X2hpZ2ggPVxcbitcXHRcXHQodTgpKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggL1xcbitcXHRcXHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XFxuK1xcbitcXHRpbnRyX2NvYWwucnhfcGVuZGluZ19saW1pdF9sb3cgPVxcbitcXHRcXHQodTgpKGNvYWwtXFx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAvXFxuK1xcdFxcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcXG4rXFxuK1xcdC8qIGNvYWxlc2NlIHRpbWVyIG9yIHBlbmRpbmcgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGNvYWxlc2NlICovXFxuK1xcdGlmICghbmV3X2FkYXB0aXZlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgfHwgIWludHJfY29hbC5wZW5kaW5nX2xpbWl0KSlcXG4rXFx0XFx0bmV0ZGV2X2luZm8obmV0ZGV2LCBcXFwiQ29hbGVzY2Ugd2lsbCBiZSBkaXNhYmxlZFxcXFxuXFxcIik7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfc2V0X2h3X2NvYWxfcGFyYW0obmV0ZGV2LCBcXHUwMDI2aW50cl9jb2FsLCBleHRhY2spO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChvbGRfYWRhcHRpdmUpXFxuK1xcdFxcdFxcdFdSSVRFX09OQ0UobmljX2Rldi1cXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgb2xkX2FkYXB0aXZlKTtcXG4rXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdFdSSVRFX09OQ0UobmljX2Rldi1cXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgbmV3X2FkYXB0aXZlKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpbmljM19ldGh0b29sX29wcyA9IHtcXG4tXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxcbi1cXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfQ09BTEVTQ0VfUEtUX1JBVEVfUlhfVVNFQ1MsXFxuK1xcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zICAgICAgPSBFVEhUT09MX0NPQUxFU0NFX1JYX1VTRUNTIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVMgfFxcbitcXHRcXHRcXHRcXHRcXHQgIEVUSFRPT0xfQ09BTEVTQ0VfVVNFX0FEQVBUSVZFX1JYIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVNfTE9XIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICBFVEhUT09MX0NPQUxFU0NFX1JYX01BWF9GUkFNRVNfSElHSCxcXG4gXFx0LmdldF9saW5rX2tzZXR0aW5ncyAgICAgICAgICAgICA9IGhpbmljM19nZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5nZXRfZHJ2aW5mbyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfbXNnbGV2ZWwgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X21zZ2xldmVsLFxcbiBcXHQuc2V0X21zZ2xldmVsICAgICAgICAgICAgICAgICAgID0gaGluaWMzX3NldF9tc2dsZXZlbCxcXG4gXFx0LmdldF9saW5rICAgICAgICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuK1xcdC5nZXRfc3NldF9jb3VudCAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3NzZXRfY291bnQsXFxuK1xcdC5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuK1xcdC5nZXRfc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3N0cmluZ3MsXFxuK1xcdC5nZXRfZXRoX3BoeV9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMsXFxuK1xcdC5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsXFxuK1xcdC5nZXRfZXRoX2N0cmxfc3RhdHMgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzLFxcbitcXHQuZ2V0X3Jtb25fc3RhdHMgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9ybW9uX3N0YXRzLFxcbitcXHQuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cyxcXG4rXFx0LmdldF9jb2FsZXNjZSAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfY29hbGVzY2UsXFxuK1xcdC5zZXRfY29hbGVzY2UgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfc2V0X2NvYWxlc2NlLFxcbiB9O1xcbiBcXG4gdm9pZCBoaW5pYzNfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxcbmluZGV4IGNmYzlkYWEzMDM0ZmUuLjZiMGY0ODZiYTU5MGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaHdfaW50Zi5oXFxuQEAgLTUzLDYgKzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhXFxuIFxcdG1zZ19wYXJhbXMtXFx1MDAzZXRpbWVvdXRfbXMgPSAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWRcXG4rbWdtdF9tc2dfcGFyYW1zX2luaXRfaW5fb3V0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhbXMsIHZvaWQgKmluX2J1ZixcXG4rXFx0XFx0XFx0ICAgIHZvaWQgKm91dF9idWYsIHUzMiBpbl9idWZfc2l6ZSwgdTMyIG91dF9idWZfc2l6ZSlcXG4re1xcbitcXHRtc2dfcGFyYW1zLVxcdTAwM2VidWZfaW4gPSBpbl9idWY7XFxuK1xcdG1zZ19wYXJhbXMtXFx1MDAzZWJ1Zl9vdXQgPSBvdXRfYnVmO1xcbitcXHRtc2dfcGFyYW1zLVxcdTAwM2Vpbl9zaXplID0gaW5fYnVmX3NpemU7XFxuK1xcdG1zZ19wYXJhbXMtXFx1MDAzZWV4cGVjdGVkX291dF9zaXplID0gb3V0X2J1Zl9zaXplO1xcbitcXHRtc2dfcGFyYW1zLVxcdTAwM2V0aW1lb3V0X21zID0gMDtcXG4rfVxcbitcXG4gZW51bSBjZmdfY21kIHtcXG4gXFx0Q0ZHX0NNRF9HRVRfREVWX0NBUCA9IDAsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmNcXG5pbmRleCBlN2Q2YzIwMzNiNDUxLi5mNjY0NTM4NWM1NTI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmNcXG5AQCAtMjAsNyArMjAsNyBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfbmV0X2RpbShzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYsXFxuIFxcdHN0cnVjdCBkaW1fc2FtcGxlIHNhbXBsZSA9IHt9O1xcbiBcXG4gXFx0aWYgKCF0ZXN0X2JpdChISU5JQzNfSU5URl9VUCwgXFx1MDAyNm5pY19kZXYtXFx1MDAzZWZsYWdzKSB8fFxcbi1cXHQgICAgIW5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpXFxuK1xcdCAgICAhUkVBRF9PTkNFKG5pY19kZXYtXFx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRkaW1fdXBkYXRlX3NhbXBsZShpcnFfY2ZnLVxcdTAwM2V0b3RhbF9ldmVudHMsIHJ4cS1cXHUwMDNlcnhxX3N0YXRzLnBhY2tldHMsXFxuQEAgLTE0OCwxMyArMTQ4LDkgQEAgc3RhdGljIGludCBoaW5pYzNfc2V0X2ludGVycnVwdF9tb2RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCxcXG4gXFx0XFx0bmljX2Rldi1cXHUwMDNlaW50cl9jb2FsZXNjZVtxX2lkXS5yZXNlbmRfdGltZXJfY2ZnO1xcbiBcXG4gXFx0ZXJyID0gaGluaWMzX3NldF9pbnRlcnJ1cHRfY2ZnKG5pY19kZXYtXFx1MDAzZWh3ZGV2LCBpbmZvKTtcXG4tXFx0aWYgKGVycikge1xcbitcXHRpZiAoZXJyKVxcbiBcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBtb2RpZnkgbW9kZXJhdGlvbiBmb3IgUXVldWU6ICV1XFxcXG5cXFwiLCBxX2lkKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0bmljX2Rldi1cXHUwMDNlcnhxc1txX2lkXS5sYXN0X2NvYWxlc2NfdGltZXJfY2ZnID0gY29hbGVzY190aW1lcl9jZmc7XFxuLVxcdFxcdG5pY19kZXYtXFx1MDAzZXJ4cXNbcV9pZF0ubGFzdF9wZW5kaW5nX2xpbWl0ID0gcGVuZGluZ19saW1pdDtcXG4tXFx0fVxcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmNcXG5pbmRleCAwYTg4OGZlNGM5NzViLi44Yzc0OTJlMTU0MDllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xcbkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyB2b2lkIGluaXRfaW50cl9jb2FsX3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdFxcdGluZm8tXFx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93ID0gSElOSUMzX1JYX1BFTkRJTkdfTElNSVRfTE9XO1xcbiBcXHR9XFxuIFxcbi1cXHRuaWNfZGV2LVxcdTAwM2VhZGFwdGl2ZV9yeF9jb2FsID0gMTtcXG4rXFx0V1JJVEVfT05DRShuaWNfZGV2LVxcdTAwM2VhZGFwdGl2ZV9yeF9jb2FsLCAxKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBoaW5pYzNfaW5pdF9pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgaW50IGhpbmljM19zd19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIFxcdHU4IG1hY19hZGRyW0VUSF9BTEVOXTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNm5pY19kZXYtXFx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFxuIFxcdG5pY19kZXYtXFx1MDAzZXFfcGFyYW1zLnNxX2RlcHRoID0gSElOSUMzX1NRX0RFUFRIO1xcbiBcXHRuaWNfZGV2LVxcdTAwM2VxX3BhcmFtcy5ycV9kZXB0aCA9IEhJTklDM19SUV9ERVBUSDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcXG5pbmRleCBjNWJjYTNjNGFmOTYxLi43NmM2OTFmODI3MDNlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXFxuQEAgLTE0Myw2ICsxNDMsNDEgQEAgc3RydWN0IGwybmljX2NtZF9zZXRfZGNiX3N0YXRlIHtcXG4gXFx0dTggICAgICAgICAgICAgICAgICAgcnN2ZFs3XTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8ge1xcbitcXHRzdHJ1Y3QgbWdtdF9tc2dfaGVhZCBtc2dfaGVhZDtcXG4rXFx0dTE2ICAgICAgICAgICAgICAgICAgZnVuY19pZDtcXG4rXFx0dTE2ICAgICAgICAgICAgICAgICAgcnN2ZDE7XFxuK307XFxuK1xcbitzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMge1xcbitcXHR1NjQgdHhfdW5pY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgdHhfdW5pY2FzdF9ieXRlc192cG9ydDtcXG4rXFx0dTY0IHR4X211bHRpY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgdHhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0O1xcbitcXHR1NjQgdHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XFxuK1xcdHU2NCB0eF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7XFxuK1xcbitcXHR1NjQgcnhfdW5pY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgcnhfdW5pY2FzdF9ieXRlc192cG9ydDtcXG4rXFx0dTY0IHJ4X211bHRpY2FzdF9wa3RzX3Zwb3J0O1xcbitcXHR1NjQgcnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0O1xcbitcXHR1NjQgcnhfYnJvYWRjYXN0X3BrdHNfdnBvcnQ7XFxuK1xcdHU2NCByeF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7XFxuK1xcbitcXHR1NjQgdHhfZGlzY2FyZF92cG9ydDtcXG4rXFx0dTY0IHJ4X2Rpc2NhcmRfdnBvcnQ7XFxuK1xcdHU2NCB0eF9lcnJfdnBvcnQ7XFxuK1xcdHU2NCByeF9lcnJfdnBvcnQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgbDJuaWNfY21kX3Zwb3J0X3N0YXRzIHtcXG4rXFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgICAgIG1zZ19oZWFkO1xcbitcXHR1MzIgICAgICAgICAgICAgICAgICAgICAgc3RhdHNfc2l6ZTtcXG4rXFx0dTMyICAgICAgICAgICAgICAgICAgICAgIHJzdmQxO1xcbitcXHRzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgc3RhdHM7XFxuK1xcdHU2NCAgICAgICAgICAgICAgICAgICAgICByc3ZkMls2XTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBsMm5pY19jbWRfbHJvX2NvbmZpZyB7XFxuIFxcdHN0cnVjdCBtZ210X21zZ19oZWFkIG1zZ19oZWFkO1xcbiBcXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xcbkBAIC0yMzQsNiArMjY5LDcgQEAgZW51bSBsMm5pY19jbWQge1xcbiBcXHRMMk5JQ19DTURfU0VUX1ZQT1JUX0VOQUJMRSAgICA9IDYsXFxuIFxcdEwyTklDX0NNRF9TRVRfUlhfTU9ERSAgICAgICAgID0gNyxcXG4gXFx0TDJOSUNfQ01EX1NFVF9TUV9DSV9BVFRSICAgICAgPSA4LFxcbitcXHRMMk5JQ19DTURfR0VUX1ZQT1JUX1NUQVQgICAgICA9IDksXFxuIFxcdEwyTklDX0NNRF9DTEVBUl9RUF9SRVNPVVJDRSAgID0gMTEsXFxuIFxcdEwyTklDX0NNRF9DRkdfUlhfTFJPICAgICAgICAgID0gMTMsXFxuIFxcdEwyTklDX0NNRF9DRkdfTFJPX1RJTUVSICAgICAgID0gMTQsXFxuQEAgLTI3Miw2ICszMDgsNyBAQCBlbnVtIG1hZ19jbWQge1xcbiBcXHRNQUdfQ01EX1NFVF9QT1JUX0VOQUJMRSA9IDYsXFxuIFxcdE1BR19DTURfR0VUX0xJTktfU1RBVFVTID0gNyxcXG4gXFxuK1xcdE1BR19DTURfR0VUX1BPUlRfU1RBVCAgID0gMTUxLFxcbiBcXHRNQUdfQ01EX0dFVF9QT1JUX0lORk8gICA9IDE1MyxcXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25ldGRldl9vcHMuY1xcbmluZGV4IGRhNzM4MTE2NDFhOWQuLmVkNDgxMGZhOTg1MmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXFxuQEAgLTM0MSw5ICszNDEsOSBAQCBzdGF0aWMgaW50IGhpbmljM19tYXliZV9zZXRfcG9ydF9zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBib29sIGVuYWJsZSlcXG4gXFx0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm5pY19kZXYtXFx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFx0ZXJyID0gaGluaWMzX3NldF9wb3J0X2VuYWJsZShuaWNfZGV2LVxcdTAwM2Vod2RldiwgZW5hYmxlKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2Vwb3J0X3N0YXRlX211dGV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuaWNfZGV2LVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5jXFxuaW5kZXggZGU1YTc5ODRkMmNiOS4uMWIxNGRjODI0Y2UxZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcXG5AQCAtNjM5LDYgKzYzOSw0MiBAQCBpbnQgaGluaWMzX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgYm9vbCAqbGlua19zdGF0dXNfdXApXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitpbnQgaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0c19pbmZvIHN0YXRzX2luZm8gPSB7fTtcXG4rXFx0c3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCAqcHM7XFxuK1xcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0cHMgPSBremFsbG9jX29iaigqcHMpO1xcbitcXHRpZiAoIXBzKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHN0YXRzX2luZm8ucG9ydF9pZCA9IGhpbmljM19waHlzaWNhbF9wb3J0X2lkKGh3ZGV2KTtcXG4rXFxuK1xcdG1nbXRfbXNnX3BhcmFtc19pbml0X2luX291dChcXHUwMDI2bXNnX3BhcmFtcywgXFx1MDAyNnN0YXRzX2luZm8sIHBzLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZW9mKHN0YXRzX2luZm8pLCBzaXplb2YoKnBzKSk7XFxuK1xcbitcXHRlcnIgPSBoaW5pYzNfc2VuZF9tYm94X3RvX21nbXQoaHdkZXYsIE1HTVRfTU9EX0hJTElOSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE1BR19DTURfR0VUX1BPUlRfU1RBVCwgXFx1MDAyNm1zZ19wYXJhbXMpO1xcbitcXG4rXFx0aWYgKGVyciB8fCBwcy1cXHUwMDNlaGVhZC5zdGF0dXMpIHtcXG4rXFx0XFx0ZGV2X2Vycihod2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBwb3J0IHN0YXRpc3RpY3MsIGVycjogJWQsIHN0YXR1czogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyLCBwcy1cXHUwMDNlaGVhZC5zdGF0dXMpO1xcbitcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bWVtY3B5KHN0YXRzLCBcXHUwMDI2cHMtXFx1MDAzZWNvdW50ZXIsIHNpemVvZigqc3RhdHMpKTtcXG4rXFxuK291dDpcXG4rXFx0a2ZyZWUocHMpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4gaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxcbiBcXHRcXHRcXHQgc3RydWN0IGhpbmljM19uaWNfcG9ydF9pbmZvICpwb3J0X2luZm8pXFxuIHtcXG5AQCAtNzM4LDMgKzc3NCwzMSBAQCBpbnQgaGluaWMzX2dldF9wYXVzZV9pbmZvKHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldixcXG4gXFx0cmV0dXJuIGhpbmljM19jZmdfaHdfcGF1c2UobmljX2Rldi1cXHUwMDNlaHdkZXYsIE1HTVRfTVNHX0NNRF9PUF9HRVQsXFxuIFxcdFxcdFxcdFxcdCAgIG5pY19wYXVzZSk7XFxuIH1cXG4rXFxuK2ludCBoaW5pYzNfZ2V0X3Zwb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgbDJuaWNfY21kX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XFxuK1xcdHN0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8gc3RhdHNfaW5mbyA9IHt9O1xcbitcXHRzdHJ1Y3QgbWdtdF9tc2dfcGFyYW1zIG1zZ19wYXJhbXMgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHN0YXRzX2luZm8uZnVuY19pZCA9IGZ1bmNfaWQ7XFxuK1xcbitcXHRtZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoXFx1MDAyNm1zZ19wYXJhbXMsIFxcdTAwMjZzdGF0c19pbmZvLCBcXHUwMDI2dnBvcnRfc3RhdHMsXFxuK1xcdFxcdFxcdFxcdCAgICBzaXplb2Yoc3RhdHNfaW5mbyksIHNpemVvZih2cG9ydF9zdGF0cykpO1xcbitcXG4rXFx0ZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9MMk5JQyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIEwyTklDX0NNRF9HRVRfVlBPUlRfU1RBVCwgXFx1MDAyNm1zZ19wYXJhbXMpO1xcbitcXG4rXFx0aWYgKGVyciB8fCB2cG9ydF9zdGF0cy5tc2dfaGVhZC5zdGF0dXMpIHtcXG4rXFx0XFx0ZGV2X2Vycihod2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiRmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgdnBvcnRfc3RhdHMubXNnX2hlYWQuc3RhdHVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbWNweShzdGF0cywgXFx1MDAyNnZwb3J0X3N0YXRzLnN0YXRzLCBzaXplb2YoKnN0YXRzKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmhcXG5pbmRleCA1ZDUyMjAyYThkNGViLi44MDU3M2MxMjE1Mzk3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxcbkBAIC0xMjksNiArMTI5LDExMCBAQCBzdHJ1Y3QgbWFnX2NtZF9nZXRfeHNmcF9wcmVzZW50IHtcXG4gXFx0dTggICAgICAgICAgICAgICAgICAgcnN2ZFsyXTtcXG4gfTtcXG4gXFxuK3N0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMge1xcbitcXHR1NjQgbWFjX3R4X2ZyYWdtZW50X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfdW5kZXJzaXplX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfdW5kZXJtaW5fcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF82NF9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF82NV8xMjdfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfMTI4XzI1NV9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8yNTZfNTExX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfOTIxN18xMjI4N19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF8xNTE5X21heF9nb29kX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfb3ZlcnNpemVfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9qYWJiZXJfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9iYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9iYWRfb2N0X251bTtcXG4rXFx0dTY0IG1hY190eF9nb29kX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfZ29vZF9vY3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3RvdGFsX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfdG90YWxfb2N0X251bTtcXG4rXFx0dTY0IG1hY190eF91bmlfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9tdWx0aV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X2Jyb2FkX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGF1c2VfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wcmkwX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGZjX3ByaTFfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9wZmNfcHJpMl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wcmkzX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGZjX3ByaTRfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9wZmNfcHJpNV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X3BmY19wcmk2X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfcGZjX3ByaTdfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9jb250cm9sX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfdHhfZXJyX2FsbF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3R4X2Zyb21fYXBwX2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY190eF9mcm9tX2FwcF9iYWRfcGt0X251bTtcXG4rXFxuK1xcdHU2NCBtYWNfcnhfZnJhZ21lbnRfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF91bmRlcnNpemVfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF91bmRlcm1pbl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzY0X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzY1XzEyN19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF8xMjhfMjU1X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzI1Nl81MTFfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfNTEyXzEwMjNfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfMTAyNF8xNTE4X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzE1MTlfMjA0N19vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfNDA5Nl84MTkxX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzgxOTJfOTIxNl9vY3RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzE1MTlfbWF4X2JhZF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4XzE1MTlfbWF4X2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2phYmJlcl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2JhZF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2JhZF9vY3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9nb29kX29jdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfdG90YWxfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF90b3RhbF9vY3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3VuaV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X211bHRpX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfYnJvYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wYXVzZV9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3ByaTBfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wZmNfcHJpMV9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3BmY19wcmkyX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3ByaTNfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wZmNfcHJpNF9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3BmY19wcmk1X3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfcGZjX3ByaTZfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9wZmNfcHJpN19wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X2NvbnRyb2xfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9zeW1fZXJyX3BrdF9udW07XFxuK1xcdHU2NCBtYWNfcnhfZmNzX2Vycl9wa3RfbnVtO1xcbitcXHR1NjQgbWFjX3J4X3NlbmRfYXBwX2dvb2RfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF9zZW5kX2FwcF9iYWRfcGt0X251bTtcXG4rXFx0dTY0IG1hY19yeF91bmZpbHRlcl9wa3RfbnVtO1xcbit9O1xcbitcXG4rc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0c19pbmZvIHtcXG4rXFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgaGVhZDtcXG4rXFxuK1xcdHU4ICAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7XFxuK1xcdHU4ICAgICAgICAgICAgICAgICAgIHJzdmQwWzNdO1xcbit9O1xcbitcXG4rc3RydWN0IG1hZ19jbWRfZ2V0X3BvcnRfc3RhdCB7XFxuK1xcdHN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDtcXG4rXFxuK1xcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgY291bnRlcjtcXG4rXFx0dTY0ICAgICAgICAgICAgICAgICAgICAgICByc3ZkMVsxNV07XFxuK307XFxuK1xcbiBlbnVtIGxpbmtfZXJyX3R5cGUge1xcbiBcXHRMSU5LX0VSUl9NT0RVTEVfVU5SRUNPR0VOSVpFRCxcXG4gXFx0TElOS19FUlJfTlVNLFxcbkBAIC0yMDksNiArMzEzLDExIEBAIGludCBoaW5pYzNfZ2V0X3BvcnRfaW5mbyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldixcXG4gXFx0XFx0XFx0IHN0cnVjdCBoaW5pYzNfbmljX3BvcnRfaW5mbyAqcG9ydF9pbmZvKTtcXG4gaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcXG4gXFx0XFx0XFx0ICAgIGJvb2wgZW5hYmxlKTtcXG4raW50IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnN0YXRzKTtcXG4raW50IGhpbmljM19nZXRfdnBvcnRfc3RhdHMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiBmdW5jX2lkLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgKnN0YXRzKTtcXG4rXFxuIGludCBoaW5pYzNfYWRkX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7XFxuIGludCBoaW5pYzNfZGVsX3ZsYW4oc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIHUxNiB2bGFuX2lkLCB1MTYgZnVuY19pZCk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfZGV2LmhcXG5pbmRleCA5NTAyMjkzZmY3MTBjLi45NGEyYmFiNTI1NjQwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxcbkBAIC0xMCw2ICsxMCw4IEBAXFxuICNpbmNsdWRlIFxcXCJoaW5pYzNfaHdfY2ZnLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoaW5pYzNfaHdkZXYuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhpbmljM19tZ210X2ludGVyZmFjZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaGluaWMzX3J4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoaW5pYzNfdHguaFxcXCJcXG4gXFxuICNkZWZpbmUgSElOSUMzX1ZMQU5fQklUTUFQX0JZVEVfU0laRShuaWNfZGV2KSAgKHNpemVvZigqKG5pY19kZXYpLVxcdTAwM2V2bGFuX2JpdG1hcCkpXFxuICNkZWZpbmUgSElOSUMzX1ZMQU5fQklUTUFQX1NJWkUobmljX2RldikgIFxcXFxcXG5AQCAtMTI3LDggKzEyOSw4IEBAIHN0cnVjdCBoaW5pYzNfbmljX2RldiB7XFxuIFxcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICAgICAgICAgKndvcmtxO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrICAgICAgICAgICAgIHBlcmlvZGljX3dvcms7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgICAgICAgcnhfbW9kZV93b3JrO1xcbi1cXHQvKiBsb2NrIGZvciBlbmFibGUvZGlzYWJsZSBwb3J0ICovXFxuLVxcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgcG9ydF9zdGF0ZV9tdXRleDtcXG4rXFx0LyogUHJvdGVjdHMgaW50ZXJmYWNlIHN0YXRlICovXFxuK1xcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgc3RhdGVfbG9jaztcXG4gXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgdWNfZmlsdGVyX2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgbWNfZmlsdGVyX2xpc3Q7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXFxuaW5kZXggMzA5YWI1OTAxMzc5Ny4uMjk4ZmMwODE3NjgwZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xcbkBAIC0yOCwxMCArMjgsNiBAQFxcbiBcXG4gI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQgICAgIDY2XFxuICNkZWZpbmUgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2ICAgICA4Nlxcbi0jZGVmaW5lIEhJTklDM19MUk9fUEtUX0hEUl9MRU4oY3FlKSBcXFxcXFxuLVxcdChSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVCgoY3FlKS1cXHUwMDNlb2ZmbG9hZF90eXBlLCBJUF9UWVBFKSA9PSBcXFxcXFxuLVxcdCBISU5JQzNfUlhfSVBWNl9QS1QgPyBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgOiBcXFxcXFxuLVxcdCBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQpXFxuIFxcbiBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpXFxuIHtcXG5AQCAtNDYsNyArNDIsNiBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfcnhxX2NsZWFuX3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpyeHFfc3RhdHMpXFxuIFxcbiBcXHRyeHFfc3RhdHMtXFx1MDAzZWFsbG9jX3NrYl9lcnIgPSAwO1xcbiBcXHRyeHFfc3RhdHMtXFx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSAwO1xcbi1cXHRyeHFfc3RhdHMtXFx1MDAzZXJlc3RvcmVfZHJvcF9zZ2UgPSAwO1xcbiBcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhxX3N0YXRzLVxcdTAwM2VzeW5jcCk7XFxuIH1cXG4gXFxuQEAgLTE0Nyw2ICsxNDIsOCBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcXG4ge1xcbiBcXHR1MzIgaSwgZnJlZV93cWViYnMgPSByeHEtXFx1MDAzZWRlbHRhIC0gMTtcXG4gXFx0c3RydWN0IGhpbmljM19yeF9pbmZvICpyeF9pbmZvO1xcbitcXHRzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgKnN5bmNwO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTU1LDggKzE1MiwxMyBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcXG4gXFxuIFxcdFxcdGVyciA9IHJ4X2FsbG9jX21hcHBlZF9wYWdlKHJ4cS1cXHUwMDNlcGFnZV9wb29sLCByeF9pbmZvLFxcbiBcXHRcXHRcXHRcXHRcXHQgICByeHEtXFx1MDAzZWJ1Zl9sZW4pO1xcbi1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG4rXFx0XFx0XFx0c3luY3AgPSBcXHUwMDI2cnhxLVxcdTAwM2VyeHFfc3RhdHMuc3luY3A7XFxuK1xcdFxcdFxcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKHN5bmNwKTtcXG4rXFx0XFx0XFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMuYWxsb2NfcnhfYnVmX2VycisrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKHN5bmNwLCBmbGFncyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcbiBcXHRcXHRkbWFfYWRkciA9IHBhZ2VfcG9vbF9nZXRfZG1hX2FkZHIocnhfaW5mby1cXHUwMDNlcGFnZSkgK1xcbiBcXHRcXHRcXHRyeF9pbmZvLVxcdTAwM2VwYWdlX29mZnNldDtcXG5AQCAtMTcwLDYgKzE3MiwxMSBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcXG4gXFx0XFx0XFx0XFx0cnhxLVxcdTAwM2VuZXh0X3RvX3VwZGF0ZSBcXHUwMDNjXFx1MDAzYyBISU5JQzNfTk9STUFMX1JRX1dRRSk7XFxuIFxcdFxcdHJ4cS1cXHUwMDNlZGVsdGEgLT0gaTtcXG4gXFx0XFx0cnhxLVxcdTAwM2VuZXh0X3RvX2FsbG9jID0gcnhxLVxcdTAwM2VuZXh0X3RvX3VwZGF0ZTtcXG4rXFx0fSBlbHNlIGlmIChmcmVlX3dxZWJicyA9PSByeHEtXFx1MDAzZXFfZGVwdGggLSAxKSB7XFxuK1xcdFxcdHN5bmNwID0gXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xcbitcXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XFxuK1xcdFxcdHJ4cS1cXHUwMDNlcnhxX3N0YXRzLnJ4X2J1Zl9lbXB0eSsrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKHN5bmNwLCBmbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBpO1xcbkBAIC0zMzAsMTEgKzMzNywyNCBAQCBzdGF0aWMgdm9pZCBoaW5pYzNfcnhfY3N1bShzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCB1MzIgb2ZmbG9hZF90eXBlLFxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcnhxLVxcdTAwM2VuZXRkZXY7XFxuIFxcdGJvb2wgbDJfdHVubmVsO1xcbiBcXG4rXFx0LyogSFcgZW5zdXJlcyB0aGF0IG9ubHkgMSBiaXQgaXMgc2V0IGluIGNzdW1fZXJyLiAqL1xcbitcXHRpZiAodW5saWtlbHkoY3N1bV9lcnIgPT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpKSB7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMub3RoZXJfZXJyb3JzKys7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZyeHEtXFx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghKG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgXFx1MDAyNiBORVRJRl9GX1JYQ1NVTSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShjc3VtX2VycikpIHtcXG4gXFx0XFx0LyogcGt0IHR5cGUgaXMgcmVjb2duaXplZCBieSBIVywgYW5kIGNzdW0gaXMgd3JvbmcgKi9cXG4rXFx0XFx0aWYgKGNzdW1fZXJyICE9IEhJTklDM19SWF9DU1VNX0hXX0NIRUNLX05PTkUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNzdW1fZXJyICE9IEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMuY3N1bV9lcnJvcnMrKztcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRza2ItXFx1MDAzZWlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbkBAIC0zODcsOCArNDA3LDEyIEBAIHN0YXRpYyBpbnQgcmVjdl9vbmVfcGt0KHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHN0cnVjdCBoaW5pYzNfcnFfY3FlICpyeF9jcWUsXFxuIFxcdHUxNiBudW1fbHJvO1xcbiBcXG4gXFx0c2tiID0gaGluaWMzX2ZldGNoX3J4X2J1ZmZlcihyeHEsIHBrdF9sZW4pO1xcbi1cXHRpZiAodW5saWtlbHkoIXNrYikpXFxuK1xcdGlmICh1bmxpa2VseSghc2tiKSkge1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZyeHEtXFx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHJ4cS1cXHUwMDNlcnhxX3N0YXRzLmFsbG9jX3NrYl9lcnIrKztcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdC8qIHBsYWNlIGhlYWRlciBpbiBsaW5lYXIgcG9ydGlvbiBvZiBidWZmZXIgKi9cXG4gXFx0aWYgKHNrYl9pc19ub25saW5lYXIoc2tiKSlcXG5AQCAtNTUwLDExICs1NzQsMjkgQEAgaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rdm9pZCBoaW5pYzNfcnhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzID0gXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZyeHFfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZWNzdW1fZXJyb3JzID0gcnhxX3N0YXRzLVxcdTAwM2Vjc3VtX2Vycm9ycztcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZW90aGVyX2Vycm9ycyA9IHJ4cV9zdGF0cy1cXHUwMDNlb3RoZXJfZXJyb3JzO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlcnhfYnVmX2VtcHR5ID0gcnhxX3N0YXRzLVxcdTAwM2VyeF9idWZfZW1wdHk7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VhbGxvY19za2JfZXJyID0gcnhxX3N0YXRzLVxcdTAwM2VhbGxvY19za2JfZXJyO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlYWxsb2NfcnhfYnVmX2VyciA9IHJ4cV9zdGF0cy1cXHUwMDNlYWxsb2NfcnhfYnVmX2VycjtcXG4rXFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZyeHFfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbit9XFxuK1xcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldClcXG4ge1xcbiBcXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihyeHEtXFx1MDAzZW5ldGRldik7XFxuK1xcdHUzMiBpcF90eXBlLCBvZmZsb2FkX3R5cGUsIHBrdF9oZHJfbGVuO1xcbiBcXHR1MzIgc3dfY2ksIHN0YXR1cywgcGt0X2xlbiwgdmxhbl9sZW47XFxuIFxcdHN0cnVjdCBoaW5pYzNfcnFfY3FlICpyeF9jcWU7XFxuK1xcdHU2NCByeF9ieXRlcyA9IDA7XFxuIFxcdHUzMiBudW1fd3FlID0gMDtcXG4gXFx0aW50IG5yX3BrdHMgPSAwO1xcbiBcXHR1MTYgbnVtX2xybztcXG5AQCAtNTc0LDEwICs2MTYsMjAgQEAgaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpXFxuIFxcdFxcdGlmIChyZWN2X29uZV9wa3QocnhxLCByeF9jcWUsIHBrdF9sZW4sIHZsYW5fbGVuLCBzdGF0dXMpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuK1xcdFxcdHJ4X2J5dGVzICs9IHBrdF9sZW47XFxuIFxcdFxcdG5yX3BrdHMrKztcXG4gXFx0XFx0bnVtX2xybyA9IFJRX0NRRV9TVEFUVVNfR0VUKHN0YXR1cywgTlVNX0xSTyk7XFxuLVxcdFxcdGlmIChudW1fbHJvKVxcbitcXHRcXHRpZiAobnVtX2xybykge1xcbitcXHRcXHRcXHRvZmZsb2FkX3R5cGUgPSBsZTMyX3RvX2NwdShyeF9jcWUtXFx1MDAzZW9mZmxvYWRfdHlwZSk7XFxuK1xcdFxcdFxcdGlwX3R5cGUgPSBSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVChvZmZsb2FkX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgSVBfVFlQRSk7XFxuK1xcdFxcdFxcdHBrdF9oZHJfbGVuID0gaXBfdHlwZSA9PSBISU5JQzNfUlhfSVBWNl9QS1QgP1xcbitcXHRcXHRcXHRcXHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgOlxcbitcXHRcXHRcXHRcXHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQ7XFxuK1xcbitcXHRcXHRcXHRyeF9ieXRlcyArPSAobnVtX2xybyAtIDEpICogcGt0X2hkcl9sZW47XFxuIFxcdFxcdFxcdG51bV93cWUgKz0gaGluaWMzX2dldF9zZ2VfbnVtKHJ4cSwgcGt0X2xlbik7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHJ4X2NxZS1cXHUwMDNlc3RhdHVzID0gMDtcXG4gXFxuQEAgLTU4OCw1ICs2NDAsMTAgQEAgaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpXFxuIFxcdGlmIChyeHEtXFx1MDAzZWRlbHRhIFxcdTAwM2U9IEhJTklDM19SWF9CVUZGRVJfV1JJVEUpXFxuIFxcdFxcdGhpbmljM19yeF9maWxsX2J1ZmZlcnMocnhxKTtcXG4gXFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnJ4cS1cXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0cnhxLVxcdTAwM2VyeHFfc3RhdHMucGFja2V0cyArPSAodTY0KW5yX3BrdHM7XFxuK1xcdHJ4cS1cXHUwMDNlcnhxX3N0YXRzLmJ5dGVzICs9IHJ4X2J5dGVzO1xcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2cnhxLVxcdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xcbitcXG4gXFx0cmV0dXJuIG5yX3BrdHM7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcXG5pbmRleCAwNmQxYjMyOTllN2NmLi4yYWI2OTFlZDExYTkzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXFxuQEAgLTgsNiArOCwxNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGltLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gXFxuKy8qIHJ4IGNxZSBjaGVja3N1bSBlcnIgKi9cXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JUF9DU1VNX0VSUiAgICAgIEJJVCgwKVxcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX1RDUF9DU1VNX0VSUiAgICAgQklUKDEpXFxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVURQX0NTVU1fRVJSICAgICBCSVQoMilcXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JR01QX0NTVU1fRVJSICAgIEJJVCgzKVxcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lDTVBWNF9DU1VNX0VSUiAgQklUKDQpXFxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY2X0NTVU1fRVJSICBCSVQoNSlcXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9TQ1RQX0NSQ19FUlIgICAgIEJJVCg2KVxcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0hXX0NIRUNLX05PTkUgICAgQklUKDcpXFxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIgICBCSVQoOClcXG4rXFxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9QS1RfVFlQRV9NQVNLICAgICAgICAgICBHRU5NQVNLKDQsIDApXFxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9JUF9UWVBFX01BU0sgICAgICAgICAgICBHRU5NQVNLKDYsIDUpXFxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9UVU5ORUxfUEtUX0ZPUk1BVF9NQVNLICBHRU5NQVNLKDExLCA4KVxcbkBAIC0zOSw3ICs1MCw2IEBAIHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzIHtcXG4gXFx0dTY0ICAgICAgICAgICAgICAgICAgIHJ4X2J1Zl9lbXB0eTtcXG4gXFx0dTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3NrYl9lcnI7XFxuIFxcdHU2NCAgICAgICAgICAgICAgICAgICBhbGxvY19yeF9idWZfZXJyO1xcbi1cXHR1NjQgICAgICAgICAgICAgICAgICAgcmVzdG9yZV9kcm9wX3NnZTtcXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbiB9O1xcbiBcXG5AQCAtMTAxLDkgKzExMSw2IEBAIHN0cnVjdCBoaW5pYzNfcnhxIHtcXG4gXFx0ZG1hX2FkZHJfdCAgICAgICAgICAgICBjcWVfc3RhcnRfcGFkZHI7XFxuIFxcbiBcXHRzdHJ1Y3QgZGltICAgICAgICAgICAgIGRpbTtcXG4tXFxuLVxcdHU4ICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2FsZXNjX3RpbWVyX2NmZztcXG4tXFx0dTggICAgICAgICAgICAgICAgICAgICBsYXN0X3BlbmRpbmdfbGltaXQ7XFxuIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkO1xcbiBcXG4gc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMge1xcbkBAIC0xMjMsNiArMTMwLDkgQEAgdm9pZCBoaW5pYzNfZnJlZV9yeHFzX3JlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxcbiBcXHRcXHRcXHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcXG4gaW50IGhpbmljM19jb25maWd1cmVfcnhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3JxLFxcbiBcXHRcXHRcXHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcXG4rXFxuK3ZvaWQgaGluaWMzX3J4cV9nZXRfc3RhdHMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSxcXG4rXFx0XFx0XFx0ICBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqc3RhdHMpO1xcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCk7XFxuIFxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcXG5pbmRleCA5MzA2YmYwMDIwY2FmLi42MjE5Y2MxMDkxOGRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXFxuQEAgLTI1LDExICsyNSw5IEBAIHN0YXRpYyB2b2lkIGhpbmljM190eHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnR4cV9zdGF0cylcXG4gXFx0dHhxX3N0YXRzLVxcdTAwM2Vkcm9wcGVkID0gMDtcXG4gXFxuIFxcdHR4cV9zdGF0cy1cXHUwMDNlc2tiX3BhZF9lcnIgPSAwO1xcbi1cXHR0eHFfc3RhdHMtXFx1MDAzZWZyYWdfbGVuX292ZXJmbG93ID0gMDtcXG4gXFx0dHhxX3N0YXRzLVxcdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyID0gMDtcXG4gXFx0dHhxX3N0YXRzLVxcdTAwM2VtYXBfZnJhZ19lcnIgPSAwO1xcbiBcXHR0eHFfc3RhdHMtXFx1MDAzZXVua25vd25fdHVubmVsX3BrdCA9IDA7XFxuLVxcdHR4cV9zdGF0cy1cXHUwMDNlZnJhZ19zaXplX2VyciA9IDA7XFxuIFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZ0eHFfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4gfVxcbiBcXG5AQCAtOTcsOCArOTUsMTIgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfbWFwX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0ZG1hX2luZm9bMF0uZG1hID0gZG1hX21hcF9zaW5nbGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgc2tiLVxcdTAwM2VkYXRhLFxcbiBcXHRcXHRcXHRcXHRcXHQgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7XFxuLVxcdGlmIChkbWFfbWFwcGluZ19lcnJvcihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBkbWFfaW5mb1swXS5kbWEpKVxcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgZG1hX2luZm9bMF0uZG1hKSkge1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHR4cS1cXHUwMDNldHhxX3N0YXRzLm1hcF9mcmFnX2VycisrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFx0fVxcbiBcXG4gXFx0ZG1hX2luZm9bMF0ubGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcXG4gXFxuQEAgLTExNyw2ICsxMTksOSBAQCBzdGF0aWMgaW50IGhpbmljM190eF9tYXBfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBETUFfVE9fREVWSUNFKTtcXG4gXFx0XFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGRtYV9pbmZvW2lkeF0uZG1hKSkge1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdFxcdHR4cS1cXHUwMDNldHhxX3N0YXRzLm1hcF9mcmFnX2VycisrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIGVycl91bm1hcF9wYWdlO1xcbiBcXHRcXHR9XFxuQEAgLTI2MCw2ICsyNjUsOSBAQCBzdGF0aWMgaW50IGhpbmljM190eF9jc3VtKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIHN0cnVjdCBoaW5pYzNfc3FfdGFzayAqdGFzayxcXG4gXFx0XFx0aWYgKGw0X3Byb3RvICE9IElQUFJPVE9fVURQIHx8XFxuIFxcdFxcdCAgICAoKHN0cnVjdCB1ZHBoZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpKS1cXHUwMDNlZGVzdCAhPVxcbiBcXHRcXHQgICAgVlhMQU5fT0ZGTE9BRF9QT1JUX0xFKSB7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0XFx0dHhxLVxcdTAwM2V0eHFfc3RhdHMudW5rbm93bl90dW5uZWxfcGt0Kys7XFxuK1xcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuIFxcdFxcdFxcdC8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovXFxuIFxcdFxcdFxcdHNrYl9jaGVja3N1bV9oZWxwKHNrYik7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbkBAIC00MzMsNiArNDQxLDI3IEBAIHN0YXRpYyB1MzIgaGluaWMzX3R4X29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhpbmljM19zcV90YXNrICp0YXNrLFxcbiBcXHRyZXR1cm4gb2ZmbG9hZDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9wa3Rfc3RhdHMoc3RydWN0IGhpbmljM190eHEgKnR4cSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHR1MzIgaGRyX2xlbiwgdHhfYnl0ZXM7XFxuK1xcdHVuc2lnbmVkIHNob3J0IHBrdHM7XFxuK1xcbitcXHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XFxuK1xcdFxcdGhkcl9sZW4gPSAoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2VncyAtIDEpICpcXG4rXFx0XFx0XFx0ICBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XFxuK1xcdFxcdHR4X2J5dGVzID0gc2tiLVxcdTAwM2VsZW4gKyBoZHJfbGVuO1xcbitcXHRcXHRwa3RzID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2VncztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dHhfYnl0ZXMgPSBza2ItXFx1MDAzZWxlbiBcXHUwMDNlIEVUSF9aTEVOID8gc2tiLVxcdTAwM2VsZW4gOiBFVEhfWkxFTjtcXG4rXFx0XFx0cGt0cyA9IDE7XFxuK1xcdH1cXG4rXFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0dHhxLVxcdTAwM2V0eHFfc3RhdHMuYnl0ZXMgKz0gdHhfYnl0ZXM7XFxuK1xcdHR4cS1cXHUwMDNldHhxX3N0YXRzLnBhY2tldHMgKz0gcGt0cztcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rfVxcbitcXG4gc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2FuZF91cGRhdGVfc3Ffb3duZXIoc3RydWN0IGhpbmljM19pb19xdWV1ZSAqc3EsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdTE2IGN1cnJfcGksIHUxNiB3cWViYl9jbnQpXFxuIHtcXG5AQCAtNTM5LDggKzU2OCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlbGVuIFxcdTAwM2MgTUlOX1NLQl9MRU4pKSB7XFxuLVxcdFxcdGlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItXFx1MDAzZWxlbikpXFxuK1xcdFxcdGlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItXFx1MDAzZWxlbikpIHtcXG4rXFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbitcXHRcXHRcXHR0eHEtXFx1MDAzZXR4cV9zdGF0cy5za2JfcGFkX2VycisrO1xcbitcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdHNrYi1cXHUwMDNlbGVuID0gTUlOX1NLQl9MRU47XFxuIFxcdH1cXG5AQCAtNTU3LDExICs1OTAsMTcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0XFx0aGluaWMzX3dxX2ZyZWVfd3FlYmJzKFxcdTAwMjZ0eHEtXFx1MDAzZXNxLVxcdTAwM2V3cSksXFxuIFxcdFxcdFxcdFxcdFxcdHR4cS1cXHUwMDNldHhfc3RhcnRfdGhycyk7XFxuIFxcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdFxcdHR4cS1cXHUwMDNldHhxX3N0YXRzLmJ1c3krKztcXG4rXFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbiBcXHRvZmZsb2FkID0gaGluaWMzX3R4X29mZmxvYWQoc2tiLCBcXHUwMDI2dGFzaywgXFx1MDAyNnF1ZXVlX2luZm8sIHR4cSk7XFxuIFxcdGlmICh1bmxpa2VseShvZmZsb2FkID09IEhJTklDM19UWF9PRkZMT0FEX0lOVkFMSUQpKSB7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFx0XFx0dHhxLVxcdTAwM2V0eHFfc3RhdHMub2ZmbG9hZF9jb3dfc2tiX2VycisrO1xcbitcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2dHhxLVxcdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xcbiBcXHRcXHRnb3RvIGVycl9kcm9wX3BrdDtcXG4gXFx0fSBlbHNlIGlmICghb2ZmbG9hZCkge1xcbiBcXHRcXHR3cWViYl9jbnQgLT0gMTtcXG5AQCAtNTk1LDYgKzYzNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBoaW5pYzNfc2VuZF9vbmVfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgdHhxLVxcdTAwM2V0eF9zdG9wX3RocnMsXFxuIFxcdFxcdFxcdFxcdCAgdHhxLVxcdTAwM2V0eF9zdGFydF90aHJzKTtcXG4gXFxuK1xcdGhpbmljM19nZXRfcGt0X3N0YXRzKHR4cSwgc2tiKTtcXG4gXFx0aGluaWMzX3ByZXBhcmVfc3FfY3RybChcXHUwMDI2d3FlX2NvbWJvLCBxdWV1ZV9pbmZvLCBudW1fc2dlLCBvd25lcik7XFxuIFxcdGhpbmljM193cml0ZV9kYih0eHEtXFx1MDAzZXNxLCAwLCBEQl9DRkxBR19EUF9TUSxcXG4gXFx0XFx0XFx0aGluaWMzX2dldF9zcV9sb2NhbF9waSh0eHEtXFx1MDAzZXNxKSk7XFxuQEAgLTYwNCw2ICs2NDQsMTAgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gZXJyX2Ryb3BfcGt0OlxcbiBcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbiBlcnJfb3V0OlxcbitcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZ0eHEtXFx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XFxuK1xcdHR4cS1cXHUwMDNldHhxX3N0YXRzLmRyb3BwZWQrKztcXG4rXFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcXG4rXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuQEAgLTc1NCw2ICs3OTgsMjIgQEAgaW50IGhpbmljM19jb25maWd1cmVfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgbnVtX3NxLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rdm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqdHhxX3N0YXRzID0gXFx1MDAyNnR4cS1cXHUwMDNldHhxX3N0YXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFxcdTAwMjZ0eHFfc3RhdHMtXFx1MDAzZXN5bmNwKTtcXG4rXFx0XFx0c3RhdHMtXFx1MDAzZWJ1c3kgPSB0eHFfc3RhdHMtXFx1MDAzZWJ1c3k7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2Vza2JfcGFkX2VyciA9IHR4cV9zdGF0cy1cXHUwMDNlc2tiX3BhZF9lcnI7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyID0gdHhxX3N0YXRzLVxcdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyO1xcbitcXHRcXHRzdGF0cy1cXHUwMDNlbWFwX2ZyYWdfZXJyID0gdHhxX3N0YXRzLVxcdTAwM2VtYXBfZnJhZ19lcnI7XFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V1bmtub3duX3R1bm5lbF9wa3QgPSB0eHFfc3RhdHMtXFx1MDAzZXVua25vd25fdHVubmVsX3BrdDtcXG4rXFx0fSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5KFxcdTAwMjZ0eHFfc3RhdHMtXFx1MDAzZXN5bmNwLCBzdGFydCkpO1xcbit9XFxuK1xcbiBib29sIGhpbmljM190eF9wb2xsKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIGludCBidWRnZXQpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHR4cS1cXHUwMDNlbmV0ZGV2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxcbmluZGV4IDAwMTk0ZjJhMWJjYzEuLjZhYmY0NDNjYjkyN2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmhcXG5AQCAtMTA2LDExICsxMDYsOSBAQCBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB7XFxuIFxcdHU2NCAgICAgICAgICAgICAgICAgICBidXN5O1xcbiBcXHR1NjQgICAgICAgICAgICAgICAgICAgZHJvcHBlZDtcXG4gXFx0dTY0ICAgICAgICAgICAgICAgICAgIHNrYl9wYWRfZXJyO1xcbi1cXHR1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19sZW5fb3ZlcmZsb3c7XFxuIFxcdHU2NCAgICAgICAgICAgICAgICAgICBvZmZsb2FkX2Nvd19za2JfZXJyO1xcbiBcXHR1NjQgICAgICAgICAgICAgICAgICAgbWFwX2ZyYWdfZXJyO1xcbiBcXHR1NjQgICAgICAgICAgICAgICAgICAgdW5rbm93bl90dW5uZWxfcGt0O1xcbi1cXHR1NjQgICAgICAgICAgICAgICAgICAgZnJhZ19zaXplX2VycjtcXG4gXFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xcbiB9O1xcbiBcXG5AQCAtMTU3LDYgKzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSxcXG4gXFx0XFx0XFx0ICB1MzIgc3FfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV90eHFfcmVzICp0eHFzX3Jlcyk7XFxuIFxcbiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4rdm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICpzdGF0cyk7XFxuIGJvb2wgaGluaWMzX3R4X3BvbGwoc3RydWN0IGhpbmljM190eHEgKnR4cSwgaW50IGJ1ZGdldCk7XFxuIHZvaWQgaGluaWMzX2ZsdXNoX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwMjoyMTowNS4yMDM3OTg4NzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTYwMjc4NDE2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGhpbmljMyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBhZGFwdGVyIGRyaXZlciAoSHVhd2VpIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBBZGRpdGlvbmFsbHksIHRoZSBjaGFuZ2VzIHByaW1hcmlseSBhZGQgZXRodG9vbCBzdGF0aXN0aWNzIGFuZCBjb2FsZXNjZSBzZXR0aW5ncywgd2hpY2ggaW50ZXJhY3QgZGlyZWN0bHkgd2l0aCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZWVmNjMzYTA2MjRkMGU0MjkxMTZhNDAxZGZkMjYyN2IzOWFmMTQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDI6MjE6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcbmluZGV4IDkwZmMxNjI4OGRlOTUuLjg5YTdiYTIxMTE3MzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY1xuQEAgLTE3LDYgKzE3LDExIEBAXG4gI2luY2x1ZGUgXCJoaW5pYzNfbmljX2NmZy5oXCJcbiBcbiAjZGVmaW5lIEhJTklDM19NR01UX1ZFUlNJT05fTUFYX0xFTiAgICAgMzJcbisvKiBDb2FsZXNjZSB0aW1lIHByb3BlcnRpZXMgaW4gbWljcm9zZWNvbmRzICovXG4rI2RlZmluZSBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQgICAgIDhcbisjZGVmaW5lIENPQUxFU0NFX1RJTUVSX0NGR19VTklUICAgICAgICAgNVxuKyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVQgICAgICAoMjU1ICogQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKVxuKyNkZWZpbmUgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGRyAgICAgICAgICAoMjU1ICogQ09BTEVTQ0VfVElNRVJfQ0ZHX1VOSVQpXG4gXG4gc3RhdGljIHZvaWQgaGluaWMzX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG5AQCAtNDA5LDE0ICs0MTQsNzkxIEBAIGhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdHJ1Y3QgaGluaWMzX3N0YXRzIHtcbitcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xuK1x0aW50ICBvZmZzZXQ7XG4rfTtcbitcbisjZGVmaW5lIEhJTklDM19TVEFUX1NJWkVfQ0hFQ0sodHlwZSwgbWVtYmVyKSBcXFxuK1x0QlVJTERfQlVHX09OX1pFUk8oc2l6ZW9mX2ZpZWxkKHR5cGUsIG1lbWJlcikgIT0gc2l6ZW9mKHU2NCkpXG4rXG4rI2RlZmluZSBISU5JQzNfUlhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuK1x0Lm5hbWUgICA9IFwicnhxJWRfXCIjX3N0YXRfaXRlbSwgXFxcbitcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbitcdFx0ICArIDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzLCBcXFxuK1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbit9XG4rXG4rI2RlZmluZSBISU5JQzNfVFhRX1NUQVQoX3N0YXRfaXRlbSkgeyBcXFxuK1x0Lm5hbWUgICA9IFwidHhxJWRfXCIjX3N0YXRfaXRlbSwgXFxcbitcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbitcdFx0ICArIDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzLCBcXFxuK1x0XHRcdFx0XHQgICAgICAgX3N0YXRfaXRlbSkgXFxcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBoaW5pYzNfc3RhdHMgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW10gPSB7XG4rXHRISU5JQzNfUlhRX1NUQVQoY3N1bV9lcnJvcnMpLFxuK1x0SElOSUMzX1JYUV9TVEFUKG90aGVyX2Vycm9ycyksXG4rXHRISU5JQzNfUlhRX1NUQVQocnhfYnVmX2VtcHR5KSxcbitcdEhJTklDM19SWFFfU1RBVChhbGxvY19za2JfZXJyKSxcbitcdEhJTklDM19SWFFfU1RBVChhbGxvY19yeF9idWZfZXJyKSxcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgaGluaWMzX3N0YXRzIGhpbmljM190eF9xdWV1ZV9zdGF0c1tdID0ge1xuK1x0SElOSUMzX1RYUV9TVEFUKGJ1c3kpLFxuK1x0SElOSUMzX1RYUV9TVEFUKHNrYl9wYWRfZXJyKSxcbitcdEhJTklDM19UWFFfU1RBVChvZmZsb2FkX2Nvd19za2JfZXJyKSxcbitcdEhJTklDM19UWFFfU1RBVChtYXBfZnJhZ19lcnIpLFxuK1x0SElOSUMzX1RYUV9TVEFUKHVua25vd25fdHVubmVsX3BrdCksXG4rfTtcbitcbisjZGVmaW5lIEhJTklDM19GVU5DX1NUQVQoX3N0YXRfaXRlbSkge1x0XFxcbitcdC5uYW1lICAgPSAjX3N0YXRfaXRlbSwgXFxcbitcdC5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIF9zdGF0X2l0ZW0pIFxcXG4rXHRcdCAgKyAwICogSElOSUMzX1NUQVRfU0laRV9DSEVDSyhzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMsIFxcXG4rXHRcdFx0XHRcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxuK31cbitcbitzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfZnVuY3Rpb25fc3RhdHNbXSA9IHtcbitcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9wa3RzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfdW5pY2FzdF9ieXRlc192cG9ydCksXG4rXHRISU5JQzNfRlVOQ19TVEFUKHR4X211bHRpY2FzdF9wa3RzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfYnJvYWRjYXN0X3BrdHNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVCh0eF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQpLFxuK1xuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X3BrdHNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF91bmljYXN0X2J5dGVzX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQocnhfbXVsdGljYXN0X3BrdHNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF9tdWx0aWNhc3RfYnl0ZXNfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF9icm9hZGNhc3RfcGt0c192cG9ydCksXG4rXHRISU5JQzNfRlVOQ19TVEFUKHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydCksXG4rXG4rXHRISU5JQzNfRlVOQ19TVEFUKHR4X2Rpc2NhcmRfdnBvcnQpLFxuK1x0SElOSUMzX0ZVTkNfU1RBVChyeF9kaXNjYXJkX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQodHhfZXJyX3Zwb3J0KSxcbitcdEhJTklDM19GVU5DX1NUQVQocnhfZXJyX3Zwb3J0KSxcbit9O1xuK1xuKyNkZWZpbmUgSElOSUMzX1BPUlRfU1RBVChfc3RhdF9pdGVtKSB7IFxcXG4rXHQubmFtZSAgID0gI19zdGF0X2l0ZW0sIFxcXG4rXHQub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cywgX3N0YXRfaXRlbSkgXFxcbitcdFx0ICArIDAgKiBISU5JQzNfU1RBVF9TSVpFX0NIRUNLKHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMsIFxcXG4rXHRcdFx0XHRcdCAgICAgICBfc3RhdF9pdGVtKSBcXFxuK31cbitcbitzdGF0aWMgc3RydWN0IGhpbmljM19zdGF0cyBoaW5pYzNfcG9ydF9zdGF0c1tdID0ge1xuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJhZ21lbnRfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcnNpemVfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF91bmRlcm1pbl9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4XzE1MTlfbWF4X2JhZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4XzE1MTlfbWF4X2dvb2RfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2phYmJlcl9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2JhZF9vY3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3RvdGFsX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfdW5pX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTBfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpMV9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmkyX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTNfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpNF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X3BmY19wcmk1X3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfcGZjX3ByaTZfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9wZmNfcHJpN19wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3R4X2Vycl9hbGxfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY190eF9mcm9tX2FwcF9nb29kX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfdHhfZnJvbV9hcHBfYmFkX3BrdF9udW0pLFxuK1xuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdW5kZXJtaW5fcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF8xNTE5X21heF9iYWRfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF8xNTE5X21heF9nb29kX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfYmFkX29jdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfdG90YWxfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF91bmlfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmkxX3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTJfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpM19wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk0X3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfcGZjX3ByaTVfcGt0X251bSksXG4rXHRISU5JQzNfUE9SVF9TVEFUKG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3BmY19wcmk3X3BrdF9udW0pLFxuK1x0SElOSUMzX1BPUlRfU1RBVChtYWNfcnhfc2VuZF9hcHBfZ29vZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtKSxcbitcdEhJTklDM19QT1JUX1NUQVQobWFjX3J4X3VuZmlsdGVyX3BrdF9udW0pLFxuK307XG4rXG4rc3RhdGljIGludCBoaW5pYzNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdGludCBjb3VudCwgcV9udW07XG4rXG4rXHRzd2l0Y2ggKHNzZXQpIHtcbitcdGNhc2UgRVRIX1NTX1NUQVRTOlxuK1x0XHRxX251bSA9IG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwcztcbitcdFx0Y291bnQgPSBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cykgK1xuK1x0XHRcdChBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cykgK1xuK1x0XHRcdCBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cykpICpcbitcdFx0XHRxX251bTtcbitcbitcdFx0aWYgKCFISU5JQzNfSVNfVkYobmljX2Rldi1cdTAwM2Vod2RldikpXG4rXHRcdFx0Y291bnQgKz0gQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7XG4rXG4rXHRcdHJldHVybiBjb3VudDtcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9kcnZfcXVldWVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB0eHFfc3RhdHMgPSB7fTtcbitcdHN0cnVjdCBoaW5pYzNfcnhxX3N0YXRzIHJ4cV9zdGF0cyA9IHt9O1xuK1x0dTE2IGkgPSAwLCBqLCBxaWQ7XG4rXHRjaGFyICpwO1xuK1xuK1x0Zm9yIChxaWQgPSAwOyBxaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgcWlkKyspIHtcbitcdFx0aWYgKCFuaWNfZGV2LVx1MDAzZXR4cXMpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGhpbmljM190eHFfZ2V0X3N0YXRzKFx1MDAyNm5pY19kZXYtXHUwMDNldHhxc1txaWRdLCBcdTAwMjZ0eHFfc3RhdHMpO1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM190eF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdFx0cCA9IChjaGFyICopXHUwMDI2dHhxX3N0YXRzICtcbitcdFx0XHQgICAgaGluaWMzX3R4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcbitcdFx0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRpID0gbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzICogQVJSQVlfU0laRShoaW5pYzNfdHhfcXVldWVfc3RhdHMpO1xuK1x0Zm9yIChxaWQgPSAwOyBxaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgcWlkKyspIHtcbitcdFx0aWYgKCFuaWNfZGV2LVx1MDAzZXJ4cXMpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdGhpbmljM19yeHFfZ2V0X3N0YXRzKFx1MDAyNm5pY19kZXYtXHUwMDNlcnhxc1txaWRdLCBcdTAwMjZyeHFfc3RhdHMpO1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdFx0cCA9IChjaGFyICopXHUwMDI2cnhxX3N0YXRzICtcbitcdFx0XHQgICAgaGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm9mZnNldDtcbitcdFx0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB1MTYgaGluaWMzX2dldF9ldGh0b29sX3BvcnRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0ICpkYXRhKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdHUxNiBpID0gMCwgajtcbitcdGNoYXIgKnA7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuK1x0aWYgKCFwcylcbitcdFx0Z290byBlcnJfemVyb19zdGF0cztcbitcbitcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShwcyk7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkZhaWxlZCB0byBnZXQgcG9ydCBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRnb3RvIGVycl96ZXJvX3N0YXRzO1xuK1x0fVxuK1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdHAgPSAoY2hhciAqKXBzICsgaGluaWMzX3BvcnRfc3RhdHNbal0ub2Zmc2V0O1xuK1x0XHRkYXRhW2ldID0gKih1NjQgKilwO1xuK1x0fVxuK1xuK1x0a2ZyZWUocHMpO1xuK1xuK1x0cmV0dXJuIGk7XG4rXG4rZXJyX3plcm9fc3RhdHM6XG4rXHRtZW1zZXQoXHUwMDI2ZGF0YVtpXSwgMCwgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cykgKiBzaXplb2YoKmRhdGEpKTtcbitcbitcdHJldHVybiBpICsgQVJSQVlfU0laRShoaW5pYzNfcG9ydF9zdGF0cyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGwybmljX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XG4rXHR1MTYgaSA9IDAsIGo7XG4rXHRjaGFyICpwO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IGhpbmljM19nZXRfdnBvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldixcbitcdFx0XHRcdCAgICAgaGluaWMzX2dsb2JhbF9mdW5jX2lkKG5pY19kZXYtXHUwMDNlaHdkZXYpLFxuK1x0XHRcdFx0ICAgICBcdTAwMjZ2cG9ydF9zdGF0cyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGZ1bmN0aW9uIHN0YXRzIGZyb20gZndcXG5cIik7XG4rXG4rXHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19mdW5jdGlvbl9zdGF0cyk7IGorKywgaSsrKSB7XG4rXHRcdHAgPSAoY2hhciAqKVx1MDAyNnZwb3J0X3N0YXRzICsgaGluaWMzX2Z1bmN0aW9uX3N0YXRzW2pdLm9mZnNldDtcbitcdFx0ZGF0YVtpXSA9ICoodTY0ICopcDtcbitcdH1cbitcbitcdGlmICghSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuK1x0XHRpICs9IGhpbmljM19nZXRfZXRodG9vbF9wb3J0X3N0YXRzKG5ldGRldiwgZGF0YSArIGkpO1xuK1xuK1x0aGluaWMzX2dldF9kcnZfcXVldWVfc3RhdHMobmV0ZGV2LCBkYXRhICsgaSk7XG4rfVxuK1xuK3N0YXRpYyB1MTYgaGluaWMzX2dldF9od19zdGF0c19zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNoYXIgKnApXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHUxNiBpLCBjbnQgPSAwO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShoaW5pYzNfZnVuY3Rpb25fc3RhdHMpOyBpKyspIHtcbitcdFx0bWVtY3B5KHAsIGhpbmljM19mdW5jdGlvbl9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuK1x0XHRwICs9IEVUSF9HU1RSSU5HX0xFTjtcbitcdFx0Y250Kys7XG4rXHR9XG4rXG4rXHRpZiAoIUhJTklDM19JU19WRihuaWNfZGV2LVx1MDAzZWh3ZGV2KSkge1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19wb3J0X3N0YXRzKTsgaSsrKSB7XG4rXHRcdFx0bWVtY3B5KHAsIGhpbmljM19wb3J0X3N0YXRzW2ldLm5hbWUsIEVUSF9HU1RSSU5HX0xFTik7XG4rXHRcdFx0cCArPSBFVEhfR1NUUklOR19MRU47XG4rXHRcdFx0Y250Kys7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBjbnQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcXBfc3RhdHNfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjaGFyICpwKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1OCAqZGF0YSA9IHA7XG4rXHR1MTYgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3FwczsgaSsrKSB7XG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoaGluaWMzX3R4X3F1ZXVlX3N0YXRzKTsgaisrKVxuK1x0XHRcdGV0aHRvb2xfc3ByaW50ZihcdTAwMjZkYXRhLFxuK1x0XHRcdFx0XHRoaW5pYzNfdHhfcXVldWVfc3RhdHNbal0ubmFtZSwgaSk7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZXFfcGFyYW1zLm51bV9xcHM7IGkrKykge1xuK1x0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGhpbmljM19yeF9xdWV1ZV9zdGF0cyk7IGorKylcbitcdFx0XHRldGh0b29sX3NwcmludGYoXHUwMDI2ZGF0YSxcbitcdFx0XHRcdFx0aGluaWMzX3J4X3F1ZXVlX3N0YXRzW2pdLm5hbWUsIGkpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpXG4re1xuK1x0Y2hhciAqcCA9IChjaGFyICopZGF0YTtcbitcdHUxNiBvZmZzZXQ7XG4rXG4rXHRzd2l0Y2ggKHN0cmluZ3NldCkge1xuK1x0Y2FzZSBFVEhfU1NfU1RBVFM6XG4rXHRcdG9mZnNldCA9IGhpbmljM19nZXRfaHdfc3RhdHNfc3RyaW5ncyhuZXRkZXYsIHApO1xuK1x0XHRoaW5pYzNfZ2V0X3FwX3N0YXRzX3N0cmluZ3MobmV0ZGV2LFxuK1x0XHRcdFx0XHQgICAgcCArIG9mZnNldCAqIEVUSF9HU1RSSU5HX0xFTik7XG4rXG4rXHRcdHJldHVybjtcbitcdGRlZmF1bHQ6XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkludmFsaWQgc3RyaW5nIHNldCAldS5cXG5cIiwgc3RyaW5nc2V0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9waHlfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX3BoeV9zdGF0cyAqcGh5X3N0YXRzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoSElOSUMzX0lTX1ZGKG5pY19kZXYtXHUwMDNlaHdkZXYpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4rXHRpZiAoIXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHMpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGV0aCBwaHkgc3RhdHMgZnJvbSBmd1xcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0cGh5X3N0YXRzLVx1MDAzZVN5bWJvbEVycm9yRHVyaW5nQ2FycmllciA9IHBzLVx1MDAzZW1hY19yeF9zeW1fZXJyX3BrdF9udW07XG4rXG4rXHRrZnJlZShwcyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfbWFjX3N0YXRzICptYWNfc3RhdHMpXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnBzO1xuK1x0aW50IGVycjtcbitcbitcdHBzID0ga21hbGxvY19vYmooKnBzKTtcbitcdGlmICghcHMpXG4rXHRcdHJldHVybjtcbitcbitcdGVyciA9IGhpbmljM19nZXRfcGh5X3BvcnRfc3RhdHMobmljX2Rldi1cdTAwM2Vod2RldiwgcHMpO1xuK1x0aWYgKGVycikge1xuK1x0XHRrZnJlZShwcyk7XG4rXHRcdG5ldGRldl9lcnIobmV0ZGV2LCBcIkZhaWxlZCB0byBnZXQgZXRoIG1hYyBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzVHJhbnNtaXR0ZWRPSyA9IHBzLVx1MDAzZW1hY190eF9nb29kX3BrdF9udW07XG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVx1MDAzZW1hY19yeF9nb29kX3BrdF9udW07XG4rXHRtYWNfc3RhdHMtXHUwMDNlRnJhbWVDaGVja1NlcXVlbmNlRXJyb3JzID0gcHMtXHUwMDNlbWFjX3J4X2Zjc19lcnJfcGt0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNUcmFuc21pdHRlZE9LID0gcHMtXHUwMDNlbWFjX3R4X2dvb2Rfb2N0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VPY3RldHNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X2dvb2Rfb2N0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy1cdTAwM2VtYWNfdHhfbXVsdGlfcGt0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VCcm9hZGNhc3RGcmFtZXNYbWl0dGVkT0sgPSBwcy1cdTAwM2VtYWNfdHhfYnJvYWRfcGt0X251bTtcbitcdG1hY19zdGF0cy1cdTAwM2VNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LID0gcHMtXHUwMDNlbWFjX3J4X211bHRpX3BrdF9udW07XG4rXHRtYWNfc3RhdHMtXHUwMDNlQnJvYWRjYXN0RnJhbWVzUmVjZWl2ZWRPSyA9IHBzLVx1MDAzZW1hY19yeF9icm9hZF9wa3RfbnVtO1xuK1xuK1x0a2ZyZWUocHMpO1xuK31cbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbit7XG4rXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyAqcHM7XG4rXHRpbnQgZXJyO1xuK1xuK1x0cHMgPSBrbWFsbG9jX29iaigqcHMpO1xuK1x0aWYgKCFwcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gaGluaWMzX2dldF9waHlfcG9ydF9zdGF0cyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBwcyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGtmcmVlKHBzKTtcbitcdFx0bmV0ZGV2X2VycihuZXRkZXYsIFwiRmFpbGVkIHRvIGdldCBldGggY3RybCBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNUcmFuc21pdHRlZCA9IHBzLVx1MDAzZW1hY190eF9jb250cm9sX3BrdF9udW07XG4rXHRjdHJsX3N0YXRzLVx1MDAzZU1BQ0NvbnRyb2xGcmFtZXNSZWNlaXZlZCA9IHBzLVx1MDAzZW1hY19yeF9jb250cm9sX3BrdF9udW07XG4rXG4rXHRrZnJlZShwcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgaGluaWMzX3Jtb25fcmFuZ2VzW10gPSB7XG4rXHR7ICAgICAwLCAgICA2NCB9LFxuK1x0eyAgICA2NSwgICAxMjcgfSxcbitcdHsgICAxMjgsICAgMjU1IH0sXG4rXHR7ICAgMjU2LCAgIDUxMSB9LFxuK1x0eyAgIDUxMiwgIDEwMjMgfSxcbitcdHsgIDEwMjQsICAxNTE4IH0sXG4rXHR7ICAxNTE5LCAgMjA0NyB9LFxuK1x0eyAgMjA0OCwgIDQwOTUgfSxcbitcdHsgIDQwOTYsICA4MTkxIH0sXG4rXHR7ICA4MTkyLCAgOTIxNiB9LFxuK1x0eyAgOTIxNywgMTIyODcgfSxcbitcdHt9XG4rfTtcbitcbitzdGF0aWMgdm9pZCBoaW5pYzNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdGludCBlcnI7XG4rXG4rXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4rXHRpZiAoIXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHMpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGV0aCBybW9uIHN0YXRzIGZyb20gZndcXG5cIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHNcdD0gcHMtXHUwMDNlbWFjX3J4X3VuZGVyc2l6ZV9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VvdmVyc2l6ZV9wa3RzXHQ9IHBzLVx1MDAzZW1hY19yeF9vdmVyc2l6ZV9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VmcmFnbWVudHNcdFx0PSBwcy1cdTAwM2VtYWNfcnhfZnJhZ21lbnRfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlamFiYmVyc1x0XHQ9IHBzLVx1MDAzZW1hY19yeF9qYWJiZXJfcGt0X251bTtcbitcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFswXVx0XHQ9IHBzLVx1MDAzZW1hY19yeF82NF9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFsxXVx0XHQ9IHBzLVx1MDAzZW1hY19yeF82NV8xMjdfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMl1cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFszXVx0XHQ9IHBzLVx1MDAzZW1hY19yeF8yNTZfNTExX29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzRdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzUxMl8xMDIzX29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzVdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs2XVx0XHQ9IHBzLVx1MDAzZW1hY19yeF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbN11cdFx0PSBwcy1cdTAwM2VtYWNfcnhfMjA0OF80MDk1X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0WzhdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFs5XVx0XHQ9IHBzLVx1MDAzZW1hY19yeF84MTkyXzkyMTZfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RbMTBdXHRcdD0gcHMtXHUwMDNlbWFjX3J4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4rXG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMF1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfNjRfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbMV1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfNjVfMTI3X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzJdXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzEyOF8yNTVfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbM11cdFx0PSBwcy1cdTAwM2VtYWNfdHhfMjU2XzUxMV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs0XVx0XHQ9IHBzLVx1MDAzZW1hY190eF81MTJfMTAyM19vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs1XVx0XHQ9IHBzLVx1MDAzZW1hY190eF8xMDI0XzE1MThfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbNl1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzddXHRcdD0gcHMtXHUwMDNlbWFjX3R4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcbitcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFs4XVx0XHQ9IHBzLVx1MDAzZW1hY190eF80MDk2XzgxOTFfb2N0X3BrdF9udW07XG4rXHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbOV1cdFx0PSBwcy1cdTAwM2VtYWNfdHhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuK1x0cm1vbl9zdGF0cy1cdTAwM2VoaXN0X3R4WzEwXVx0XHQ9IHBzLVx1MDAzZW1hY190eF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xuK1xuK1x0KnJhbmdlcyA9IGhpbmljM19ybW9uX3JhbmdlcztcbitcbitcdGtmcmVlKHBzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGluaWMzX2dldF9wYXVzZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgbWFnX2NtZF9wb3J0X3N0YXRzICpwcztcbitcdGludCBlcnI7XG4rXG4rXHRwcyA9IGttYWxsb2Nfb2JqKCpwcyk7XG4rXHRpZiAoIXBzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKG5pY19kZXYtXHUwMDNlaHdkZXYsIHBzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUocHMpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldiwgXCJGYWlsZWQgdG8gZ2V0IGV0aCBwYXVzZSBzdGF0cyBmcm9tIGZ3XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRwYXVzZV9zdGF0cy1cdTAwM2V0eF9wYXVzZV9mcmFtZXMgPSBwcy1cdTAwM2VtYWNfdHhfcGF1c2VfbnVtO1xuK1x0cGF1c2Vfc3RhdHMtXHUwMDNlcnhfcGF1c2VfZnJhbWVzID0gcHMtXHUwMDNlbWFjX3J4X3BhdXNlX251bTtcbitcbitcdGtmcmVlKHBzKTtcbit9XG4rXG4rc3RhdGljIGludCBoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBxX2lkLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgaGluaWMzX2ludHJfY29hbF9pbmZvICpjb2FsLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbDtcbitcdHN0cnVjdCBoaW5pYzNfaW50ZXJydXB0X2luZm8gaW5mbyA9IHt9O1xuK1x0Ym9vbCBpc19hY3RpdmU7XG4rXHRpbnQgZXJyO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0aXNfYWN0aXZlID0gdGVzdF9iaXQoSElOSUMzX0lOVEZfVVAsIFx1MDAyNm5pY19kZXYtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKHFfaWQgXHUwMDNjIG5pY19kZXYtXHUwMDNlcV9wYXJhbXMubnVtX3Fwcyk7XG4rXG4rXHRpZiAoaXNfYWN0aXZlKSB7XG4rXHRcdGluZm8ubXNpeF9pbmRleCA9XG4rXHRcdFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5pcnFfY2ZnW3FfaWRdLm1zaXhfZW50cnlfaWR4O1xuK1x0XHRpbmZvLnJlc2VuZF90aW1lcl9jZmcgPVxuK1x0XHRcdG5pY19kZXYtXHUwMDNlaW50cl9jb2FsZXNjZVtxX2lkXS5yZXNlbmRfdGltZXJfY2ZnO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRpZiAoaXNfYWN0aXZlKSB7XG4rXHRcdGluZm8uaW50ZXJydXB0X2NvYWxlc2Nfc2V0ID0gMTtcbitcdFx0aW5mby5jb2FsZXNjX3RpbWVyX2NmZyA9IGNvYWwtXHUwMDNlY29hbGVzY2VfdGltZXJfY2ZnO1xuK1x0XHRpbmZvLnBlbmRpbmdfbGltaXQgPSBjb2FsLVx1MDAzZXBlbmRpbmdfbGltaXQ7XG4rXG4rXHRcdGVyciA9IGhpbmljM19zZXRfaW50ZXJydXB0X2NmZyhuaWNfZGV2LVx1MDAzZWh3ZGV2LCBpbmZvKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0XHQgICAgICAgXCJGYWlsZWQgdG8gc2V0IHF1ZXVlJXUgY29hbGVzY2VcIixcbitcdFx0XHRcdFx0ICAgICAgIHFfaWQpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcdGludHJfY29hbCA9IFx1MDAyNm5pY19kZXYtXHUwMDNlaW50cl9jb2FsZXNjZVtxX2lkXTtcbitcdGludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcgPSBjb2FsLVx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZztcbitcdGludHJfY29hbC1cdTAwM2VwZW5kaW5nX2xpbWl0ID0gY29hbC1cdTAwM2VwZW5kaW5nX2xpbWl0O1xuK1x0aW50cl9jb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfbG93ID0gY29hbC1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdztcbitcdGludHJfY29hbC1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2hpZ2ggPSBjb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaDtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaXNfY29hbGVzY2VfZXhjZWVkX2xpbWl0KGNvbnN0IHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRjb25zdCBzdHJ1Y3Qge1xuK1x0XHRjb25zdCBjaGFyICpuYW1lO1xuK1x0XHR1MzIgdmFsdWU7XG4rXHRcdHUzMiBsaW1pdDtcbitcdH0gY29hbGVzY2VfbGltaXRzW10gPSB7XG4rXHRcdHtcInJ4X2NvYWxlc2NlX3VzZWNzXCIsXG4rXHRcdCBjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLFxuK1x0XHQgQ09BTEVTQ0VfTUFYX1RJTUVSX0NGR30sXG4rXHRcdHtcInJ4X21heF9jb2FsZXNjZWRfZnJhbWVzXCIsXG4rXHRcdCBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxuK1x0XHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxuK1x0XHR7XCJyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3dcIixcbitcdFx0IGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuK1x0XHQgQ09BTEVTQ0VfTUFYX1BFTkRJTkdfTElNSVR9LFxuK1x0XHR7XCJyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoXCIsXG4rXHRcdCBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4rXHRcdCBDT0FMRVNDRV9NQVhfUEVORElOR19MSU1JVH0sXG4rXHR9O1xuK1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY29hbGVzY2VfbGltaXRzKTsgaSsrKSB7XG4rXHRcdGlmIChjb2FsZXNjZV9saW1pdHNbaV0udmFsdWUgXHUwMDNlIGNvYWxlc2NlX2xpbWl0c1tpXS5saW1pdCkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcIiVzIG91dCBvZiByYW5nZSAlZC0lZFwiLFxuK1x0XHRcdFx0XHQgICAgICAgY29hbGVzY2VfbGltaXRzW2ldLm5hbWUsIDAsXG4rXHRcdFx0XHRcdCAgICAgICBjb2FsZXNjZV9saW1pdHNbaV0ubGltaXQpO1xuK1x0XHRcdHJldHVybiAtRVJBTkdFO1xuK1x0XHR9XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29uc3Qgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBpc19jb2FsZXNjZV9leGNlZWRfbGltaXQoY29hbCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRpZiAoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgXHUwMDNlXG4rXHQgICAgY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgICAgIFwiaW52YWxpZCBjb2FsZXNjZSBmcmFtZSBoaWdoICV1LCBsb3cgJXVcIixcbitcdFx0XHRcdCAgICAgICBjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2gsXG4rXHRcdFx0XHQgICAgICAgY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cpO1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBjaGVja19jb2FsZXNjZV9hbGlnbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0IHUzMiBpdGVtLCB1MzIgdW5pdCwgY29uc3QgY2hhciAqc3RyKVxuK3tcbitcdGlmIChpdGVtICUgdW5pdClcbitcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LCBcIiVzIGluICV1IHVuaXRzLCBjaGFuZ2UgdG8gJXVcXG5cIixcbitcdFx0XHQgICAgc3RyLCB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQpO1xuK31cbitcbisjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0FMSUdOKG1lbWJlciwgdW5pdCkgXFxcbitcdGNoZWNrX2NvYWxlc2NlX2FsaWduKG5ldGRldiwgbWVtYmVyLCB1bml0LCAjbWVtYmVyKVxuK1xuK3N0YXRpYyB2b2lkIGNoZWNrX2NvYWxlc2NlX2NoYW5nZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHRcdCAgIHUzMiBpdGVtLCB1MzIgdW5pdCwgdTMyIG9yaV92YWwsXG4rXHRcdFx0XHQgICBjb25zdCBjaGFyICpvYmpfc3RyLCBjb25zdCBjaGFyICpzdHIpXG4re1xuK1x0aWYgKChpdGVtIC8gdW5pdCkgIT0gb3JpX3ZhbClcbitcdFx0bmV0ZGV2X2RiZyhuZXRkZXYsIFwiQ2hhbmdlICVzIGZyb20gJXUgdG8gJXUgJXNcXG5cIixcbitcdFx0XHQgICBzdHIsIG9yaV92YWwgKiB1bml0LCBpdGVtIC0gaXRlbSAlIHVuaXQsIG9ial9zdHIpO1xuK31cbitcbisjZGVmaW5lIENIRUNLX0NPQUxFU0NFX0NIQU5HRUQobWVtYmVyLCB1bml0LCBvcmlfdmFsLCBvYmpfc3RyKSBcXFxuK1x0Y2hlY2tfY29hbGVzY2VfY2hhbmdlZChuZXRkZXYsIG1lbWJlciwgdW5pdCwgb3JpX3ZhbCwgb2JqX3N0ciwgI21lbWJlcilcbitcbitzdGF0aWMgaW50IGhpbmljM19zZXRfaHdfY29hbF9wYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludHJfY29hbCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKm9sZF9jb2FsO1xuK1x0dTE2IGksIGo7XG4rXHRpbnQgZXJyO1xuK1xuK1x0b2xkX2NvYWwgPSBrY2FsbG9jKG5pY19kZXYtXHUwMDNlbWF4X3Fwcywgc2l6ZW9mKCpvbGRfY29hbCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFvbGRfY29hbClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBuaWNfZGV2LVx1MDAzZW1heF9xcHM7IGkrKylcbitcdFx0b2xkX2NvYWxbaV0gPSBuaWNfZGV2LVx1MDAzZWludHJfY29hbGVzY2VbaV07XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5pY19kZXYtXHUwMDNlbWF4X3FwczsgaSsrKSB7XG4rXHRcdGVyciA9IGhpbmljM19zZXRfcXVldWVfY29hbGVzY2UobmV0ZGV2LCBpLCBpbnRyX2NvYWwsIGV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byByb2xsYmFjaztcbitcdH1cbitcbitcdGtmcmVlKG9sZF9jb2FsKTtcbitcdHJldHVybiAwO1xuK1xuK3JvbGxiYWNrOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRoaW5pYzNfc2V0X3F1ZXVlX2NvYWxlc2NlKG5ldGRldiwgaiwgXHUwMDI2b2xkX2NvYWxbal0sIE5VTEwpO1xuK1xuK1x0a2ZyZWUob2xkX2NvYWwpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBoaW5pYzNfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjb2FsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfY29hbGVzY2UgKmtlcm5lbF9jb2FsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gKmludGVycnVwdF9pbmZvO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuK1xuK1x0aW50ZXJydXB0X2luZm8gPSBcdTAwMjZuaWNfZGV2LVx1MDAzZWludHJfY29hbGVzY2VbMF07XG4rXG4rXHRjb2FsLVx1MDAzZXVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IFJFQURfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpO1xuK1xuK1x0Y29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgPVxuK1x0XHRpbnRlcnJ1cHRfaW5mby1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyAqXG4rXHRcdENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVDtcbitcbitcdGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCA9XG4rXHRcdGludGVycnVwdF9pbmZvLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCAqXG4rXHRcdENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVDtcbitcbitcdC8qIFRYL1JYIHVzZXMgdGhlIHNhbWUgaW50ZXJydXB0LlxuK1x0ICogU28gd2Ugb25seSBkZWNsYXJlIFJYIGV0aHRvb2xfY29hbGVzY2UgcGFyYW1ldGVycy5cbitcdCAqL1xuK1x0Y29hbC1cdTAwM2VyeF9jb2FsZXNjZV91c2VjcyA9IGludGVycnVwdF9pbmZvLVx1MDAzZWNvYWxlc2NlX3RpbWVyX2NmZyAqXG4rXHRcdFx0XHQgIENPQUxFU0NFX1RJTUVSX0NGR19VTklUO1xuK1xuK1x0Y29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGludGVycnVwdF9pbmZvLVx1MDAzZXBlbmRpbmdfbGltaXQgKlxuK1x0XHRcdFx0XHRDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQ7XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGhpbmljM19zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbitcdFx0XHQgICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmNvYWwsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9jb2FsZXNjZSAqa2VybmVsX2NvYWwsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGhpbmljM19pbnRyX2NvYWxfaW5mbyAqb3JpX2ludHJfY29hbDtcbitcdHN0cnVjdCBoaW5pYzNfaW50cl9jb2FsX2luZm8gaW50cl9jb2FsID0ge307XG4rXHRjb25zdCBjaGFyICpvYmpfc3RyID0gXCJmb3IgbmV0ZGV2XCI7XG4rXHRib29sIG9sZF9hZGFwdGl2ZSwgbmV3X2FkYXB0aXZlO1xuK1x0c3RydWN0IGhpbmljM19yeHEgKnJ4cSA9IE5VTEw7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGk7XG4rXG4rXHRlcnIgPSBoaW5pYzNfdmFsaWRhdGVfY29hbGVzY2UoY29hbCwgZXh0YWNrKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCk7XG4rXHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxuK1x0XHRcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcbitcdENIRUNLX0NPQUxFU0NFX0FMSUdOKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbitcdFx0XHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XG4rXHRDSEVDS19DT0FMRVNDRV9BTElHTihjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyxcbitcdFx0XHQgICAgIENPQUxFU0NFX1BFTkRJTkdfTElNSVRfVU5JVCk7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRvcmlfaW50cl9jb2FsID0gXHUwMDI2bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlWzBdO1xuK1xuK1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X2NvYWxlc2NlX3VzZWNzLCBDT0FMRVNDRV9USU1FUl9DRkdfVU5JVCxcbitcdFx0XHQgICAgICAgb3JpX2ludHJfY29hbC1cdTAwM2Vjb2FsZXNjZV90aW1lcl9jZmcsIG9ial9zdHIpO1xuK1x0Q0hFQ0tfQ09BTEVTQ0VfQ0hBTkdFRChjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzLFxuK1x0XHRcdCAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsXG4rXHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcGVuZGluZ19saW1pdCwgb2JqX3N0cik7XG4rXHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCxcbitcdFx0XHQgICAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklULFxuK1x0XHRcdCAgICAgICBvcmlfaW50cl9jb2FsLVx1MDAzZXJ4X3BlbmRpbmdfbGltaXRfaGlnaCwgb2JqX3N0cik7XG4rXHRDSEVDS19DT0FMRVNDRV9DSEFOR0VEKGNvYWwtXHUwMDNlcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93LFxuK1x0XHRcdCAgICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQsXG4rXHRcdFx0ICAgICAgIG9yaV9pbnRyX2NvYWwtXHUwMDNlcnhfcGVuZGluZ19saW1pdF9sb3csIG9ial9zdHIpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXG4rXHRvbGRfYWRhcHRpdmUgPSBSRUFEX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsKTtcbitcdG5ld19hZGFwdGl2ZSA9ICEhY29hbC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7XG4rXG4rXHRpZiAob2xkX2FkYXB0aXZlKSB7XG4rXHRcdGJvb2wgaXNfdXA7XG4rXG4rXHRcdFdSSVRFX09OQ0UobmljX2Rldi1cdTAwM2VhZGFwdGl2ZV9yeF9jb2FsLCBmYWxzZSk7XG4rXG4rXHRcdHN5bmNocm9uaXplX25ldCgpO1xuK1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRcdGlzX3VwID0gdGVzdF9iaXQoSElOSUMzX0lOVEZfVVAsIFx1MDAyNm5pY19kZXYtXHUwMDNlZmxhZ3MpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbitcbitcdFx0aWYgKGlzX3VwKSB7XG4rXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmljX2Rldi1cdTAwM2VxX3BhcmFtcy5udW1fcXBzOyBpKyspIHtcbitcdFx0XHRcdHJ4cSA9IG5pY19kZXYtXHUwMDNlcV9wYXJhbXMuaXJxX2NmZ1tpXS5yeHE7XG4rXHRcdFx0XHRpZiAoIXJ4cSlcbitcdFx0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0XHRuZXRfZGltX3dvcmtfY2FuY2VsKFx1MDAyNnJ4cS1cdTAwM2VkaW0pO1xuK1x0XHRcdFx0cnhxLVx1MDAzZWRpbS5zdGF0ZSA9IERJTV9TVEFSVF9NRUFTVVJFO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK1xuK1x0aW50cl9jb2FsLmNvYWxlc2NlX3RpbWVyX2NmZyA9XG4rXHRcdCh1OCkoY29hbC1cdTAwM2VyeF9jb2FsZXNjZV91c2VjcyAvIENPQUxFU0NFX1RJTUVSX0NGR19VTklUKTtcbitcbitcdGludHJfY29hbC5wZW5kaW5nX2xpbWl0ID1cbitcdFx0KHU4KShjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzIC9cbitcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuK1xuK1x0aW50cl9jb2FsLnJ4X3BlbmRpbmdfbGltaXRfaGlnaCA9XG4rXHRcdCh1OCkoY29hbC1cdTAwM2VyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoIC9cbitcdFx0ICAgICBDT0FMRVNDRV9QRU5ESU5HX0xJTUlUX1VOSVQpO1xuK1xuK1x0aW50cl9jb2FsLnJ4X3BlbmRpbmdfbGltaXRfbG93ID1cbitcdFx0KHU4KShjb2FsLVx1MDAzZXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdyAvXG4rXHRcdCAgICAgQ09BTEVTQ0VfUEVORElOR19MSU1JVF9VTklUKTtcbitcbitcdC8qIGNvYWxlc2NlIHRpbWVyIG9yIHBlbmRpbmcgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGNvYWxlc2NlICovXG4rXHRpZiAoIW5ld19hZGFwdGl2ZSBcdTAwMjZcdTAwMjZcbitcdCAgICAoIWludHJfY29hbC5jb2FsZXNjZV90aW1lcl9jZmcgfHwgIWludHJfY29hbC5wZW5kaW5nX2xpbWl0KSlcbitcdFx0bmV0ZGV2X2luZm8obmV0ZGV2LCBcIkNvYWxlc2NlIHdpbGwgYmUgZGlzYWJsZWRcXG5cIik7XG4rXG4rXHRlcnIgPSBoaW5pYzNfc2V0X2h3X2NvYWxfcGFyYW0obmV0ZGV2LCBcdTAwMjZpbnRyX2NvYWwsIGV4dGFjayk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGlmIChvbGRfYWRhcHRpdmUpXG4rXHRcdFx0V1JJVEVfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwsIG9sZF9hZGFwdGl2ZSk7XG4rXG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRXUklURV9PTkNFKG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgbmV3X2FkYXB0aXZlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpbmljM19ldGh0b29sX29wcyA9IHtcbi1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zICAgICAgPSBFVEhUT09MX0NPQUxFU0NFX1VTRUNTIHxcbi1cdFx0XHRcdFx0ICBFVEhUT09MX0NPQUxFU0NFX1BLVF9SQVRFX1JYX1VTRUNTLFxuK1x0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgICAgICA9IEVUSFRPT0xfQ09BTEVTQ0VfUlhfVVNFQ1MgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FUyB8XG4rXHRcdFx0XHRcdCAgRVRIVE9PTF9DT0FMRVNDRV9VU0VfQURBUFRJVkVfUlggfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19MT1cgfFxuK1x0XHRcdFx0XHQgIEVUSFRPT0xfQ09BTEVTQ0VfUlhfTUFYX0ZSQU1FU19ISUdILFxuIFx0LmdldF9saW5rX2tzZXR0aW5ncyAgICAgICAgICAgICA9IGhpbmljM19nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuZ2V0X2RydmluZm8gICAgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbCAgICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfbXNnbGV2ZWwsXG4gXHQuc2V0X21zZ2xldmVsICAgICAgICAgICAgICAgICAgID0gaGluaWMzX3NldF9tc2dsZXZlbCxcbiBcdC5nZXRfbGluayAgICAgICAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLFxuK1x0LmdldF9zc2V0X2NvdW50ICAgICAgICAgICAgICAgICA9IGhpbmljM19nZXRfc3NldF9jb3VudCxcbitcdC5nZXRfZXRodG9vbF9zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aHRvb2xfc3RhdHMsXG4rXHQuZ2V0X3N0cmluZ3MgICAgICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9zdHJpbmdzLFxuK1x0LmdldF9ldGhfcGh5X3N0YXRzICAgICAgICAgICAgICA9IGhpbmljM19nZXRfZXRoX3BoeV9zdGF0cyxcbitcdC5nZXRfZXRoX21hY19zdGF0cyAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2V0aF9tYWNfc3RhdHMsXG4rXHQuZ2V0X2V0aF9jdHJsX3N0YXRzICAgICAgICAgICAgID0gaGluaWMzX2dldF9ldGhfY3RybF9zdGF0cyxcbitcdC5nZXRfcm1vbl9zdGF0cyAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X3Jtb25fc3RhdHMsXG4rXHQuZ2V0X3BhdXNlX3N0YXRzICAgICAgICAgICAgICAgID0gaGluaWMzX2dldF9wYXVzZV9zdGF0cyxcbitcdC5nZXRfY29hbGVzY2UgICAgICAgICAgICAgICAgICAgPSBoaW5pYzNfZ2V0X2NvYWxlc2NlLFxuK1x0LnNldF9jb2FsZXNjZSAgICAgICAgICAgICAgICAgICA9IGhpbmljM19zZXRfY29hbGVzY2UsXG4gfTtcbiBcbiB2b2lkIGhpbmljM19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmhcbmluZGV4IGNmYzlkYWEzMDM0ZmUuLjZiMGY0ODZiYTU5MGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19od19pbnRmLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2h3X2ludGYuaFxuQEAgLTUzLDYgKzUzLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtZ210X21zZ19wYXJhbXNfaW5pdF9kZWZhdWx0KHN0cnVjdCBtZ210X21zZ19wYXJhbXMgKm1zZ19wYXJhXG4gXHRtc2dfcGFyYW1zLVx1MDAzZXRpbWVvdXRfbXMgPSAwO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWRcbittZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoc3RydWN0IG1nbXRfbXNnX3BhcmFtcyAqbXNnX3BhcmFtcywgdm9pZCAqaW5fYnVmLFxuK1x0XHRcdCAgICB2b2lkICpvdXRfYnVmLCB1MzIgaW5fYnVmX3NpemUsIHUzMiBvdXRfYnVmX3NpemUpXG4re1xuK1x0bXNnX3BhcmFtcy1cdTAwM2VidWZfaW4gPSBpbl9idWY7XG4rXHRtc2dfcGFyYW1zLVx1MDAzZWJ1Zl9vdXQgPSBvdXRfYnVmO1xuK1x0bXNnX3BhcmFtcy1cdTAwM2Vpbl9zaXplID0gaW5fYnVmX3NpemU7XG4rXHRtc2dfcGFyYW1zLVx1MDAzZWV4cGVjdGVkX291dF9zaXplID0gb3V0X2J1Zl9zaXplO1xuK1x0bXNnX3BhcmFtcy1cdTAwM2V0aW1lb3V0X21zID0gMDtcbit9XG4rXG4gZW51bSBjZmdfY21kIHtcbiBcdENGR19DTURfR0VUX0RFVl9DQVAgPSAwLFxuIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfaXJxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19pcnEuY1xuaW5kZXggZTdkNmMyMDMzYjQ1MS4uZjY2NDUzODVjNTUyOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2lycS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19pcnEuY1xuQEAgLTIwLDcgKzIwLDcgQEAgc3RhdGljIHZvaWQgaGluaWMzX25ldF9kaW0oc3RydWN0IGhpbmljM19uaWNfZGV2ICpuaWNfZGV2LFxuIFx0c3RydWN0IGRpbV9zYW1wbGUgc2FtcGxlID0ge307XG4gXG4gXHRpZiAoIXRlc3RfYml0KEhJTklDM19JTlRGX1VQLCBcdTAwMjZuaWNfZGV2LVx1MDAzZWZsYWdzKSB8fFxuLVx0ICAgICFuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpXG4rXHQgICAgIVJFQURfT05DRShuaWNfZGV2LVx1MDAzZWFkYXB0aXZlX3J4X2NvYWwpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRkaW1fdXBkYXRlX3NhbXBsZShpcnFfY2ZnLVx1MDAzZXRvdGFsX2V2ZW50cywgcnhxLVx1MDAzZXJ4cV9zdGF0cy5wYWNrZXRzLFxuQEAgLTE0OCwxMyArMTQ4LDkgQEAgc3RhdGljIGludCBoaW5pYzNfc2V0X2ludGVycnVwdF9tb2RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgcV9pZCxcbiBcdFx0bmljX2Rldi1cdTAwM2VpbnRyX2NvYWxlc2NlW3FfaWRdLnJlc2VuZF90aW1lcl9jZmc7XG4gXG4gXHRlcnIgPSBoaW5pYzNfc2V0X2ludGVycnVwdF9jZmcobmljX2Rldi1cdTAwM2Vod2RldiwgaW5mbyk7XG4tXHRpZiAoZXJyKSB7XG4rXHRpZiAoZXJyKVxuIFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiBcdFx0XHQgICBcIkZhaWxlZCB0byBtb2RpZnkgbW9kZXJhdGlvbiBmb3IgUXVldWU6ICV1XFxuXCIsIHFfaWQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0bmljX2Rldi1cdTAwM2VyeHFzW3FfaWRdLmxhc3RfY29hbGVzY190aW1lcl9jZmcgPSBjb2FsZXNjX3RpbWVyX2NmZztcbi1cdFx0bmljX2Rldi1cdTAwM2VyeHFzW3FfaWRdLmxhc3RfcGVuZGluZ19saW1pdCA9IHBlbmRpbmdfbGltaXQ7XG4tXHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmNcbmluZGV4IDBhODg4ZmU0Yzk3NWIuLjhjNzQ5MmUxNTQwOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21haW4uY1xuQEAgLTUxLDcgKzUxLDcgQEAgc3RhdGljIHZvaWQgaW5pdF9pbnRyX2NvYWxfcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0aW5mby1cdTAwM2VyeF9wZW5kaW5nX2xpbWl0X2xvdyA9IEhJTklDM19SWF9QRU5ESU5HX0xJTUlUX0xPVztcbiBcdH1cbiBcbi1cdG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCA9IDE7XG4rXHRXUklURV9PTkNFKG5pY19kZXYtXHUwMDNlYWRhcHRpdmVfcnhfY29hbCwgMSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgaGluaWMzX2luaXRfaW50cl9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgaW50IGhpbmljM19zd19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHR1OCBtYWNfYWRkcltFVEhfQUxFTl07XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXV0ZXhfaW5pdChcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZuaWNfZGV2LVx1MDAzZXN0YXRlX2xvY2spO1xuIFxuIFx0bmljX2Rldi1cdTAwM2VxX3BhcmFtcy5zcV9kZXB0aCA9IEhJTklDM19TUV9ERVBUSDtcbiBcdG5pY19kZXYtXHUwMDNlcV9wYXJhbXMucnFfZGVwdGggPSBISU5JQzNfUlFfREVQVEg7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbWdtdF9pbnRlcmZhY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX21nbXRfaW50ZXJmYWNlLmhcbmluZGV4IGM1YmNhM2M0YWY5NjEuLjc2YzY5MWY4MjcwM2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19tZ210X2ludGVyZmFjZS5oXG5AQCAtMTQzLDYgKzE0Myw0MSBAQCBzdHJ1Y3QgbDJuaWNfY21kX3NldF9kY2Jfc3RhdGUge1xuIFx0dTggICAgICAgICAgICAgICAgICAgcnN2ZFs3XTtcbiB9O1xuIFxuK3N0cnVjdCBsMm5pY19wb3J0X3N0YXRzX2luZm8ge1xuK1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4rXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xuK1x0dTE2ICAgICAgICAgICAgICAgICAgcnN2ZDE7XG4rfTtcbitcbitzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMge1xuK1x0dTY0IHR4X3VuaWNhc3RfcGt0c192cG9ydDtcbitcdHU2NCB0eF91bmljYXN0X2J5dGVzX3Zwb3J0O1xuK1x0dTY0IHR4X211bHRpY2FzdF9wa3RzX3Zwb3J0O1xuK1x0dTY0IHR4X211bHRpY2FzdF9ieXRlc192cG9ydDtcbitcdHU2NCB0eF9icm9hZGNhc3RfcGt0c192cG9ydDtcbitcdHU2NCB0eF9icm9hZGNhc3RfYnl0ZXNfdnBvcnQ7XG4rXG4rXHR1NjQgcnhfdW5pY2FzdF9wa3RzX3Zwb3J0O1xuK1x0dTY0IHJ4X3VuaWNhc3RfYnl0ZXNfdnBvcnQ7XG4rXHR1NjQgcnhfbXVsdGljYXN0X3BrdHNfdnBvcnQ7XG4rXHR1NjQgcnhfbXVsdGljYXN0X2J5dGVzX3Zwb3J0O1xuK1x0dTY0IHJ4X2Jyb2FkY2FzdF9wa3RzX3Zwb3J0O1xuK1x0dTY0IHJ4X2Jyb2FkY2FzdF9ieXRlc192cG9ydDtcbitcbitcdHU2NCB0eF9kaXNjYXJkX3Zwb3J0O1xuK1x0dTY0IHJ4X2Rpc2NhcmRfdnBvcnQ7XG4rXHR1NjQgdHhfZXJyX3Zwb3J0O1xuK1x0dTY0IHJ4X2Vycl92cG9ydDtcbit9O1xuK1xuK3N0cnVjdCBsMm5pY19jbWRfdnBvcnRfc3RhdHMge1xuK1x0c3RydWN0IG1nbXRfbXNnX2hlYWQgICAgIG1zZ19oZWFkO1xuK1x0dTMyICAgICAgICAgICAgICAgICAgICAgIHN0YXRzX3NpemU7XG4rXHR1MzIgICAgICAgICAgICAgICAgICAgICAgcnN2ZDE7XG4rXHRzdHJ1Y3QgbDJuaWNfdnBvcnRfc3RhdHMgc3RhdHM7XG4rXHR1NjQgICAgICAgICAgICAgICAgICAgICAgcnN2ZDJbNl07XG4rfTtcbitcbiBzdHJ1Y3QgbDJuaWNfY21kX2xyb19jb25maWcge1xuIFx0c3RydWN0IG1nbXRfbXNnX2hlYWQgbXNnX2hlYWQ7XG4gXHR1MTYgICAgICAgICAgICAgICAgICBmdW5jX2lkO1xuQEAgLTIzNCw2ICsyNjksNyBAQCBlbnVtIGwybmljX2NtZCB7XG4gXHRMMk5JQ19DTURfU0VUX1ZQT1JUX0VOQUJMRSAgICA9IDYsXG4gXHRMMk5JQ19DTURfU0VUX1JYX01PREUgICAgICAgICA9IDcsXG4gXHRMMk5JQ19DTURfU0VUX1NRX0NJX0FUVFIgICAgICA9IDgsXG4rXHRMMk5JQ19DTURfR0VUX1ZQT1JUX1NUQVQgICAgICA9IDksXG4gXHRMMk5JQ19DTURfQ0xFQVJfUVBfUkVTT1VSQ0UgICA9IDExLFxuIFx0TDJOSUNfQ01EX0NGR19SWF9MUk8gICAgICAgICAgPSAxMyxcbiBcdEwyTklDX0NNRF9DRkdfTFJPX1RJTUVSICAgICAgID0gMTQsXG5AQCAtMjcyLDYgKzMwOCw3IEBAIGVudW0gbWFnX2NtZCB7XG4gXHRNQUdfQ01EX1NFVF9QT1JUX0VOQUJMRSA9IDYsXG4gXHRNQUdfQ01EX0dFVF9MSU5LX1NUQVRVUyA9IDcsXG4gXG4rXHRNQUdfQ01EX0dFVF9QT1JUX1NUQVQgICA9IDE1MSxcbiBcdE1BR19DTURfR0VUX1BPUlRfSU5GTyAgID0gMTUzLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXG5pbmRleCBkYTczODExNjQxYTlkLi5lZDQ4MTBmYTk4NTJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmV0ZGV2X29wcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uZXRkZXZfb3BzLmNcbkBAIC0zNDEsOSArMzQxLDkgQEAgc3RhdGljIGludCBoaW5pYzNfbWF5YmVfc2V0X3BvcnRfc3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgYm9vbCBlbmFibGUpXG4gXHRzdHJ1Y3QgaGluaWMzX25pY19kZXYgKm5pY19kZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0aW50IGVycjtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2Vwb3J0X3N0YXRlX211dGV4KTtcbitcdG11dGV4X2xvY2soXHUwMDI2bmljX2Rldi1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGVyciA9IGhpbmljM19zZXRfcG9ydF9lbmFibGUobmljX2Rldi1cdTAwM2Vod2RldiwgZW5hYmxlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZuaWNfZGV2LVx1MDAzZXBvcnRfc3RhdGVfbXV0ZXgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5pY19kZXYtXHUwMDNlc3RhdGVfbG9jayk7XG4gXG4gXHRyZXR1cm4gZXJyO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcbmluZGV4IGRlNWE3OTg0ZDJjYjkuLjFiMTRkYzgyNGNlMWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19uaWNfY2ZnLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuY1xuQEAgLTYzOSw2ICs2MzksNDIgQEAgaW50IGhpbmljM19nZXRfbGlua19zdGF0dXMoc3RydWN0IGhpbmljM19od2RldiAqaHdkZXYsIGJvb2wgKmxpbmtfc3RhdHVzX3VwKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHNfaW5mbyBzdGF0c19pbmZvID0ge307XG4rXHRzdHJ1Y3QgbWFnX2NtZF9nZXRfcG9ydF9zdGF0ICpwcztcbitcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdHBzID0ga3phbGxvY19vYmooKnBzKTtcbitcdGlmICghcHMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0c3RhdHNfaW5mby5wb3J0X2lkID0gaGluaWMzX3BoeXNpY2FsX3BvcnRfaWQoaHdkZXYpO1xuK1xuK1x0bWdtdF9tc2dfcGFyYW1zX2luaXRfaW5fb3V0KFx1MDAyNm1zZ19wYXJhbXMsIFx1MDAyNnN0YXRzX2luZm8sIHBzLFxuK1x0XHRcdFx0ICAgIHNpemVvZihzdGF0c19pbmZvKSwgc2l6ZW9mKCpwcykpO1xuK1xuK1x0ZXJyID0gaGluaWMzX3NlbmRfbWJveF90b19tZ210KGh3ZGV2LCBNR01UX01PRF9ISUxJTkssXG4rXHRcdFx0XHQgICAgICAgTUFHX0NNRF9HRVRfUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbitcbitcdGlmIChlcnIgfHwgcHMtXHUwMDNlaGVhZC5zdGF0dXMpIHtcbitcdFx0ZGV2X2Vycihod2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJGYWlsZWQgdG8gZ2V0IHBvcnQgc3RhdGlzdGljcywgZXJyOiAlZCwgc3RhdHVzOiAweCV4XFxuXCIsXG4rXHRcdFx0ZXJyLCBwcy1cdTAwM2VoZWFkLnN0YXR1cyk7XG4rXHRcdGVyciA9IC1FRkFVTFQ7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZwcy1cdTAwM2Vjb3VudGVyLCBzaXplb2YoKnN0YXRzKSk7XG4rXG4rb3V0OlxuK1x0a2ZyZWUocHMpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4gaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuIFx0XHRcdCBzdHJ1Y3QgaGluaWMzX25pY19wb3J0X2luZm8gKnBvcnRfaW5mbylcbiB7XG5AQCAtNzM4LDMgKzc3NCwzMSBAQCBpbnQgaGluaWMzX2dldF9wYXVzZV9pbmZvKHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldixcbiBcdHJldHVybiBoaW5pYzNfY2ZnX2h3X3BhdXNlKG5pY19kZXYtXHUwMDNlaHdkZXYsIE1HTVRfTVNHX0NNRF9PUF9HRVQsXG4gXHRcdFx0XHQgICBuaWNfcGF1c2UpO1xuIH1cbitcbitpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsXG4rXHRcdFx0ICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cylcbit7XG4rXHRzdHJ1Y3QgbDJuaWNfY21kX3Zwb3J0X3N0YXRzIHZwb3J0X3N0YXRzID0ge307XG4rXHRzdHJ1Y3QgbDJuaWNfcG9ydF9zdGF0c19pbmZvIHN0YXRzX2luZm8gPSB7fTtcbitcdHN0cnVjdCBtZ210X21zZ19wYXJhbXMgbXNnX3BhcmFtcyA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdHN0YXRzX2luZm8uZnVuY19pZCA9IGZ1bmNfaWQ7XG4rXG4rXHRtZ210X21zZ19wYXJhbXNfaW5pdF9pbl9vdXQoXHUwMDI2bXNnX3BhcmFtcywgXHUwMDI2c3RhdHNfaW5mbywgXHUwMDI2dnBvcnRfc3RhdHMsXG4rXHRcdFx0XHQgICAgc2l6ZW9mKHN0YXRzX2luZm8pLCBzaXplb2YodnBvcnRfc3RhdHMpKTtcbitcbitcdGVyciA9IGhpbmljM19zZW5kX21ib3hfdG9fbWdtdChod2RldiwgTUdNVF9NT0RfTDJOSUMsXG4rXHRcdFx0XHQgICAgICAgTDJOSUNfQ01EX0dFVF9WUE9SVF9TVEFULCBcdTAwMjZtc2dfcGFyYW1zKTtcbitcbitcdGlmIChlcnIgfHwgdnBvcnRfc3RhdHMubXNnX2hlYWQuc3RhdHVzKSB7XG4rXHRcdGRldl9lcnIoaHdkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIGdldCBmdW5jdGlvbiBzdGF0aXN0aWNzLCBlcnI6ICVkLCBzdGF0dXM6IDB4JXhcXG5cIixcbitcdFx0XHRlcnIsIHZwb3J0X3N0YXRzLm1zZ19oZWFkLnN0YXR1cyk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0bWVtY3B5KHN0YXRzLCBcdTAwMjZ2cG9ydF9zdGF0cy5zdGF0cywgc2l6ZW9mKCpzdGF0cykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxuaW5kZXggNWQ1MjIwMmE4ZDRlYi4uODA1NzNjMTIxNTM5NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19jZmcuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2NmZy5oXG5AQCAtMTI5LDYgKzEyOSwxMTAgQEAgc3RydWN0IG1hZ19jbWRfZ2V0X3hzZnBfcHJlc2VudCB7XG4gXHR1OCAgICAgICAgICAgICAgICAgICByc3ZkWzJdO1xuIH07XG4gXG4rc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0cyB7XG4rXHR1NjQgbWFjX3R4X2ZyYWdtZW50X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3VuZGVyc2l6ZV9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF91bmRlcm1pbl9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF82NF9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfNjVfMTI3X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8xMjhfMjU1X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8yNTZfNTExX29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF81MTJfMTAyM19vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfMTAyNF8xNTE4X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8xNTE5XzIwNDdfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4XzIwNDhfNDA5NV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfNDA5Nl84MTkxX29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF84MTkyXzkyMTZfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4XzkyMTdfMTIyODdfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4XzEyMjg4XzE2MzgzX29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF8xNTE5X21heF9iYWRfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfMTUxOV9tYXhfZ29vZF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF9vdmVyc2l6ZV9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF9qYWJiZXJfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfYmFkX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2JhZF9vY3RfbnVtO1xuK1x0dTY0IG1hY190eF9nb29kX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2dvb2Rfb2N0X251bTtcbitcdHU2NCBtYWNfdHhfdG90YWxfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfdG90YWxfb2N0X251bTtcbitcdHU2NCBtYWNfdHhfdW5pX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X211bHRpX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2Jyb2FkX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BhdXNlX251bTtcbitcdHU2NCBtYWNfdHhfcGZjX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkwX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkxX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkyX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmkzX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk0X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk1X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk2X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X3BmY19wcmk3X3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2NvbnRyb2xfcGt0X251bTtcbitcdHU2NCBtYWNfdHhfZXJyX2FsbF9wa3RfbnVtO1xuK1x0dTY0IG1hY190eF9mcm9tX2FwcF9nb29kX3BrdF9udW07XG4rXHR1NjQgbWFjX3R4X2Zyb21fYXBwX2JhZF9wa3RfbnVtO1xuK1xuK1x0dTY0IG1hY19yeF9mcmFnbWVudF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF91bmRlcnNpemVfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfdW5kZXJtaW5fcGt0X251bTtcbitcdHU2NCBtYWNfcnhfNjRfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzY1XzEyN19vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMTI4XzI1NV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMjU2XzUxMV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfNTEyXzEwMjNfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzEwMjRfMTUxOF9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMTUxOV8yMDQ3X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF8yMDQ4XzQwOTVfb2N0X3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzQwOTZfODE5MV9vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfODE5Ml85MjE2X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF85MjE3XzEyMjg3X29jdF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF8xMjI4OF8xNjM4M19vY3RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfMTUxOV9tYXhfYmFkX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4XzE1MTlfbWF4X2dvb2RfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfb3ZlcnNpemVfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfamFiYmVyX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X2JhZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9iYWRfb2N0X251bTtcbitcdHU2NCBtYWNfcnhfZ29vZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9nb29kX29jdF9udW07XG4rXHR1NjQgbWFjX3J4X3RvdGFsX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X3RvdGFsX29jdF9udW07XG4rXHR1NjQgbWFjX3J4X3VuaV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9tdWx0aV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9icm9hZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wYXVzZV9udW07XG4rXHR1NjQgbWFjX3J4X3BmY19wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpMF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpMV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpMl9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpM19wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpNF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpNV9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpNl9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9wZmNfcHJpN19wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9jb250cm9sX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X3N5bV9lcnJfcGt0X251bTtcbitcdHU2NCBtYWNfcnhfZmNzX2Vycl9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF9zZW5kX2FwcF9nb29kX3BrdF9udW07XG4rXHR1NjQgbWFjX3J4X3NlbmRfYXBwX2JhZF9wa3RfbnVtO1xuK1x0dTY0IG1hY19yeF91bmZpbHRlcl9wa3RfbnVtO1xuK307XG4rXG4rc3RydWN0IG1hZ19jbWRfcG9ydF9zdGF0c19pbmZvIHtcbitcdHN0cnVjdCBtZ210X21zZ19oZWFkIGhlYWQ7XG4rXG4rXHR1OCAgICAgICAgICAgICAgICAgICBwb3J0X2lkO1xuK1x0dTggICAgICAgICAgICAgICAgICAgcnN2ZDBbM107XG4rfTtcbitcbitzdHJ1Y3QgbWFnX2NtZF9nZXRfcG9ydF9zdGF0IHtcbitcdHN0cnVjdCBtZ210X21zZ19oZWFkICAgICAgaGVhZDtcbitcbitcdHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgY291bnRlcjtcbitcdHU2NCAgICAgICAgICAgICAgICAgICAgICAgcnN2ZDFbMTVdO1xuK307XG4rXG4gZW51bSBsaW5rX2Vycl90eXBlIHtcbiBcdExJTktfRVJSX01PRFVMRV9VTlJFQ09HRU5JWkVELFxuIFx0TElOS19FUlJfTlVNLFxuQEAgLTIwOSw2ICszMTMsMTEgQEAgaW50IGhpbmljM19nZXRfcG9ydF9pbmZvKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuIFx0XHRcdCBzdHJ1Y3QgaGluaWMzX25pY19wb3J0X2luZm8gKnBvcnRfaW5mbyk7XG4gaW50IGhpbmljM19zZXRfdnBvcnRfZW5hYmxlKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgZnVuY19pZCxcbiBcdFx0XHQgICAgYm9vbCBlbmFibGUpO1xuK2ludCBoaW5pYzNfZ2V0X3BoeV9wb3J0X3N0YXRzKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LFxuK1x0XHRcdCAgICAgIHN0cnVjdCBtYWdfY21kX3BvcnRfc3RhdHMgKnN0YXRzKTtcbitpbnQgaGluaWMzX2dldF92cG9ydF9zdGF0cyhzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IGZ1bmNfaWQsXG4rXHRcdFx0ICAgc3RydWN0IGwybmljX3Zwb3J0X3N0YXRzICpzdGF0cyk7XG4rXG4gaW50IGhpbmljM19hZGRfdmxhbihzdHJ1Y3QgaGluaWMzX2h3ZGV2ICpod2RldiwgdTE2IHZsYW5faWQsIHUxNiBmdW5jX2lkKTtcbiBpbnQgaGluaWMzX2RlbF92bGFuKHN0cnVjdCBoaW5pYzNfaHdkZXYgKmh3ZGV2LCB1MTYgdmxhbl9pZCwgdTE2IGZ1bmNfaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxuaW5kZXggOTUwMjI5M2ZmNzEwYy4uOTRhMmJhYjUyNTY0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX25pY19kZXYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfbmljX2Rldi5oXG5AQCAtMTAsNiArMTAsOCBAQFxuICNpbmNsdWRlIFwiaGluaWMzX2h3X2NmZy5oXCJcbiAjaW5jbHVkZSBcImhpbmljM19od2Rldi5oXCJcbiAjaW5jbHVkZSBcImhpbmljM19tZ210X2ludGVyZmFjZS5oXCJcbisjaW5jbHVkZSBcImhpbmljM19yeC5oXCJcbisjaW5jbHVkZSBcImhpbmljM190eC5oXCJcbiBcbiAjZGVmaW5lIEhJTklDM19WTEFOX0JJVE1BUF9CWVRFX1NJWkUobmljX2RldikgIChzaXplb2YoKihuaWNfZGV2KS1cdTAwM2V2bGFuX2JpdG1hcCkpXG4gI2RlZmluZSBISU5JQzNfVkxBTl9CSVRNQVBfU0laRShuaWNfZGV2KSAgXFxcbkBAIC0xMjcsOCArMTI5LDggQEAgc3RydWN0IGhpbmljM19uaWNfZGV2IHtcbiBcdHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICAgICAgICAgKndvcmtxO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayAgICAgICAgICAgICBwZXJpb2RpY193b3JrO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgICAgICAgICByeF9tb2RlX3dvcms7XG4tXHQvKiBsb2NrIGZvciBlbmFibGUvZGlzYWJsZSBwb3J0ICovXG4tXHRzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIHBvcnRfc3RhdGVfbXV0ZXg7XG4rXHQvKiBQcm90ZWN0cyBpbnRlcmZhY2Ugc3RhdGUgKi9cbitcdHN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgc3RhdGVfbG9jaztcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgICAgdWNfZmlsdGVyX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgIG1jX2ZpbHRlcl9saXN0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5jXG5pbmRleCAzMDlhYjU5MDEzNzk3Li4yOThmYzA4MTc2ODBkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguY1xuQEAgLTI4LDEwICsyOCw2IEBAXG4gXG4gI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQgICAgIDY2XG4gI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgICAgIDg2XG4tI2RlZmluZSBISU5JQzNfTFJPX1BLVF9IRFJfTEVOKGNxZSkgXFxcbi1cdChSUV9DUUVfT0ZGT0xBRF9UWVBFX0dFVCgoY3FlKS1cdTAwM2VvZmZsb2FkX3R5cGUsIElQX1RZUEUpID09IFxcXG4tXHQgSElOSUMzX1JYX0lQVjZfUEtUID8gSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY2IDogXFxcbi1cdCBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjQpXG4gXG4gc3RhdGljIHZvaWQgaGluaWMzX3J4cV9jbGVhbl9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqcnhxX3N0YXRzKVxuIHtcbkBAIC00Niw3ICs0Miw2IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeHFfY2xlYW5fc3RhdHMoc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cylcbiBcbiBcdHJ4cV9zdGF0cy1cdTAwM2VhbGxvY19za2JfZXJyID0gMDtcbiBcdHJ4cV9zdGF0cy1cdTAwM2VhbGxvY19yeF9idWZfZXJyID0gMDtcbi1cdHJ4cV9zdGF0cy1cdTAwM2VyZXN0b3JlX2Ryb3Bfc2dlID0gMDtcbiBcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnJ4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4gfVxuIFxuQEAgLTE0Nyw2ICsxNDIsOCBAQCBzdGF0aWMgdTMyIGhpbmljM19yeF9maWxsX2J1ZmZlcnMoc3RydWN0IGhpbmljM19yeHEgKnJ4cSlcbiB7XG4gXHR1MzIgaSwgZnJlZV93cWViYnMgPSByeHEtXHUwMDNlZGVsdGEgLSAxO1xuIFx0c3RydWN0IGhpbmljM19yeF9pbmZvICpyeF9pbmZvO1xuK1x0c3RydWN0IHU2NF9zdGF0c19zeW5jICpzeW5jcDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuIFx0aW50IGVycjtcbiBcbkBAIC0xNTUsOCArMTUyLDEzIEBAIHN0YXRpYyB1MzIgaGluaWMzX3J4X2ZpbGxfYnVmZmVycyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxKVxuIFxuIFx0XHRlcnIgPSByeF9hbGxvY19tYXBwZWRfcGFnZShyeHEtXHUwMDNlcGFnZV9wb29sLCByeF9pbmZvLFxuIFx0XHRcdFx0XHQgICByeHEtXHUwMDNlYnVmX2xlbik7XG4tXHRcdGlmICh1bmxpa2VseShlcnIpKVxuK1x0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuK1x0XHRcdHN5bmNwID0gXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcDtcbitcdFx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XG4rXHRcdFx0cnhxLVx1MDAzZXJ4cV9zdGF0cy5hbGxvY19yeF9idWZfZXJyKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShzeW5jcCwgZmxhZ3MpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXG4gXHRcdGRtYV9hZGRyID0gcGFnZV9wb29sX2dldF9kbWFfYWRkcihyeF9pbmZvLVx1MDAzZXBhZ2UpICtcbiBcdFx0XHRyeF9pbmZvLVx1MDAzZXBhZ2Vfb2Zmc2V0O1xuQEAgLTE3MCw2ICsxNzIsMTEgQEAgc3RhdGljIHUzMiBoaW5pYzNfcnhfZmlsbF9idWZmZXJzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEpXG4gXHRcdFx0XHRyeHEtXHUwMDNlbmV4dF90b191cGRhdGUgXHUwMDNjXHUwMDNjIEhJTklDM19OT1JNQUxfUlFfV1FFKTtcbiBcdFx0cnhxLVx1MDAzZWRlbHRhIC09IGk7XG4gXHRcdHJ4cS1cdTAwM2VuZXh0X3RvX2FsbG9jID0gcnhxLVx1MDAzZW5leHRfdG9fdXBkYXRlO1xuK1x0fSBlbHNlIGlmIChmcmVlX3dxZWJicyA9PSByeHEtXHUwMDNlcV9kZXB0aCAtIDEpIHtcbitcdFx0c3luY3AgPSBcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwO1xuK1x0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShzeW5jcCk7XG4rXHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMucnhfYnVmX2VtcHR5Kys7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoc3luY3AsIGZsYWdzKTtcbiBcdH1cbiBcbiBcdHJldHVybiBpO1xuQEAgLTMzMCwxMSArMzM3LDI0IEBAIHN0YXRpYyB2b2lkIGhpbmljM19yeF9jc3VtKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIHUzMiBvZmZsb2FkX3R5cGUsXG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcnhxLVx1MDAzZW5ldGRldjtcbiBcdGJvb2wgbDJfdHVubmVsO1xuIFxuK1x0LyogSFcgZW5zdXJlcyB0aGF0IG9ubHkgMSBiaXQgaXMgc2V0IGluIGNzdW1fZXJyLiAqL1xuK1x0aWYgKHVubGlrZWx5KGNzdW1fZXJyID09IEhJTklDM19SWF9DU1VNX0lQU1VfT1RIRVJfRVJSKSkge1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuK1x0XHRyeHEtXHUwMDNlcnhxX3N0YXRzLm90aGVyX2Vycm9ycysrO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbitcdH1cbitcbiBcdGlmICghKG5ldGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9SWENTVU0pKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodW5saWtlbHkoY3N1bV9lcnIpKSB7XG4gXHRcdC8qIHBrdCB0eXBlIGlzIHJlY29nbml6ZWQgYnkgSFcsIGFuZCBjc3VtIGlzIHdyb25nICovXG4rXHRcdGlmIChjc3VtX2VyciAhPSBISU5JQzNfUlhfQ1NVTV9IV19DSEVDS19OT05FIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY3N1bV9lcnIgIT0gSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIpIHtcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHMuc3luY3ApO1xuK1x0XHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuY3N1bV9lcnJvcnMrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbitcdFx0fVxuIFx0XHRza2ItXHUwMDNlaXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTM4Nyw4ICs0MDcsMTIgQEAgc3RhdGljIGludCByZWN2X29uZV9wa3Qoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgc3RydWN0IGhpbmljM19ycV9jcWUgKnJ4X2NxZSxcbiBcdHUxNiBudW1fbHJvO1xuIFxuIFx0c2tiID0gaGluaWMzX2ZldGNoX3J4X2J1ZmZlcihyeHEsIHBrdF9sZW4pO1xuLVx0aWYgKHVubGlrZWx5KCFza2IpKVxuK1x0aWYgKHVubGlrZWx5KCFza2IpKSB7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4rXHRcdHJ4cS1cdTAwM2VyeHFfc3RhdHMuYWxsb2Nfc2tiX2VycisrO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4gXG4gXHQvKiBwbGFjZSBoZWFkZXIgaW4gbGluZWFyIHBvcnRpb24gb2YgYnVmZmVyICovXG4gXHRpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKVxuQEAgLTU1MCwxMSArNTc0LDI5IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3J4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbit2b2lkIGhpbmljM19yeHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsXG4rXHRcdFx0ICBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyAqc3RhdHMpXG4re1xuK1x0c3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnJ4cV9zdGF0cyA9IFx1MDAyNnJ4cS1cdTAwM2VyeHFfc3RhdHM7XG4rXHR1bnNpZ25lZCBpbnQgc3RhcnQ7XG4rXG4rXHRkbyB7XG4rXHRcdHN0YXJ0ID0gdTY0X3N0YXRzX2ZldGNoX2JlZ2luKFx1MDAyNnJ4cV9zdGF0cy1cdTAwM2VzeW5jcCk7XG4rXHRcdHN0YXRzLVx1MDAzZWNzdW1fZXJyb3JzID0gcnhxX3N0YXRzLVx1MDAzZWNzdW1fZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VvdGhlcl9lcnJvcnMgPSByeHFfc3RhdHMtXHUwMDNlb3RoZXJfZXJyb3JzO1xuK1x0XHRzdGF0cy1cdTAwM2VyeF9idWZfZW1wdHkgPSByeHFfc3RhdHMtXHUwMDNlcnhfYnVmX2VtcHR5O1xuK1x0XHRzdGF0cy1cdTAwM2VhbGxvY19za2JfZXJyID0gcnhxX3N0YXRzLVx1MDAzZWFsbG9jX3NrYl9lcnI7XG4rXHRcdHN0YXRzLVx1MDAzZWFsbG9jX3J4X2J1Zl9lcnIgPSByeHFfc3RhdHMtXHUwMDNlYWxsb2NfcnhfYnVmX2VycjtcbitcdH0gd2hpbGUgKHU2NF9zdGF0c19mZXRjaF9yZXRyeShcdTAwMjZyeHFfc3RhdHMtXHUwMDNlc3luY3AsIHN0YXJ0KSk7XG4rfVxuK1xuIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIHtcbiBcdHN0cnVjdCBoaW5pYzNfbmljX2RldiAqbmljX2RldiA9IG5ldGRldl9wcml2KHJ4cS1cdTAwM2VuZXRkZXYpO1xuK1x0dTMyIGlwX3R5cGUsIG9mZmxvYWRfdHlwZSwgcGt0X2hkcl9sZW47XG4gXHR1MzIgc3dfY2ksIHN0YXR1cywgcGt0X2xlbiwgdmxhbl9sZW47XG4gXHRzdHJ1Y3QgaGluaWMzX3JxX2NxZSAqcnhfY3FlO1xuK1x0dTY0IHJ4X2J5dGVzID0gMDtcbiBcdHUzMiBudW1fd3FlID0gMDtcbiBcdGludCBucl9wa3RzID0gMDtcbiBcdHUxNiBudW1fbHJvO1xuQEAgLTU3NCwxMCArNjE2LDIwIEBAIGludCBoaW5pYzNfcnhfcG9sbChzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLCBpbnQgYnVkZ2V0KVxuIFx0XHRpZiAocmVjdl9vbmVfcGt0KHJ4cSwgcnhfY3FlLCBwa3RfbGVuLCB2bGFuX2xlbiwgc3RhdHVzKSlcbiBcdFx0XHRicmVhaztcbiBcbitcdFx0cnhfYnl0ZXMgKz0gcGt0X2xlbjtcbiBcdFx0bnJfcGt0cysrO1xuIFx0XHRudW1fbHJvID0gUlFfQ1FFX1NUQVRVU19HRVQoc3RhdHVzLCBOVU1fTFJPKTtcbi1cdFx0aWYgKG51bV9scm8pXG4rXHRcdGlmIChudW1fbHJvKSB7XG4rXHRcdFx0b2ZmbG9hZF90eXBlID0gbGUzMl90b19jcHUocnhfY3FlLVx1MDAzZW9mZmxvYWRfdHlwZSk7XG4rXHRcdFx0aXBfdHlwZSA9IFJRX0NRRV9PRkZPTEFEX1RZUEVfR0VUKG9mZmxvYWRfdHlwZSxcbitcdFx0XHRcdFx0XHRcdCAgSVBfVFlQRSk7XG4rXHRcdFx0cGt0X2hkcl9sZW4gPSBpcF90eXBlID09IEhJTklDM19SWF9JUFY2X1BLVCA/XG4rXHRcdFx0XHQgICAgICBISU5JQzNfTFJPX1BLVF9IRFJfTEVOX0lQVjYgOlxuK1x0XHRcdFx0ICAgICAgSElOSUMzX0xST19QS1RfSERSX0xFTl9JUFY0O1xuK1xuK1x0XHRcdHJ4X2J5dGVzICs9IChudW1fbHJvIC0gMSkgKiBwa3RfaGRyX2xlbjtcbiBcdFx0XHRudW1fd3FlICs9IGhpbmljM19nZXRfc2dlX251bShyeHEsIHBrdF9sZW4pO1xuK1x0XHR9XG4gXG4gXHRcdHJ4X2NxZS1cdTAwM2VzdGF0dXMgPSAwO1xuIFxuQEAgLTU4OCw1ICs2NDAsMTAgQEAgaW50IGhpbmljM19yeF9wb2xsKHN0cnVjdCBoaW5pYzNfcnhxICpyeHEsIGludCBidWRnZXQpXG4gXHRpZiAocnhxLVx1MDAzZWRlbHRhIFx1MDAzZT0gSElOSUMzX1JYX0JVRkZFUl9XUklURSlcbiBcdFx0aGluaWMzX3J4X2ZpbGxfYnVmZmVycyhyeHEpO1xuIFxuK1x0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZyeHEtXHUwMDNlcnhxX3N0YXRzLnN5bmNwKTtcbitcdHJ4cS1cdTAwM2VyeHFfc3RhdHMucGFja2V0cyArPSAodTY0KW5yX3BrdHM7XG4rXHRyeHEtXHUwMDNlcnhxX3N0YXRzLmJ5dGVzICs9IHJ4X2J5dGVzO1xuK1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2cnhxLVx1MDAzZXJ4cV9zdGF0cy5zeW5jcCk7XG4rXG4gXHRyZXR1cm4gbnJfcGt0cztcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfcnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3J4LmhcbmluZGV4IDA2ZDFiMzI5OWU3Y2YuLjJhYjY5MWVkMTFhOTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19yeC5oXG5AQCAtOCw2ICs4LDE3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGltLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuIFxuKy8qIHJ4IGNxZSBjaGVja3N1bSBlcnIgKi9cbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lQX0NTVU1fRVJSICAgICAgQklUKDApXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9UQ1BfQ1NVTV9FUlIgICAgIEJJVCgxKVxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fVURQX0NTVU1fRVJSICAgICBCSVQoMilcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX0lHTVBfQ1NVTV9FUlIgICAgQklUKDMpXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9JQ01QVjRfQ1NVTV9FUlIgIEJJVCg0KVxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSUNNUFY2X0NTVU1fRVJSICBCSVQoNSlcbisjZGVmaW5lIEhJTklDM19SWF9DU1VNX1NDVFBfQ1JDX0VSUiAgICAgQklUKDYpXG4rI2RlZmluZSBISU5JQzNfUlhfQ1NVTV9IV19DSEVDS19OT05FICAgIEJJVCg3KVxuKyNkZWZpbmUgSElOSUMzX1JYX0NTVU1fSVBTVV9PVEhFUl9FUlIgICBCSVQoOClcbitcbiAjZGVmaW5lIFJRX0NRRV9PRkZPTEFEX1RZUEVfUEtUX1RZUEVfTUFTSyAgICAgICAgICAgR0VOTUFTSyg0LCAwKVxuICNkZWZpbmUgUlFfQ1FFX09GRk9MQURfVFlQRV9JUF9UWVBFX01BU0sgICAgICAgICAgICBHRU5NQVNLKDYsIDUpXG4gI2RlZmluZSBSUV9DUUVfT0ZGT0xBRF9UWVBFX1RVTk5FTF9QS1RfRk9STUFUX01BU0sgIEdFTk1BU0soMTEsIDgpXG5AQCAtMzksNyArNTAsNiBAQCBzdHJ1Y3QgaGluaWMzX3J4cV9zdGF0cyB7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgcnhfYnVmX2VtcHR5O1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIGFsbG9jX3NrYl9lcnI7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgYWxsb2NfcnhfYnVmX2Vycjtcbi1cdHU2NCAgICAgICAgICAgICAgICAgICByZXN0b3JlX2Ryb3Bfc2dlO1xuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuIH07XG4gXG5AQCAtMTAxLDkgKzExMSw2IEBAIHN0cnVjdCBoaW5pYzNfcnhxIHtcbiBcdGRtYV9hZGRyX3QgICAgICAgICAgICAgY3FlX3N0YXJ0X3BhZGRyO1xuIFxuIFx0c3RydWN0IGRpbSAgICAgICAgICAgICBkaW07XG4tXG4tXHR1OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfY29hbGVzY190aW1lcl9jZmc7XG4tXHR1OCAgICAgICAgICAgICAgICAgICAgIGxhc3RfcGVuZGluZ19saW1pdDtcbiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDtcbiBcbiBzdHJ1Y3QgaGluaWMzX2R5bmFfcnhxX3JlcyB7XG5AQCAtMTIzLDYgKzEzMCw5IEBAIHZvaWQgaGluaWMzX2ZyZWVfcnhxc19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9ycSxcbiBcdFx0XHQgIHUzMiBycV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3J4cV9yZXMgKnJ4cXNfcmVzKTtcbiBpbnQgaGluaWMzX2NvbmZpZ3VyZV9yeHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fcnEsXG4gXHRcdFx0ICB1MzIgcnFfZGVwdGgsIHN0cnVjdCBoaW5pYzNfZHluYV9yeHFfcmVzICpyeHFzX3Jlcyk7XG4rXG4rdm9pZCBoaW5pYzNfcnhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3J4cSAqcnhxLFxuK1x0XHRcdCAgc3RydWN0IGhpbmljM19yeHFfc3RhdHMgKnN0YXRzKTtcbiBpbnQgaGluaWMzX3J4X3BvbGwoc3RydWN0IGhpbmljM19yeHEgKnJ4cSwgaW50IGJ1ZGdldCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmNcbmluZGV4IDkzMDZiZjAwMjBjYWYuLjYyMTljYzEwOTE4ZGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5jXG5AQCAtMjUsMTEgKzI1LDkgQEAgc3RhdGljIHZvaWQgaGluaWMzX3R4cV9jbGVhbl9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqdHhxX3N0YXRzKVxuIFx0dHhxX3N0YXRzLVx1MDAzZWRyb3BwZWQgPSAwO1xuIFxuIFx0dHhxX3N0YXRzLVx1MDAzZXNrYl9wYWRfZXJyID0gMDtcbi1cdHR4cV9zdGF0cy1cdTAwM2VmcmFnX2xlbl9vdmVyZmxvdyA9IDA7XG4gXHR0eHFfc3RhdHMtXHUwMDNlb2ZmbG9hZF9jb3dfc2tiX2VyciA9IDA7XG4gXHR0eHFfc3RhdHMtXHUwMDNlbWFwX2ZyYWdfZXJyID0gMDtcbiBcdHR4cV9zdGF0cy1cdTAwM2V1bmtub3duX3R1bm5lbF9wa3QgPSAwO1xuLVx0dHhxX3N0YXRzLVx1MDAzZWZyYWdfc2l6ZV9lcnIgPSAwO1xuIFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxX3N0YXRzLVx1MDAzZXN5bmNwKTtcbiB9XG4gXG5AQCAtOTcsOCArOTUsMTIgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfbWFwX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0ZG1hX2luZm9bMF0uZG1hID0gZG1hX21hcF9zaW5nbGUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNrYi1cdTAwM2VkYXRhLFxuIFx0XHRcdFx0XHQgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7XG4tXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvWzBdLmRtYSkpXG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvWzBdLmRtYSkpIHtcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbitcdFx0dHhxLVx1MDAzZXR4cV9zdGF0cy5tYXBfZnJhZ19lcnIrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuIFxuIFx0ZG1hX2luZm9bMF0ubGVuID0gc2tiX2hlYWRsZW4oc2tiKTtcbiBcbkBAIC0xMTcsNiArMTE5LDkgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfbWFwX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHRcdCAgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSxcbiBcdFx0XHRcdFx0XHQgICAgIERNQV9UT19ERVZJQ0UpO1xuIFx0XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGRtYV9pbmZvW2lkeF0uZG1hKSkge1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4rXHRcdFx0dHhxLVx1MDAzZXR4cV9zdGF0cy5tYXBfZnJhZ19lcnIrKztcbitcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gZXJyX3VubWFwX3BhZ2U7XG4gXHRcdH1cbkBAIC0yNjAsNiArMjY1LDkgQEAgc3RhdGljIGludCBoaW5pYzNfdHhfY3N1bShzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLCBzdHJ1Y3QgaGluaWMzX3NxX3Rhc2sgKnRhc2ssXG4gXHRcdGlmIChsNF9wcm90byAhPSBJUFBST1RPX1VEUCB8fFxuIFx0XHQgICAgKChzdHJ1Y3QgdWRwaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSktXHUwMDNlZGVzdCAhPVxuIFx0XHQgICAgVlhMQU5fT0ZGTE9BRF9QT1JUX0xFKSB7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbitcdFx0XHR0eHEtXHUwMDNldHhxX3N0YXRzLnVua25vd25fdHVubmVsX3BrdCsrO1xuK1x0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuIFx0XHRcdC8qIFVuc3VwcG9ydGVkIHR1bm5lbCBwYWNrZXQsIGRpc2FibGUgY3N1bSBvZmZsb2FkICovXG4gXHRcdFx0c2tiX2NoZWNrc3VtX2hlbHAoc2tiKTtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC00MzMsNiArNDQxLDI3IEBAIHN0YXRpYyB1MzIgaGluaWMzX3R4X29mZmxvYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGhpbmljM19zcV90YXNrICp0YXNrLFxuIFx0cmV0dXJuIG9mZmxvYWQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGhpbmljM19nZXRfcGt0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0dTMyIGhkcl9sZW4sIHR4X2J5dGVzO1xuK1x0dW5zaWduZWQgc2hvcnQgcGt0cztcbitcbitcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcbitcdFx0aGRyX2xlbiA9IChza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3MgLSAxKSAqXG4rXHRcdFx0ICBza2JfdGNwX2FsbF9oZWFkZXJzKHNrYik7XG4rXHRcdHR4X2J5dGVzID0gc2tiLVx1MDAzZWxlbiArIGhkcl9sZW47XG4rXHRcdHBrdHMgPSBza2Jfc2hpbmZvKHNrYiktXHUwMDNlZ3NvX3NlZ3M7XG4rXHR9IGVsc2Uge1xuK1x0XHR0eF9ieXRlcyA9IHNrYi1cdTAwM2VsZW4gXHUwMDNlIEVUSF9aTEVOID8gc2tiLVx1MDAzZWxlbiA6IEVUSF9aTEVOO1xuK1x0XHRwa3RzID0gMTtcbitcdH1cbitcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4rXHR0eHEtXHUwMDNldHhxX3N0YXRzLmJ5dGVzICs9IHR4X2J5dGVzO1xuK1x0dHhxLVx1MDAzZXR4cV9zdGF0cy5wYWNrZXRzICs9IHBrdHM7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbit9XG4rXG4gc3RhdGljIHUxNiBoaW5pYzNfZ2V0X2FuZF91cGRhdGVfc3Ffb3duZXIoc3RydWN0IGhpbmljM19pb19xdWV1ZSAqc3EsXG4gXHRcdFx0XHRcdCAgdTE2IGN1cnJfcGksIHUxNiB3cWViYl9jbnQpXG4ge1xuQEAgLTUzOSw4ICs1NjgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAodW5saWtlbHkoc2tiLVx1MDAzZWxlbiBcdTAwM2MgTUlOX1NLQl9MRU4pKSB7XG4tXHRcdGlmIChza2JfcGFkKHNrYiwgTUlOX1NLQl9MRU4gLSBza2ItXHUwMDNlbGVuKSlcbitcdFx0aWYgKHNrYl9wYWQoc2tiLCBNSU5fU0tCX0xFTiAtIHNrYi1cdTAwM2VsZW4pKSB7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzLnN5bmNwKTtcbitcdFx0XHR0eHEtXHUwMDNldHhxX3N0YXRzLnNrYl9wYWRfZXJyKys7XG4rXHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4gXG4gXHRcdHNrYi1cdTAwM2VsZW4gPSBNSU5fU0tCX0xFTjtcbiBcdH1cbkBAIC01NTcsMTEgKzU5MCwxNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHRoaW5pYzNfd3FfZnJlZV93cWViYnMoXHUwMDI2dHhxLVx1MDAzZXNxLVx1MDAzZXdxKSxcbiBcdFx0XHRcdFx0dHhxLVx1MDAzZXR4X3N0YXJ0X3RocnMpO1xuIFxuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuK1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLmJ1c3krKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbiBcdG9mZmxvYWQgPSBoaW5pYzNfdHhfb2ZmbG9hZChza2IsIFx1MDAyNnRhc2ssIFx1MDAyNnF1ZXVlX2luZm8sIHR4cSk7XG4gXHRpZiAodW5saWtlbHkob2ZmbG9hZCA9PSBISU5JQzNfVFhfT0ZGTE9BRF9JTlZBTElEKSkge1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuK1x0XHR0eHEtXHUwMDNldHhxX3N0YXRzLm9mZmxvYWRfY293X3NrYl9lcnIrKztcbitcdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4gXHRcdGdvdG8gZXJyX2Ryb3BfcGt0O1xuIFx0fSBlbHNlIGlmICghb2ZmbG9hZCkge1xuIFx0XHR3cWViYl9jbnQgLT0gMTtcbkBAIC01OTUsNiArNjM0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGhpbmljM19zZW5kX29uZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0b3BfdGhycyxcbiBcdFx0XHRcdCAgdHhxLVx1MDAzZXR4X3N0YXJ0X3RocnMpO1xuIFxuK1x0aGluaWMzX2dldF9wa3Rfc3RhdHModHhxLCBza2IpO1xuIFx0aGluaWMzX3ByZXBhcmVfc3FfY3RybChcdTAwMjZ3cWVfY29tYm8sIHF1ZXVlX2luZm8sIG51bV9zZ2UsIG93bmVyKTtcbiBcdGhpbmljM193cml0ZV9kYih0eHEtXHUwMDNlc3EsIDAsIERCX0NGTEFHX0RQX1NRLFxuIFx0XHRcdGhpbmljM19nZXRfc3FfbG9jYWxfcGkodHhxLVx1MDAzZXNxKSk7XG5AQCAtNjA0LDYgKzY0NCwxMCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaGluaWMzX3NlbmRfb25lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycl9kcm9wX3BrdDpcbiBcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gZXJyX291dDpcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2dHhxLVx1MDAzZXR4cV9zdGF0cy5zeW5jcCk7XG4rXHR0eHEtXHUwMDNldHhxX3N0YXRzLmRyb3BwZWQrKztcbitcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnR4cS1cdTAwM2V0eHFfc3RhdHMuc3luY3ApO1xuK1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG5AQCAtNzU0LDYgKzc5OCwyMiBAQCBpbnQgaGluaWMzX2NvbmZpZ3VyZV90eHFzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiBudW1fc3EsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rdm9pZCBoaW5pYzNfdHhxX2dldF9zdGF0cyhzdHJ1Y3QgaGluaWMzX3R4cSAqdHhxLFxuK1x0XHRcdCAgc3RydWN0IGhpbmljM190eHFfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHN0cnVjdCBoaW5pYzNfdHhxX3N0YXRzICp0eHFfc3RhdHMgPSBcdTAwMjZ0eHEtXHUwMDNldHhxX3N0YXRzO1xuK1x0dW5zaWduZWQgaW50IHN0YXJ0O1xuK1xuK1x0ZG8ge1xuK1x0XHRzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbihcdTAwMjZ0eHFfc3RhdHMtXHUwMDNlc3luY3ApO1xuK1x0XHRzdGF0cy1cdTAwM2VidXN5ID0gdHhxX3N0YXRzLVx1MDAzZWJ1c3k7XG4rXHRcdHN0YXRzLVx1MDAzZXNrYl9wYWRfZXJyID0gdHhxX3N0YXRzLVx1MDAzZXNrYl9wYWRfZXJyO1xuK1x0XHRzdGF0cy1cdTAwM2VvZmZsb2FkX2Nvd19za2JfZXJyID0gdHhxX3N0YXRzLVx1MDAzZW9mZmxvYWRfY293X3NrYl9lcnI7XG4rXHRcdHN0YXRzLVx1MDAzZW1hcF9mcmFnX2VyciA9IHR4cV9zdGF0cy1cdTAwM2VtYXBfZnJhZ19lcnI7XG4rXHRcdHN0YXRzLVx1MDAzZXVua25vd25fdHVubmVsX3BrdCA9IHR4cV9zdGF0cy1cdTAwM2V1bmtub3duX3R1bm5lbF9wa3Q7XG4rXHR9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnkoXHUwMDI2dHhxX3N0YXRzLVx1MDAzZXN5bmNwLCBzdGFydCkpO1xuK31cbitcbiBib29sIGhpbmljM190eF9wb2xsKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsIGludCBidWRnZXQpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHR4cS1cdTAwM2VuZXRkZXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfdHguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX3R4LmhcbmluZGV4IDAwMTk0ZjJhMWJjYzEuLjZhYmY0NDNjYjkyN2MgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM190eC5oXG5AQCAtMTA2LDExICsxMDYsOSBAQCBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyB7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgYnVzeTtcbiBcdHU2NCAgICAgICAgICAgICAgICAgICBkcm9wcGVkO1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIHNrYl9wYWRfZXJyO1xuLVx0dTY0ICAgICAgICAgICAgICAgICAgIGZyYWdfbGVuX292ZXJmbG93O1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIG9mZmxvYWRfY293X3NrYl9lcnI7XG4gXHR1NjQgICAgICAgICAgICAgICAgICAgbWFwX2ZyYWdfZXJyO1xuIFx0dTY0ICAgICAgICAgICAgICAgICAgIHVua25vd25fdHVubmVsX3BrdDtcbi1cdHU2NCAgICAgICAgICAgICAgICAgICBmcmFnX3NpemVfZXJyO1xuIFx0c3RydWN0IHU2NF9zdGF0c19zeW5jIHN5bmNwO1xuIH07XG4gXG5AQCAtMTU3LDYgKzE1NSw4IEBAIGludCBoaW5pYzNfY29uZmlndXJlX3R4cXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IG51bV9zcSxcbiBcdFx0XHQgIHUzMiBzcV9kZXB0aCwgc3RydWN0IGhpbmljM19keW5hX3R4cV9yZXMgKnR4cXNfcmVzKTtcbiBcbiBuZXRkZXZfdHhfdCBoaW5pYzNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIGhpbmljM190eHFfZ2V0X3N0YXRzKHN0cnVjdCBoaW5pYzNfdHhxICp0eHEsXG4rXHRcdFx0ICBzdHJ1Y3QgaGluaWMzX3R4cV9zdGF0cyAqc3RhdHMpO1xuIGJvb2wgaGluaWMzX3R4X3BvbGwoc3RydWN0IGhpbmljM190eHEgKnR4cSwgaW50IGJ1ZGdldCk7XG4gdm9pZCBoaW5pYzNfZmx1c2hfdHhxcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjA1LjIwMzgwMDI2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxNjMxODczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXcgUGF0Y2ggZm9yIHRoZSBIdWF3ZWkgaGluaWMzIERyaXZlcioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0YXJnZXRpbmcgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuY2AgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIExvb2tzIGxpa2UgaXQncyBhZGRpbmcgc29tZSBlc3NlbnRpYWwgZXRodG9vbCBmdW5jdGlvbmFsaXR5OiBzdGF0aXN0aWNzLCBjb2FsZXNjZSBzZXR0aW5ncywgYW5kIGEgZmV3IHF1aWNrIGZpeGVzLiBUaGF0J3MgYSBnb29kIHN0YXJ0LiBUaGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlzIHRoZSBgaGluaWMzYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemUgYXMgdGhlIEh1YXdlaSBJbnRlbGxpZ2VudCBOSUMgZHJpdmVyLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGlzIHNvbWV0aGluZyBJIGNhbiBldmVuIHRvdWNoIGluIG15IHVzdWFsIFFFTVUgZW52aXJvbm1lbnQ/XG5cblRoZSBjb3JlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyBhIHBoeXNpY2FsIE5JQyBkcml2ZXIgb3IgaWYgdGhlcmUncyBhbnkgZW11bGF0aW9uIGF2YWlsYWJsZS4gXCJIdWF3ZWkgSW50ZWxsaWdlbnQgTklDXCIg4oCTIHRoYXQgcGhyYXNlIHVzdWFsbHkgc2NyZWFtcyAqcGh5c2ljYWwgaGFyZHdhcmUqLiBMZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgc3VzcGljaW9uLiBUaW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCB0cnV0aCBsaWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBkZXZpY2UgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA1NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjEwLjYyMDEyMTkzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTc5MTI2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElOSUMzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc6Njpjb25maWcgSElOSUMzXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkh1YXdlaSAzcmQgZ2VuZXJhdGlvbiBuZXR3b3JrIGFkYXB0ZXJzIChISU5JQzMpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjEwLjY4MTkxNzQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNDc1NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWdgIGZpbGUsIGFzIGlmIGl0J3MgcnVubmluZyB0aHJvdWdoIG15IGV4cGVydCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBIdWF3ZWkgaGluaWMzIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHJpdmVyIGlzIGV4cG9zZWQgdG8gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIG9wdGlvbnMgaXQgcHJvdmlkZXMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYSBkcml2ZXIncyBmZWF0dXJlIHNldCBsYWlkIG91dCBpbiBhIGhpZXJhcmNoaWNhbCBmYXNoaW9uLCBjb250cm9sbGVkIGJ5IHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbkZpcnN0LCBJJ20gc2Nhbm5pbmcgZm9yIHRoZSBnZW5lcmFsIGBjb25maWdgIGJsb2NrIOKAkyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRyaXZlciBpcyBkZWZpbmVkLiBJ4oCZbSBsb29raW5nIGZvciB0aGUgbWFpbiBzeW1ib2wsIGxpa2UgYEhJTklDM2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCByZXByZXNlbnRzIHRoZSByb290IGVuYWJsaW5nIHRoZSBkcml2ZXIuIFRoZW4sIEnigJlsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSB0aGlzIGRyaXZlciBiZWNvbWVzIHJlbGV2YW50PyBUaGluZ3MgbGlrZSBQQ0kgc3VwcG9ydCwgRE1BIGVuZ2luZSBjb25maWd1cmF0aW9uLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgbmV0d29yay1yZWxhdGVkIHN1YnN5c3RlbXMgYXJlIGFsbCBvbiBteSByYWRhci5cblxuTmV4dCwgSSdsbCBiZSBkcmlsbGluZyBkb3duIGludG8gdGhlIHNwZWNpZmljIGBjb25maWdgIG9wdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgZmVhdHVyZXMgdGhlIGRyaXZlciBvZmZlcnMuIEFyZSB0aGVyZSBkaWZmZXJlbnQgaGFyZHdhcmUgZ2VuZXJhdGlvbnMgc3VwcG9ydGVkPyBBcmUgdGhlcmUgZGVidWdnaW5nIG9wdGlvbnM/IEFyZSB0aGVyZSBwZXJmb3JtYW5jZSB0dW5hYmxlcyBsaWtlIGludGVycnVwdCBjb2FsZXNjaW5nIG9yIGZsb3cgY29udHJvbCBvcHRpb25zPyBJJ20gc2Nhbm5pbmcgZm9yIGtleXdvcmRzIHRoYXQgaGludCBhdCB0aGVzZSBjYXBhYmlsaXRpZXMuIEknbSBsb29raW5nIGZvciBjbGVhciwgY29uY2lzZSBkZXNjcmlwdGlvbnMsIGJ1dCBJJ20gYWxzbyBtaW5kZnVsIG9mIHBvdGVudGlhbCBjb21wbGV4aXRpZXMuIE9mdGVuLCB0aGUgZGV2aWwncyBpbiB0aGUgZGV0YWlscyB3aGVuIGl0IGNvbWVzIHRvIE5JQyBjb25maWd1cmF0aW9uLlxuXG5JIGV4cGVjdCB0byBzZWUgYGJvb2xgLCBgdHJpc3RhdGVgLCBvciBgaW50YCBvcHRpb25zLCBhbmQgSSdsbCBiZSBhc3Nlc3NpbmcgaG93IHRoZXNlIGFyZSBzdHJ1Y3R1cmVkLCBhbmQgaG93IHRoZXkgcmVsYXRlLiBJZiB0aGVyZSBhcmUgYWR2YW5jZWQgZmVhdHVyZXMsIEknbSBodW50aW5nIGZvciB0aGUgYGRlcGVuZHMgb25gIGNsYXVzZXM7IHRoaXMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbnMgYW5kIGZlYXR1cmUgaW50ZXJhY3Rpb25zLiBJdCBpcyBub3QgdW5jb21tb24gZm9yIGRyaXZlcnMgdG8gaGF2ZSBmZWF0dXJlIG9wdGlvbnMgdGhhdCBkZXBlbmQgb24gb3RoZXIgb3B0aW9ucywgYW5kIEkgd2lsbCBiZSBsb29raW5nIG91dCBmb3IgdGhvc2UuXG5cbkZpbmFsbHksIEnigJlsbCBsb29rIGZvciBhbnkgXCJoZWxwXCIgdGV4dCDigJMgdGhpcyBpcyBnb2xkIGZvciBxdWlja2x5IHVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGUgY2xhcml0eSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZSBcImhlbHBcIiB0ZXh0IGFyZSBhIGdvb2QgaW5kaWNhdG9yIG9mIHRoZSBtYWludGFpbmVycycgZGlsaWdlbmNlIGFuZCB0aGUgb3ZlcmFsbCBxdWFsaXR5IG9mIHRoZSBkcml2ZXIncyBjb25maWd1cmF0aW9uLiBJ4oCZbSBhbHNvIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGRlZmF1bHQgdmFsdWVzIOKAkyBhcmUgdGhleSBzZW5zaWJsZSBmb3IgdGhlIGdlbmVyYWwgY2FzZSwgb3IgYXJlIHRoZXkgZ2VhcmVkIHRvd2FyZCBhIHNwZWNpZmljIGhhcmR3YXJlIG9yIHNvZnR3YXJlIGVudmlyb25tZW50P1xuXG5VbHRpbWF0ZWx5LCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBibHVlcHJpbnQgZm9yIGhvdyB0aGUgaGluaWMzIGRyaXZlciBpbnRlZ3JhdGVzIGludG8gdGhlIGtlcm5lbC4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGFuZCBhY2N1cmF0ZWx5IGNvbXByZWhlbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBvdmVyYWxsIGRlc2lnbiBwaGlsb3NvcGh5IGJlaGluZCB0aGUgZHJpdmVyJ3MgYnVpbGQtdGltZSBzZXR0aW5ncy4gSXQncyBhYm91dCBidWlsZGluZyBhIG1lbnRhbCBtYXAgb2Ygd2hhdCdzIHBvc3NpYmxlLCBhbmQgYmVpbmcgYWJsZSB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCBob3cgdG8gY29uZmlndXJlIHRoaXMgZHJpdmVyIGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU0NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjE2LjIwNjY3NjI3NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgSHVhd2VpIGRyaXZlciBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBISU5JQzNcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJIdWF3ZWkgM3JkIGdlbmVyYXRpb24gbmV0d29yayBhZGFwdGVycyAoSElOSUMzKSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0IyBGaWVsZHMgb2YgSFcgYW5kIG1hbmFnZW1lbnQgc3RydWN0dXJlcyBhcmUgbGl0dGxlIGVuZGlhbiBhbmQgYXJlXFxuICAgOTpcXHRcXHQjIGN1cnJlbnRseSBub3QgY29udmVydGVkXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uICFDUFVfQklHX0VORElBTlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgQ09NUElMRV9URVNUXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIFBDSV9NU0kgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG4gIDEzOlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuICAxNDpcXHRcXHRzZWxlY3QgRElNTElCXFxuICAxNTpcXHRcXHRzZWxlY3QgUEFHRV9QT09MXFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEhpTklDIDNyZCBnZW4gTmV0d29yayBBZGFwdGVyIChISU5JQzMpLlxcbiAgMTg6XFx0XFx0ICBUaGUgZHJpdmVyIGlzIHN1cHBvcnRlZCBvbiBYODZfNjQgYW5kIEFSTTY0IGxpdHRsZSBlbmRpYW4uXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gIDIxOlxcdFxcdCAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoaW5pYzMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDAyOjIxOjE2LjIwNjc0MzQ3NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1OTk4MDU5MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPWZhbHNlOiBIaW5pYzMgRHJpdmVyIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGEgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHNvbWV0aGluZyByZWxhdGVkIHRvIGBoaW5pYzNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGlzIGRyaXZlciBpcyBldmVuIHJlbGV2YW50IGZvciBmdXp6aW5nLCBhbmQgdGhlIGluc3RydWN0aW9ucyBhcmUgdmVyeSBjbGVhciBhYm91dCB0aGF0LlxuXG5JIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBoaW5pYzNgIGhhcyBhbnkgUUVNVSBlbXVsYXRpb24uIFVzdWFsbHksIHRoZXNlIHZlbmRvci1zcGVjaWZpYyBkcml2ZXJzLCBlc3BlY2lhbGx5IGZvciBTbWFydE5JQ3MsIGRvbid0IHBsYXkgd2VsbCB3aXRoIHN0YW5kYXJkIFFFTVUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0J3MgbGlrZWx5IG5vdCBlbXVsYXRlZC4gVGhlbiwgSSBub3RpY2UgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIG1lbnRpb25zIGBldGh0b29sYCBzdGF0cyBhbmQgY29hbGVzY2Ugc2V0dGluZ3MuIE9rYXksIGBldGh0b29sYCBzdGF0cyBhcmUgYmFzaWNhbGx5IGp1c3QgcmVhZHMgZnJvbSB0aGUgaGFyZHdhcmUsIG5vdCBjb21wbGV4IGxvZ2ljLCBhbmQgY29hbGVzY2Ugc2V0dGluZ3MganVzdCBpbnZvbHZlIHdyaXRpbmcgdG8gaGFyZHdhcmUgcmVnaXN0ZXJzLiBJIGdldCB0aGF0LlxuXG5CdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBzcGVjaWZpYyBndWlkZWxpbmVzLiBMZXQgbWUgY2hlY2sgdGhlIHJ1bGVz4oCmIEFoYSEgVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSB3aXRoaW4gXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVyc+KApiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiIHNob3VsZCBiZSBmbGFnZ2VkIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIGFtIHByZXR0eSBjb25maWRlbnQgdGhhdCBgaGluaWMzYCAoSHVhd2VpJ3MgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpIGZhbGxzIHNxdWFyZWx5IGludG8gdGhhdCBjYXRlZ29yeS4gSXQgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgZHJpdmVyIHRoYXQgZGVwZW5kcyBvbiBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBTaW5jZSB0aGlzIHBhdGNoIGludm9sdmVzIGEgZHJpdmVyIHRoYXQgaXMgKmRlZmluaXRlbHkqIHRpZWQgdG8gYSBwaHlzaWNhbCBoYXJkd2FyZSBjYXJkLCBhbmQgaXMgbGlrZWx5IG5vdCB0byBydW4gdW5kZXIgUUVNVSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1MDksIk91dHB1dFRva2VucyI6MTA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MjE6MjQuODA2NTUzNDE0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaGluaWMzIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGFkYXB0ZXIgZHJpdmVyIChIdWF3ZWkgM3JkIGdlbiBOZXR3b3JrIEFkYXB0ZXIpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEFkZGl0aW9uYWxseSwgdGhlIGNoYW5nZXMgcHJpbWFyaWx5IGFkZCBldGh0b29sIHN0YXRpc3RpY3MgYW5kIGNvYWxlc2NlIHNldHRpbmdzLCB3aGljaCBpbnRlcmFjdCBkaXJlY3RseSB3aXRoIHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBoaW5pYzMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgYWRhcHRlciBkcml2ZXIgKEh1YXdlaSAzcmQgZ2VuIE5ldHdvcmsgQWRhcHRlcikuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gQWRkaXRpb25hbGx5LCB0aGUgY2hhbmdlcyBwcmltYXJpbHkgYWRkIGV0aHRvb2wgc3RhdGlzdGljcyBhbmQgY29hbGVzY2Ugc2V0dGluZ3MsIHdoaWNoIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlIHBoeXNpY2FsIGhhcmR3YXJlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDI6MjE6MjQuODA2NTg1NTI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhtwpc[1] Phase: Running StartedAt: 2026-08-17 02:21:35 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhtwpc[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-17 02:21:35 +0000 UTC FinishedAt: 2026-08-17 02:21:41 +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,}