From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1FRa7O-0001jJ-JQ for mharc-grub-devel@gnu.org; Thu, 06 Apr 2006 15:26:10 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FRa7N-0001il-55 for grub-devel@gnu.org; Thu, 06 Apr 2006 15:26:09 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FRa7K-0001iB-5z for grub-devel@gnu.org; Thu, 06 Apr 2006 15:26:07 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FRa7K-0001i1-02 for grub-devel@gnu.org; Thu, 06 Apr 2006 15:26:06 -0400 Received: from [157.24.2.30] (helo=smtp1.cc.lut.fi) by monty-python.gnu.org with esmtp (Exim 4.52) id 1FRaB7-0000qx-4q for grub-devel@gnu.org; Thu, 06 Apr 2006 15:30:01 -0400 Received: from localhost (smtp1 [127.0.0.1]) by smtp1.cc.lut.fi (Postfix) with ESMTP id 0E27370090 for ; Thu, 6 Apr 2006 22:26:02 +0300 (EEST) Received: from smtp1.cc.lut.fi ([127.0.0.1]) by localhost (smtp1.cc.lut.fi [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 27454-10 for ; Thu, 6 Apr 2006 22:26:01 +0300 (EEST) Received: from [192.168.1.100] (lk4-a-4-1.lnet.lut.fi [157.24.102.107]) by smtp1.cc.lut.fi (Postfix) with ESMTP id A7DED7004E for ; Thu, 6 Apr 2006 22:26:01 +0300 (EEST) Message-ID: <44356B50.1010601@nic.fi> Date: Thu, 06 Apr 2006 22:26:08 +0300 From: =?UTF-8?B?VmVzYSBKw6TDpHNrZWzDpGluZW4=?= User-Agent: Thunderbird 1.5 (Windows/20051201) MIME-Version: 1.0 To: The development of GRUB 2 X-Enigmail-Version: 0.94.0.0 Content-Type: multipart/mixed; boundary="------------060606010702010303060102" X-Virus-Scanned: by lut.fi Subject: [patch] added glyph caching X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Apr 2006 19:26:09 -0000 This is a multi-part message in MIME format. --------------060606010702010303060102 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, This patch adds glyph caching to GRUB 2. It functions like a hash table with paging. If one hash table entry's page is full, new will be allocated and linked to previous. When font module is unloaded, cache will be freed. There is also a support to preload set of glyphs in order to fasten glyph loading times. It also fixes issue in gfxterm with unknown glyph's character length. Problem caused incorrect rendering of menu entries. Thanks, Vesa J=C3=A4=C3=A4skel=C3=A4inen --------------060606010702010303060102 Content-Type: text/plain; name="grub2-font-cache.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="grub2-font-cache.diff" SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvc291cmNlcy9ncnVi L2dydWIyL0NoYW5nZUxvZyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzAKZGlmZiAtdSAt cjEuMjMwIENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTEgQXByIDIwMDYgMTk6MjI6NTggLTAw MDAJMS4yMzAKKysrIENoYW5nZUxvZwk2IEFwciAyMDA2IDE5OjE1OjU4IC0wMDAwCkBAIC0x LDMgKzEsMjUgQEAKKzIwMDYtMDQtMDYgIFZlc2EgSmFhc2tlbGFpbmVuICA8Y2hhYWNAbmlj LmZpPgorCisJKiBmb250L21hbmFnZXIuYyAoR0xZUEhfQ0FDSEVfSEFTSF9TSVpFKTogTmV3 IGRlZmluZS4KKwkoR0xZUEhfQ0FDSEVfTUFYX1BFUl9QQUdFKTogTGlrZXdpc2UuCisJKEdM WVBIX0NBQ0hFX1BSRUxPQUQpOiBMaWtld2lzZS4KKwkoR0xZUEhfQ0FDSEVfUFJFTE9BRF9T VEFSVCk6IExpa2V3aXNlLgorCShHTFlQSF9DQUNIRV9QUkVMT0FEX0VORCk6IExpa2V3aXNl LgorCShnbHlwaF9jYWNoZV9pdGVtKTogTmV3IHN0cnVjdHVyZS4KKwkoZ2x5cGhfY2FjaGUp OiBMaWtld2lzZS4KKwkoY2FjaGUpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgorCShhZGRfZm9u dCk6IEFkZGVkIHByZWxvYWRpbmcgb2YgZ2x5cGhzLgorCShnZXRfaGFzaCk6IE5ldyBmdW5j dGlvbi4KKwkoY2FjaGVfYWRkX2dseXBoKTogTGlrZXdpc2UuCisJKGNhY2hlX2ZpbmRfZ2x5 cGgpOiBMaWtld2lzZS4KKwkoY2FjaGVfcHJlbG9hZCk6IExpa2V3aXNlLgorCShjYWNoZV9j bGVhcik6IExpa2V3aXNlLgorCShncnViX2ZvbnRfZ2V0X2dseXBoKTogQWRkZWQgY2FjaGlu ZyBmb3IgZ2x5cGhzLgorCShmb250X21hbmFnZXIpOiBBZGRlZCBjYWNoZSBjbGVhcmluZyB0 byBtb2R1bGUgdW5sb2FkaW5nLgorCisJKiB0ZXJtL2dmeHRlcm0uYyAoZ3J1Yl9nZnh0ZXJt X2dldGNoYXJ3aWR0aCk6IEZpeGVkIGNoYXJhY3RlciAKKwlsZW5ndGggZm9yIHVua25vd24g Z2x5cGguCisKIDIwMDYtMDQtMDEgIFZlc2EgSmFhc2tlbGFpbmVuICA8Y2hhYWNAbmljLmZp PgogCiAJKiB1dGlsL3VuaWZvbnQycGZmLnJiOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGJ5dGUg b3JkZXJpbmcuICBOb3cKSW5kZXg6IGZvbnQvbWFuYWdlci5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9zb3VyY2VzL2dydWIvZ3J1YjIvZm9udC9tYW5hZ2VyLmMsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuOApkaWZmIC11IC1yMS44IG1hbmFnZXIuYwotLS0gZm9udC9tYW5hZ2Vy LmMJMzEgTWFyIDIwMDYgMTM6MzI6NTIgLTAwMDAJMS44CisrKyBmb250L21hbmFnZXIuYwk2 IEFwciAyMDA2IDE5OjE1OjU4IC0wMDAwCkBAIC0yNSw2ICsyNSwxNyBAQAogI2luY2x1ZGUg PGdydWIvbW0uaD4KICNpbmNsdWRlIDxncnViL2ZvbnQuaD4KIAorI2RlZmluZSBHTFlQSF9D QUNIRV9IQVNIX1NJWkUJCTEyOAorI2RlZmluZSBHTFlQSF9DQUNIRV9NQVhfUEVSX1BBR0Ug ICAgICAgIDMyCisKKy8qIENvbW1lbnQgb3V0IHRoaXMgZGVmaW5lIGlmIHlvdSB3YW50IHRv IGRpc2FibGUgcHJlbG9hZGluZyBvZiBnbHlwaHMuICAqLworI2RlZmluZSBHTFlQSF9DQUNI RV9QUkVMT0FECisKKyNpZiBkZWZpbmVkKEdMWVBIX0NBQ0hFX1BSRUxPQUQpCisjZGVmaW5l IEdMWVBIX0NBQ0hFX1BSRUxPQURfU1RBUlQJMzIKKyNkZWZpbmUgR0xZUEhfQ0FDSEVfUFJF TE9BRF9FTkQJCTEyNworI2VuZGlmCisKIHN0cnVjdCBlbnRyeQogewogICBncnViX3VpbnQz Ml90IGNvZGU7CkBAIC0zOSw3ICs1MCwyNCBAQAogICBzdHJ1Y3QgZW50cnkgdGFibGVbMF07 CiB9OwogCitzdHJ1Y3QgZ2x5cGhfY2FjaGVfaXRlbQoreworICBncnViX3VpbnQzMl90IGNv ZGU7CisgIHN0cnVjdCBncnViX2ZvbnRfZ2x5cGggZ2x5cGg7Cit9OworICAgIAorc3RydWN0 IGdseXBoX2NhY2hlCit7CisgIHN0cnVjdCBnbHlwaF9jYWNoZSAqbmV4dDsKKyAgdW5zaWdu ZWQgaW50IGNvdW50OworICB1bnNpZ25lZCBpbnQgbWF4X2NvdW50OworICBzdHJ1Y3QgZ2x5 cGhfY2FjaGVfaXRlbSBpdGVtc1swXTsKK307CisKIHN0YXRpYyBzdHJ1Y3QgZm9udCAqZm9u dF9saXN0Oworc3RhdGljIHN0cnVjdCBnbHlwaF9jYWNoZSAqY2FjaGVbR0xZUEhfQ0FDSEVf SEFTSF9TSVpFXTsKKworc3RhdGljIHZvaWQgY2FjaGVfcHJlbG9hZCAoc3RydWN0IGZvbnQg KmZvbnQpOwogCiBzdGF0aWMgaW50CiBhZGRfZm9udCAoY29uc3QgY2hhciAqZmlsZW5hbWUp CkBAIC05MCw2ICsxMTgsMTAgQEAKIAogICBmb250LT5uZXh0ID0gZm9udF9saXN0OwogICBm b250X2xpc3QgPSBmb250OworICAKKyNpZiBkZWZpbmVkKEdMWVBIX0NBQ0hFX1BSRUxPQUQp CisgIGNhY2hlX3ByZWxvYWQgKGZvbnQpOworI2VuZGlmCiAKICAgcmV0dXJuIDE7CiAKQEAg LTE2NCw2ICsxOTYsMTQ2IEBACiAgIGdseXBoLT5iYXNlbGluZSA9ICgxNiAqIDMpIC8gNDsK IH0KIAorLyogR2V0IGhhc2ggZm9yIHVuaWNvZGUgY2hhcmFjdGVyLiAgKi8KK3N0YXRpYyB1 bnNpZ25lZCBpbnQKK2dldF9oYXNoIChncnViX3VpbnQzMl90IGNvZGUpCit7CisgIHJldHVy biBjb2RlICUgR0xZUEhfQ0FDSEVfSEFTSF9TSVpFOworfQorCisvKiBBZGQgZ2x5cGggdG8g Z2x5cGggY2FjaGUuICAqLworc3RhdGljIGludAorY2FjaGVfYWRkX2dseXBoIChncnViX3Vp bnQzMl90IGNvZGUsIGdydWJfZm9udF9nbHlwaF90IGdseXBoKQoreworICB1bnNpZ25lZCBp bnQgaGFzaDsKKyAgdW5zaWduZWQgaW50IGk7CisgIHN0cnVjdCBnbHlwaF9jYWNoZSAqcHRy OworICBzdHJ1Y3QgZ2x5cGhfY2FjaGUgKmxhc3QgPSBOVUxMOworICAKKyAgLyogR2V0IGhh c2ggaW5kZXggZm9yIGNvZGUuICAqLworICBoYXNoID0gZ2V0X2hhc2ggKGNvZGUpOworICAK KyAgcHRyID0gY2FjaGVbaGFzaF07CisKKyAgLyogU2VhcmNoIGZvciBkdXBsaWNhdGVzIGFu ZCBmb3IgbmV4dCBmcmVlIHNsb3QuICAqLworICB3aGlsZSAocHRyICE9IE5VTEwpCisgICAg eworICAgICAgLyogQ2hlY2sgZm9yIGR1cGxpY2F0ZXMuICAqLworICAgICAgZm9yIChpID0g MDsgaSA8IHB0ci0+Y291bnQ7IGkrKykKKyAgICAgICAgaWYgKHB0ci0+aXRlbXNbaV0uY29k ZSA9PSBjb2RlKQorICAgICAgICAgIHJldHVybiAxOworCisgICAgICAvKiBDaGVjayBpZiB0 aGVyZSBpcyBmcmVlIHNsb3RzLiAgKi8KKyAgICAgIGlmIChwdHItPmNvdW50ICE9IHB0ci0+ bWF4X2NvdW50KQorICAgICAgICBicmVhazsKKworICAgICAgLyogQWR2YW5jZSB0byBuZXh0 IHBhZ2UuICAqLworICAgICAgbGFzdCA9IHB0cjsKKyAgICAgIHB0ciA9IHB0ci0+bmV4dDsK KyAgICB9CisKKyAgLyogTm8gcm9vdCBjYWNoZSBvciBubyBmcmVlIHBhZ2VzLCBhZGQgbmV3 IHBhZ2UuICAqLworICBpZiAocHRyID09IE5VTEwpCisgICAgeworICAgICAgcHRyID0gZ3J1 Yl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IGdseXBoX2NhY2hlKQorICAgICAgICAgICAgICAg ICAgICAgICAgICsgKHNpemVvZiAoc3RydWN0IGdseXBoX2NhY2hlX2l0ZW0pCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBHTFlQSF9DQUNIRV9NQVhfUEVSX1BBR0UpKTsKKwor ICAgICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgcmV0dXJu IDA7CisKKyAgICAgIHB0ci0+bmV4dCA9IE5VTEw7CisgICAgICBwdHItPmNvdW50ID0gMDsK KyAgICAgIHB0ci0+bWF4X2NvdW50ID0gR0xZUEhfQ0FDSEVfTUFYX1BFUl9QQUdFOworICAg IH0KKworICAvKiBDYWNoZSBnbHlwaC4gICovCisgIHB0ci0+aXRlbXNbcHRyLT5jb3VudF0u Y29kZSA9IGNvZGU7CisgIHB0ci0+aXRlbXNbcHRyLT5jb3VudF0uZ2x5cGggPSAqZ2x5cGg7 CisgIHB0ci0+Y291bnQrKzsKKworICAvKiBJZiB0aGVyZSB3YXNuJ3QgeWV0IGEgcm9vdCBj YWNoZSwgc2V0IGl0LiAgKi8KKyAgaWYgKGNhY2hlW2hhc2hdID09IE5VTEwpCisgICAgY2Fj aGVbaGFzaF0gPSBwdHI7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIFNlYXJjaCBnbHlwaCBt YXRjaGluZyBjaGFyYWN0ZXIgY29kZSBmcm9tIGdseXBoIGNhY2hlLiAgKi8KK3N0YXRpYyBp bnQKK2NhY2hlX2ZpbmRfZ2x5cGggKGdydWJfdWludDMyX3QgY29kZSwgZ3J1Yl9mb250X2ds eXBoX3QgZ2x5cGgpCit7CisgIHVuc2lnbmVkIGludCBpOworICB1bnNpZ25lZCBpbnQgaGFz aDsKKyAgc3RydWN0IGdseXBoX2NhY2hlICpwdHI7CisgIAorICAvKiBTZWFyY2ggZ2x5cGgg ZnJvbSBjYWNoZS4gICovCisgIGhhc2ggPSBnZXRfaGFzaCAoY29kZSk7CisgIHB0ciA9IGNh Y2hlW2hhc2hdOworCisgIHdoaWxlIChwdHIgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBT ZWFyY2ggZnJvbSB0aGlzIHBhZ2UuICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IHB0ci0+ Y291bnQ7IGkrKykKKyAgICAgICAgaWYgKHB0ci0+aXRlbXNbaV0uY29kZSA9PSBjb2RlKQor ICAgICAgICAgIHsKKyAgICAgICAgICAgICpnbHlwaCA9IHB0ci0+aXRlbXNbaV0uZ2x5cGg7 CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICB9CisKKyAgICAgIC8qIEFkdmFu Y2UgdG8gbmV4dCBwYWdlLiAgKi8KKyAgICAgIHB0ciA9IHB0ci0+bmV4dDsKKyAgICB9CisK KyAgLyogTm8gZ2x5cGggZm91bmQgaW4gY2FjaGUuICAqLworICByZXR1cm4gMDsKK30KKwor I2lmIGRlZmluZWQoR0xZUEhfQ0FDSEVfUFJFTE9BRCkKKy8qIFByZWxvYWQgcHJlZGVmaW5l ZCByYW5nZSBvZiBnbHlocyB0byBjYWNoZS4gICovCitzdGF0aWMgdm9pZAorY2FjaGVfcHJl bG9hZCAoc3RydWN0IGZvbnQgKmZvbnQpCit7CisgIHN0cnVjdCBlbnRyeSAqdGFibGUgPSBm b250LT50YWJsZTsKKyAgc3RydWN0IGdydWJfZm9udF9nbHlwaCB0bXA7ICAKKyAgdW5zaWdu ZWQgaW50IGk7CisgIAorICAvKiBTY2FuIGZvciBjaGFycyB0byBwcmVsb2FkLiAgKi8KKyAg Zm9yIChpID0gMDsgaSA8IGZvbnQtPm51bTsgaSsrKQorICAgIHsKKyAgICAgIGlmICh0YWJs ZVtpXS5jb2RlIDwgR0xZUEhfQ0FDSEVfUFJFTE9BRF9TVEFSVCkKKyAgICAgICAgY29udGlu dWU7CisgICAgICAKKyAgICAgIGlmICh0YWJsZVtpXS5jb2RlID4gR0xZUEhfQ0FDSEVfUFJF TE9BRF9FTkQpCisgICAgICAgIGJyZWFrOworICAgICAgCisgICAgICBncnViX2ZvbnRfZ2V0 X2dseXBoICh0YWJsZVtpXS5jb2RlLCAmdG1wKTsgICAgICAKKyAgICB9Cit9CisjZW5kaWYK KworLyogQ2xlYXJzIGNhY2hlIGJ5IGZyZWVpbmcgdXAgYWxsIGVudHJpZXMuICAqLworc3Rh dGljIHZvaWQKK2NhY2hlX2NsZWFyICh2b2lkKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAg c3RydWN0IGdseXBoX2NhY2hlICpwdHI7CisgIHN0cnVjdCBnbHlwaF9jYWNoZSAqdG1wOwor ICAKKyAgZm9yIChpID0gMDsgaSA8IEdMWVBIX0NBQ0hFX0hBU0hfU0laRTsgaSsrKQorICAg IHsKKyAgICAgIHB0ciA9IGNhY2hlW2ldOworICAgICAgCisgICAgICB3aGlsZSAoKHRtcCA9 IHB0cikgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIHB0ciA9IHB0ci0+bmV4dDsK KyAgICAgICAgICBncnViX2ZyZWUgKHRtcCk7CisgICAgICAgIH0KKyAgICAgIAorICAgICAg Y2FjaGVbaV0gPSBOVUxMOworICAgIH0KK30KKwogLyogR2V0IGEgZ2x5cGggY29ycmVzcG9u ZGluZyB0byB0aGUgY29kZXBvaW50IENPREUuICBBbHdheXMgZmlsbCBnbHlwaAogICAgaW5m b3JtYXRpb24gd2l0aCBzb21ldGhpbmcsIGV2ZW4gaWYgbm8gZ2x5cGggaXMgZm91bmQuICAq LwogaW50CkBAIC0xNzMsNyArMzQ1LDkgQEAKICAgc3RydWN0IGZvbnQgKmZvbnQ7CiAgIGdy dWJfdWludDhfdCBiaXRtYXBbMzJdOwogCi0gIC8qIEZJWE1FOiBJdCBpcyBuZWNlc3Nhcnkg dG8gY2FjaGUgZ2x5cGhzISAgKi8KKyAgLyogRmlyc3QsIHRyeSB0byBmaW5kIGdseXBoIGZy b20gY2FjaGUuICAqLworICBpZiAoY2FjaGVfZmluZF9nbHlwaCAoY29kZSwgZ2x5cGgpKQor ICAgIHJldHVybiAxOwogICAKICByZXN0YXJ0OgogICBmb3IgKGZvbnQgPSBmb250X2xpc3Q7 IGZvbnQ7IGZvbnQgPSBmb250LT5uZXh0KQpAQCAtMjIxLDYgKzM5NSw5IEBACiAJICBnbHlw aC0+d2lkdGggPSBnbHlwaC0+Y2hhcl93aWR0aCAqIDg7CiAJICBnbHlwaC0+aGVpZ2h0ID0g MTY7CiAJICBnbHlwaC0+YmFzZWxpbmUgPSAoMTYgKiAzKSAvIDQ7CisKKyAgICAgICAgICAv KiBUcnkgdG8gYWRkIGdseXBoIHRvIGNhY2hlLiAgKi8KKyAgICAgICAgICBjYWNoZV9hZGRf Z2x5cGggKGNvZGUsIGdseXBoKTsKIAkgIAogCSAgLyogUmVzdG9yZSBvbGQgZXJyb3IgbWVz c2FnZS4gICovCiAgICAgICAgICAgZ3J1Yl9lcnJvcl9wb3AgKCk7CkBAIC0yNTgsNSArNDM1 LDYgQEAKIAogR1JVQl9NT0RfRklOSShmb250X21hbmFnZXIpCiB7Ci0gIGdydWJfdW5yZWdp c3Rlcl9jb21tYW5kICgiZm9udCIpOworICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoImZv bnQiKTsgIAorICBjYWNoZV9jbGVhciAoKTsKIH0KSW5kZXg6IHRlcm0vZ2Z4dGVybS5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KUkNTIGZpbGU6IC9zb3VyY2VzL2dydWIvZ3J1YjIvdGVybS9nZnh0ZXJt LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1yMS4xIGdmeHRlcm0uYwot LS0gdGVybS9nZnh0ZXJtLmMJMTQgTWFyIDIwMDYgMTk6MDg6MzQgLTAwMDAJMS4xCisrKyB0 ZXJtL2dmeHRlcm0uYwk2IEFwciAyMDA2IDE5OjE1OjU5IC0wMDAwCkBAIC02NDEsOCArNjQx LDcgQEAKIHsKICAgc3RydWN0IGdydWJfZm9udF9nbHlwaCBnbHlwaDsKICAgCi0gIGlmICgh IGdydWJfZm9udF9nZXRfZ2x5cGggKGMsICZnbHlwaCkpCi0gICAgcmV0dXJuIDA7CisgIGdy dWJfZm9udF9nZXRfZ2x5cGggKGMsICZnbHlwaCk7CiAKICAgcmV0dXJuIGdseXBoLmNoYXJf d2lkdGg7CiB9Cg== --------------060606010702010303060102--