From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1HSKko-0004Fx-RS for qemu-devel@nongnu.org; Fri, 16 Mar 2007 18:18:30 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1HSKkn-0004Ep-N3 for qemu-devel@nongnu.org; Fri, 16 Mar 2007 18:18:30 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1HSKkn-0004Em-Ju for qemu-devel@nongnu.org; Fri, 16 Mar 2007 17:18:29 -0500 Received: from wr-out-0506.google.com ([64.233.184.232]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1HSKjc-000839-NW for qemu-devel@nongnu.org; Fri, 16 Mar 2007 18:17:17 -0400 Received: by wr-out-0506.google.com with SMTP id q50so710718wrq for ; Fri, 16 Mar 2007 15:17:16 -0700 (PDT) Message-ID: Date: Fri, 16 Mar 2007 23:17:15 +0100 From: "andrzej zaborowski" Sender: balrogg@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_100558_1914685.1174083435432" Subject: [Qemu-devel] [PATCH] NAND image conversion utility for the Spitz machines. Reply-To: balrogg@gmail.com, 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 ------=_Part_100558_1914685.1174083435432 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline This is a small program that converts NAND Flash images from raw to the format used by hw/nand.c. I don't know if it should be included in qemu (it's handy for me to have it included). What it does: - takes on standard input flash rootfs partition images generated from some OpenEmbedded-based build systems (i.e. Poky or OpenZaurus) - offsets the image to the rootfs partition's start, - inserts proper jffs2 markers in the Out-Of-Band areas in the flash so that Linux doesn't protest. Also inserts empty block jffs2 markers and ECC where necessary. Cheers, Andrew ------=_Part_100558_1914685.1174083435432 Content-Type: text/plain; name=0017-NAND-Flash-image-conversion-utility-for-the-Spitz-machines.txt; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_ezd8w4hs Content-Disposition: attachment; filename="0017-NAND-Flash-image-conversion-utility-for-the-Spitz-machines.txt" RnJvbSBhNmZiMGI3MGVjNjFhM2QzNzI5M2E4OTVmOGQzMTI2MmExMmNiY2I4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyemVqIFphYm9yb3dza2kgPGJhbHJvZ0B6YWJvci5vcmc+ CkRhdGU6IEZyaSwgMTYgTWFyIDIwMDcgMTc6MzY6MzAgKzAxMDAKU3ViamVjdDogW1BBVENIXSBO QU5EIEZsYXNoIGltYWdlIGNvbnZlcnNpb24gdXRpbGl0eSBmb3IgdGhlIFNwaXR6IG1hY2hpbmVz LgoKLS0tCiBNYWtlZmlsZSAgICB8ICAgMTUgKysrLQogcmF3MmZsYXNoLmMgfCAgMzcwICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAy IGZpbGVzIGNoYW5nZWQsIDM4NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYjZkN2IxZi4uZGFhYzMxYSAxMDA2NDQK LS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAgQkFTRV9DRkxB R1MgKz0gLW1jcHU9dWx0cmFzcGFyYwogZW5kaWYKIENQUEZMQUdTICs9IC1JLiAtRF9HTlVfU09V UkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFX1NPVVJDRQogTElCUz0KLVRP T0xTPXFlbXUtaW1nJChFWEVTVUYpCitUT09MUz1xZW11LWltZyQoRVhFU1VGKSByYXcyZmxhc2gk KEVYRVNVRikgZmxhc2gycmF3JChFWEVTVUYpCiBpZmRlZiBDT05GSUdfU1RBVElDCiBCQVNFX0xE RkxBR1MgKz0gLXN0YXRpYwogZW5kaWYKQEAgLTIzLDYgKzIzLDcgQEAgRE9DUz1xZW11LWRvYy5o dG1sIHFlbXUtdGVjaC5odG1sIHFlbXUuMSBxZW11LWltZy4xCiBlbHNlCiBET0NTPQogZW5kaWYK K01PREVMUz1zcGl0eiBha2l0YSBib3J6b2kgdGVycmllcgogCiBpZm5kZWYgQ09ORklHX0RBUldJ TgogaWZuZGVmIENPTkZJR19XSU4zMgpAQCAtNDMsNiArNDQsMTMgQEAgcWVtdS1pbWckKEVYRVNV Rik6IHFlbXUtaW1nLmMgY3V0aWxzLmMgYmxvY2suYyBibG9jay1yYXcuYyBibG9jay1jb3cuYyBi bG9jay1xY28KIGR5bmdlbiQoRVhFU1VGKTogZHluZ2VuLmMKIAkkKEhPU1RfQ0MpICQoQ0ZMQUdT KSAkKENQUEZMQUdTKSAkKEJBU0VfQ0ZMQUdTKSAtbyAkQCAkXgogCityYXcyZmxhc2gkKEVYRVNV RikgZmxhc2gycmF3JChFWEVTVUYpOiByYXcyZmxhc2guYworCSQoQ0MpIC1EJEAgJChDRkxBR1Mp ICQoTERGTEFHUykgJChERUZJTkVTKSAtbyAkQCAkXgorCWZvciBtIGluICQoTU9ERUxTKTsgZG8g XAorCQlbIC1lICRALiQkbSQoRVhFU1VGKSBdIHx8IFwKKwkJbG4gLXMgJEAgJEAuJCRtJChFWEVT VUYpIDsgXAorCWRvbmUKKwogY2xlYW46CiAjIGF2b2lkIG9sZCBidWlsZCBwcm9ibGVtcyBieSBy ZW1vdmluZyBwb3RlbnRpYWxseSBpbmNvcnJlY3Qgb2xkIGZpbGVzCiAJcm0gLWYgY29uZmlnLm1h ayBjb25maWcuaCBvcC1pMzg2Lmggb3BjLWkzODYuaCBnZW4tb3AtaTM4Ni5oIG9wLWFybS5oIG9w Yy1hcm0uaCBnZW4tb3AtYXJtLmggCkBAIC04OSw2ICs5NywxMSBAQCBlbmRpZgogCWZvciBkIGlu ICQoVEFSR0VUX0RJUlMpOyBkbyBcCiAJJChNQUtFKSAtQyAkJGQgJEAgfHwgZXhpdCAxIDsgXAog ICAgICAgICBkb25lCisJZm9yIG0gaW4gJChNT0RFTFMpOyBkbyBcCisJCWZvciBuIGluICouJCRt OyBkbyBcCisJCQkkKElOU1RBTEwpICQkbiAiJChERVNURElSKSQoYmluZGlyKSI7IFwKKwkJZG9u ZTsgXAorCWRvbmUKIAogIyB2YXJpb3VzIHRlc3QgdGFyZ2V0cwogdGVzdCBzcGVlZCB0ZXN0Mjog YWxsCmRpZmYgLS1naXQgYS9yYXcyZmxhc2guYyBiL3JhdzJmbGFzaC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZmFmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9yYXcyZmxh c2guYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRI YW5kIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIEdQTCB2Mi4K KyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg PHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj aW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgVEZSKF8pCQlfCisjZGVmaW5lIFZFUkJPU0UK KyNkZWZpbmUgUEJBUl9MRU4JNDAKKworI2RlZmluZSBQQVJUSVRJT05fU1RBUlQJMHgwMDcwMDAw MAorCitzdGF0aWMgY29uc3QgaW50IGVjY19wb3M4W10gPSB7CisJMHgwLCAweDEsIDB4MiwKK307 CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczE2W10gPSB7CisJMHgwLCAweDEsIDB4MiwgMHgz LCAweDYsIDB4NywKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczY0W10gPSB7CisJMHgy OCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKwkweDMwLCAweDMx LCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorCTB4MzgsIDB4MzksIDB4M2Es IDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCit9OworCitzdGF0aWMgY29uc3QgaW50IGVj Y19ha2l0YVtdID0geworCTB4MDUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MTUs IDB4MTEsCisJMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywK KwkweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3LAorfTsKKwor c3RydWN0IGpmZnNfbWFya2VyX3MgeworCWludCBwb3M7CisJdWludDhfdCB2YWx1ZTsKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczhbXSA9IHsKKwl7IDB4 MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNiwgMHg4NSB9LCB7IDB4MDcsIDB4MTkg fSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJl ZV9wb3MxNltdID0geworCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAw eDAzIH0sIHsgMHgwYiwgMHgyMCB9LAorCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwg eyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczY0W10gPSB7CisJeyAweDAyLCAweGZm IH0sIHsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA1LCAweGZmIH0sCisJeyAw eDA2LCAweGZmIH0sIHsgMHgwNywgMHhmZiB9LCB7IDB4MDgsIDB4ZmYgfSwgeyAweDA5LCAweGZm IH0sCisJeyAweDBhLCAweGZmIH0sIHsgMHgwYiwgMHhmZiB9LCB7IDB4MGMsIDB4ZmYgfSwgeyAw eDBkLCAweGZmIH0sCisJeyAweDBlLCAweGZmIH0sIHsgMHgwZiwgMHhmZiB9LCB7IDB4MTAsIDB4 ODUgfSwgeyAweDExLCAweDE5IH0sCisJeyAweDEyLCAweDAzIH0sIHsgMHgxMywgMHgyMCB9LCB7 IDB4MTQsIDB4MDggfSwgeyAweDE1LCAweDAwIH0sCisJeyAweDE2LCAweDAwIH0sIHsgMHgxNywg MHgwMCB9LCB7IDB4MTgsIDB4ZmYgfSwgeyAweDE5LCAweGZmIH0sCisJeyAweDFhLCAweGZmIH0s IHsgMHgxYiwgMHhmZiB9LCB7IDB4MWMsIDB4ZmYgfSwgeyAweDFkLCAweGZmIH0sCisJeyAweDFl LCAweGZmIH0sIHsgMHgxZiwgMHhmZiB9LCB7IDB4MjAsIDB4ZmYgfSwgeyAweDIxLCAweGZmIH0s CisJeyAweDIyLCAweGZmIH0sIHsgMHgyMywgMHhmZiB9LCB7IDB4MjQsIDB4ZmYgfSwgeyAweDI1 LCAweGZmIH0sCisJeyAweDI2LCAweGZmIH0sIHsgMHgyNywgMHhmZiB9LAorCXsgLTEgfSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX2FraXRhW10gPSB7CisJ eyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAw eDIwIH0sCisJeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwg eyAweDBmLCAweDAwIH0sCisJeyAweDEwLCAweGZmIH0sCisJeyAtMSB9LAorfTsKKworI2RlZmlu ZSBMRU4oYXJyYXkpCShzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSkpCisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgeworCWludCBwYWdlX3NpemU7CisJaW50IG9vYl9zaXpl OworCWludCBlY2NieXRlczsKKwlpbnQgZWNjc2l6ZTsKKwljb25zdCBpbnQgKmVjY3BvczsKKwlp bnQgcm9tc2l6ZTsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqZnJlZXBvczsKK30gc3Bp dHogPSB7CisJMHgyMDAsIDB4MTAsIDB4MTAwLCBMRU4oZWNjX3BvczE2KSwgZWNjX3BvczE2LCAw eDAxMDAwMDAwLCBmcmVlX3BvczE2Cit9LCBha2l0YSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAs IExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIGJv cnpvaSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEs IDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIHRlcnJpZXIgPSB7CisJMHg4MDAsIDB4NDAsIDB4 MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCit9 OworCitzdHJ1Y3QgZWNjX3N0YXRlX3MgeworCWludCBjb3VudDsKKwl1aW50OF90IGNwOworCXVp bnQ4X3QgbHBbMl07CisJY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zICpzdHlsZTsKK307CisKKyNp Zm5kZWYgZmxhc2gycmF3CisvKgorICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29s dW1uIHBhcml0eS4gIFRhYmxlIGJvcnJvd2VkIGZyb20gTGludXguCisgKi8KK3N0YXRpYyBjb25z dCB1aW50OF90IGVjY19wcmVjYWxjX3RhYmxlW10gPSB7CisJMHgwMCwgMHg1NSwgMHg1NiwgMHgw MywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAz LCAweDU2LCAweDU1LCAweDAwLAorCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4Njks IDB4NmEsIDB4M2YsCisJMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwg MHg2NSwKKwkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAor CTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCisJMHgwMywg MHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAw eDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjksIDB4M2MsIDB4M2YsIDB4 NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCisJMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2 YSwgMHgzZiwgMHgzYywgMHg2OSwKKwkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAw LCAweDAzLCAweDU2LAorCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTks IDB4MGMsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwK KwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4NmEs IDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCisJMHgzMCwgMHg2NSwg MHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKKwkweDZhLCAweDNmLCAweDNjLCAw eDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAorCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4 NjksIDB4M2MsIDB4M2YsIDB4NmEsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgw MywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVh LCAweDBmLAorCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYs CisJMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKKwkweDY5 LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAorCTB4MzMsIDB4NjYs IDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCisJMHgwMywgMHg1NiwgMHg1NSwg MHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAw eDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4 NmEsIDB4NjksIDB4M2MsCisJMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgz MywgMHg2NiwKKwkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNm LAorCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCisJMHgw MCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBm LCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorfTsKKworLyogVXBkYXRlIEVD QyBwYXJpdHkgY291bnQgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBlY2NfZGlnZXN0KHN0cnVj dCBlY2Nfc3RhdGVfcyAqcywgdWludDhfdCBzYW1wbGUpIHsKKwl1aW50OF90IGlkeCA9IGVjY19w cmVjYWxjX3RhYmxlW3NhbXBsZV07CisKKwlzLT5jcCBePSBpZHggJiAweDNmOworCWlmIChpZHgg JiAweDQwKSB7CisJCXMtPmxwWzBdIF49IH4ocy0+Y291bnQgJiAweGZmKTsKKwkJcy0+bHBbMV0g Xj0gcy0+Y291bnQgJiAweGZmOworCX0KKwlzLT5jb3VudCArKzsKKworCXJldHVybiBzYW1wbGU7 Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICplY2Ms CisJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb3V0KSB7CisJaW50IGksIGxwX2FbMl07 CisKKwllY2MtPmxwWzBdID0gMHgwMDsKKwllY2MtPmxwWzFdID0gMHgwMDsKKwllY2MtPmNwID0g MHgwMDsKKwllY2MtPmNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdHlsZS0+ZWNj Ynl0ZXM7IGkgKyspCisJCWVjY19kaWdlc3QoZWNjLCBidWZbaV0pOworCisjIGRlZmluZSBCU0hS KGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPj4gKGZyb20gLSB0bykpICYgKDEgPDwg dG8pKQorCWxwX2FbMF0gPQorCQlCU0hSKDAsIDQsIDApIHwgQlNIUigwLCA1LCAyKSB8CisJCUJT SFIoMCwgNiwgNCkgfCBCU0hSKDAsIDcsIDYpIHwKKwkJQlNIUigxLCA0LCAxKSB8IEJTSFIoMSwg NSwgMykgfAorCQlCU0hSKDEsIDYsIDUpIHwgQlNIUigxLCA3LCA3KTsKKworIyBkZWZpbmUgQlNI TChieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdIDw8ICh0byAtIGZyb20pKSAmICgxIDw8 IHRvKSkKKwlscF9hWzFdID0KKwkJQlNITCgwLCAwLCAwKSB8IEJTSEwoMCwgMSwgMikgfAorCQlC U0hMKDAsIDIsIDQpIHwgQlNITCgwLCAzLCA2KSB8CisJCUJTSEwoMSwgMCwgMSkgfCBCU0hMKDEs IDEsIDMpIHwKKwkJQlNITCgxLCAyLCA1KSB8IEJTSEwoMSwgMywgNyk7CisKKwlvdXRbMF0gPSB+ bHBfYVsxXTsKKwlvdXRbMV0gPSB+bHBfYVswXTsKKwlvdXRbMl0gPSAofmVjYy0+Y3AgPDwgMikg fCAweDAzOworfQorCitzdGF0aWMgdm9pZCBqZmZzMl9mb3JtYXQoY29uc3Qgc3RydWN0IGVjY19z dGF0ZV9zICplY2MsIHVpbnQ4X3Qgb29iW10pIHsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJf cyAqYnl0ZTsKKwlmb3IgKGJ5dGUgPSBlY2MtPnN0eWxlLT5mcmVlcG9zOyBieXRlLT5wb3MgPj0g MDsgYnl0ZSArKykKKwkJb29iW2J5dGUtPnBvc10gPSBieXRlLT52YWx1ZTsKK30KKworc3RhdGlj IHZvaWQgYnVmZmVyX2ZpbGwoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3Qg YnVmZmVyW10sCisJCWludCAqbGVuLCBpbnQgKnBhcnRpdGlvbiwgaW50IGNvdW50LCB1aW50OF90 IGpmZnNfYnVmZmVyW10pIHsKKwlpbnQgcmV0OworCisJc3dpdGNoICgqcGFydGl0aW9uKSB7CisJ Y2FzZSAwOgorCQlpZiAoY291bnQgPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJCW1lbWNweShidWZm ZXIsIGpmZnNfYnVmZmVyICsgY291bnQsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJ CSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9CisJCSpwYXJ0aXRp b24gPSAxOworCWNhc2UgMToKKwkJaWYgKGNvdW50IC0gUEFSVElUSU9OX1NUQVJUIDwgUEFSVElU SU9OX1NUQVJUKSB7CisJCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50IC0gUEFS VElUSU9OX1NUQVJULAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCQkqbGVuID0gZWNj LT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfQorCisJCXdoaWxlICgqbGVuIDwgZWNj LT5zdHlsZS0+ZWNjYnl0ZXMpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArICpsZW4s IDB4ODAwIC0gKmxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJKmxlbiAr PSByZXQ7CisJCX0KKworCQlpZiAoKmxlbiA9PSAwKQorCQkJKnBhcnRpdGlvbiA9IDI7CisJCWVs c2UgaWYgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgeworCQkJZnByaW50ZihzdGRlcnIs ICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCAqbGVuKTsKKwkJCW1lbXNldChidWZmZXIg KyAqbGVuLCAweGZmLAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyAtICpsZW4pOworCQkJKmxl biA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7 CisJY2FzZSAyOgorCQltZW1zZXQoYnVmZmVyLCAweGZmLCBlY2MtPnN0eWxlLT5lY2NieXRlcyk7 CisJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJYnJlYWs7CisJfQorfQorCitpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKKwlzdHJ1Y3QgZWNj X3N0YXRlX3MgZWNjOworCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF0sIGVjY19wYXlsb2FkWzB4NDBd LCByZWdzWzNdLCAqamZmczsKKwlpbnQgcmV0LCBsZW4sIGVjY2J5dGUsIGNvdW50LCBwYXJ0aXRp b247CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgInJhdzJmbGFzaC5zcGl0eiIgb3Ig c2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJn dlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBp ZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxl ID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRl cnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAm c3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRp ZgorCisJLyogU2tpcCBmaXJzdCAxMCBieXRlcyAqLworCVRGUihyZWFkKDAsIGJ1ZmZlciwgMHgx MCkpOworCisJbGVuID0gMDsKKwlqZmZzID0gKHVpbnQ4X3QgKikgbWFsbG9jKFBBUlRJVElPTl9T VEFSVCk7CisJd2hpbGUgKGxlbiA8IFBBUlRJVElPTl9TVEFSVCkgeworCQlyZXQgPSBURlIocmVh ZCgwLCBqZmZzICsgbGVuLCBQQVJUSVRJT05fU1RBUlQgLSBsZW4pKTsKKwkJaWYgKHJldCA8PSAw KQorCQkJYnJlYWs7CisJCWxlbiArPSByZXQ7CisJfQorCisJLyogQ29udmVydCBkYXRhIGZyb20g c3RkaW4gKi8KKwlwYXJ0aXRpb24gPSBsZW4gPSBlY2NieXRlID0gY291bnQgPSAwOworCW1lbXNl dChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJamZmczJfZm9ybWF0 KCZlY2MsIGVjY19wYXlsb2FkKTsKKwl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUp IHsKKwkJYnVmZmVyX2ZpbGwoJmVjYywgYnVmZmVyLCAmbGVuLCAmcGFydGl0aW9uLCBjb3VudCwg amZmcyk7CisJCWJ1ZmZlcl9kaWdlc3QoJmVjYywgYnVmZmVyLCByZWdzKTsKKworCQllY2NfcGF5 bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzBdOworCQllY2NfcGF5 bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzFdOworCQllY2NfcGF5 bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzJdOworCisJCVRGUih3 cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpKTsKKwkJY291bnQgKz0gZWNjLnN0 eWxlLT5lY2NieXRlczsKKwkJbGVuIC09IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7CisJCW1lbW1vdmUo YnVmZmVyLCBidWZmZXIgKyBlY2Muc3R5bGUtPmVjY2J5dGVzLCBsZW4pOworCisJCWlmIChlY2Ni eXRlID49IGVjYy5zdHlsZS0+ZWNjc2l6ZSkgeworCQkJVEZSKHdyaXRlKDEsIGVjY19wYXlsb2Fk LCBlY2Muc3R5bGUtPm9vYl9zaXplKSk7CisJCQllY2NieXRlID0gMDsKKwkJCW1lbXNldChlY2Nf cGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJCQlpZiAocGFydGl0aW9uIDwg MikKKwkJCQlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOworCQl9CisKKyMgaWZkZWYg VkVSQk9TRQorCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+CisJ CQkJKGNvdW50IC0gZWNjLnN0eWxlLT5lY2NieXRlcykgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0 eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisj IGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCWZyZWUo amZmcyk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSwgY2hhciAqZW52cFtdKSB7CisJc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKKwl1aW50OF90 IGJ1ZmZlclsweDEwMDBdOworCWludCByZXQsIGxlbiwgY291bnQ7CisKKwkvKiBDaGVjayBpZiB3 ZSdyZSBjYWxsZWQgYnkgImZsYXNoMnJhdy5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0 cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0 YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlsw XSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlm ICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxl ID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVS Qk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogQ29udmVydCBkYXRh IGZyb20gc3RkaW4gKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5y b21zaXplKSB7CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6 ZSkgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgbGVuLAorCQkJCQkJZWNjLnN0eWxl LT5wYWdlX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxl biArPSByZXQ7CisJCX0KKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCBl Y2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVp IHN0cmF5IGJ5dGVzXG4iLCBsZW4pOworCQl9CisKKwkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNj LnN0eWxlLT5wYWdlX3NpemUpKTsKKworCQljb3VudCArPSBsZW47CisJCWxlbiA9IDA7CisJCXdo aWxlIChsZW4gPCBlY2Muc3R5bGUtPm9vYl9zaXplKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBi dWZmZXIsIGVjYy5zdHlsZS0+b29iX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJ CQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKworIyBpZmRlZiBWRVJCT1NFCisJCWlmIChj b3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KKwkJCQkoY291bnQgLSBlY2Mu c3R5bGUtPnBhZ2Vfc2l6ZSkgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQor CQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UK KwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCXJldHVybiAwOworfQorI2VuZGlm Ci0tIAoxLjQuNC4zCgo= ------=_Part_100558_1914685.1174083435432--