From: Sebastian Siewior Subject: Re: [PATCH -mm crypto] AES: x86_64 asm implementation optimization Date: Thu, 24 Apr 2008 00:32:21 +0200 Message-ID: <20080423223221.GB16683@Chamillionaire.breakpoint.cc> References: <1207723262.18313.37.camel@caritas-dev.intel.com> <20080416073108.GA13494@Chamillionaire.breakpoint.cc> <1208333949.4322.5.camel@caritas-dev.intel.com> <20080416184016.GA21365@Chamillionaire.breakpoint.cc> <1208403403.4322.27.camel@caritas-dev.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="lrZ03NoBR/3+SXJZ" Cc: Herbert Xu , "Adam J. Richter" , akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org, mingo@elte.hu, tglx@linutronix.de To: "Huang, Ying" Return-path: Received: from Chamillionaire.breakpoint.cc ([85.10.199.196]:60585 "EHLO Chamillionaire.breakpoint.cc" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750941AbYDWWc3 (ORCPT ); Wed, 23 Apr 2008 18:32:29 -0400 Content-Disposition: inline In-Reply-To: <1208403403.4322.27.camel@caritas-dev.intel.com> Sender: linux-crypto-owner@vger.kernel.org List-ID: --lrZ03NoBR/3+SXJZ Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline * Huang, Ying | 2008-04-17 11:36:43 [+0800]: >Hi, Sebastian, Hi Huang, >The files attached is the separated patches, from step1 to step 7. Thank >you very much for your help. I've run the following script: |#!/bin/bash |check_error() |{ | r=$? | if [ ! $r -eq 0 ] | then | exit 1 | fi |} | |modprobe tcrypt mode=200 |modprobe tcrypt mode=200 |dmesg -c > step-0.txt | |for ((i=1; i<=7; i++)) |do | quilt push step${i}.patch | check_error | | make | check_error | | rmmod aes_x86_64 | check_error | | insmod arch/x86/crypto/aes-x86_64.ko | check_error | | modprobe tcrypt mode=200 | modprobe tcrypt mode=200 | dmesg -c > step-${i}.txt |done and the result is attached. >Best Regards, >Huang Ying Sebastian --lrZ03NoBR/3+SXJZ Content-Type: application/octet-stream Content-Disposition: attachment; filename="steps.tbz2" Content-Transfer-Encoding: base64 QlpoOTFBWSZTWcllzE4BS677h/CQAgBAZ//wQBp/rd7gAAQADOAAAAhgVp8+AAEAD4B77FAo AAIAAAAAB9xKgApQAKeReIx2No0NBBSoNzuu5tOhJIG22mam9w9d4BRQmxw5w6IVWtCVClFA qUoiFUlDcAAABjlUiqUUpKqSoUCSVUVUUkRdwAAHDYG6VFSkgUUIUkKUFUQoJXTVCkhSClQ2 yUkkqtGt3OAoAUopQAOcQAHw1PIGilJTUEwEZGgeoYCGBqeECkpUIABoAAAADU/aqlSNMJpi YTRkMJpo0aNDQEnqlFVNplAAAaAAAAA3qnqqqNBoGQZNAGgAaaAAqKJkEkEjYqMj9TRqM0Rt T9UB+qfaH9x7/gPx4h95PBZJOYkR+Pyb5v0+nz1qQo0j4Vhxx9N3OUdwzxiH7IWSJr/Dc2+L beDvz3ZtcbqFQqFQqFW23bs2txuoVCoVCoVYqFQqFQqFQqFW23bhrdnUKhUKhUKsVCoVCoVC oVCrbbtw1uzqFQqFQqFWKhUKhUKhUKhUKh3ba46hUKhUKhVioVCoVCoVCoVbbduxrcdQqFQq FQqxUKhUKhUKhUKttu3Y1uOoVCoVCoVYqFQqFQqFQqFW23bs2txuoVCoVCoVYqFQqFQqFQqF QqbuxcbqFQqFQqFWPWbeo2+nAf3h+oCfEDoD2A9Ae4DQCewHvA+IHwA/zA8AeAPAHgDwB4An gPAeA8B4DgHgPJsSqtqqtLZbJNg8ByDwHQPAdA5BsGgcA8AJ7x8wD6gJJQH7ET/IBKIwAqRJ QFSEoCyRIoCySSGAEskRGAFGAEwAxEJQFSEnGAGJJJFAUjICVIwAqEoCxGAEokwAqJHwiJ7q tW0l8guUW7ro6d1yJCmbUmmLb4pGJQTRGujYSuk+m7qTKbnnl55552uRbtcOmkteRmSElG5i 8TJbyZLO3c7K3XK662vUyvOmoolALrpkcKLurtzBTuAp1u7gxOdd1GiIuuZu7uMm7PO7sxie drnuvHO7y8RZfoAUowwikCUWCW20QQwG2mEV06c6dVdZa6S1nTdXWpg10Y3Y8vOvMV3d3jzy eddK509tW8MGxLzuxOOXGUm5dNyuFSjKQSMmhTSVAaumbVsmsqWQ0mta5o3JXaB7xCKYu7XJ M5cQrpdeSdu7u65qNc5ueIEBq3tquNGojZkogsSgPdjaS07u0k64p2uWNZCxtHi3ILdMRc1z QaYDJExPeu668vJ5d3djqLaM1a5asabJOW1zQGYti17q3opEaKgsmyajG15RUVJIG8isYkwK Ct0miTZx0a93K6TzojYNeXea3nbsIdOJMJiXOS3leLRryXmnS502921+6qq23vvugjk7o0aO 1x3VEaQ22NNskijQRQaJMiUaoSEI0QC2xmyJBKYyZRiaRMFMZhmE2NpZNJIQSYWIpmJAWGZN GQyaTCEaSZailJNRYEklksabBgkigxgFjGajQmNSFk2MTCLBik2SxSpCkwDJtYMGLRVq122r bXbGMimJTJc1qVy1hQoUKFChQoUKFChQoUKFChQoUzUrlrChQoUKFChQoUKFChQoUKFChQqq FChQoUKFChQoUKFChQoUKFChQoUzUrlrMzWsKFChQoUKFChQoUKFChQoUKqhQoUKFChQoUKF ChQoUKFChQoUKFM1K5azM1rChQoUKFChQoUKFChQoUKFCqoUKFChQoUKFChQoUKFChQoUKFC hQoUKFChQoUKFChQoUKFChQoUKFChVUKFChQoUKFChQoUKFChQoUKFChQpmpXLWZmtYUKFCh QoUKFChQoUKFChQoVVChQoUKFChQoUKFChQoUKFChQoUKZqVy1mZrWFChQoUKFChQoUKFChQ oUKFVQoUKFChQoUKFChQoUKFChQoUKFCmalctYUKFChQoUKFChQoUKFChQoUKFVQoUKFChQo UKFChQoUKFChQoUKFChRStQoUKFChQoUKFChQoUKFChQoRSRP7wAAb/WfwWllz/Dn8ChJ5Bx 5/CYOZgwYptOt6GIHecewV1x4KHWL66V8DpZXVd87PQiU/TRubnZWxdfU61OcKunky8cyde5 dWtEFG7HFPL6TrldisK7MtKrBdlvMa3cdQduNt2727xhqWRBpVFYNjLDmkhF64dhCr3Tae6d kvH7HGgxs0xWQsLsUvX6qmE7d1Z56gXvMHQXxkS31VUvls2roReUjVPC91S5w2sJRdOXTMgu XjzGsaejCaiiqma2ZTxz3N+kq1s7FdreFK+bN2903jVHMGzDePNm1gMfJdxfPdeB8pLe6qvl fHM6n2XUPCdiMFI31VO3c6hkPAi8ErNedKY7D7u1cmaCwd3Uwb7pBnmc6nCt5yunWcZWYhWZ Yzqe09kFJ3wel88uHpxd7QiVKPvI4tFCotk0du9NIXU73ZxcOWstwwY5Nzk7O90O11Xe3vcJ kSW1j2UKznrl8c6tymWO3o31XUWEa+K3pTcuVgpszNreq1J1UryvUQX1vZedgV1vM5VOrt9X sLx54zqD1kpYWFlYrqZoUtyUKm5N7uvZm5ub2Dtb3dDDekG6/aesLWsYit9vTDmNuZKiCzfU nM3hVGRZjZdJ8n25SV4OFbGENyXWPt1qtam2OrK3JehwnhlPNvm9Is9LM0JKx7UOtaFZA2Xg 2GlPiabtNzdhObowxm+d44TAXnbSy61k9ylq7dStWHbMbHB71x+v3P3EjksQlHOzh2bXDOOi +zdhHdbi1bFdYKMsUGZZzldTq2rceE7Sa29skRrUdsPAzQe4GXlR1m7XVeVd9010EY3s7LZr DoZveLrilmnp29qy6zNU7HdzqHZedzqU82dq7c9RfEG4FUGk5d5R5trDVan0O5ym7ycrua4q ThsrLuDp1WOVztrFhuErOl9G5Qrr266VKvTgncRBZS69yIQGsqTEus7yk6Ve296Bis5nYreb Vt7gvOxnpxOInMkvHy7RV48tg7puOakNrVBzss8cuKda0VwIN2Kt4uNF4rqNG+vqndzcKsPr 6zK5DqZzKnr6NNdtPVlCKWO5xYJoYb7MuQLBp5nZGW50uq6piL3CHddmVglXkYnUpSL2gMVW nBMqoaBVR7NmJDug52xWEZiy45zns5+QHsCge8BJPgAkmQfoA9gEk/qA+YAOAAf3wAAAPe9/ v/4f9/8LbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbfgA AJJPqAkn/A+UkSPSwpbbFWLRkEiYykaTbTVkRpQpLUtVNqsmqzTNJpSwaZpk22aZplDZYFlq yLLVkVYFQiPwAgx+H04+fz+XPkPeOutIc4kOEg6SJZSrbZatVYkUDsEfTeMeZ39Meta3jHLx 9bSzRu1gypjb03jNEGpEbIx9Bca4smmxlIsZu8oJg1jYDWGjj7tDyZqB800nu1sm2nrXTrGm 8qdNui89aruX+g5SNc8g9k9V2KRz/vQHhs/UJuW1IHgd7/yAP3/8fRO3Hq+s49BB4hnPq783 NWCDOc5xC832zzvgIMwXT2u98BBrneJiuucrtw7zyhBTN4556023dVqoQdZ3rjQJ00iCfIo+ UXi0ATuJBIkWbh6ESs8vMqr0SEo05NVQAHgBUnZHOYHVu9Q07vAB0NrpCLAJ6ukrqClrXLL9 q+HgCJfYCQ9b2xNUp7Qvb2eU631dV9ZZgzt8sLFYHg46fPXOT2xd68RyoNAAAA9fv0WY7NdY 664CDevLvh33Imee5cuK3jFVLgqrW7qUT4/fDbmjZWSY9eWKthRj6R9r9lKjkNrbwRIJeFtC 7oQZ3YfAWrl8tJOzmSSd1VtWXOdVzTV3lzdyLClo6lhut15Kb52uKd5oeE4loAHgA8u8+xmo 8jxARamatrPBOCsITQy/Bkb4AQIwT5eA9mvwYg+5oWVQXZWYQRxQRvXdznEbFOPXmXsH1y7x Codq3cQNcMEp1sv11fBnG5rZBxApguXCQ8VaAB4AFAydKQh9l0D0aPHufJnBqGJRUOBDd21T mrNuwRXITpdBHDdV09pHXeZpurOT7G800lbKlVgXjpbDdTJG4IwI4VubQywoueGW3BoWaAA8 AL7ZUHDcU8iuRVBoChV9xiiIPiB7xK7Mr3prp6vCbmASAJgIyvDjVvWsMNO56oli7aSWdeyW 8AJG1Gza0vBwBOBcTHgYMQnAfdmCds/dLdx/ZfiYLzHepPcSdM639BxqwAPAC16DeQqKoiYo QFbgQOrtXdSL3hzNsbsELbN2VORGblsMd4Tu7l2ATuiD7E+m/Aj4VHYrxPiTATSr4OaKvwSL SGVQEtEWHkcxYqbsGCeUTmcSNCsmULmT0Zpu6xXOSzJjl9zl+7AdggpVZ3UnBFV2RmzRekZx 28u3qZdKs3M6u6Su59yChYCvefcLwxY3ryjjFVfZXqD9t1WEWNyssUiG1YIhO6p6Am9x12Os qmoNvsYgUKMFMcXhj0XHzO7B27dLqXJ4KtldC9dc73xz1z004zx27cviBYttS2WwpWAghlST KIkiRTEkREhmZJVV8b5fB8t8Pj7869Q5dM5OZTkzO0FlMUWUI1VcG8QeWcpHTpdwmrYHVeXu bMWOPll91FZReU0qJhVbrFVY7KWYriniuhhmsmtDtWk8vBnOnHHXXfedzrvwBJOxBxIhUFXZ NGksGjTMAAAZApKzRqWLNlKKURPvAgDwA/aAAAA+zVBex8eH2KoSj5wuKLyhZ3jC0tPLLrDF 7sxvGe7tm0AB794AAA8fXUv9UYQTZGROScAHoUTUH6/zMI0+kjdd/PrusMOY/Jj1SFUDp+x0 LJrkwCQGLmZXtPrNGhDM2qp/twnPw4sS4jCnOyHY4AAAbgYf0weqqW12u2AB4ATo/d4A/mOA qQRB/KMR8PxYQaoUdPvQQPj6SPxXWOVeTvrqvR5HzgQfy8EHtfhIIrB9GbPwwGgyET9I8q6P e++sVE+k4PAkkg50eZ8AyKVyEA42PMHl7S/EEMLy8FMgh+O1GRF6z4MQjy/BJnD0AR+G9Ifc QQkOIgHV1ALZQnoJ6HNzqkfS+AAACAAHhnj6ayTMXTTnc+++9X3QBpoXHN2SJ4TCSCSXfOET 5eAV5UhuavzNyhR8eQ8N1iCAIhA+Ju7Y/eJpBEIrpddQCskAkcQi0jKI2fpE0foAgwPEE8Ir V+gAAPBO7Jb96CQSc/IRnnHh9ngiGbJOT6FcZP4c/NP0Kgvs6+TwxnAAACKd7KOCDFTQMjQz F2WASAPvSUQYOXMeR96/WvjvIUfDPHxBOpHYQ3vhPUFnthEAn2HzNnw9JIIIPgKdbJPiYKhD zIFYKH20LMnwJAtqT1hi06axHUltmabul1zvnnTd7piwokgLWxR8CQCRh8SPiGbMBhHGrG2U nqS6kn9oAAA+e9Q2DxHRl5J61vr+XyU6szxestXNirDOGJm4s9SGrHGTjhjBFbh/KqOY/V+b 8OPrLPrLPguQogX9b8TJbHWs5jqurOLGKPVOrPOWsotheeO2pq3Ky3lRmtyzeet4NaTimKzT dAUIZGR4SQzHiNIWj6AIPgoQp8dzP19U1zDpEeBYC5TAcx+VNgpBjN+s+B1Afh8LPgiKYXiW QKPlyEPjOTJAo+9ZDAtew+iF7ICPmgMhDwV58sepskkkNVFmqXqhmhSH1EVAiIjSZDoJ8UOK sfPy79UEa9xg+WEJhEiyEfx87NGrElyZ928AJ7gE2841zxnt16vPGOK5eZz69OJb3cbJaufO zX0TV2ziydhludXMluxAUQGbUdI4vUBo/PEhOzMeEgJdEQPr2XXhYBBPm/tEjSS89BAhXSgE gSSD4kAmgfHUgRtL0GgN1cpRNDsoTjnvsdthuxXxiJavDc7NSb2OR80j4kmj0fADxPvF30l1 rEi3x6u9y5c06uFvh83wduhpbIBAJBJ+KBJPyCPupMgSOIRMxcFt525QzxFtWxU1cY653zri mokvwCIItFfHi/QC3bHlPF4J5FNAERUw+wIV8D5LWCmcr1r9+D+lV+lTLvLJYlAPDbyyG75f YfD9+/MPzws8MoOINsBlLCE17CGkwNeuE/JE0rYYLSC8Lv76erIhgIhBAwqh9l0DXl4EmkmP pkZAolQIMEFY0x4I2CSvFJCiEfE5FR8IQfEgsCj73dB67IRuQsSgsjtGfun0+kWfjioY7xQc q2zUD39qC/FIMjhiqUgwXhv2Aj2AJma8vOWLz7Y6Z9stb5xc+Vf8pkAg18R1XdoIWUzqZ8Gg j3S8mwZgSRAJHJ88gog+BPifEgnV9ZxNElV4peJ8qSSHsi+udWE2SAKQQCIMmVdWJ1ZxT+oQ WhBx363n051eO8+7fmOuevbG+ZoCP02AvrrRYKQ2qzYDlvry9zam1uFiozVXOxvBV5XDLy8Z rraiuA1iNNC7uzZg7eQl4hqsEdnM37EJdXY7txrHbv3YbrMsbE1IZ6X1XWURlGFwbt8sp0+q 9Z65x29pIkzEsssttpaiJyBYFAsklAoKBQUAgAAgAAAevyxxNhdfaMlLs1+czqhbs3JV2Di2 RHk9465tSr197oeAjJ0Xw4M3yMdbwxF2MKhI7rKN46W4dqtwbNybVyhFFspHlrnC6ehc85jq gVXg94AWFTRo0myaNJNU1bNJpNEaCjS1TWzWzTTZs00002WUNNNNMRMDMDLMYQMwMrNmmrJY sWSxUfDQIz5xd4vesr1xx3eGfYIPdKEFeuMhB1Qg8oQH6vwQAHgAXi34rwggbi/UjWZAwHLj 8KWmGJWPPr4BZkwJzt/KjbXS4XIe95eWbUjrHp6BFEepFDDA+z45wppIQ0NqfHrzZF5AetlX e047wwvhEAMgzkSEEAEaB9B81lImAHCvvnk8j7kvUhfGBoFeOV6uylnNcrHveJBvnNVYtSIU A97wtzE2TGjjRtg2znCHK7xKiSkowMjdcjeB5NTMgSHVGbJRVqi1lexFAVizrQgovFIlB5no XRRpdHDwZFFxRrjKQ2bdHS4hMrsn3Ltw1K5nHG3hdup9RvyeSEnxKKzqnhEvZQQAJRApglAD T4BvvltZ4NI+AqkL1eJNK6kSJqOvBsMgQaGdqigKbyIK7HDnlWk6sLGgAAAenCy1bdUFpGZg 10cntpe0T3MR84rc32mx7e2DeBFlGnuC2rvE90rRlTeWN07IuRZVW52tlww9sgiZbtjCyWhp tOVWaa8LP9IAAj2ASgJ1zvWe7xy7z5i+ax00q0whRASWn2mt/P0VsG0ERXLwvEIxiuUmDhaj Z0ADwAjMWG3JazLNthRNY79J0cX7ZhfjWTZQwgEktCMJNBk+oGtMo0d3O7crnR8OrVpjeH3U J1V65Tjg7aDh7vVCpQkpreHvDAR/PAAGKB0ID6DxJRauzXhW0mATu1TboV71TBFXfCF0K+jL RAAA8NnnIraWjMyaunb7wMcySp8N249pF7lsUcV501fkCQT61fS5KJRFRVQSnbQN1AUytD7s 66PYzlRu4GrDDY6F3tkZMUjhuutB6EIdtIdWVIrzwnPX32Ye7CRjJoQCEfAvLL93JHKXNU7y sVhxBNca2WIlRCPvsTw3M+ufGmVdp/I4kNy59KG4wbzLIPUdZG1NlYPojPX0Yi4mXbmyZjEQ qsTsHrGFYd9NWLT2ubFsqxLFu4eh3WTbsaqlXXsgW9tsO5zJCqqylEe887svoL0DOyDlvmYZ swHkqoXAlZun7T2C4dlGC7DKoRfwAAAUAAAL6YNye0VdzahLrhULR7DUBqYwzV3Laz6BUT3Z KvVyIPTcNh4fF1KoOC2bqB82IbQTR3LyHsNvNXKzxWLD7UuJ9O3Ed0ir7st6rtB03RlUsPPT K1x3wPN2L2GFd/uzp9Ya3HgyvZExzyU3Em1+e8hPmDQnhbwTWBlgE7T5WbA454kAvj+Y6vEp JCND4pLC/qv0I2rnqGEpodVV6yKoXVQWLqdcVDHffF7aXWZd46PZIwsT2zfJWtyzZNgUOF9c FJC3lwBBnTZnofEizcXrraUoiJZ0hBEyZKqjQSu6y3kvBl1RhpWZXW+6b/QAAPCw6r1HPmnf vCGIE0UOOgk+BvsqibLzKZsWKBwrKkv9RZKiueyGh7hAat7efXdhdTowv7dXXKgu8mcdpftD zK+yyNPSj8v0FELrCByq84ivQQvHep0K9fA1ki/AEBQY1T+ZcPH94VSDD/SesgYGiIDSL94h 1GOPqBNEfZ1DsyPsr4qaeTN9t7e2FFBi70w9soMm1B4EinERLns+hVuKKJr7ReeAv61dUICP bGXhmTr2iZ+PCKNkww1j/XU69A+rZzgFEqbUn5EA5qlwLcl3F5VVecELjDi7Gko0WUOAku8N 5XhVlzQw37xNQgPiA5RVQCvuHDM6+gqHQqPGZCj7RIdIkVfqPvl0yiBOHcLB6pJtE5wU7Z87 vCYqxlHRmCSvHw8C0OPg+3Hn5FnUw55qmzy/b2F/qygidjfOd77UictuFceOZwJdq0VrrlEG 7ToHOWwCELsm8mkMKo7OXMimJXLe88hJt5kcpvDs7mGSBJVrgsv6gnkV8fAaN7BzNbCzHWmi HCmIvfo2iUHEOZtIRMFjiIpbo0msH2muHWqzhFD5qL6d375Ii1nZ1rq7Rg3SAWH7KmcF7tpO lwvLmVfnMShPxeySuqKnP0AAB4a7F573cU8+tuMjPwRi83gxMSz+RQ/iS9+N7n4qeFMbw68q dkEsE9CiIjpNX4VGvB7DUs5j+k8e+m26T+xNUFMYQttqEB974sE7VVIQYISvwk/b3T1b+T+B q9U/XeR+qdmv0uxhrL9+iCsI8CE3S10TXhZK9cfqxdEFY7RIk1wwqvLj4kuj6s0RWLbpFuMi ldDFAzBUPxzb4VkOB0+5ictECvXjdJvmZdZbt3wrJSkpSSrydOKi6F0tJkqA65Ri62O3OpZJ arO4qZbre7Js5jetHq7TBmo28tWasQ0U+iOhCncya3j47j3OYxDbwB2A0BHaSGyW2WLEpRJV QQhbANAqZqYyRCkoYNGSgmBY1gkGNKUlIiZmbJZQUCCGGEljAgwBQSyKImY0aMmwgkJRigmS WTGEtMDBGZEBBkGiNQMwxopDBpkmxsSIGxhmwJsmJMGqIsJAAAAAAACQAAAAAAAAAAAAAAAk kAAAAAAAAAAAAAACSQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJAAAAAAAAAAAAAAAkkAAAAA AAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAHnfN3UTj7qFnFSGDL9gNWoryparFRpnUxWN38Zl Zjq6NX2QiyLzqNY25HsrQbNBSm6xJcEdulBz3Hl36hfdU2Lc11KSjh3Ji6Vok5uV7F+6OgNI 0ys3V8IIuNHypgWcb49MzKq1+DbzcyiQCSWaVgmAU4Kd2Q6H4NO3u1bHzGsnH+k/AfvyuT8U rrwVD7L+qPrhTVruc59mA5iJeFbuJzmt4AB4AaNqs+8H028MqoL950/yQbngqbt/teZYB+EL uFD4decn94v5LwF0IHz2pAOrQvpvhs8nwu+FVdjRwtmMhq4LnprORwxFDArmuB++xa6sGfc/ 3uOmqhT8JrqAYVNq6AHytgHa9zqvIAWfAEgC2jcubaVi3i4nflUKp5Ko0+5Cjg4JBAWc4ise KBZdb9EpiI+uIhnRm7W3Fq42do/Hu+AQM8s+3XQsDDgYBw+/MQDxYFFPzD/V85Q+ySYNAxHv ZF0gZNKBzjwuO+rbZ8GL6IiHutv7utyYQh42tH7s6vDSjs6lPToGnuAn171c4CaHTBKAGBko S3C/x39M1d8T9RWK4EzXX5bceMBeR7SdqX9gMfCac2SPj754+39H1Wj5JE5ZyxV2WhC2YjlK XbZKIknH67c/YKJBo1qF1Xq4+bOdXbYdhDdYeH8PhoukNMLpEshJAmAsksHY7F9E2YgfNG4W bCEfIj4oEKo6ndmEqJRcz7BAvs9VXUwaYquTfzF59ckS/QWLzLBgqUxmOv2S9WfH2NaaNpZ7 xVKiZ5EGTZ74fVYEUEpiZ8KvQKhe5IM6VqGcUMIFnwd/m1Ky7vqNbiIiyaLH797wRkw1PDLK 8F1pgUaa9481VOgIaH7tr9nb7CKWTVk0zsV84rhi1qsGahJFKvtqRtQOhzIuLmxM513dRnaK GMObBo4BZYULsO27CxeXl9HeHbks/VdW8nUbdQH6P21ea6FtyJF+5OMwdzjBAtSpyEZy4gck /OMBkv5SlUSlLs++duSqr5fL6hFh5Zkk1wQtgRdTQK0Zzyojx15U17sjMe5VdEB8xAjvy8xd kqNDGgWaLWJBBeXiONZOgx8W+CDPx4kvdraBMpWjlTelwZz0PRgOPI7KmJNXJ9CI6dJdM5ir gbWAUZt3FetagWo2emcBJghAjH6uhBVwRFgylCLAQJIaHcvvruq9xEFEL05sJR4+EiIKOa97 onlTy42dZYy7MvKNS4dN3eXEEG30q6yuBGbm5VbCEQoqwM1dZjiEYK7sbYvqpi6SZSOveexX TE3ZlXW483eqkZfccgmMSpqvFWiqpEdWPOKtWt7Dl4Hy1u8k20rdQ9Whyc00701dwSvsFvwG iQAABVWhwxTDKNZ0VGtnjGI5kOU7irm9Gtd2YsGupm2teXeZZuLhyoPDsisHJtzs2ysTehwc sOSuu5e4neLSSSK5vD2d7Ez3Gy8K3Dlmo09GYnV8Z2O6UyqwZbz+MeAc67qemB3D3zf23n48 vikoPBED1L1cyxWBY5JEvNZTBDKu0gbRWWHdhWZYVQ0GMaBB77mKHcxWeR8yrwnqm1PWxCz3 EZ1VgXnC1TDax8EfXlLZBjUY4C9b/QAA8L8+0MyX0egdogiec8O43kAe5+jBBZRNINhZdsZQ o6qzqA3kOf1bQoYr0/YsmPgfdkeR9UxhacBt0YIud1ZOGPUP14ADAT2cqk2ib97huq7JuxpJ F52DAa8LqBRqvecwO6vCPDL+YBdeFD9i68Dw54k7VBiGiW0d5r5v2fofuP1fGGoFlMwIL01j +4C+SxKGfp6lHwxNTZPp+xTDdxkLGNgR68fzNWIY3s+UrMuqE5dSbY5TfgRfnOz4VSKS1wKJ ylZ+xDYIOacxyxCqD4fhqow1X7aIl25uP9hEX42pPspXZFlS2C1PdnMXasrdpV8LVhQi3+eY P3bOGj2NfOEE/CAEsIUFJ4TOLhX32e9EMiehb6e6opfRJIxRycz9MJXKwKqp1WzPsNfvDEwf 3414Nfp+gnJVwXTjn24wsFnbr5DQb6gsuFUXM5bgnYSqhVUaL+FToxZ2VtW8GS7pfAAAD3gn 1dDurzcpQxtWAB4Ad3L9/hZ9X1zfTkFkL4ESJ6nu3Z+jW4PR4e8tZuR08hfpEnysKyBzy7rA bXHp03M7OafU/Jwn25a3NY02D22cqrnxx66VYJXOg9x9yeGtyPM+dumxxDOmVJki6PUImZ64 4K4902HSpvIxOgTlxNKeUYVfIGTuxofDaFH1RKjKQPUmzRVGJG8D7QrwpCzuzTcpNqovpHAq b2AbjFI5Y20aHablZV9hTuXVpW1wmET426urF+F8gB69oXkT5ecoEHCRjizTrc4wLFtqKJIe YSLEC7vVrqGIAnUCCFytIQQCCAiIIRFkbrjxXoVs2ESaGJLUhg1jbFUV3Dq2itDOJ1HVbzEq K1coWHQN3ZsPYk0LyrjeCdva78dCF8+7VyjojKXFivEuDMCY2vcbwPNWYe1tM2bqDdmm0pib ipjVqCo5f7dHK43cvlx3pjeLc86W75Y1n0A4AR6RYSTAYxQSamZNjEhBlMSSUmplJkYxRRJM pJQISoRISE0kNjCZIGJlGSTbVUwAAAAAADMAAAAAAAAAAAAAAAzJAAAAAAAAAAAAAADMkAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAMyQAAAAAAAAAAAAAAzJAAAAAAAAAAAAAADMAAAAAAAAAA AAAAAJAAAAACSSSSTcWrUxu1jSu8v4XuVEahQLjSjv6S3KDrJQFC8Pa/UlfDVexaSZfThdmQ 4sCV7XXHunIxDSCHDcxMPsFm6u0zlKIPebazH2Ub3KAqDcl9k7OiVrtrWe8a1z10IMpBUFsW rYti2QKTRQCZEZgZQCZKs02aaaaatq8vnltKUNNNJtS2lMTTSkrTUMMjNAhMGZBJs2s002sq tNbJpNjTKE2NFBiIAJsmkrIHwJAJPh7w/q6d23ikhlX3sOJcjbyB3BUlvqVrSN+mO8EERwgx N9V6hMGyTKdXYPLCL66cEDIe6sEHbtVdoIgQ+61CiAeVJVaHJD4+EaBtMjqo+OYvObxQ1504 wiT6jldJJBpVHSFK3io8fETCF5XGz6jXyqlPEsWPmMO3jdfNxWXvi2+I+y5YowQ7xXL7hOwJ 91LZCtCY2Lo6adYKykfWRJtGVQkhK4mbqo9zzFKPdQ4jD7iE0BRFkeNIWQIIKKmuqHYdwNBb cD76/r9XPJ6Ga3CDGDU+UFjMYyNDPq23I2M4AAAe/YAAAezbf04u+g0oCsTc/Rwq6sjujHHX 5G/39AA+HVKDkttCjBrDvUONGOPbkl3Zs+r797ro3JjvNrlnWRuuoTVRWPZUBHEtPHYTvSt6 ztto51C2xeRUMJqVAMEKwZb3w96WyNGRSEXQxWm6bzujfdSkx060JF00xfzoQFlfTWgYhmlS Z5mGmXL2LbsbGjmnPqZqMK0OYkmlAIw2+Vaw3Yc4jQXaw6GVrzA0p5MsFqrXZZfZSuD22s01 VXGxZDo0OXGr1RldMUvkteeOp3WyJ1Y3FhsGl2EvlPMXzYTXSn4WdxCAgNdic1ovUxWjYJiR MWMXTtnd3X8MWWdzdTMNqyry3VvgCJGAz8fXW7AOBQ1LBgrgcXYES11Ikf1B0JDxhayin8qZ /VnCxFdqhhzb1R1XR3Y2IuzFag8ynlgW4yEbdetO1OU5TwR64Ni5BoNZjnZbPGhKq08lQm4q WdkYdBmyZxQeq8upimNXMNl5hT1HORuUdIipC9xjN7G03VnPwAAAqrPPbG1Bjsuc9tJuT2Xd 6LkRl3SdUscKm5Fxi6+XnXblLtCydVDje3BnXek9WYHJasVqWwhvNJbuiq66u3ydVGEUb6sB 1I7G1NRuY1yef0tfYGUTZerHdfddL7K8wz/AdBFzcjwrPBpAEu9+qvB/ST3iR4QTFHhx8CHs AM+Qc9ICIJp+qADEaS24ml29Zw7tXrNa4vZvVs1E/n3eHvHwmo0mQtxDrv0LglWwB71HB8vO t8LPmusSCQMzNmvEfK48F6wvIjxP31Xtu39WVjXxITtGzbjwpcOwRAAeAF/r6Z+AJAJZxdp/ CxYIPg+MAa6HmrtcbFnCV4kH57Ym7As7FCvGROwLCQvNQ+321fXQq9iPh3006HWEaXyBvmV9 JiTWzLerZLm+jt1fzBS2xZy0sx/pQ+Kc6LwB9tVXsIFE0eQeQIMHVcSLA94iDA75D66UBK5y uQV+JJ7tuvVhwhk4Q5v7vpr5RMIxyuypiCYN5aut+dax9qQpLbiPChkxhokC7jJr6ssTG93b hOEpR0QCe24m8VaqI6VmYd1i5mHqpq9bmw1gdH0OfZf5733PhQ2kmnOmab2oS9E6PAfbHveG j4HJYhH4axsWdMeDZ4wHnAXgwbipdqgCCvv1n5nXGeE71er3vetCwIKtJqsn7Lf8xkBKTJQZ FP+NAgWV/Pqo/bnhgHvYdcVNMOPnEpCbZ76LbJfXJs3mQYtOfq+86VY9OFbhhJ7c+0es0l5n 46vlOOrARjw97Xke+uoFGCPjf3yz1UBZHBFPyPvsO0pu+URlxlMTIzYjDXPq2SRO5Ss8lLuz OuaMlSC65SKhDiJOyt5al6gTaUs26qtYlhNHS07WvuizKrVMgtr1jdiufsUUId3aGScOFxHp ensF9ArK8aU0EK8QdXryNo4tvKtXPMh9yd27HRVW9e32G3jljPdJw3HQ6NHZq6I23RGrBOFj et5qzt5u/ccQir2EBJawlREZOJGjVyxssPde194e8gxNaLvwihMyPacPnrP1nRn7LJFxtZlk v9gZ35TptzVNJIuziFWanc942Nvcu6Z4rjhBipjhrzRR6pvRl1vtKm4dHMXbLPb0qxVxmFdY lbVB7ToJyLdNVXdvBoNypE+ZCdUDr21XIuzWei4l7kWWoDBgx8AAAOAAA8Jje5d1nt8V86aY vFDMzNq2tL3mhgQkosIca3j04apmFpWDwLHDIrRq3Uto3gZMun271LRbdTs4ZzFJDClbFy3Y 3Yruq6qrYW72lRdYroY2dp+Qyqyq3bFG277M2/3ck78/fCssQn6tn6venmV4SNP3HknY7Lsk H1+JIS53Uh1rE2beGh6JEVtbQAsDtnSspP64Bk4umcZJzB9VPJrPvfeHhYJJJIGMP0gx+VRo Meej9Us2/xfh++4QZiv3sOQiIARBZ8LhedeXhC3K6bOIBkQzWN8F3vS8N1dY89bAT3gJ3q84 rrz1oORWz9QVfn4NCbLrcO3pkM5pAA8ADw4gnOcQZJM5c73CEUbH4mPenELPhjuLrY8J+zJD 4C0F+QXvEnP34MGlK+fhk5fnFTE8Ig9GtCFCaUfO4iFHpqE8Jfzj6lEPqpe1UinFOGu2q8+B OOYc+zoERw+l3Wb1/Ge8T6jfj7nQgT9H0gT3LJW1fPfgwBlrybLyHwnjA+t5ZVgAAeF1KQNA 2uekweIVmPQdoivhVfdfC/vjH2C5JrVPqFC/qsVDVnNF4Zacqfsrd3M24XdaUrsYIJytMwsU jo+q031ijsQ10ThpXd4zlK2qeWGLFOBJMXdcCKpiOMPdDDm5iiDQmBzi2HgOdjL15gBG7cGc OLJoim0kiuyrNUfkdGcGCeqarFlyaOE9vbGtd2MSuZb7AAPAD7MbD3LGg3K+8pbDH1V4rJta fbVEWHU8iIUAtCSKtSHNZjjBuM3WdraEC8CyoCKCJ1Yl3AJyTjqrPGzdILWNWTdCmvErJPoy WfTQNWXStZzppVfUzTpVNjjh4dNXhVq8V5G4ZnDe5UjLnEWe+OnLCIYcDmGVM+Nek8C8etXd sbIqaJ9I6I6q7hYeYLQzU0uL5xp8zaKmkEba0lsWHMa61euzXToGoKi83XQltX12H2wMTPD5 FjSrVUWUvsky1ZYOH3wh76m39evpH3apXUyFcx9FdrMge5TGy949Ntyb13WDVuPTjCSLvJWZ e4JWbbyslbgWW+GDd2B93To9GTGL6S4iHTqZkS6AiQ9vbmkTb28vOe3fLelLkxN50FVO1Us8 AAALrTjTxNUc61WKcqunXk0jYacxVjubWqolXGt4sOHN5ngwavc5RINXenlzRyw2N3erO2mz gp3dVsxLOvMsJKXDLV6pLTsyHtG3ey5VbjcaqyUXwLsb7pj5tccuzLixFSlK4/bhBQ1tS6GV VokZmZU8bsYernLxZNZHV7NagQRRhLOavFSIwkTxOi2DWg5L04LjQynNYk8R3s63V9tgZlRB iqxz5g3uUxd0ogLanmEabuoHWoMq5QVAwveokjTpFJNUzTutXzjHN6Ag635vOttZs7zXffj6 qXYvRQCKjQewN0Nu+2zBogOimhBg53WDGIkhMGYgxbB4cm5IqxY45CS3heZOcRlQBruxpCIy 9qrsZZK5SxMXdZNHk6dDhDeHOHXpsX6A1ipHelnDjD0ylvGLPoPlVRYuN1XU8HawhJUmdtPG LFDkIIcquFafWal13poV2bMk6VcUR0RUioucgQRG/MmmoLqq2htrbemYQrZj+yfY9wv6xzcb ybmRi3Vzmho1ohUBovOyj3iWImFCgzF4tFSJFmjVI9r5CHbzO9Dy4yrs7FR572MXm0sajZhc DjEzhhDalWaz6ruramCvossoO5Z8fpJLNXUWAAeAF7NWX6nwJHbYJGUFc+U8JWaoPCR6ihde qMTNCjS2o2nlbSqavG06QPXog74uc0KJrLuHETO73evicMCqji7T5TtQXgleHvUJyFmyYRbK G8SoST47RL6IB4NYuQsCvHgiHog+6T6T77CheXkFZQ1isquULGrEYhkgZHCh2d6F5FZXcAB4 AFOq+IB+6r9RI4pljoJ9GiKPhWudrzASyuUKLLzukrBlTyKwQre3EPSNQ2EDVM+DKrOX2CHc ChgDUL9tL33SaT9XgEGbuc9XXPnO3O+eOAgt443rHmdBBgaqc3ithP2nOYWXouhe8+luus6p 7OmSosXYRCdwRliqfHUcztV68Eau3qq3S7sHFOslTlN3WjgkmXMuiHgyCdq2115Iq01JUUSV rV1JYbYmqxndb9ioK627j6qFCsO7lQdj6Mb2XfStwEtmJ6eJYY7/IBJPfD/r9JJAtkkC2SQD baqNtqo22qjbaqNtqqs/XfgXUDX6H4P1dWCq/Q1u6mbeSQkK386MZ4l53Kgc56pk55ilD1a1 k6rQsRV5diaHbw4DoIsfcFew7V3fUKuqzLa3FmXfZmde2XeVhTZ2YbW26Yl89zKy84GGtSln sDoGLTdI8zo4bpat9JVEShGNq8pUcFpAvnlLqMsZhWjCQgLG3CuI4qVumKtXXOEebu5guaWb qjrXK8XG3KdaWpHI29G8T0ps5eZt0Wp2bZV7K11XS1RLVSbWF3iWAmw5oxC7cm2garRu8VdA g22hMNZax0Ru3tUXMapYnWfbWZ55rG7ds7TD7tupgerELqSRkTE31ZxGdTVI6TVCeea+qNiq ldGVJL54JNrOkpXBge7ujMAcGvXKldSboYjdbqpdb3zxasm1dqsMnLqyuXePug5VBey9WX3V HtwLbauL0VeTR3lTVITK3NfNPU3e9r7AZrfRwmuy8NZss1N63suV0d7uHHEWHMMprN2zvSuv pV1MgWdQveoa5xvGerJ0VlPbqZWDVFavnfPeFk9L11ehqbjW3MkU6+XanZYMO6rnaxj6rqtr nA3s3OmYUS+uqFVWVoXT1YFyLmXR3Rm2clw04BdbodU3aQnbu5i9kh3LaQu1Mx0bXIc5Pn8d KKZPLJeBsfVZJnUhmsIoopZd0SNQylzoTNNkp69nW5pkWsaUbeBvG5060htDdm0M0jax6LeJ sSZVRdjGKWygl0e1FvdR7QsnKgu6YpuPu44MGtVmnjWAGQVVCqKYbQK29NLelDTxPahNwaKm aI3cPV18VbRb5qrpVlqj3uyRR12v5ZZl8shN6T1HKt5JqJzYTxbhnNjgtVmTJQPKSme6n03p VclgNAxRhLdPXTovBIOG4jOvN5bdDjdGExR7L6zL1E0SGsSYsWLDnGlUg7bDoq5uYZAh71LG 80W74NIpLdxp5xu2rmyp5dmM4C3JuuxVVy2STuQNU6I6ErpeKazYpuBM08eQ7psLT7HWSusz qR1C7RczHOd3q3YMT4tjohH0ldeHcqB4WZWzOhO83DDtUCU2Joe7KmbwK52l3BmBEUusKPNa xHFdW26rKj9JBNfd0itDdd4tI1TuUYhuWS6dOXVk0JRZV1XsvORvNPdTwc3VCV3VtKSqB3U+ L2sT12QtUx8K5HNKzbO7F3O4CtBEZL1y9gp1BtpGd7NLRKhdLOdGlW1kuUNEW2+lK+cDhuyl zrDT1XYMoasEtVsOdnaRwl403R2qlq2aQjvtj3H1vnVaiS9s1Dwyt51dvUPwAfxh+aH8wEk+ oGof2h8gBJPyBsGAfYBJPyBW2/b6AAAEgAAAAAAAAAAAAAAAAe1VW2VUUDwBJP9UMA/mBwA/ MBkDUGAEk+wCSYAST9QFAB9gEk9APAH2Q9yHYCSbAQYASTACSfEAkmAEkwDYDQCSUBJPQGAH gCScAMAAoCSZH9AGgEkxD4APaGAEk5B2AwAkngKAD2AST3Q8AZAST/mH2H2/P/5933+/37Af FD7j8QEk+QCSWH4gJJYKAknwABgB8QGwEk2D/YfeH1B8h0DpD0AknzASTQD/EAkn1kZ/4u5I pwoSGSy5icA= --lrZ03NoBR/3+SXJZ--