From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KreUn-00036P-J3 for qemu-devel@nongnu.org; Sun, 19 Oct 2008 16:03:25 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KreUl-00034o-Sz for qemu-devel@nongnu.org; Sun, 19 Oct 2008 16:03:25 -0400 Received: from [199.232.76.173] (port=33321 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KreUl-00034b-PL for qemu-devel@nongnu.org; Sun, 19 Oct 2008 16:03:23 -0400 Received: from smtp3-g19.free.fr ([212.27.42.29]:55230) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KreUk-0002dt-Rr for qemu-devel@nongnu.org; Sun, 19 Oct 2008 16:03:23 -0400 Received: from smtp3-g19.free.fr (localhost.localdomain [127.0.0.1]) by smtp3-g19.free.fr (Postfix) with ESMTP id EE7C417B5F9 for ; Sun, 19 Oct 2008 22:03:21 +0200 (CEST) Received: from [192.168.0.32] (rob92-10-88-171-126-33.fbx.proxad.net [88.171.126.33]) by smtp3-g19.free.fr (Postfix) with ESMTP id 4EABA17B5F0 for ; Sun, 19 Oct 2008 22:03:21 +0200 (CEST) Message-ID: <48FB9239.1050000@reactos.org> Date: Sun, 19 Oct 2008 22:02:01 +0200 From: =?ISO-8859-1?Q?Herv=E9_Poussineau?= MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010303050500040002080102" Subject: [Qemu-devel] [PATCH] MIPS: Upgrade G364 emulation Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------010303050500040002080102 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable Hi, Attached patch greatly increases correctness of the G364 graphic card=20 emulation. Documentation I was able to find gives corrects offsets for registers. Patch also adds load/save capability and displays an error message each=20 time an invalid operation or an unimplemented feature is performed. Please apply Herv=E9 --------------010303050500040002080102 Content-Type: plain/text; name="g364.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="g364.diff" SW5kZXg6IGh3L2czNjRmYi5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaHcvZzM2NGZiLmMJKHJl dmlzaW9uIDU0OTkpDQorKysgaHcvZzM2NGZiLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDcg KzEsNyBAQA0KIC8qCiAgKiBRRU1VIEczNjQgZnJhbWVidWZmZXIgRW11bGF0b3IuCiAgKgot ICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSGVydsOpIFBvdXNzaW5lYXUKKyAqIENvcHly aWdodCAoYykgMjAwNy0yMDA4IEhlcnZlIFBvdXNzaW5lYXUKICAqCiAgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcwpAQCAtMTUsOCArMTUsOCBAQA0KICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICog YWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMw LCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sDQorICogTUEgMDIxMTAtMTMw MSBVU0EKICAqLwogCiAjaW5jbHVkZSAiaHcuaCIKQEAgLTI0LDgzICsyNCw5MyBAQA0KICNp bmNsdWRlICJwaXhlbF9vcHMuaCIKIAogLy8jZGVmaW5lIERFQlVHX0czNjQKLQorDQorI2lm ZGVmIERFQlVHX0czNjQNCisjZGVmaW5lIERQUklOVEYoZm10LCBhcmdzLi4uKSBcDQorZG8g eyBwcmludGYoImczNjQ6ICIgZm10ICwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKKyNlbHNlDQor I2RlZmluZSBEUFJJTlRGKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApDQorI2VuZGlm DQorI2RlZmluZSBCQURGKGZtdCwgYXJncy4uLikgXA0KK2RvIHsgZnByaW50ZihzdGRlcnIs ICJnMzY0IEVSUk9SOiAiIGZtdCAsICMjYXJncyk7fSB3aGlsZSAoMCkNCisNCiB0eXBlZGVm IHN0cnVjdCBHMzY0U3RhdGUgeworICAgIC8qIGhhcmR3YXJlICovDQogICAgIHRhcmdldF9w aHlzX2FkZHJfdCB2cmFtX2Jhc2U7Ci0gICAgdW5zaWduZWQgaW50IHZyYW1fc2l6ZTsKLSAg ICB1aW50OF90ICp2cmFtX2J1ZmZlcjsKLSAgICB1aW50MzJfdCBjdGxhOwotICAgIHVpbnQ4 X3QgcGFsZXR0ZVsyNTZdWzNdOworICAgIGludCB2cmFtX3NpemU7CisgICAgdWludDhfdCAq dnJhbV9idWZmZXI7DQorICAgIC8qIHJlZ2lzdGVycyAqLworICAgIHVpbnQ4X3QgY29sb3Jf cGFsZXR0ZVsyNTZdWzNdOw0KKyAgICB1aW50OF90IGN1cnNvcl9wYWxldHRlWzNdWzNdOw0K KyAgICB1aW50MTZfdCBjdXJzb3JbNTEyXTsNCisgICAgdWludDMyX3QgY3Vyc29yX3Bvc2l0 aW9uOw0KKyAgICB1aW50MzJfdCBjdGxhOw0KKyAgICB1aW50MzJfdCB0b3Bfb2Zfc2NyZWVu Ow0KKyAgICB1aW50MzJfdCBzY3Jfd2lkdGgsIHNjcl9oZWlnaHQ7IC8qIGluIHBpeGVscyAq LwogICAgIC8qIGRpc3BsYXkgcmVmcmVzaCBzdXBwb3J0ICovCiAgICAgRGlzcGxheVN0YXRl ICpkczsKLSAgICBRRU1VQ29uc29sZSAqY29uc29sZTsKLSAgICBpbnQgZ3JhcGhpY19tb2Rl OwotICAgIHVpbnQzMl90IHNjcl93aWR0aCwgc2NyX2hlaWdodDsgLyogaW4gcGl4ZWxzICov CisgICAgUUVNVUNvbnNvbGUgKmNvbnNvbGU7DQorICAgIGludCBpbnZhbGlkYXRlZDsNCisg ICAgaW50IGRlcHRoOwogfSBHMzY0U3RhdGU7CisNCisjZGVmaW5lIFJFR19JRCAgICAgICAw eDAwMDAwMA0KKyNkZWZpbmUgUkVHX0RJU1BMQVkgIDB4MDgwMTE4DQorI2RlZmluZSBSRUdf VkRJU1BMQVkgMHgwODAxNTANCisjZGVmaW5lIFJFR19DVExBICAgICAweDA4MDMwMA0KKyNk ZWZpbmUgUkVHX1RPUCAgICAgIDB4MDgwNDAwDQorI2RlZmluZSBSRUdfQ1VSU19QQUwgMHgw ODA1MDgNCisjZGVmaW5lIFJFR19DVVJTX1BPUyAweDA4MDYzOA0KKyNkZWZpbmUgUkVHX0NM Ul9QQUwgIDB4MDgwODAwDQorI2RlZmluZSBSRUdfQ1VSU19QQVQgMHgwODEwMDANCisjZGVm aW5lIFJFR19SRVNFVCAgICAweDE4MDAwMA0KKw0KKyNkZWZpbmUgQ1RMQV9GT1JDRV9CTEFO SyAweDAwMDAwNDAwDQorI2RlZmluZSBDVExBX05PX0NVUlNPUiAgIDB4MDA4MDAwMDANCiAK IC8qCiAgKiBncmFwaGljIG1vZGVzCi0gKi8KLSNkZWZpbmUgQlBQIDgKLSNkZWZpbmUgUElY RUxfV0lEVEggOAotI2luY2x1ZGUgImczNjRmYl90ZW1wbGF0ZS5oIgotI3VuZGVmIEJQUAot I3VuZGVmIFBJWEVMX1dJRFRICisgKi8NCisjZGVmaW5lIERFUFRIIDgNCisjaW5jbHVkZSAi ZzM2NGZiX3RlbXBsYXRlLmgiDQorDQorI2RlZmluZSBERVBUSCAxNQ0KKyNpbmNsdWRlICJn MzY0ZmJfdGVtcGxhdGUuaCINCisNCisjZGVmaW5lIERFUFRIIDE2DQorI2luY2x1ZGUgImcz NjRmYl90ZW1wbGF0ZS5oIg0KKw0KKyNkZWZpbmUgREVQVEggMzINCisjaW5jbHVkZSAiZzM2 NGZiX3RlbXBsYXRlLmgiDQogCi0jZGVmaW5lIEJQUCAxNQotI2RlZmluZSBQSVhFTF9XSURU SCAxNgotI2luY2x1ZGUgImczNjRmYl90ZW1wbGF0ZS5oIgotI3VuZGVmIEJQUAotI3VuZGVm IFBJWEVMX1dJRFRICi0KLSNkZWZpbmUgQlBQIDE2Ci0jZGVmaW5lIFBJWEVMX1dJRFRIIDE2 Ci0jaW5jbHVkZSAiZzM2NGZiX3RlbXBsYXRlLmgiCi0jdW5kZWYgQlBQCi0jdW5kZWYgUElY RUxfV0lEVEgKLQotI2RlZmluZSBCUFAgMzIKLSNkZWZpbmUgUElYRUxfV0lEVEggMzIKLSNp bmNsdWRlICJnMzY0ZmJfdGVtcGxhdGUuaCIKLSN1bmRlZiBCUFAKLSN1bmRlZiBQSVhFTF9X SURUSAotCi0jZGVmaW5lIFJFR19ESVNQTEFZWCAweDA5MTgKLSNkZWZpbmUgUkVHX0RJU1BM QVlZIDB4MDk0MAotCi0jZGVmaW5lIENUTEFfRk9SQ0VfQkxBTksgMHg0MDAKLQotc3RhdGlj IHZvaWQgZzM2NGZiX2RyYXdfZ3JhcGhpYyhHMzY0U3RhdGUgKnMsIGludCBmdWxsX3VwZGF0 ZSkKLXsKK3N0YXRpYyB2b2lkIGczNjRmYl9kcmF3X2dyYXBoaWMoRzM2NFN0YXRlICpzKQor ew0KICAgICBzd2l0Y2ggKHMtPmRzLT5kZXB0aCkgewogICAgICAgICBjYXNlIDg6Ci0gICAg ICAgICAgICBnMzY0ZmJfZHJhd19ncmFwaGljOChzLCBmdWxsX3VwZGF0ZSk7CisgICAgICAg ICAgICBnMzY0ZmJfZHJhd19ncmFwaGljXzgocyk7CiAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgY2FzZSAxNToKLSAgICAgICAgICAgIGczNjRmYl9kcmF3X2dyYXBoaWMxNShzLCBm dWxsX3VwZGF0ZSk7CisgICAgICAgICAgICBnMzY0ZmJfZHJhd19ncmFwaGljXzE1KHMpOwog ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgICBnMzY0 ZmJfZHJhd19ncmFwaGljMTYocywgZnVsbF91cGRhdGUpOworICAgICAgICAgICAgZzM2NGZi X2RyYXdfZ3JhcGhpY18xNihzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl IDMyOgotICAgICAgICAgICAgZzM2NGZiX2RyYXdfZ3JhcGhpYzMyKHMsIGZ1bGxfdXBkYXRl KTsKKyAgICAgICAgICAgIGczNjRmYl9kcmF3X2dyYXBoaWNfMzIocyk7CiAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiZzM2NGZi OiB1bmtub3duIGRlcHRoICVkXG4iLCBzLT5kcy0+ZGVwdGgpOworICAgICAgICAgICAgQkFE RigidW5rbm93biBkZXB0aCAlZFxuIiwgcy0+ZHMtPmRlcHRoKTsKICAgICAgICAgICAgIHJl dHVybjsKLSAgICB9CisgICAgfQ0KIAogICAgIGRweV91cGRhdGUocy0+ZHMsIDAsIDAsIHMt PnNjcl93aWR0aCwgcy0+c2NyX2hlaWdodCk7CiB9CiAKLXN0YXRpYyB2b2lkIGczNjRmYl9k cmF3X2JsYW5rKEczNjRTdGF0ZSAqcywgaW50IGZ1bGxfdXBkYXRlKQorc3RhdGljIHZvaWQg ZzM2NGZiX2RyYXdfYmxhbmsoRzM2NFN0YXRlICpzKQogewogICAgIGludCBpLCB3OwogICAg IHVpbnQ4X3QgKmQ7CiAKLSAgICBpZiAoIWZ1bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47 Ci0KICAgICB3ID0gcy0+c2NyX3dpZHRoICogKChzLT5kcy0+ZGVwdGggKyA3KSA+PiAzKTsK ICAgICBkID0gcy0+ZHMtPmRhdGE7CiAgICAgZm9yKGkgPSAwOyBpIDwgcy0+c2NyX2hlaWdo dDsgaSsrKSB7CkBAIC0xMTEsNTYgKzEyMSw0NiBAQA0KICAgICBkcHlfdXBkYXRlKHMtPmRz LCAwLCAwLCBzLT5zY3Jfd2lkdGgsIHMtPnNjcl9oZWlnaHQpOwogfQogCi0jZGVmaW5lIEdN T0RFX0dSQVBIIDAKLSNkZWZpbmUgR01PREVfQkxBTksgMQotCiBzdGF0aWMgdm9pZCBnMzY0 ZmJfdXBkYXRlX2Rpc3BsYXkodm9pZCAqb3BhcXVlKQogewogICAgIEczNjRTdGF0ZSAqcyA9 IG9wYXF1ZTsKLSAgICBpbnQgZnVsbF91cGRhdGUsIGdyYXBoaWNfbW9kZTsKIAogICAgIGlm IChzLT5zY3Jfd2lkdGggPT0gMCB8fCBzLT5zY3JfaGVpZ2h0ID09IDApCiAgICAgICAgIHJl dHVybjsKIAotICAgIGlmIChzLT5jdGxhICYgQ1RMQV9GT1JDRV9CTEFOSykKLSAgICAgICAg Z3JhcGhpY19tb2RlID0gR01PREVfQkxBTks7Ci0gICAgZWxzZQotICAgICAgICBncmFwaGlj X21vZGUgPSBHTU9ERV9HUkFQSDsKLSAgICBmdWxsX3VwZGF0ZSA9IDA7Ci0gICAgaWYgKGdy YXBoaWNfbW9kZSAhPSBzLT5ncmFwaGljX21vZGUpIHsKLSAgICAgICAgcy0+Z3JhcGhpY19t b2RlID0gZ3JhcGhpY19tb2RlOwotICAgICAgICBmdWxsX3VwZGF0ZSA9IDE7Ci0gICAgfQog ICAgIGlmIChzLT5zY3Jfd2lkdGggIT0gcy0+ZHMtPndpZHRoIHx8IHMtPnNjcl9oZWlnaHQg IT0gcy0+ZHMtPmhlaWdodCkgewogICAgICAgICBxZW11X2NvbnNvbGVfcmVzaXplKHMtPmNv bnNvbGUsIHMtPnNjcl93aWR0aCwgcy0+c2NyX2hlaWdodCk7Ci0gICAgICAgIGZ1bGxfdXBk YXRlID0gMTsKLSAgICB9Ci0gICAgc3dpdGNoKGdyYXBoaWNfbW9kZSkgewotICAgICAgICBj YXNlIEdNT0RFX0dSQVBIOgotICAgICAgICAgICAgZzM2NGZiX2RyYXdfZ3JhcGhpYyhzLCBm dWxsX3VwZGF0ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHTU9ERV9C TEFOSzoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGczNjRmYl9kcmF3X2JsYW5r KHMsIGZ1bGxfdXBkYXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB9IGVs c2UgaWYgKCFzLT5pbnZhbGlkYXRlZCkNCisgICAgICAgIHJldHVybjsNCisNCisgICAgaWYg KHMtPmN0bGEgJiBDVExBX0ZPUkNFX0JMQU5LKSB7DQorICAgICAgICBnMzY0ZmJfZHJhd19i bGFuayhzKTsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGczNjRmYl9kcmF3X2dyYXBoaWMo cyk7DQorICAgIH0NCisgICAgDQorICAgIHMtPmludmFsaWRhdGVkID0gMDsKIH0KIAotLyog Zm9yY2UgYSBmdWxsIGRpc3BsYXkgcmVmcmVzaCAqLwotc3RhdGljIHZvaWQgZzM2NGZiX2lu dmFsaWRhdGVfZGlzcGxheSh2b2lkICpvcGFxdWUpCi17Ci0gICAgRzM2NFN0YXRlICpzID0g b3BhcXVlOwotICAgIHMtPmdyYXBoaWNfbW9kZSA9IC0xOyAvKiBmb3JjZSBmdWxsIHVwZGF0 ZSAqLworc3RhdGljIHZvaWQgaW5saW5lIGczNjRmYl9pbnZhbGlkYXRlX2Rpc3BsYXkodm9p ZCAqb3BhcXVlKQorew0KKyAgICBHMzY0U3RhdGUgKnMgPSBvcGFxdWU7DQorICAgIHMtPmlu dmFsaWRhdGVkID0gMTsKIH0KIAogc3RhdGljIHZvaWQgZzM2NGZiX3Jlc2V0KHZvaWQgKm9w YXF1ZSkKIHsKICAgICBHMzY0U3RhdGUgKnMgPSBvcGFxdWU7CiAKLSAgICBtZW1zZXQocy0+ cGFsZXR0ZSwgMCwgc2l6ZW9mKHMtPnBhbGV0dGUpKTsKKyAgICBtZW1zZXQocy0+Y29sb3Jf cGFsZXR0ZSwgMCwgc2l6ZW9mKHMtPmNvbG9yX3BhbGV0dGUpKTsNCisgICAgbWVtc2V0KHMt PmN1cnNvcl9wYWxldHRlLCAwLCBzaXplb2Yocy0+Y3Vyc29yX3BhbGV0dGUpKTsNCisgICAg bWVtc2V0KHMtPmN1cnNvciwgMCwgc2l6ZW9mKHMtPmN1cnNvcikpOw0KKyAgICBzLT5jdXJz b3JfcG9zaXRpb24gPSAwOw0KKyAgICBzLT5jdGxhID0gMDsNCisgICAgcy0+dG9wX29mX3Nj cmVlbiA9IDA7CiAgICAgcy0+c2NyX3dpZHRoID0gcy0+c2NyX2hlaWdodCA9IDA7Ci0gICAg bWVtc2V0KHMtPnZyYW1fYnVmZmVyLCAwLCBzLT52cmFtX3NpemUpOwotICAgIHMtPmdyYXBo aWNfbW9kZSA9IC0xOyAvKiBmb3JjZSBmdWxsIHVwZGF0ZSAqLworICAgIG1lbXNldChzLT52 cmFtX2J1ZmZlciwgMCwgcy0+dnJhbV9zaXplKTsNCisgICAgZzM2NGZiX2ludmFsaWRhdGVf ZGlzcGxheShvcGFxdWUpOwogfQogCiBzdGF0aWMgdm9pZCBnMzY0ZmJfc2NyZWVuX2R1bXAo dm9pZCAqb3BhcXVlLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKQEAgLTE4MSwxMDkgKzE4MSwx NjUgQEANCiAgICAgZm9yKHkgPSAwOyB5IDwgcy0+c2NyX2hlaWdodDsgeSsrKQogICAgICAg ICBmb3IoeCA9IDA7IHggPCBzLT5zY3Jfd2lkdGg7IHgrKywgZGF0YV9idWZmZXIrKykgewog ICAgICAgICAgICAgaW5kZXggPSAqZGF0YV9idWZmZXI7Ci0gICAgICAgICAgICBmcHV0Yyhz LT5wYWxldHRlW2luZGV4XVswXSwgZik7Ci0gICAgICAgICAgICBmcHV0YyhzLT5wYWxldHRl W2luZGV4XVsxXSwgZik7Ci0gICAgICAgICAgICBmcHV0YyhzLT5wYWxldHRlW2luZGV4XVsy XSwgZik7CisgICAgICAgICAgICBmcHV0YyhzLT5jb2xvcl9wYWxldHRlW2luZGV4XVswXSwg Zik7CisgICAgICAgICAgICBmcHV0YyhzLT5jb2xvcl9wYWxldHRlW2luZGV4XVsxXSwgZik7 CisgICAgICAgICAgICBmcHV0YyhzLT5jb2xvcl9wYWxldHRlW2luZGV4XVsyXSwgZik7CiAg ICAgICAgIH0KICAgICBmY2xvc2UoZik7CiB9Ci0KKw0KIC8qIGNhbGxlZCBmb3IgYWNjZXNz ZXMgdG8gaW8gcG9ydHMgKi8KLXN0YXRpYyB1aW50MzJfdCBnMzY0ZmJfY3RybF9yZWFkYih2 b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQoteworc3RhdGljIHVpbnQz Ml90IGczNjRmYl9jdHJsX3JlYWRsKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90 IGFkZHIpCit7DQogICAgIC8vRzM2NFN0YXRlICpzID0gb3BhcXVlOwotICAgIHVpbnQzMl90 IHZhbDsKLQotICAgIGFkZHIgJj0gMHhmZmZmOwotCi0gICAgc3dpdGNoIChhZGRyKSB7Ci0g ICAgICAgIGRlZmF1bHQ6Ci0jaWZkZWYgREVCVUdfRzM2NAotICAgICAgICAgICAgcHJpbnRm KCJnMzY0ZmIvY3RybDogaW52YWxpZCByZWFkIGF0IFsiIFRBUkdFVF9GTVRfbHggIl1cbiIs IGFkZHIpOwotI2VuZGlmCi0gICAgICAgICAgICB2YWwgPSAwOwotICAgICAgICAgICAgYnJl YWs7CisgICAgdWludDMyX3QgdmFsOw0KKw0KKyAgICBhZGRyICY9IDB4ZmZmZmZmOw0KKw0K KyAgICBzd2l0Y2ggKGFkZHIpIHsNCisgICAgICAgIGNhc2UgUkVHX0lEOg0KKyAgICAgICAg ICAgIHZhbCA9IDE7IC8qIG11c3Qgbm90IGJlIDAgKi8NCisgICAgICAgICAgICBicmVhazsN CisgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICB7DQorICAgICAgICAgICAgQkFERigiaW52 YWxpZCByZWFkIGF0IFsiIFRBUkdFVF9GTVRfbHggIl1cbiIsIGFkZHIpOw0KKyAgICAgICAg ICAgIHZhbCA9IDA7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQogICAgIH0K IAotI2lmZGVmIERFQlVHX0czNjQKLSAgICBwcmludGYoImczNjRmYi9jdHJsOiByZWFkIDB4 JTAyeCBhdCBbIiBUQVJHRVRfRk1UX2x4ICJdXG4iLCB2YWwsIGFkZHIpOwotI2VuZGlmCisg ICAgRFBSSU5URigicmVhZCAweCUwOHggYXQgWyIgVEFSR0VUX0ZNVF9seCAiXVxuIiwgdmFs LCBhZGRyKTsKIAogICAgIHJldHVybiB2YWw7CiB9CiAKIHN0YXRpYyB1aW50MzJfdCBnMzY0 ZmJfY3RybF9yZWFkdyh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQog ewotICAgIHVpbnQzMl90IHY7Ci0gICAgdiA9IGczNjRmYl9jdHJsX3JlYWRiKG9wYXF1ZSwg YWRkcik7Ci0gICAgdiB8PSBnMzY0ZmJfY3RybF9yZWFkYihvcGFxdWUsIGFkZHIgKyAxKSA8 PCA4OwotICAgIHJldHVybiB2OworICAgIHVpbnQzMl90IHYgPSBnMzY0ZmJfY3RybF9yZWFk bChvcGFxdWUsIGFkZHIgJiB+MHgzKTsNCisgICAgaWYgKGFkZHIgJiAweDIpDQorICAgICAg ICByZXR1cm4gdiA+PiAxNjsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIHYgJiAweGZm ZmY7CiB9CiAKLXN0YXRpYyB1aW50MzJfdCBnMzY0ZmJfY3RybF9yZWFkbCh2b2lkICpvcGFx dWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQorc3RhdGljIHVpbnQzMl90IGczNjRmYl9j dHJsX3JlYWRiKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCiB7Ci0g ICAgdWludDMyX3QgdjsKLSAgICB2ID0gZzM2NGZiX2N0cmxfcmVhZGIob3BhcXVlLCBhZGRy KTsKLSAgICB2IHw9IGczNjRmYl9jdHJsX3JlYWRiKG9wYXF1ZSwgYWRkciArIDEpIDw8IDg7 Ci0gICAgdiB8PSBnMzY0ZmJfY3RybF9yZWFkYihvcGFxdWUsIGFkZHIgKyAyKSA8PCAxNjsK LSAgICB2IHw9IGczNjRmYl9jdHJsX3JlYWRiKG9wYXF1ZSwgYWRkciArIDMpIDw8IDI0Owot ICAgIHJldHVybiB2OworICAgIHVpbnQzMl90IHYgPSBnMzY0ZmJfY3RybF9yZWFkbChvcGFx dWUsIGFkZHIgJiB+MHgzKTsNCisgICAgcmV0dXJuICh2ID4+ICg4ICogKGFkZHIgJiAweDMp KSkgJiAweGZmOwogfQorDQorc3RhdGljIHZvaWQgZzM2NGZiX3VwZGF0ZV9kZXB0aChHMzY0 U3RhdGUgKnMpDQorew0KKyAgICBjb25zdCBzdGF0aWMgaW50IGRlcHRoc1s4XSA9IHsgMSwg MiwgNCwgOCwgMTUsIDE2LCAwIH07DQorICAgIHMtPmRlcHRoID0gZGVwdGhzWyhzLT5jdGxh ICYgMHgwMDcwMDAwMCkgPj4gMjBdOw0KK30NCiAKLXN0YXRpYyB2b2lkIGczNjRmYl9jdHJs X3dyaXRlYih2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJf dCB2YWwpCi17Ci0gICAgRzM2NFN0YXRlICpzID0gb3BhcXVlOwotCi0gICAgYWRkciAmPSAw eGZmZmY7Ci0KLSNpZmRlZiBERUJVR19HMzY0Ci0gICAgcHJpbnRmKCJnMzY0ZmIvY3RybDog d3JpdGUgMHglMDJ4IGF0IFsiIFRBUkdFVF9GTVRfbHggIl1cbiIsIHZhbCwgYWRkcik7Ci0j ZW5kaWYKLQotICAgIGlmIChhZGRyIDwgMHgwODAwKSB7Ci0gICAgICAgIC8qIGNvbG9yIHBh bGV0dGUgKi8KLSAgICAgICAgaW50IGlkeCA9IGFkZHIgPj4gMzsKLSAgICAgICAgaW50IGMg PSBhZGRyICYgNzsKLSAgICAgICAgaWYgKGMgPCAzKQotICAgICAgICAgICAgcy0+cGFsZXR0 ZVtpZHhdW2NdID0gKHVpbnQ4X3QpdmFsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRj aCAoYWRkcikgewotICAgICAgICAgICAgY2FzZSBSRUdfRElTUExBWVg6Ci0gICAgICAgICAg ICAgICAgcy0+c2NyX3dpZHRoID0gKHMtPnNjcl93aWR0aCAmIDB4ZmZmZmZjMDMpIHwgKHZh bCA8PCAyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkVH X0RJU1BMQVlYICsgMToKLSAgICAgICAgICAgICAgICBzLT5zY3Jfd2lkdGggPSAocy0+c2Ny X3dpZHRoICYgMHhmZmZjMDNmZikgfCAodmFsIDw8IDEwKTsKLSAgICAgICAgICAgICAgICBi cmVhazsKLSAgICAgICAgICAgIGNhc2UgUkVHX0RJU1BMQVlZOgotICAgICAgICAgICAgICAg IHMtPnNjcl9oZWlnaHQgPSAocy0+c2NyX2hlaWdodCAmIDB4ZmZmZmZmODApIHwgKHZhbCA+ PiAxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUkVHX0RJ U1BMQVlZICsgMToKLSAgICAgICAgICAgICAgICBzLT5zY3JfaGVpZ2h0ID0gKHMtPnNjcl9o ZWlnaHQgJiAweGZmZmY4MDFmKSB8ICh2YWwgPDwgNyk7Ci0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotI2lmZGVmIERFQlVHX0czNjQKLSAgICAgICAg ICAgICAgICBwcmludGYoImczNjRmYi9jdHJsOiBpbnZhbGlkIHdyaXRlIG9mIDB4JTAyeCBh dCBbIiBUQVJHRVRfRk1UX2x4ICJdXG4iLCB2YWwsIGFkZHIpOwotI2VuZGlmCi0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KK3N0YXRpYyB2b2lkIGczNjRmYl9jdHJsX3dy aXRlbCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2 YWwpCit7DQorICAgIEczNjRTdGF0ZSAqcyA9IG9wYXF1ZTsNCisgICAgDQorICAgIGFkZHIg Jj0gMHhmZmZmZmY7DQorDQorICAgIERQUklOVEYoIndyaXRlIDB4JTA4eCBhdCBbIiBUQVJH RVRfRk1UX2x4ICJdXG4iLCB2YWwsIGFkZHIpOw0KKw0KKyAgICBpZiAoYWRkciA+PSBSRUdf Q0xSX1BBTCAmJiBhZGRyIDwgUkVHX0NMUl9QQUwgKyAweDgwMCkgew0KKyAgICAgICAgLyog Y29sb3IgcGFsZXR0ZSAqLw0KKyAgICAgICAgaW50IGlkeCA9IChhZGRyIC0gUkVHX0NMUl9Q QUwpID4+IDM7DQorICAgICAgICBzLT5jb2xvcl9wYWxldHRlW2lkeF1bMF0gPSAodmFsID4+ IDE2KSAmIDB4ZmY7DQorICAgICAgICBzLT5jb2xvcl9wYWxldHRlW2lkeF1bMV0gPSAodmFs ID4+IDgpICYgMHhmZjsNCisgICAgICAgIHMtPmNvbG9yX3BhbGV0dGVbaWR4XVsyXSA9IHZh bCAmIDB4ZmY7DQorICAgICAgICBnMzY0ZmJfaW52YWxpZGF0ZV9kaXNwbGF5KHMpOw0KKyAg ICB9IGVsc2UgaWYgKGFkZHIgPj0gUkVHX0NVUlNfUEFUICYmIGFkZHIgPCBSRUdfQ1VSU19Q QVQgKyAweDEwMDApIHsNCisgICAgICAgIC8qIGN1cnNvciBwYXR0ZXJuICovDQorICAgICAg ICBpbnQgaWR4ID0gKGFkZHIgLSBSRUdfQ1VSU19QQVQpID4+IDM7DQorICAgICAgICBzLT5j dXJzb3JbaWR4XSA9IHZhbDsNCisgICAgICAgIGczNjRmYl9pbnZhbGlkYXRlX2Rpc3BsYXko cyk7DQorICAgIH0gZWxzZSBpZiAoYWRkciA+PSBSRUdfQ1VSU19QQUwgJiYgYWRkciA8IFJF R19DVVJTX1BBTCArIDB4MTgpIHsNCisgICAgICAgIC8qIGN1cnNvciBwYWxldHRlICovIA0K KyAgICAgICAgaW50IGlkeCA9IChhZGRyIC0gUkVHX0NVUlNfUEFMKSA+PiAzOw0KKyAgICAg ICAgcy0+Y3Vyc29yX3BhbGV0dGVbaWR4XVswXSA9ICh2YWwgPj4gMTYpICYgMHhmZjsNCisg ICAgICAgIHMtPmN1cnNvcl9wYWxldHRlW2lkeF1bMV0gPSAodmFsID4+IDgpICYgMHhmZjsN CisgICAgICAgIHMtPmN1cnNvcl9wYWxldHRlW2lkeF1bMl0gPSB2YWwgJiAweGZmOw0KKyAg ICAgICAgZzM2NGZiX2ludmFsaWRhdGVfZGlzcGxheShzKTsNCisgICAgfSBlbHNlIHsNCisg ICAgICAgIHN3aXRjaCAoYWRkcikgew0KKyAgICAgICAgICAgIGNhc2UgUkVHX0lEOiAvKiBD YXJkIGlkZW50aWZpZXI7IHJlYWQtb25seSAqLw0KKyAgICAgICAgICAgIGNhc2UgMHg4MDEw ODogLyogTGluZSB0aW1pbmc6IGhhbGYgc3luYyAqLw0KKyAgICAgICAgICAgIGNhc2UgMHg4 MDExMDogLyogTGluZSB0aW1pbmc6IGJhY2sgcG9yY2ggKi8NCisgICAgICAgICAgICBjYXNl IDB4ODAxMjA6IC8qIExpbmUgdGltaW5nOiBzaG9ydCBkaXNwbGF5ICovDQorICAgICAgICAg ICAgY2FzZSAweDgwMTI4OiAvKiBGcmFtZSB0aW1pbmc6IGJyb2FkIHB1bHNlICovDQorICAg ICAgICAgICAgY2FzZSAweDgwMTMwOiAvKiBGcmFtZSB0aW1pbmc6IHYgc3luYyAqLw0KKyAg ICAgICAgICAgIGNhc2UgMHg4MDEzODogLyogRnJhbWUgdGltaW5nOiB2IHByZWVxdWFsaXNl ICovDQorICAgICAgICAgICAgY2FzZSAweDgwMTQwOiAvKiBGcmFtZSB0aW1pbmc6IHYgcG9z dGVxdWFsaXNlICovDQorICAgICAgICAgICAgY2FzZSAweDgwMTQ4OiAvKiBGcmFtZSB0aW1p bmc6IHYgYmxhbmsgKi8NCisgICAgICAgICAgICBjYXNlIDB4ODAxNTg6IC8qIExpbmUgdGlt aW5nOiBsaW5lIHRpbWUgKi8NCisgICAgICAgICAgICBjYXNlIDB4ODAxNjA6IC8qIEZyYW1l IHN0b3JlOiBsaW5lIHN0YXJ0ICovDQorICAgICAgICAgICAgY2FzZSAweDgwMTY4OiAvKiB2 cmFtIGN5Y2xlOiBtZW0gaW5pdCAqLw0KKyAgICAgICAgICAgIGNhc2UgMHg4MDE3MDogLyog dnJhbSBjeWNsZTogdHJhbnNmZXIgZGVsYXkgKi8NCisgICAgICAgICAgICBjYXNlIDB4ODAy MDA6IC8qIHZyYW0gY3ljbGU6IG1hc2sgcmVnaXN0ZXIgKi8NCisgICAgICAgICAgICAgICAg LyogaWdub3JlICovDQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNh c2UgUkVHX1RPUDoNCisgICAgICAgICAgICAgICAgcy0+dG9wX29mX3NjcmVlbiA9IHZhbDsN CisgICAgICAgICAgICAgICAgZzM2NGZiX2ludmFsaWRhdGVfZGlzcGxheShzKTsNCisgICAg ICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBSRUdfRElTUExBWToNCisg ICAgICAgICAgICAgICAgcy0+c2NyX3dpZHRoID0gdmFsICogNDsNCisgICAgICAgICAgICAg ICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBSRUdfVkRJU1BMQVk6DQorICAgICAgICAg ICAgICAgIHMtPnNjcl9oZWlnaHQgPSB2YWwgLyAyOw0KKyAgICAgICAgICAgICAgICBicmVh azsNCisgICAgICAgICAgICBjYXNlIFJFR19DVExBOg0KKyAgICAgICAgICAgICAgICBzLT5j dGxhID0gdmFsOw0KKyAgICAgICAgICAgICAgICBnMzY0ZmJfdXBkYXRlX2RlcHRoKHMpOw0K KyAgICAgICAgICAgICAgICBnMzY0ZmJfaW52YWxpZGF0ZV9kaXNwbGF5KHMpOw0KKyAgICAg ICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBjYXNlIFJFR19DVVJTX1BPUzoNCisg ICAgICAgICAgICAgICAgcy0+Y3Vyc29yX3Bvc2l0aW9uID0gdmFsOw0KKyAgICAgICAgICAg ICAgICBnMzY0ZmJfaW52YWxpZGF0ZV9kaXNwbGF5KHMpOw0KKyAgICAgICAgICAgICAgICBi cmVhazsNCisgICAgICAgICAgICBjYXNlIFJFR19SRVNFVDoNCisgICAgICAgICAgICAgICAg ZzM2NGZiX3Jlc2V0KHMpOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAg ICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgICBCQURGKCJpbnZhbGlkIHdyaXRlIG9mIDB4 JTA4eCBhdCBbIiBUQVJHRVRfRk1UX2x4ICJdXG4iLCB2YWwsIGFkZHIpOw0KKyAgICAgICAg ICAgICAgICBicmVhazsNCisgICAgICAgIH0NCiAgICAgfQotICAgIHMtPmdyYXBoaWNfbW9k ZSA9IC0xOyAvKiBmb3JjZSBmdWxsIHVwZGF0ZSAqLwogfQorDQorc3RhdGljIHZvaWQgZzM2 NGZiX2N0cmxfd3JpdGV3KHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIs IHVpbnQzMl90IHZhbCkNCit7DQorICAgIHVpbnQzMl90IG9sZF92YWwgPSBnMzY0ZmJfY3Ry bF9yZWFkbChvcGFxdWUsIGFkZHIgJiB+MHgzKTsNCisNCisgICAgaWYgKGFkZHIgJiAweDIp DQorICAgICAgICB2YWwgPSAodmFsIDw8IDE2KSB8IChvbGRfdmFsICYgMHgwMDAwZmZmZik7 DQorICAgIGVsc2UNCisgICAgICAgIHZhbCA9IHZhbCB8IChvbGRfdmFsICYgMHhmZmZmMDAw MCk7DQorICAgIGczNjRmYl9jdHJsX3dyaXRlbChvcGFxdWUsIGFkZHIgJiB+MHgzLCB2YWwp Ow0KK30NCisNCitzdGF0aWMgdm9pZCBnMzY0ZmJfY3RybF93cml0ZWIodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsKQ0KK3sNCisgICAgdWlu dDMyX3Qgb2xkX3ZhbCA9IGczNjRmYl9jdHJsX3JlYWRsKG9wYXF1ZSwgYWRkciAmIH4weDMp Ow0KKw0KKyAgICBzd2l0Y2ggKGFkZHIgJiAzKSB7DQorICAgIGNhc2UgMDoNCisgICAgICAg IHZhbCA9IHZhbCB8IChvbGRfdmFsICYgMHhmZmZmZmYwMCk7DQorICAgICAgICBicmVhazsN CisgICAgY2FzZSAxOg0KKyAgICAgICAgdmFsID0gKHZhbCA8PCA4KSB8IChvbGRfdmFsICYg MHhmZmZmMDBmZik7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSAyOg0KKyAgICAgICAg dmFsID0gKHZhbCA8PCAxNikgfCAob2xkX3ZhbCAmIDB4ZmYwMGZmZmYpOw0KKyAgICAgICAg YnJlYWs7DQorICAgIGNhc2UgMzoNCisgICAgICAgIHZhbCA9ICh2YWwgPDwgMjQpIHwgKG9s ZF92YWwgJiAweDAwZmZmZmZmKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIGcz NjRmYl9jdHJsX3dyaXRlbChvcGFxdWUsIGFkZHIgJiB+MHgzLCB2YWwpOw0KK30NCiAKLXN0 YXRpYyB2b2lkIGczNjRmYl9jdHJsX3dyaXRldyh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlz X2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCi17Ci0gICAgZzM2NGZiX2N0cmxfd3JpdGVi KG9wYXF1ZSwgYWRkciwgdmFsICYgMHhmZik7Ci0gICAgZzM2NGZiX2N0cmxfd3JpdGViKG9w YXF1ZSwgYWRkciArIDEsICh2YWwgPj4gOCkgJiAweGZmKTsKLX0KLQotc3RhdGljIHZvaWQg ZzM2NGZiX2N0cmxfd3JpdGVsKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFk ZHIsIHVpbnQzMl90IHZhbCkKLXsKLSAgICBnMzY0ZmJfY3RybF93cml0ZWIob3BhcXVlLCBh ZGRyLCB2YWwgJiAweGZmKTsKLSAgICBnMzY0ZmJfY3RybF93cml0ZWIob3BhcXVlLCBhZGRy ICsgMSwgKHZhbCA+PiA4KSAmIDB4ZmYpOwotICAgIGczNjRmYl9jdHJsX3dyaXRlYihvcGFx dWUsIGFkZHIgKyAyLCAodmFsID4+IDE2KSAmIDB4ZmYpOwotICAgIGczNjRmYl9jdHJsX3dy aXRlYihvcGFxdWUsIGFkZHIgKyAzLCAodmFsID4+IDI0KSAmIDB4ZmYpOwotfQotCiBzdGF0 aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKmczNjRmYl9jdHJsX3JlYWRbM10gPSB7CiAgICAgZzM2 NGZiX2N0cmxfcmVhZGIsCiAgICAgZzM2NGZiX2N0cmxfcmVhZHcsCkBAIC0zMjgsNyArMzg0 LDggQEANCiAgICAgRzM2NFN0YXRlICpzID0gb3BhcXVlOwogICAgIHRhcmdldF9waHlzX2Fk ZHJfdCByZWxhdGl2ZV9hZGRyID0gYWRkciAtIHMtPnZyYW1fYmFzZTsKIAotICAgIHMtPnZy YW1fYnVmZmVyW3JlbGF0aXZlX2FkZHJdID0gdmFsOworICAgIHMtPnZyYW1fYnVmZmVyW3Jl bGF0aXZlX2FkZHJdID0gdmFsOw0KKyAgICBnMzY0ZmJfaW52YWxpZGF0ZV9kaXNwbGF5KHMp OwogfQogCiBzdGF0aWMgdm9pZCBnMzY0ZmJfbWVtX3dyaXRldyh2b2lkICpvcGFxdWUsIHRh cmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCkBAIC0zNTYsMTQgKzQxMyw2 NSBAQA0KICAgICBnMzY0ZmJfbWVtX3dyaXRldywKICAgICBnMzY0ZmJfbWVtX3dyaXRlbCwK IH07CisNCitzdGF0aWMgaW50IGczNjRmYl9sb2FkKFFFTVVGaWxlICpmLCB2b2lkICpvcGFx dWUsIGludCB2ZXJzaW9uX2lkKQ0KK3sNCisgICAgRzM2NFN0YXRlICpzID0gb3BhcXVlOw0K KyAgICB1bnNpZ25lZCBpbnQgaSwgdnJhbV9zaXplOw0KKw0KKyAgICBpZiAodmVyc2lvbl9p ZCAhPSAxKQ0KKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQorDQorICAgIHMtPnZyYW1fYmFz ZSA9IHFlbXVfZ2V0X2JldGwoZik7DQorICAgIHZyYW1fc2l6ZSA9IHFlbXVfZ2V0X2JlMzIo Zik7DQorICAgIGlmICh2cmFtX3NpemUgIT0gcy0+dnJhbV9zaXplKQ0KKyAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQorICAgIHFlbXVfZ2V0X2J1ZmZlcihmLCBzLT52cmFtX2J1ZmZlciwg cy0+dnJhbV9zaXplKTsNCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQ0KKyAgICAg ICAgcWVtdV9nZXRfYnVmZmVyKGYsIHMtPmNvbG9yX3BhbGV0dGVbaV0sIDMpOw0KKyAgICBm b3IgKGkgPSAwOyBpIDwgMzsgaSsrKQ0KKyAgICAgICAgcWVtdV9nZXRfYnVmZmVyKGYsIHMt PmN1cnNvcl9wYWxldHRlW2ldLCAzKTsNCisgICAgcWVtdV9nZXRfYnVmZmVyKGYsICh1aW50 OF90ICopcy0+Y3Vyc29yLCBzaXplb2Yocy0+Y3Vyc29yKSk7DQorICAgIHMtPmN1cnNvcl9w b3NpdGlvbiA9IHFlbXVfZ2V0X2JlMzIoZik7DQorICAgIHMtPmN0bGEgPSBxZW11X2dldF9i ZTMyKGYpOw0KKyAgICBzLT50b3Bfb2Zfc2NyZWVuID0gcWVtdV9nZXRfYmUzMihmKTsNCisg ICAgcy0+c2NyX3dpZHRoID0gcWVtdV9nZXRfYmUzMihmKTsNCisgICAgcy0+c2NyX2hlaWdo dCA9IHFlbXVfZ2V0X2JlMzIoZik7DQorICAgIA0KKyAgICAvKiBmb3JjZSByZWZyZXNoICov DQorICAgIGczNjRmYl91cGRhdGVfZGVwdGgocyk7DQorICAgIGczNjRmYl9pbnZhbGlkYXRl X2Rpc3BsYXkocyk7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBn MzY0ZmJfc2F2ZShRRU1VRmlsZSAqZiwgdm9pZCAqb3BhcXVlKQ0KK3sNCisgICAgRzM2NFN0 YXRlICpzID0gb3BhcXVlOw0KKyAgICBpbnQgaTsNCisNCisgICAgcWVtdV9wdXRfYmV0bChm LCBzLT52cmFtX2Jhc2UpOw0KKyAgICBxZW11X3B1dF9iZTMyKGYsIHMtPnZyYW1fc2l6ZSk7 DQorICAgIHFlbXVfcHV0X2J1ZmZlcihmLCBzLT52cmFtX2J1ZmZlciwgcy0+dnJhbV9zaXpl KTsNCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQ0KKyAgICAgICAgcWVtdV9wdXRf YnVmZmVyKGYsIHMtPmNvbG9yX3BhbGV0dGVbaV0sIDMpOw0KKyAgICBmb3IgKGkgPSAwOyBp IDwgMzsgaSsrKQ0KKyAgICAgICAgcWVtdV9wdXRfYnVmZmVyKGYsIHMtPmN1cnNvcl9wYWxl dHRlW2ldLCAzKTsNCisgICAgcWVtdV9wdXRfYnVmZmVyKGYsICh1aW50OF90ICopcy0+Y3Vy c29yLCBzaXplb2Yocy0+Y3Vyc29yKSk7DQorICAgIHFlbXVfcHV0X2JlMzIoZiwgcy0+Y3Vy c29yX3Bvc2l0aW9uKTsNCisgICAgcWVtdV9wdXRfYmUzMihmLCBzLT5jdGxhKTsNCisgICAg cWVtdV9wdXRfYmUzMihmLCBzLT50b3Bfb2Zfc2NyZWVuKTsNCisgICAgcWVtdV9wdXRfYmUz MihmLCBzLT5zY3Jfd2lkdGgpOw0KKyAgICBxZW11X3B1dF9iZTMyKGYsIHMtPnNjcl9oZWln aHQpOw0KK30NCiAKIGludCBnMzY0ZmJfbW1faW5pdChEaXNwbGF5U3RhdGUgKmRzLAogICAg ICAgICAgICAgICAgICAgIGludCB2cmFtX3NpemUsIGludCBpdF9zaGlmdCwKICAgICAgICAg ICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3QgdnJhbV9iYXNlLCB0YXJnZXRfcGh5c19h ZGRyX3QgY3RybF9iYXNlKQogewogICAgIEczNjRTdGF0ZSAqczsKLSAgICBpbnQgaW9fdnJh bSwgaW9fY3RybDsKLQorICAgIGludCBpb192cmFtLCBpb19jdHJsOw0KKw0KICAgICBzID0g cWVtdV9tYWxsb2N6KHNpemVvZihHMzY0U3RhdGUpKTsKICAgICBpZiAoIXMpCiAgICAgICAg IHJldHVybiAtMTsKQEAgLTM3MSw3ICs0NzksOCBAQA0KICAgICBzLT52cmFtX3NpemUgPSB2 cmFtX3NpemU7CiAgICAgcy0+dnJhbV9idWZmZXIgPSBxZW11X21hbGxvY3oocy0+dnJhbV9z aXplKTsKIAotICAgIHFlbXVfcmVnaXN0ZXJfcmVzZXQoZzM2NGZiX3Jlc2V0LCBzKTsKKyAg ICBxZW11X3JlZ2lzdGVyX3Jlc2V0KGczNjRmYl9yZXNldCwgcyk7DQorICAgIHJlZ2lzdGVy X3NhdmV2bSgiZzM2NGZiIiwgMCwgMSwgZzM2NGZiX3NhdmUsIGczNjRmYl9sb2FkLCBzKTsK ICAgICBnMzY0ZmJfcmVzZXQocyk7CiAKICAgICBzLT5kcyA9IGRzOwpAQCAtMzgzLDkgKzQ5 Miw5IEBADQogCiAgICAgaW9fdnJhbSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnkoMCwgZzM2 NGZiX21lbV9yZWFkLCBnMzY0ZmJfbWVtX3dyaXRlLCBzKTsKICAgICBjcHVfcmVnaXN0ZXJf cGh5c2ljYWxfbWVtb3J5KHMtPnZyYW1fYmFzZSwgdnJhbV9zaXplLCBpb192cmFtKTsKKw0K KyAgICBpb19jdHJsID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBnMzY0ZmJfY3RybF9y ZWFkLCBnMzY0ZmJfY3RybF93cml0ZSwgcyk7DQorICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNh bF9tZW1vcnkoY3RybF9iYXNlLCAweDIwMDAwMCwgaW9fY3RybCk7CiAKLSAgICBpb19jdHJs ID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeSgwLCBnMzY0ZmJfY3RybF9yZWFkLCBnMzY0ZmJf Y3RybF93cml0ZSwgcyk7Ci0gICAgY3B1X3JlZ2lzdGVyX3BoeXNpY2FsX21lbW9yeShjdHJs X2Jhc2UsIDB4MTAwMDAsIGlvX2N0cmwpOwotCiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBo dy9nMzY0ZmJfdGVtcGxhdGUuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGh3L2czNjRmYl90ZW1w bGF0ZS5oCShyZXZpc2lvbiA1NDk5KQ0KKysrIGh3L2czNjRmYl90ZW1wbGF0ZS5oCSh3b3Jr aW5nIGNvcHkpDQpAQCAtMSw3ICsxLDcgQEANCiAvKgogICogUUVNVSBHMzY0IGZyYW1lYnVm ZmVyIEVtdWxhdG9yLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNyBIZXJ2w6kgUG91c3Np bmVhdQorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSGVydmUgUG91c3NpbmVhdQogICoK ICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0xNSwyOSArMTUsMTEwIEBADQogICoKICAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCisgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwK KyAqIE1BIDAyMTEwLTEzMDEgVVNBCiAgKi8KIAotc3RhdGljIHZvaWQgZ2x1ZShnMzY0ZmJf ZHJhd19ncmFwaGljLCBCUFApKEczNjRTdGF0ZSAqcywgaW50IGZ1bGxfdXBkYXRlKQorI2lm IERFUFRIID09IDgKKyNkZWZpbmUgQlBQIDEKKyNkZWZpbmUgUElYRUxfVFlQRSB1aW50OF90 CisKKyNlbGlmIERFUFRIID09IDE1IHx8IERFUFRIID09IDE2CisjZGVmaW5lIEJQUCAyCisj ZGVmaW5lIFBJWEVMX1RZUEUgdWludDE2X3QKKworI2VsaWYgREVQVEggPT0gMzIKKyNkZWZp bmUgQlBQIDQKKyNkZWZpbmUgUElYRUxfVFlQRSB1aW50MzJfdAorCisjZWxzZQorI2Vycm9y IFVuc3VwcG9ydGVkIGRlcHRoCisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2x1ZShnMzY0ZmJf ZHJhd19ncmFwaGljXzFfLCBERVBUSCkoRzM2NFN0YXRlICpzKQogeworICAgIC8qIFhYWDog bm90IHN1cHBvcnRlZCAqLworICAgIEJBREYoIjEgYnBwIG1vZGUgbm90IHN1cHBvcnRlZCB5 ZXRcbiIpOworfQorCitzdGF0aWMgdm9pZCBnbHVlKGczNjRmYl9kcmF3X2dyYXBoaWNfMl8s IERFUFRIKShHMzY0U3RhdGUgKnMpCit7CisgICAgLyogWFhYOiBub3Qgc3VwcG9ydGVkICov CisgICAgQkFERigiMiBicHAgbW9kZSBub3Qgc3VwcG9ydGVkIHlldFxuIik7Cit9CisKK3N0 YXRpYyB2b2lkIGdsdWUoZzM2NGZiX2RyYXdfZ3JhcGhpY180XywgREVQVEgpKEczNjRTdGF0 ZSAqcykKK3sKKyAgICAvKiBYWFg6IG5vdCBzdXBwb3J0ZWQgKi8KKyAgICBCQURGKCI0IGJw cCBtb2RlIG5vdCBzdXBwb3J0ZWQgeWV0XG4iKTsKK30KKworc3RhdGljIHZvaWQgZ2x1ZShn MzY0ZmJfZHJhd19ncmFwaGljXzhfLCBERVBUSCkoRzM2NFN0YXRlICpzKQorewogICAgIGlu dCBpLCBqOwogICAgIGludCB3X2Rpc3BsYXk7CiAgICAgdWludDhfdCAqZGF0YV9idWZmZXI7 CiAgICAgdWludDhfdCAqZGF0YV9kaXNwbGF5LCAqZGQ7CiAKLSAgICBkYXRhX2J1ZmZlciA9 IHMtPnZyYW1fYnVmZmVyOwotICAgIHdfZGlzcGxheSA9IHMtPnNjcl93aWR0aCAqIFBJWEVM X1dJRFRIIC8gODsKKyAgICBkYXRhX2J1ZmZlciA9IHMtPnZyYW1fYnVmZmVyICsgcy0+dG9w X29mX3NjcmVlbjsKKyAgICB3X2Rpc3BsYXkgPSBzLT5zY3Jfd2lkdGggKiBCUFA7CiAgICAg ZGF0YV9kaXNwbGF5ID0gcy0+ZHMtPmRhdGE7CiAgICAgZm9yKGkgPSAwOyBpIDwgcy0+c2Ny X2hlaWdodDsgaSsrKSB7CiAgICAgICAgIGRkID0gZGF0YV9kaXNwbGF5OwotICAgICAgICBm b3IgKGogPSAwOyBqIDwgcy0+c2NyX3dpZHRoOyBqKyssIGRkICs9IFBJWEVMX1dJRFRIIC8g OCwgZGF0YV9idWZmZXIrKykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgcy0+c2NyX3dp ZHRoOyBqKyssIGRkICs9IEJQUCwgZGF0YV9idWZmZXIrKykgewogICAgICAgICAgICAgdWlu dDhfdCBpbmRleCA9ICpkYXRhX2J1ZmZlcjsKLSAgICAgICAgICAgICooKGdsdWUoZ2x1ZSh1 aW50LCBQSVhFTF9XSURUSCksIF90KSAqKWRkKSA9IGdsdWUocmdiX3RvX3BpeGVsLCBCUFAp KAotICAgICAgICAgICAgICAgIHMtPnBhbGV0dGVbaW5kZXhdWzBdLAotICAgICAgICAgICAg ICAgIHMtPnBhbGV0dGVbaW5kZXhdWzFdLAotICAgICAgICAgICAgICAgIHMtPnBhbGV0dGVb aW5kZXhdWzJdKTsKKyAgICAgICAgICAgICooKFBJWEVMX1RZUEUgKilkZCkgPSBnbHVlKHJn Yl90b19waXhlbCwgREVQVEgpKAorICAgICAgICAgICAgICAgIHMtPmNvbG9yX3BhbGV0dGVb aW5kZXhdWzBdLAorICAgICAgICAgICAgICAgIHMtPmNvbG9yX3BhbGV0dGVbaW5kZXhdWzFd LAorICAgICAgICAgICAgICAgIHMtPmNvbG9yX3BhbGV0dGVbaW5kZXhdWzJdKTsKICAgICAg ICAgfQogICAgICAgICBkYXRhX2Rpc3BsYXkgKz0gcy0+ZHMtPmxpbmVzaXplOwogICAgIH0K KworICAgIGlmICghKHMtPmN0bGEgJiBDVExBX05PX0NVUlNPUikpIHsKKyAgICAgICAgLyog ZHJhdyBjdXJzb3IgKi8KKyAgICAgICAgLyogWFhYOiBuZWVkIHRvIHVzZSBzLT5jdXJzb3Jf cGFsZXR0ZSwgcy0+Y3Vyc29yX3Bvc2l0aW9uLCBzLT5jdXJzb3IgKi8KKyAgICB9CiB9CisK K3N0YXRpYyB2b2lkIGdsdWUoZzM2NGZiX2RyYXdfZ3JhcGhpY18xNV8sIERFUFRIKShHMzY0 U3RhdGUgKnMpCit7CisgICAgLyogWFhYOiBub3Qgc3VwcG9ydGVkICovCisgICAgQkFERigi MTUgYnBwIG1vZGUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworfQorCitzdGF0aWMgdm9pZCBn bHVlKGczNjRmYl9kcmF3X2dyYXBoaWNfMTZfLCBERVBUSCkoRzM2NFN0YXRlICpzKQorewor ICAgIC8qIFhYWDogbm90IHN1cHBvcnRlZCAqLworICAgIEJBREYoIjE2IGJwcCBtb2RlIG5v dCBzdXBwb3J0ZWQgeWV0XG4iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdsdWUoZzM2 NGZiX2RyYXdfZ3JhcGhpY18sIERFUFRIKShHMzY0U3RhdGUgKnMpCit7CisgICAgc3dpdGNo IChzLT5kZXB0aCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBnbHVlKGczNjRm Yl9kcmF3X2dyYXBoaWNfMV8sIERFUFRIKShzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIDI6CisgICAgICAgICAgICBnbHVlKGczNjRmYl9kcmF3X2dyYXBoaWNfMl8s IERFUFRIKShzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAg ICAgICAgICBnbHVlKGczNjRmYl9kcmF3X2dyYXBoaWNfNF8sIERFUFRIKShzKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBnbHVlKGczNjRm Yl9kcmF3X2dyYXBoaWNfOF8sIERFUFRIKShzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICBjYXNlIDE1OgorICAgICAgICAgICAgZ2x1ZShnMzY0ZmJfZHJhd19ncmFwaGljXzE1 XywgREVQVEgpKHMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTY6Cisg ICAgICAgICAgICBnbHVlKGczNjRmYl9kcmF3X2dyYXBoaWNfMTZfLCBERVBUSCkocyk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEJBREYo Indyb25nIGRlcHRoOiAlZFxuIiwgcy0+ZGVwdGgpOworICAgIH0KK30KKworI3VuZGVmIERF UFRICisjdW5kZWYgQlBQCisjdW5kZWYgUElYRUxfVFlQRQo= --------------010303050500040002080102--