nsprpub/lib/tests/base64t.c

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/nsprpub/lib/tests/base64t.c	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,3015 @@
     1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.8 +
     1.9 +#include "plbase64.h"
    1.10 +#include "plstr.h"
    1.11 +#include "nspr.h"
    1.12 +
    1.13 +#include <stdio.h>
    1.14 +
    1.15 +static unsigned char *base = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    1.16 +
    1.17 +/* PL_Base64Encode, single characters */
    1.18 +PRBool test_001(void)
    1.19 +{
    1.20 +    PRUint32 a, b;
    1.21 +    unsigned char plain[ 4 ];
    1.22 +    unsigned char cypher[ 5 ];
    1.23 +    char result[ 8 ];
    1.24 +    char *rv;
    1.25 +
    1.26 +    printf("Test 001 (PL_Base64Encode, single characters)                         ..."); fflush(stdout);
    1.27 +
    1.28 +    plain[1] = plain[2] = plain[3] = (unsigned char)0;
    1.29 +    cypher[2] = cypher[3] = (unsigned char)'=';
    1.30 +    cypher[4] = (unsigned char)0;
    1.31 +
    1.32 +    for( a = 0; a < 64; a++ )
    1.33 +    {
    1.34 +        cypher[0] = base[a];
    1.35 +
    1.36 +        for( b = 0; b < 4; b++ )
    1.37 +        {
    1.38 +            plain[0] = (unsigned char)(a * 4 + b);
    1.39 +            cypher[1] = base[(b * 16)];
    1.40 +
    1.41 +            rv = PL_Base64Encode((char *)plain, 1, result);
    1.42 +            if( rv != result )
    1.43 +            {
    1.44 +                printf("FAIL\n\t(%d, %d): return value\n", a, b);
    1.45 +                return PR_FALSE;
    1.46 +            }
    1.47 +
    1.48 +            if( 0 != PL_strncmp((char *)cypher, result, 4) )
    1.49 +            {
    1.50 +                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.4s.\"\n",
    1.51 +                       a, b, cypher, result);
    1.52 +                return PR_FALSE;
    1.53 +            }
    1.54 +        }
    1.55 +    }
    1.56 +
    1.57 +    printf("PASS\n");
    1.58 +    return PR_TRUE;
    1.59 +}
    1.60 +
    1.61 +/* PL_Base64Encode, double characters */
    1.62 +PRBool test_002(void)
    1.63 +{
    1.64 +    PRUint32 a, b, c, d;
    1.65 +    unsigned char plain[ 4 ];
    1.66 +    unsigned char cypher[ 5 ];
    1.67 +    char result[ 8 ];
    1.68 +    char *rv;
    1.69 +
    1.70 +    printf("Test 002 (PL_Base64Encode, double characters)                         ..."); fflush(stdout);
    1.71 +
    1.72 +    plain[2] = plain[3] = (unsigned char)0;
    1.73 +    cypher[3] = (unsigned char)'=';
    1.74 +    cypher[4] = (unsigned char)0;
    1.75 +
    1.76 +    for( a = 0; a < 64; a++ )
    1.77 +    {
    1.78 +        cypher[0] = base[a];
    1.79 +        for( b = 0; b < 4; b++ )
    1.80 +        {
    1.81 +            plain[0] = (a*4) + b;
    1.82 +            for( c = 0; c < 16; c++ )
    1.83 +            {
    1.84 +                cypher[1] = base[b*16 + c];
    1.85 +                for( d = 0; d < 16; d++ )
    1.86 +                {
    1.87 +                    plain[1] = c*16 + d;
    1.88 +                    cypher[2] = base[d*4];
    1.89 +
    1.90 +                    rv = PL_Base64Encode((char *)plain, 2, result);
    1.91 +                    if( rv != result )
    1.92 +                    {
    1.93 +                        printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
    1.94 +                        return PR_FALSE;
    1.95 +                    }
    1.96 +
    1.97 +                    if( 0 != PL_strncmp((char *)cypher, result, 4) )
    1.98 +                    {
    1.99 +                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
   1.100 +                               a, b, c, d, cypher, result);
   1.101 +                        return PR_FALSE;
   1.102 +                    }
   1.103 +                }
   1.104 +            }
   1.105 +        }
   1.106 +    }
   1.107 +
   1.108 +    printf("PASS\n");
   1.109 +    return PR_TRUE;
   1.110 +}
   1.111 +
   1.112 +/* PL_Base64Encode, triple characters */
   1.113 +PRBool test_003(void)
   1.114 +{
   1.115 +    PRUint32 a, b, c, d, e, f;
   1.116 +    unsigned char plain[ 4 ];
   1.117 +    unsigned char cypher[ 5 ];
   1.118 +    char result[ 8 ];
   1.119 +    char *rv;
   1.120 +
   1.121 +    printf("Test 003 (PL_Base64Encode, triple characters)                         ..."); fflush(stdout);
   1.122 +
   1.123 +    cypher[4] = (unsigned char)0;
   1.124 +
   1.125 +    for( a = 0; a < 64; a++ )
   1.126 +    {
   1.127 +        cypher[0] = base[a];
   1.128 +        for( b = 0; b < 4; b++ )
   1.129 +        {
   1.130 +            plain[0] = (a*4) + b;
   1.131 +            for( c = 0; c < 16; c++ )
   1.132 +            {
   1.133 +                cypher[1] = base[b*16 + c];
   1.134 +                for( d = 0; d < 16; d++ )
   1.135 +                {
   1.136 +                    plain[1] = c*16 + d;
   1.137 +                    for( e = 0; e < 4; e++ )
   1.138 +                    {
   1.139 +                        cypher[2] = base[d*4 + e];
   1.140 +                        for( f = 0; f < 64; f++ )
   1.141 +                        {
   1.142 +                            plain[2] = e * 64 + f;
   1.143 +                            cypher[3] = base[f];
   1.144 +
   1.145 +                            rv = PL_Base64Encode((char *)plain, 3, result);
   1.146 +                            if( rv != result )
   1.147 +                            {
   1.148 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b, c, d, e, f);
   1.149 +                                return PR_FALSE;
   1.150 +                            }
   1.151 +
   1.152 +                            if( 0 != PL_strncmp((char *)cypher, result, 4) )
   1.153 +                            {
   1.154 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
   1.155 +                                       a, b, c, d, e, f, cypher, result);
   1.156 +                                return PR_FALSE;
   1.157 +                            }
   1.158 +                        }
   1.159 +                    }
   1.160 +                }
   1.161 +            }
   1.162 +        }
   1.163 +    }
   1.164 +
   1.165 +    printf("PASS\n");
   1.166 +    return PR_TRUE;
   1.167 +}
   1.168 +
   1.169 +    static struct
   1.170 +    {
   1.171 +        const char *plaintext;
   1.172 +        const char *cyphertext;
   1.173 +    } array[] =
   1.174 +      {
   1.175 +          /* Cyphertexts generated with uuenview 0.5.13 */
   1.176 +          { " ", "IA==" },
   1.177 +          { ".", "Lg==" },
   1.178 +          { "/", "Lw==" },
   1.179 +          { "C", "Qw==" },
   1.180 +          { "H", "SA==" },
   1.181 +          { "S", "Uw==" },
   1.182 +          { "^", "Xg==" },
   1.183 +          { "a", "YQ==" },
   1.184 +          { "o", "bw==" },
   1.185 +          { "t", "dA==" },
   1.186 +
   1.187 +          { "AB", "QUI=" },
   1.188 +          { "AH", "QUg=" },
   1.189 +          { "AQ", "QVE=" },
   1.190 +          { "BD", "QkQ=" },
   1.191 +          { "CR", "Q1I=" },
   1.192 +          { "CS", "Q1M=" },
   1.193 +          { "DB", "REI=" },
   1.194 +          { "DC", "REM=" },
   1.195 +          { "EK", "RUs=" },
   1.196 +          { "ET", "RVQ=" },
   1.197 +          { "IM", "SU0=" },
   1.198 +          { "JR", "SlI=" },
   1.199 +          { "LO", "TE8=" },
   1.200 +          { "LW", "TFc=" },
   1.201 +          { "ML", "TUw=" },
   1.202 +          { "SB", "U0I=" },
   1.203 +          { "TO", "VE8=" },
   1.204 +          { "VS", "VlM=" },
   1.205 +          { "WP", "V1A=" },
   1.206 +          /* legitimate two-letter words */
   1.207 +          { "ad", "YWQ=" },
   1.208 +          { "ah", "YWg=" },
   1.209 +          { "am", "YW0=" },
   1.210 +          { "an", "YW4=" },
   1.211 +          { "as", "YXM=" },
   1.212 +          { "at", "YXQ=" },
   1.213 +          { "ax", "YXg=" },
   1.214 +          { "be", "YmU=" },
   1.215 +          { "by", "Ynk=" },
   1.216 +          { "do", "ZG8=" },
   1.217 +          { "go", "Z28=" },
   1.218 +          { "he", "aGU=" },
   1.219 +          { "hi", "aGk=" },
   1.220 +          { "if", "aWY=" },
   1.221 +          { "in", "aW4=" },
   1.222 +          { "is", "aXM=" },
   1.223 +          { "it", "aXQ=" },
   1.224 +          { "me", "bWU=" },
   1.225 +          { "my", "bXk=" },
   1.226 +          { "no", "bm8=" },
   1.227 +          { "of", "b2Y=" },
   1.228 +          { "on", "b24=" },
   1.229 +          { "or", "b3I=" },
   1.230 +          { "ox", "b3g=" },
   1.231 +          { "so", "c28=" },
   1.232 +          { "to", "dG8=" },
   1.233 +          { "up", "dXA=" },
   1.234 +          { "us", "dXM=" },
   1.235 +          { "we", "d2U=" },
   1.236 +          /* all three-letter entries in /usr/dict/words */
   1.237 +          { "1st", "MXN0" },
   1.238 +          { "2nd", "Mm5k" },
   1.239 +          { "3rd", "M3Jk" },
   1.240 +          { "4th", "NHRo" },
   1.241 +          { "5th", "NXRo" },
   1.242 +          { "6th", "NnRo" },
   1.243 +          { "7th", "N3Ro" },
   1.244 +          { "8th", "OHRo" },
   1.245 +          { "9th", "OXRo" },
   1.246 +          { "AAA", "QUFB" },
   1.247 +          { "AAU", "QUFV" },
   1.248 +          { "ABA", "QUJB" },
   1.249 +          { "abc", "YWJj" },
   1.250 +          { "Abe", "QWJl" },
   1.251 +          { "Abo", "QWJv" },
   1.252 +          { "ace", "YWNl" },
   1.253 +          { "ACM", "QUNN" },
   1.254 +          { "ACS", "QUNT" },
   1.255 +          { "act", "YWN0" },
   1.256 +          { "Ada", "QWRh" },
   1.257 +          { "add", "YWRk" },
   1.258 +          { "ado", "YWRv" },
   1.259 +          { "aft", "YWZ0" },
   1.260 +          { "age", "YWdl" },
   1.261 +          { "ago", "YWdv" },
   1.262 +          { "aid", "YWlk" },
   1.263 +          { "ail", "YWls" },
   1.264 +          { "aim", "YWlt" },
   1.265 +          { "air", "YWly" },
   1.266 +          { "ala", "YWxh" },
   1.267 +          { "alb", "YWxi" },
   1.268 +          { "ale", "YWxl" },
   1.269 +          { "Ali", "QWxp" },
   1.270 +          { "all", "YWxs" },
   1.271 +          { "alp", "YWxw" },
   1.272 +          { "A&M", "QSZN" },
   1.273 +          { "AMA", "QU1B" },
   1.274 +          { "ami", "YW1p" },
   1.275 +          { "amp", "YW1w" },
   1.276 +          { "Amy", "QW15" },
   1.277 +          { "amy", "YW15" },
   1.278 +          { "ana", "YW5h" },
   1.279 +          { "and", "YW5k" },
   1.280 +          { "ani", "YW5p" },
   1.281 +          { "Ann", "QW5u" },
   1.282 +          { "ant", "YW50" },
   1.283 +          { "any", "YW55" },
   1.284 +          { "A&P", "QSZQ" },
   1.285 +          { "ape", "YXBl" },
   1.286 +          { "Apr", "QXBy" },
   1.287 +          { "APS", "QVBT" },
   1.288 +          { "apt", "YXB0" },
   1.289 +          { "arc", "YXJj" },
   1.290 +          { "are", "YXJl" },
   1.291 +          { "ark", "YXJr" },
   1.292 +          { "arm", "YXJt" },
   1.293 +          { "art", "YXJ0" },
   1.294 +          { "a's", "YSdz" },
   1.295 +          { "ash", "YXNo" },
   1.296 +          { "ask", "YXNr" },
   1.297 +          { "ass", "YXNz" },
   1.298 +          { "ate", "YXRl" },
   1.299 +          { "Aug", "QXVn" },
   1.300 +          { "auk", "YXVr" },
   1.301 +          { "Ave", "QXZl" },
   1.302 +          { "awe", "YXdl" },
   1.303 +          { "awl", "YXds" },
   1.304 +          { "awn", "YXdu" },
   1.305 +          { "axe", "YXhl" },
   1.306 +          { "aye", "YXll" },
   1.307 +          { "bad", "YmFk" },
   1.308 +          { "bag", "YmFn" },
   1.309 +          { "bah", "YmFo" },
   1.310 +          { "bam", "YmFt" },
   1.311 +          { "ban", "YmFu" },
   1.312 +          { "bar", "YmFy" },
   1.313 +          { "bat", "YmF0" },
   1.314 +          { "bay", "YmF5" },
   1.315 +          { "bed", "YmVk" },
   1.316 +          { "bee", "YmVl" },
   1.317 +          { "beg", "YmVn" },
   1.318 +          { "bel", "YmVs" },
   1.319 +          { "Ben", "QmVu" },
   1.320 +          { "bet", "YmV0" },
   1.321 +          { "bey", "YmV5" },
   1.322 +          { "bib", "Ymli" },
   1.323 +          { "bid", "Ymlk" },
   1.324 +          { "big", "Ymln" },
   1.325 +          { "bin", "Ymlu" },
   1.326 +          { "bit", "Yml0" },
   1.327 +          { "biz", "Yml6" },
   1.328 +          { "BMW", "Qk1X" },
   1.329 +          { "boa", "Ym9h" },
   1.330 +          { "bob", "Ym9i" },
   1.331 +          { "bog", "Ym9n" },
   1.332 +          { "bon", "Ym9u" },
   1.333 +          { "boo", "Ym9v" },
   1.334 +          { "bop", "Ym9w" },
   1.335 +          { "bow", "Ym93" },
   1.336 +          { "box", "Ym94" },
   1.337 +          { "boy", "Ym95" },
   1.338 +          { "b's", "Yidz" },
   1.339 +          { "BTL", "QlRM" },
   1.340 +          { "BTU", "QlRV" },
   1.341 +          { "bub", "YnVi" },
   1.342 +          { "bud", "YnVk" },
   1.343 +          { "bug", "YnVn" },
   1.344 +          { "bum", "YnVt" },
   1.345 +          { "bun", "YnVu" },
   1.346 +          { "bus", "YnVz" },
   1.347 +          { "but", "YnV0" },
   1.348 +          { "buy", "YnV5" },
   1.349 +          { "bye", "Ynll" },
   1.350 +          { "cab", "Y2Fi" },
   1.351 +          { "Cal", "Q2Fs" },
   1.352 +          { "cam", "Y2Ft" },
   1.353 +          { "can", "Y2Fu" },
   1.354 +          { "cap", "Y2Fw" },
   1.355 +          { "car", "Y2Fy" },
   1.356 +          { "cat", "Y2F0" },
   1.357 +          { "caw", "Y2F3" },
   1.358 +          { "CBS", "Q0JT" },
   1.359 +          { "CDC", "Q0RD" },
   1.360 +          { "CEQ", "Q0VR" },
   1.361 +          { "chi", "Y2hp" },
   1.362 +          { "CIA", "Q0lB" },
   1.363 +          { "cit", "Y2l0" },
   1.364 +          { "cod", "Y29k" },
   1.365 +          { "cog", "Y29n" },
   1.366 +          { "col", "Y29s" },
   1.367 +          { "con", "Y29u" },
   1.368 +          { "coo", "Y29v" },
   1.369 +          { "cop", "Y29w" },
   1.370 +          { "cos", "Y29z" },
   1.371 +          { "cot", "Y290" },
   1.372 +          { "cow", "Y293" },
   1.373 +          { "cox", "Y294" },
   1.374 +          { "coy", "Y295" },
   1.375 +          { "CPA", "Q1BB" },
   1.376 +          { "cpu", "Y3B1" },
   1.377 +          { "CRT", "Q1JU" },
   1.378 +          { "cry", "Y3J5" },
   1.379 +          { "c's", "Yydz" },
   1.380 +          { "cub", "Y3Vi" },
   1.381 +          { "cud", "Y3Vk" },
   1.382 +          { "cue", "Y3Vl" },
   1.383 +          { "cup", "Y3Vw" },
   1.384 +          { "cur", "Y3Vy" },
   1.385 +          { "cut", "Y3V0" },
   1.386 +          { "dab", "ZGFi" },
   1.387 +          { "dad", "ZGFk" },
   1.388 +          { "dam", "ZGFt" },
   1.389 +          { "Dan", "RGFu" },
   1.390 +          { "Dar", "RGFy" },
   1.391 +          { "day", "ZGF5" },
   1.392 +          { "Dec", "RGVj" },
   1.393 +          { "Dee", "RGVl" },
   1.394 +          { "Del", "RGVs" },
   1.395 +          { "den", "ZGVu" },
   1.396 +          { "Des", "RGVz" },
   1.397 +          { "dew", "ZGV3" },
   1.398 +          { "dey", "ZGV5" },
   1.399 +          { "did", "ZGlk" },
   1.400 +          { "die", "ZGll" },
   1.401 +          { "dig", "ZGln" },
   1.402 +          { "dim", "ZGlt" },
   1.403 +          { "din", "ZGlu" },
   1.404 +          { "dip", "ZGlw" },
   1.405 +          { "Dis", "RGlz" },
   1.406 +          { "DNA", "RE5B" },
   1.407 +          { "DOD", "RE9E" },
   1.408 +          { "doe", "ZG9l" },
   1.409 +          { "dog", "ZG9n" },
   1.410 +          { "don", "ZG9u" },
   1.411 +          { "dot", "ZG90" },
   1.412 +          { "Dow", "RG93" },
   1.413 +          { "dry", "ZHJ5" },
   1.414 +          { "d's", "ZCdz" },
   1.415 +          { "dub", "ZHVi" },
   1.416 +          { "dud", "ZHVk" },
   1.417 +          { "due", "ZHVl" },
   1.418 +          { "dug", "ZHVn" },
   1.419 +          { "dun", "ZHVu" },
   1.420 +          { "dye", "ZHll" },
   1.421 +          { "ear", "ZWFy" },
   1.422 +          { "eat", "ZWF0" },
   1.423 +          { "ebb", "ZWJi" },
   1.424 +          { "EDT", "RURU" },
   1.425 +          { "eel", "ZWVs" },
   1.426 +          { "eft", "ZWZ0" },
   1.427 +          { "e.g", "ZS5n" },
   1.428 +          { "egg", "ZWdn" },
   1.429 +          { "ego", "ZWdv" },
   1.430 +          { "eke", "ZWtl" },
   1.431 +          { "Eli", "RWxp" },
   1.432 +          { "elk", "ZWxr" },
   1.433 +          { "ell", "ZWxs" },
   1.434 +          { "elm", "ZWxt" },
   1.435 +          { "Ely", "RWx5" },
   1.436 +          { "end", "ZW5k" },
   1.437 +          { "Eng", "RW5n" },
   1.438 +          { "EPA", "RVBB" },
   1.439 +          { "era", "ZXJh" },
   1.440 +          { "ere", "ZXJl" },
   1.441 +          { "erg", "ZXJn" },
   1.442 +          { "err", "ZXJy" },
   1.443 +          { "e's", "ZSdz" },
   1.444 +          { "EST", "RVNU" },
   1.445 +          { "eta", "ZXRh" },
   1.446 +          { "etc", "ZXRj" },
   1.447 +          { "Eva", "RXZh" },
   1.448 +          { "eve", "ZXZl" },
   1.449 +          { "ewe", "ZXdl" },
   1.450 +          { "eye", "ZXll" },
   1.451 +          { "FAA", "RkFB" },
   1.452 +          { "fad", "ZmFk" },
   1.453 +          { "fag", "ZmFn" },
   1.454 +          { "fan", "ZmFu" },
   1.455 +          { "far", "ZmFy" },
   1.456 +          { "fat", "ZmF0" },
   1.457 +          { "fay", "ZmF5" },
   1.458 +          { "FBI", "RkJJ" },
   1.459 +          { "FCC", "RkND" },
   1.460 +          { "FDA", "RkRB" },
   1.461 +          { "Feb", "RmVi" },
   1.462 +          { "fed", "ZmVk" },
   1.463 +          { "fee", "ZmVl" },
   1.464 +          { "few", "ZmV3" },
   1.465 +          { "fib", "Zmli" },
   1.466 +          { "fig", "Zmln" },
   1.467 +          { "fin", "Zmlu" },
   1.468 +          { "fir", "Zmly" },
   1.469 +          { "fit", "Zml0" },
   1.470 +          { "fix", "Zml4" },
   1.471 +          { "Flo", "Rmxv" },
   1.472 +          { "flu", "Zmx1" },
   1.473 +          { "fly", "Zmx5" },
   1.474 +          { "FMC", "Rk1D" },
   1.475 +          { "fob", "Zm9i" },
   1.476 +          { "foe", "Zm9l" },
   1.477 +          { "fog", "Zm9n" },
   1.478 +          { "fop", "Zm9w" },
   1.479 +          { "for", "Zm9y" },
   1.480 +          { "fox", "Zm94" },
   1.481 +          { "FPC", "RlBD" },
   1.482 +          { "fro", "ZnJv" },
   1.483 +          { "fry", "ZnJ5" },
   1.484 +          { "f's", "Zidz" },
   1.485 +          { "FTC", "RlRD" },
   1.486 +          { "fum", "ZnVt" },
   1.487 +          { "fun", "ZnVu" },
   1.488 +          { "fur", "ZnVy" },
   1.489 +          { "gab", "Z2Fi" },
   1.490 +          { "gad", "Z2Fk" },
   1.491 +          { "gag", "Z2Fn" },
   1.492 +          { "gal", "Z2Fs" },
   1.493 +          { "gam", "Z2Ft" },
   1.494 +          { "GAO", "R0FP" },
   1.495 +          { "gap", "Z2Fw" },
   1.496 +          { "gar", "Z2Fy" },
   1.497 +          { "gas", "Z2Fz" },
   1.498 +          { "gay", "Z2F5" },
   1.499 +          { "gee", "Z2Vl" },
   1.500 +          { "gel", "Z2Vs" },
   1.501 +          { "gem", "Z2Vt" },
   1.502 +          { "get", "Z2V0" },
   1.503 +          { "gig", "Z2ln" },
   1.504 +          { "Gil", "R2ls" },
   1.505 +          { "gin", "Z2lu" },
   1.506 +          { "GMT", "R01U" },
   1.507 +          { "GNP", "R05Q" },
   1.508 +          { "gnu", "Z251" },
   1.509 +          { "Goa", "R29h" },
   1.510 +          { "gob", "Z29i" },
   1.511 +          { "god", "Z29k" },
   1.512 +          { "gog", "Z29n" },
   1.513 +          { "GOP", "R09Q" },
   1.514 +          { "got", "Z290" },
   1.515 +          { "GPO", "R1BP" },
   1.516 +          { "g's", "Zydz" },
   1.517 +          { "GSA", "R1NB" },
   1.518 +          { "gum", "Z3Vt" },
   1.519 +          { "gun", "Z3Vu" },
   1.520 +          { "Gus", "R3Vz" },
   1.521 +          { "gut", "Z3V0" },
   1.522 +          { "guy", "Z3V5" },
   1.523 +          { "gym", "Z3lt" },
   1.524 +          { "gyp", "Z3lw" },
   1.525 +          { "had", "aGFk" },
   1.526 +          { "Hal", "SGFs" },
   1.527 +          { "ham", "aGFt" },
   1.528 +          { "Han", "SGFu" },
   1.529 +          { "hap", "aGFw" },
   1.530 +          { "hat", "aGF0" },
   1.531 +          { "haw", "aGF3" },
   1.532 +          { "hay", "aGF5" },
   1.533 +          { "hem", "aGVt" },
   1.534 +          { "hen", "aGVu" },
   1.535 +          { "her", "aGVy" },
   1.536 +          { "hew", "aGV3" },
   1.537 +          { "hex", "aGV4" },
   1.538 +          { "hey", "aGV5" },
   1.539 +          { "hid", "aGlk" },
   1.540 +          { "him", "aGlt" },
   1.541 +          { "hip", "aGlw" },
   1.542 +          { "his", "aGlz" },
   1.543 +          { "hit", "aGl0" },
   1.544 +          { "hob", "aG9i" },
   1.545 +          { "hoc", "aG9j" },
   1.546 +          { "hoe", "aG9l" },
   1.547 +          { "hog", "aG9n" },
   1.548 +          { "hoi", "aG9p" },
   1.549 +          { "Hom", "SG9t" },
   1.550 +          { "hop", "aG9w" },
   1.551 +          { "hot", "aG90" },
   1.552 +          { "how", "aG93" },
   1.553 +          { "hoy", "aG95" },
   1.554 +          { "h's", "aCdz" },
   1.555 +          { "hub", "aHVi" },
   1.556 +          { "hue", "aHVl" },
   1.557 +          { "hug", "aHVn" },
   1.558 +          { "huh", "aHVo" },
   1.559 +          { "hum", "aHVt" },
   1.560 +          { "Hun", "SHVu" },
   1.561 +          { "hut", "aHV0" },
   1.562 +          { "Ian", "SWFu" },
   1.563 +          { "IBM", "SUJN" },
   1.564 +          { "Ibn", "SWJu" },
   1.565 +          { "ICC", "SUND" },
   1.566 +          { "ice", "aWNl" },
   1.567 +          { "icy", "aWN5" },
   1.568 +          { "I'd", "SSdk" },
   1.569 +          { "Ida", "SWRh" },
   1.570 +          { "i.e", "aS5l" },
   1.571 +          { "iii", "aWlp" },
   1.572 +          { "Ike", "SWtl" },
   1.573 +          { "ill", "aWxs" },
   1.574 +          { "I'm", "SSdt" },
   1.575 +          { "imp", "aW1w" },
   1.576 +          { "Inc", "SW5j" },
   1.577 +          { "ink", "aW5r" },
   1.578 +          { "inn", "aW5u" },
   1.579 +          { "ion", "aW9u" },
   1.580 +          { "Ira", "SXJh" },
   1.581 +          { "ire", "aXJl" },
   1.582 +          { "irk", "aXJr" },
   1.583 +          { "IRS", "SVJT" },
   1.584 +          { "i's", "aSdz" },
   1.585 +          { "Ito", "SXRv" },
   1.586 +          { "ITT", "SVRU" },
   1.587 +          { "ivy", "aXZ5" },
   1.588 +          { "jab", "amFi" },
   1.589 +          { "jag", "amFn" },
   1.590 +          { "jam", "amFt" },
   1.591 +          { "Jan", "SmFu" },
   1.592 +          { "jar", "amFy" },
   1.593 +          { "jaw", "amF3" },
   1.594 +          { "jay", "amF5" },
   1.595 +          { "Jed", "SmVk" },
   1.596 +          { "jet", "amV0" },
   1.597 +          { "Jew", "SmV3" },
   1.598 +          { "jig", "amln" },
   1.599 +          { "Jim", "Smlt" },
   1.600 +          { "job", "am9i" },
   1.601 +          { "Joe", "Sm9l" },
   1.602 +          { "jog", "am9n" },
   1.603 +          { "Jon", "Sm9u" },
   1.604 +          { "jot", "am90" },
   1.605 +          { "joy", "am95" },
   1.606 +          { "j's", "aidz" },
   1.607 +          { "jug", "anVn" },
   1.608 +          { "jut", "anV0" },
   1.609 +          { "Kay", "S2F5" },
   1.610 +          { "keg", "a2Vn" },
   1.611 +          { "ken", "a2Vu" },
   1.612 +          { "key", "a2V5" },
   1.613 +          { "kid", "a2lk" },
   1.614 +          { "Kim", "S2lt" },
   1.615 +          { "kin", "a2lu" },
   1.616 +          { "kit", "a2l0" },
   1.617 +          { "k's", "aydz" },
   1.618 +          { "lab", "bGFi" },
   1.619 +          { "lac", "bGFj" },
   1.620 +          { "lad", "bGFk" },
   1.621 +          { "lag", "bGFn" },
   1.622 +          { "lam", "bGFt" },
   1.623 +          { "Lao", "TGFv" },
   1.624 +          { "lap", "bGFw" },
   1.625 +          { "law", "bGF3" },
   1.626 +          { "lax", "bGF4" },
   1.627 +          { "lay", "bGF5" },
   1.628 +          { "lea", "bGVh" },
   1.629 +          { "led", "bGVk" },
   1.630 +          { "lee", "bGVl" },
   1.631 +          { "leg", "bGVn" },
   1.632 +          { "Len", "TGVu" },
   1.633 +          { "Leo", "TGVv" },
   1.634 +          { "let", "bGV0" },
   1.635 +          { "Lev", "TGV2" },
   1.636 +          { "Lew", "TGV3" },
   1.637 +          { "lew", "bGV3" },
   1.638 +          { "lid", "bGlk" },
   1.639 +          { "lie", "bGll" },
   1.640 +          { "lim", "bGlt" },
   1.641 +          { "Lin", "TGlu" },
   1.642 +          { "lip", "bGlw" },
   1.643 +          { "lit", "bGl0" },
   1.644 +          { "Liz", "TGl6" },
   1.645 +          { "lob", "bG9i" },
   1.646 +          { "log", "bG9n" },
   1.647 +          { "lop", "bG9w" },
   1.648 +          { "Los", "TG9z" },
   1.649 +          { "lot", "bG90" },
   1.650 +          { "Lou", "TG91" },
   1.651 +          { "low", "bG93" },
   1.652 +          { "loy", "bG95" },
   1.653 +          { "l's", "bCdz" },
   1.654 +          { "LSI", "TFNJ" },
   1.655 +          { "Ltd", "THRk" },
   1.656 +          { "LTV", "TFRW" },
   1.657 +          { "lug", "bHVn" },
   1.658 +          { "lux", "bHV4" },
   1.659 +          { "lye", "bHll" },
   1.660 +          { "Mac", "TWFj" },
   1.661 +          { "mad", "bWFk" },
   1.662 +          { "Mae", "TWFl" },
   1.663 +          { "man", "bWFu" },
   1.664 +          { "Mao", "TWFv" },
   1.665 +          { "map", "bWFw" },
   1.666 +          { "mar", "bWFy" },
   1.667 +          { "mat", "bWF0" },
   1.668 +          { "maw", "bWF3" },
   1.669 +          { "Max", "TWF4" },
   1.670 +          { "max", "bWF4" },
   1.671 +          { "may", "bWF5" },
   1.672 +          { "MBA", "TUJB" },
   1.673 +          { "Meg", "TWVn" },
   1.674 +          { "Mel", "TWVs" },
   1.675 +          { "men", "bWVu" },
   1.676 +          { "met", "bWV0" },
   1.677 +          { "mew", "bWV3" },
   1.678 +          { "mid", "bWlk" },
   1.679 +          { "mig", "bWln" },
   1.680 +          { "min", "bWlu" },
   1.681 +          { "MIT", "TUlU" },
   1.682 +          { "mix", "bWl4" },
   1.683 +          { "mob", "bW9i" },
   1.684 +          { "Moe", "TW9l" },
   1.685 +          { "moo", "bW9v" },
   1.686 +          { "mop", "bW9w" },
   1.687 +          { "mot", "bW90" },
   1.688 +          { "mow", "bW93" },
   1.689 +          { "MPH", "TVBI" },
   1.690 +          { "Mrs", "TXJz" },
   1.691 +          { "m's", "bSdz" },
   1.692 +          { "mud", "bXVk" },
   1.693 +          { "mug", "bXVn" },
   1.694 +          { "mum", "bXVt" },
   1.695 +          { "nab", "bmFi" },
   1.696 +          { "nag", "bmFn" },
   1.697 +          { "Nan", "TmFu" },
   1.698 +          { "nap", "bmFw" },
   1.699 +          { "Nat", "TmF0" },
   1.700 +          { "nay", "bmF5" },
   1.701 +          { "NBC", "TkJD" },
   1.702 +          { "NBS", "TkJT" },
   1.703 +          { "NCO", "TkNP" },
   1.704 +          { "NCR", "TkNS" },
   1.705 +          { "Ned", "TmVk" },
   1.706 +          { "nee", "bmVl" },
   1.707 +          { "net", "bmV0" },
   1.708 +          { "new", "bmV3" },
   1.709 +          { "nib", "bmli" },
   1.710 +          { "NIH", "TklI" },
   1.711 +          { "nil", "bmls" },
   1.712 +          { "nip", "bmlw" },
   1.713 +          { "nit", "bml0" },
   1.714 +          { "NNE", "Tk5F" },
   1.715 +          { "NNW", "Tk5X" },
   1.716 +          { "nob", "bm9i" },
   1.717 +          { "nod", "bm9k" },
   1.718 +          { "non", "bm9u" },
   1.719 +          { "nor", "bm9y" },
   1.720 +          { "not", "bm90" },
   1.721 +          { "Nov", "Tm92" },
   1.722 +          { "now", "bm93" },
   1.723 +          { "NRC", "TlJD" },
   1.724 +          { "n's", "bidz" },
   1.725 +          { "NSF", "TlNG" },
   1.726 +          { "nun", "bnVu" },
   1.727 +          { "nut", "bnV0" },
   1.728 +          { "NYC", "TllD" },
   1.729 +          { "NYU", "TllV" },
   1.730 +          { "oaf", "b2Fm" },
   1.731 +          { "oak", "b2Fr" },
   1.732 +          { "oar", "b2Fy" },
   1.733 +          { "oat", "b2F0" },
   1.734 +          { "Oct", "T2N0" },
   1.735 +          { "odd", "b2Rk" },
   1.736 +          { "ode", "b2Rl" },
   1.737 +          { "off", "b2Zm" },
   1.738 +          { "oft", "b2Z0" },
   1.739 +          { "ohm", "b2ht" },
   1.740 +          { "oil", "b2ls" },
   1.741 +          { "old", "b2xk" },
   1.742 +          { "one", "b25l" },
   1.743 +          { "opt", "b3B0" },
   1.744 +          { "orb", "b3Ji" },
   1.745 +          { "ore", "b3Jl" },
   1.746 +          { "Orr", "T3Jy" },
   1.747 +          { "o's", "bydz" },
   1.748 +          { "Ott", "T3R0" },
   1.749 +          { "our", "b3Vy" },
   1.750 +          { "out", "b3V0" },
   1.751 +          { "ova", "b3Zh" },
   1.752 +          { "owe", "b3dl" },
   1.753 +          { "owl", "b3ds" },
   1.754 +          { "own", "b3du" },
   1.755 +          { "pad", "cGFk" },
   1.756 +          { "pal", "cGFs" },
   1.757 +          { "Pam", "UGFt" },
   1.758 +          { "pan", "cGFu" },
   1.759 +          { "pap", "cGFw" },
   1.760 +          { "par", "cGFy" },
   1.761 +          { "pat", "cGF0" },
   1.762 +          { "paw", "cGF3" },
   1.763 +          { "pax", "cGF4" },
   1.764 +          { "pay", "cGF5" },
   1.765 +          { "Paz", "UGF6" },
   1.766 +          { "PBS", "UEJT" },
   1.767 +          { "PDP", "UERQ" },
   1.768 +          { "pea", "cGVh" },
   1.769 +          { "pee", "cGVl" },
   1.770 +          { "peg", "cGVn" },
   1.771 +          { "pen", "cGVu" },
   1.772 +          { "pep", "cGVw" },
   1.773 +          { "per", "cGVy" },
   1.774 +          { "pet", "cGV0" },
   1.775 +          { "pew", "cGV3" },
   1.776 +          { "PhD", "UGhE" },
   1.777 +          { "phi", "cGhp" },
   1.778 +          { "pie", "cGll" },
   1.779 +          { "pig", "cGln" },
   1.780 +          { "pin", "cGlu" },
   1.781 +          { "pip", "cGlw" },
   1.782 +          { "pit", "cGl0" },
   1.783 +          { "ply", "cGx5" },
   1.784 +          { "pod", "cG9k" },
   1.785 +          { "Poe", "UG9l" },
   1.786 +          { "poi", "cG9p" },
   1.787 +          { "pol", "cG9s" },
   1.788 +          { "pop", "cG9w" },
   1.789 +          { "pot", "cG90" },
   1.790 +          { "pow", "cG93" },
   1.791 +          { "ppm", "cHBt" },
   1.792 +          { "pro", "cHJv" },
   1.793 +          { "pry", "cHJ5" },
   1.794 +          { "p's", "cCdz" },
   1.795 +          { "psi", "cHNp" },
   1.796 +          { "PTA", "UFRB" },
   1.797 +          { "pub", "cHVi" },
   1.798 +          { "PUC", "UFVD" },
   1.799 +          { "pug", "cHVn" },
   1.800 +          { "pun", "cHVu" },
   1.801 +          { "pup", "cHVw" },
   1.802 +          { "pus", "cHVz" },
   1.803 +          { "put", "cHV0" },
   1.804 +          { "PVC", "UFZD" },
   1.805 +          { "QED", "UUVE" },
   1.806 +          { "q's", "cSdz" },
   1.807 +          { "qua", "cXVh" },
   1.808 +          { "quo", "cXVv" },
   1.809 +          { "Rae", "UmFl" },
   1.810 +          { "rag", "cmFn" },
   1.811 +          { "raj", "cmFq" },
   1.812 +          { "ram", "cmFt" },
   1.813 +          { "ran", "cmFu" },
   1.814 +          { "rap", "cmFw" },
   1.815 +          { "rat", "cmF0" },
   1.816 +          { "raw", "cmF3" },
   1.817 +          { "ray", "cmF5" },
   1.818 +          { "RCA", "UkNB" },
   1.819 +          { "R&D", "UiZE" },
   1.820 +          { "reb", "cmVi" },
   1.821 +          { "red", "cmVk" },
   1.822 +          { "rep", "cmVw" },
   1.823 +          { "ret", "cmV0" },
   1.824 +          { "rev", "cmV2" },
   1.825 +          { "Rex", "UmV4" },
   1.826 +          { "rho", "cmhv" },
   1.827 +          { "rib", "cmli" },
   1.828 +          { "rid", "cmlk" },
   1.829 +          { "rig", "cmln" },
   1.830 +          { "rim", "cmlt" },
   1.831 +          { "Rio", "Umlv" },
   1.832 +          { "rip", "cmlw" },
   1.833 +          { "RNA", "Uk5B" },
   1.834 +          { "rob", "cm9i" },
   1.835 +          { "rod", "cm9k" },
   1.836 +          { "roe", "cm9l" },
   1.837 +          { "Ron", "Um9u" },
   1.838 +          { "rot", "cm90" },
   1.839 +          { "row", "cm93" },
   1.840 +          { "Roy", "Um95" },
   1.841 +          { "RPM", "UlBN" },
   1.842 +          { "r's", "cidz" },
   1.843 +          { "rub", "cnVi" },
   1.844 +          { "rue", "cnVl" },
   1.845 +          { "rug", "cnVn" },
   1.846 +          { "rum", "cnVt" },
   1.847 +          { "run", "cnVu" },
   1.848 +          { "rut", "cnV0" },
   1.849 +          { "rye", "cnll" },
   1.850 +          { "sac", "c2Fj" },
   1.851 +          { "sad", "c2Fk" },
   1.852 +          { "sag", "c2Fn" },
   1.853 +          { "Sal", "U2Fs" },
   1.854 +          { "Sam", "U2Ft" },
   1.855 +          { "San", "U2Fu" },
   1.856 +          { "Sao", "U2Fv" },
   1.857 +          { "sap", "c2Fw" },
   1.858 +          { "sat", "c2F0" },
   1.859 +          { "saw", "c2F3" },
   1.860 +          { "sax", "c2F4" },
   1.861 +          { "say", "c2F5" },
   1.862 +          { "Sci", "U2Np" },
   1.863 +          { "SCM", "U0NN" },
   1.864 +          { "sea", "c2Vh" },
   1.865 +          { "sec", "c2Vj" },
   1.866 +          { "see", "c2Vl" },
   1.867 +          { "sen", "c2Vu" },
   1.868 +          { "seq", "c2Vx" },
   1.869 +          { "set", "c2V0" },
   1.870 +          { "sew", "c2V3" },
   1.871 +          { "sex", "c2V4" },
   1.872 +          { "she", "c2hl" },
   1.873 +          { "Shu", "U2h1" },
   1.874 +          { "shy", "c2h5" },
   1.875 +          { "sib", "c2li" },
   1.876 +          { "sic", "c2lj" },
   1.877 +          { "sin", "c2lu" },
   1.878 +          { "sip", "c2lw" },
   1.879 +          { "sir", "c2ly" },
   1.880 +          { "sis", "c2lz" },
   1.881 +          { "sit", "c2l0" },
   1.882 +          { "six", "c2l4" },
   1.883 +          { "ski", "c2tp" },
   1.884 +          { "sky", "c2t5" },
   1.885 +          { "sly", "c2x5" },
   1.886 +          { "sob", "c29i" },
   1.887 +          { "Soc", "U29j" },
   1.888 +          { "sod", "c29k" },
   1.889 +          { "Sol", "U29s" },
   1.890 +          { "son", "c29u" },
   1.891 +          { "sop", "c29w" },
   1.892 +          { "sou", "c291" },
   1.893 +          { "sow", "c293" },
   1.894 +          { "soy", "c295" },
   1.895 +          { "spa", "c3Bh" },
   1.896 +          { "spy", "c3B5" },
   1.897 +          { "Sri", "U3Jp" },
   1.898 +          { "s's", "cydz" },
   1.899 +          { "SSE", "U1NF" },
   1.900 +          { "SST", "U1NU" },
   1.901 +          { "SSW", "U1NX" },
   1.902 +          { "Stu", "U3R1" },
   1.903 +          { "sub", "c3Vi" },
   1.904 +          { "sud", "c3Vk" },
   1.905 +          { "sue", "c3Vl" },
   1.906 +          { "sum", "c3Vt" },
   1.907 +          { "sun", "c3Vu" },
   1.908 +          { "sup", "c3Vw" },
   1.909 +          { "Sus", "U3Vz" },
   1.910 +          { "tab", "dGFi" },
   1.911 +          { "tad", "dGFk" },
   1.912 +          { "tag", "dGFn" },
   1.913 +          { "tam", "dGFt" },
   1.914 +          { "tan", "dGFu" },
   1.915 +          { "tao", "dGFv" },
   1.916 +          { "tap", "dGFw" },
   1.917 +          { "tar", "dGFy" },
   1.918 +          { "tat", "dGF0" },
   1.919 +          { "tau", "dGF1" },
   1.920 +          { "tax", "dGF4" },
   1.921 +          { "tea", "dGVh" },
   1.922 +          { "Ted", "VGVk" },
   1.923 +          { "ted", "dGVk" },
   1.924 +          { "tee", "dGVl" },
   1.925 +          { "Tel", "VGVs" },
   1.926 +          { "ten", "dGVu" },
   1.927 +          { "the", "dGhl" },
   1.928 +          { "thy", "dGh5" },
   1.929 +          { "tic", "dGlj" },
   1.930 +          { "tid", "dGlk" },
   1.931 +          { "tie", "dGll" },
   1.932 +          { "til", "dGls" },
   1.933 +          { "Tim", "VGlt" },
   1.934 +          { "tin", "dGlu" },
   1.935 +          { "tip", "dGlw" },
   1.936 +          { "tit", "dGl0" },
   1.937 +          { "TNT", "VE5U" },
   1.938 +          { "toe", "dG9l" },
   1.939 +          { "tog", "dG9n" },
   1.940 +          { "Tom", "VG9t" },
   1.941 +          { "ton", "dG9u" },
   1.942 +          { "too", "dG9v" },
   1.943 +          { "top", "dG9w" },
   1.944 +          { "tor", "dG9y" },
   1.945 +          { "tot", "dG90" },
   1.946 +          { "tow", "dG93" },
   1.947 +          { "toy", "dG95" },
   1.948 +          { "TRW", "VFJX" },
   1.949 +          { "try", "dHJ5" },
   1.950 +          { "t's", "dCdz" },
   1.951 +          { "TTL", "VFRM" },
   1.952 +          { "TTY", "VFRZ" },
   1.953 +          { "tub", "dHVi" },
   1.954 +          { "tug", "dHVn" },
   1.955 +          { "tum", "dHVt" },
   1.956 +          { "tun", "dHVu" },
   1.957 +          { "TVA", "VFZB" },
   1.958 +          { "TWA", "VFdB" },
   1.959 +          { "two", "dHdv" },
   1.960 +          { "TWX", "VFdY" },
   1.961 +          { "ugh", "dWdo" },
   1.962 +          { "UHF", "VUhG" },
   1.963 +          { "Uri", "VXJp" },
   1.964 +          { "urn", "dXJu" },
   1.965 +          { "U.S", "VS5T" },
   1.966 +          { "u's", "dSdz" },
   1.967 +          { "USA", "VVNB" },
   1.968 +          { "USC", "VVND" },
   1.969 +          { "use", "dXNl" },
   1.970 +          { "USN", "VVNO" },
   1.971 +          { "van", "dmFu" },
   1.972 +          { "vat", "dmF0" },
   1.973 +          { "vee", "dmVl" },
   1.974 +          { "vet", "dmV0" },
   1.975 +          { "vex", "dmV4" },
   1.976 +          { "VHF", "VkhG" },
   1.977 +          { "via", "dmlh" },
   1.978 +          { "vie", "dmll" },
   1.979 +          { "vii", "dmlp" },
   1.980 +          { "vis", "dmlz" },
   1.981 +          { "viz", "dml6" },
   1.982 +          { "von", "dm9u" },
   1.983 +          { "vow", "dm93" },
   1.984 +          { "v's", "didz" },
   1.985 +          { "WAC", "V0FD" },
   1.986 +          { "wad", "d2Fk" },
   1.987 +          { "wag", "d2Fn" },
   1.988 +          { "wah", "d2Fo" },
   1.989 +          { "wan", "d2Fu" },
   1.990 +          { "war", "d2Fy" },
   1.991 +          { "was", "d2Fz" },
   1.992 +          { "wax", "d2F4" },
   1.993 +          { "way", "d2F5" },
   1.994 +          { "web", "d2Vi" },
   1.995 +          { "wed", "d2Vk" },
   1.996 +          { "wee", "d2Vl" },
   1.997 +          { "Wei", "V2Vp" },
   1.998 +          { "wet", "d2V0" },
   1.999 +          { "who", "d2hv" },
  1.1000 +          { "why", "d2h5" },
  1.1001 +          { "wig", "d2ln" },
  1.1002 +          { "win", "d2lu" },
  1.1003 +          { "wit", "d2l0" },
  1.1004 +          { "woe", "d29l" },
  1.1005 +          { "wok", "d29r" },
  1.1006 +          { "won", "d29u" },
  1.1007 +          { "woo", "d29v" },
  1.1008 +          { "wop", "d29w" },
  1.1009 +          { "wow", "d293" },
  1.1010 +          { "wry", "d3J5" },
  1.1011 +          { "w's", "dydz" },
  1.1012 +          { "x's", "eCdz" },
  1.1013 +          { "yah", "eWFo" },
  1.1014 +          { "yak", "eWFr" },
  1.1015 +          { "yam", "eWFt" },
  1.1016 +          { "yap", "eWFw" },
  1.1017 +          { "yaw", "eWF3" },
  1.1018 +          { "yea", "eWVh" },
  1.1019 +          { "yen", "eWVu" },
  1.1020 +          { "yet", "eWV0" },
  1.1021 +          { "yin", "eWlu" },
  1.1022 +          { "yip", "eWlw" },
  1.1023 +          { "yon", "eW9u" },
  1.1024 +          { "you", "eW91" },
  1.1025 +          { "yow", "eW93" },
  1.1026 +          { "y's", "eSdz" },
  1.1027 +          { "yuh", "eXVo" },
  1.1028 +          { "zag", "emFn" },
  1.1029 +          { "Zan", "WmFu" },
  1.1030 +          { "zap", "emFw" },
  1.1031 +          { "Zen", "WmVu" },
  1.1032 +          { "zig", "emln" },
  1.1033 +          { "zip", "emlw" },
  1.1034 +          { "Zoe", "Wm9l" },
  1.1035 +          { "zoo", "em9v" },
  1.1036 +          { "z's", "eidz" },
  1.1037 +          /* the false rumors file */
  1.1038 +          { "\"So when I die, the first thing I will see in heaven is a score list?\"", 
  1.1039 +            "IlNvIHdoZW4gSSBkaWUsIHRoZSBmaXJzdCB0aGluZyBJIHdpbGwgc2VlIGluIGhlYXZlbiBpcyBhIHNjb3JlIGxpc3Q/Ig==" },
  1.1040 +          { "1st Law of Hacking: leaving is much more difficult than entering.", 
  1.1041 +            "MXN0IExhdyBvZiBIYWNraW5nOiBsZWF2aW5nIGlzIG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhbiBlbnRlcmluZy4=" },
  1.1042 +          { "2nd Law of Hacking: first in, first out.", 
  1.1043 +            "Mm5kIExhdyBvZiBIYWNraW5nOiBmaXJzdCBpbiwgZmlyc3Qgb3V0Lg==" },
  1.1044 +          { "3rd Law of Hacking: the last blow counts most.", 
  1.1045 +            "M3JkIExhdyBvZiBIYWNraW5nOiB0aGUgbGFzdCBibG93IGNvdW50cyBtb3N0Lg==" },
  1.1046 +          { "4th Law of Hacking: you will find the exit at the entrance.", 
  1.1047 +            "NHRoIExhdyBvZiBIYWNraW5nOiB5b3Ugd2lsbCBmaW5kIHRoZSBleGl0IGF0IHRoZSBlbnRyYW5jZS4=" },
  1.1048 +          { "A chameleon imitating a mail daemon often delivers scrolls of fire.", 
  1.1049 +            "QSBjaGFtZWxlb24gaW1pdGF0aW5nIGEgbWFpbCBkYWVtb24gb2Z0ZW4gZGVsaXZlcnMgc2Nyb2xscyBvZiBmaXJlLg==" },
  1.1050 +          { "A cockatrice corpse is guaranteed to be untainted!", 
  1.1051 +            "QSBjb2NrYXRyaWNlIGNvcnBzZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVudGFpbnRlZCE=" },
  1.1052 +          { "A dead cockatrice is just a dead lizard.", 
  1.1053 +            "QSBkZWFkIGNvY2thdHJpY2UgaXMganVzdCBhIGRlYWQgbGl6YXJkLg==" },
  1.1054 +          { "A dragon is just a snake that ate a scroll of fire.", 
  1.1055 +            "QSBkcmFnb24gaXMganVzdCBhIHNuYWtlIHRoYXQgYXRlIGEgc2Nyb2xsIG9mIGZpcmUu" },
  1.1056 +          { "A fading corridor enlightens your insight.", 
  1.1057 +            "QSBmYWRpbmcgY29ycmlkb3IgZW5saWdodGVucyB5b3VyIGluc2lnaHQu" },
  1.1058 +          { "A glowing potion is too hot to drink.", 
  1.1059 +            "QSBnbG93aW5nIHBvdGlvbiBpcyB0b28gaG90IHRvIGRyaW5rLg==" },
  1.1060 +          { "A good amulet may protect you against guards.", 
  1.1061 +            "QSBnb29kIGFtdWxldCBtYXkgcHJvdGVjdCB5b3UgYWdhaW5zdCBndWFyZHMu" },
  1.1062 +          { "A lizard corpse is a good thing to turn undead.", 
  1.1063 +            "QSBsaXphcmQgY29ycHNlIGlzIGEgZ29vZCB0aGluZyB0byB0dXJuIHVuZGVhZC4=" },
  1.1064 +          { "A long worm can be defined recursively. So how should you attack it?", 
  1.1065 +            "QSBsb25nIHdvcm0gY2FuIGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuIFNvIGhvdyBzaG91bGQgeW91IGF0dGFjayBpdD8=" },
  1.1066 +          { "A monstrous mind is a toy forever.", 
  1.1067 +            "QSBtb25zdHJvdXMgbWluZCBpcyBhIHRveSBmb3JldmVyLg==" },
  1.1068 +          { "A nymph will be very pleased if you call her by her real name: Lorelei.", 
  1.1069 +            "QSBueW1waCB3aWxsIGJlIHZlcnkgcGxlYXNlZCBpZiB5b3UgY2FsbCBoZXIgYnkgaGVyIHJlYWwgbmFtZTogTG9yZWxlaS4=" },
  1.1070 +          { "A ring of dungeon master control is a great find.", 
  1.1071 +            "QSByaW5nIG9mIGR1bmdlb24gbWFzdGVyIGNvbnRyb2wgaXMgYSBncmVhdCBmaW5kLg==" },
  1.1072 +          { "A ring of extra ring finger is useless if not enchanted.", 
  1.1073 +            "QSByaW5nIG9mIGV4dHJhIHJpbmcgZmluZ2VyIGlzIHVzZWxlc3MgaWYgbm90IGVuY2hhbnRlZC4=" },
  1.1074 +          { "A rope may form a trail in a maze.", 
  1.1075 +            "QSByb3BlIG1heSBmb3JtIGEgdHJhaWwgaW4gYSBtYXplLg==" },
  1.1076 +          { "A staff may recharge if you drop it for awhile.", 
  1.1077 +            "QSBzdGFmZiBtYXkgcmVjaGFyZ2UgaWYgeW91IGRyb3AgaXQgZm9yIGF3aGlsZS4=" },
  1.1078 +          { "A visit to the Zoo is very educational; you meet interesting animals.", 
  1.1079 +            "QSB2aXNpdCB0byB0aGUgWm9vIGlzIHZlcnkgZWR1Y2F0aW9uYWw7IHlvdSBtZWV0IGludGVyZXN0aW5nIGFuaW1hbHMu" },
  1.1080 +          { "A wand of deaf is a more dangerous weapon than a wand of sheep.", 
  1.1081 +            "QSB3YW5kIG9mIGRlYWYgaXMgYSBtb3JlIGRhbmdlcm91cyB3ZWFwb24gdGhhbiBhIHdhbmQgb2Ygc2hlZXAu" },
  1.1082 +          { "A wand of vibration might bring the whole cave crashing about your ears.", 
  1.1083 +            "QSB3YW5kIG9mIHZpYnJhdGlvbiBtaWdodCBicmluZyB0aGUgd2hvbGUgY2F2ZSBjcmFzaGluZyBhYm91dCB5b3VyIGVhcnMu" },
  1.1084 +          { "A winner never quits. A quitter never wins.", 
  1.1085 +            "QSB3aW5uZXIgbmV2ZXIgcXVpdHMuIEEgcXVpdHRlciBuZXZlciB3aW5zLg==" },
  1.1086 +          { "A wish? Okay, make me a fortune cookie!", 
  1.1087 +            "QSB3aXNoPyBPa2F5LCBtYWtlIG1lIGEgZm9ydHVuZSBjb29raWUh" },
  1.1088 +          { "Afraid of mimics? Try to wear a ring of true seeing.", 
  1.1089 +            "QWZyYWlkIG9mIG1pbWljcz8gVHJ5IHRvIHdlYXIgYSByaW5nIG9mIHRydWUgc2VlaW5nLg==" },
  1.1090 +          { "All monsters are created evil, but some are more evil than others.", 
  1.1091 +            "QWxsIG1vbnN0ZXJzIGFyZSBjcmVhdGVkIGV2aWwsIGJ1dCBzb21lIGFyZSBtb3JlIGV2aWwgdGhhbiBvdGhlcnMu" },
  1.1092 +          { "Always attack a floating eye from behind!", 
  1.1093 +            "QWx3YXlzIGF0dGFjayBhIGZsb2F0aW5nIGV5ZSBmcm9tIGJlaGluZCE=" },
  1.1094 +          { "An elven cloak is always the height of fashion.", 
  1.1095 +            "QW4gZWx2ZW4gY2xvYWsgaXMgYWx3YXlzIHRoZSBoZWlnaHQgb2YgZmFzaGlvbi4=" },
  1.1096 +          { "Any small object that is accidentally dropped will hide under a larger object.", 
  1.1097 +            "QW55IHNtYWxsIG9iamVjdCB0aGF0IGlzIGFjY2lkZW50YWxseSBkcm9wcGVkIHdpbGwgaGlkZSB1bmRlciBhIGxhcmdlciBvYmplY3Qu" },
  1.1098 +          { "Balrogs do not appear above level 20.", 
  1.1099 +            "QmFscm9ncyBkbyBub3QgYXBwZWFyIGFib3ZlIGxldmVsIDIwLg==" },
  1.1100 +          { "Banana peels work especially well against Keystone Kops.", 
  1.1101 +            "QmFuYW5hIHBlZWxzIHdvcmsgZXNwZWNpYWxseSB3ZWxsIGFnYWluc3QgS2V5c3RvbmUgS29wcy4=" },
  1.1102 +          { "Be careful when eating bananas. Monsters might slip on the peels.", 
  1.1103 +            "QmUgY2FyZWZ1bCB3aGVuIGVhdGluZyBiYW5hbmFzLiBNb25zdGVycyBtaWdodCBzbGlwIG9uIHRoZSBwZWVscy4=" },
  1.1104 +          { "Better leave the dungeon; otherwise you might get hurt badly.", 
  1.1105 +            "QmV0dGVyIGxlYXZlIHRoZSBkdW5nZW9uOyBvdGhlcndpc2UgeW91IG1pZ2h0IGdldCBodXJ0IGJhZGx5Lg==" },
  1.1106 +          { "Beware of the potion of nitroglycerin -- it's not for the weak of heart.", 
  1.1107 +            "QmV3YXJlIG9mIHRoZSBwb3Rpb24gb2Ygbml0cm9nbHljZXJpbiAtLSBpdCdzIG5vdCBmb3IgdGhlIHdlYWsgb2YgaGVhcnQu" },
  1.1108 +          { "Beware: there's always a chance that your wand explodes as you try to zap it!", 
  1.1109 +            "QmV3YXJlOiB0aGVyZSdzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHlvdXIgd2FuZCBleHBsb2RlcyBhcyB5b3UgdHJ5IHRvIHphcCBpdCE=" },
  1.1110 +          { "Beyond the 23rd level lies a happy retirement in a room of your own.", 
  1.1111 +            "QmV5b25kIHRoZSAyM3JkIGxldmVsIGxpZXMgYSBoYXBweSByZXRpcmVtZW50IGluIGEgcm9vbSBvZiB5b3VyIG93bi4=" },
  1.1112 +          { "Changing your suit without dropping your sword? You must be kidding!", 
  1.1113 +            "Q2hhbmdpbmcgeW91ciBzdWl0IHdpdGhvdXQgZHJvcHBpbmcgeW91ciBzd29yZD8gWW91IG11c3QgYmUga2lkZGluZyE=" },
  1.1114 +          { "Cockatrices might turn themselves to stone faced with a mirror.", 
  1.1115 +            "Q29ja2F0cmljZXMgbWlnaHQgdHVybiB0aGVtc2VsdmVzIHRvIHN0b25lIGZhY2VkIHdpdGggYSBtaXJyb3Iu" },
  1.1116 +          { "Consumption of home-made food is strictly forbidden in this dungeon.", 
  1.1117 +            "Q29uc3VtcHRpb24gb2YgaG9tZS1tYWRlIGZvb2QgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIGluIHRoaXMgZHVuZ2Vvbi4=" },
  1.1118 +          { "Dark room? Your chance to develop your photographs!", 
  1.1119 +            "RGFyayByb29tPyBZb3VyIGNoYW5jZSB0byBkZXZlbG9wIHlvdXIgcGhvdG9ncmFwaHMh" },
  1.1120 +          { "Dark rooms are not *completely* dark: just wait and let your eyes adjust...", 
  1.1121 +            "RGFyayByb29tcyBhcmUgbm90ICpjb21wbGV0ZWx5KiBkYXJrOiBqdXN0IHdhaXQgYW5kIGxldCB5b3VyIGV5ZXMgYWRqdXN0Li4u" },
  1.1122 +          { "David London sez, \"Hey guys, *WIELD* a lizard corpse against a cockatrice!\"", 
  1.1123 +            "RGF2aWQgTG9uZG9uIHNleiwgIkhleSBndXlzLCAqV0lFTEQqIGEgbGl6YXJkIGNvcnBzZSBhZ2FpbnN0IGEgY29ja2F0cmljZSEi" },
  1.1124 +          { "Death is just life's way of telling you you've been fired.", 
  1.1125 +            "RGVhdGggaXMganVzdCBsaWZlJ3Mgd2F5IG9mIHRlbGxpbmcgeW91IHlvdSd2ZSBiZWVuIGZpcmVkLg==" },
  1.1126 +          { "Demi-gods don't need any help from the gods.", 
  1.1127 +            "RGVtaS1nb2RzIGRvbid0IG5lZWQgYW55IGhlbHAgZnJvbSB0aGUgZ29kcy4=" },
  1.1128 +          { "Demons *HATE* Priests and Priestesses.", 
  1.1129 +            "RGVtb25zICpIQVRFKiBQcmllc3RzIGFuZCBQcmllc3Rlc3Nlcy4=" },
  1.1130 +          { "Didn't you forget to pay?", 
  1.1131 +            "RGlkbid0IHlvdSBmb3JnZXQgdG8gcGF5Pw==" },
  1.1132 +          { "Didn't your mother tell you not to eat food off the floor?", 
  1.1133 +            "RGlkbid0IHlvdXIgbW90aGVyIHRlbGwgeW91IG5vdCB0byBlYXQgZm9vZCBvZmYgdGhlIGZsb29yPw==" },
  1.1134 +          { "Direct a direct hit on your direct opponent, directing in the right direction.", 
  1.1135 +            "RGlyZWN0IGEgZGlyZWN0IGhpdCBvbiB5b3VyIGRpcmVjdCBvcHBvbmVudCwgZGlyZWN0aW5nIGluIHRoZSByaWdodCBkaXJlY3Rpb24u" },
  1.1136 +          { "Do you want to make more money? Sure, we all do! Join the Fort Ludios guard!", 
  1.1137 +            "RG8geW91IHdhbnQgdG8gbWFrZSBtb3JlIG1vbmV5PyBTdXJlLCB3ZSBhbGwgZG8hIEpvaW4gdGhlIEZvcnQgTHVkaW9zIGd1YXJkIQ==" },
  1.1138 +          { "Don't eat too much: you might start hiccoughing!", 
  1.1139 +            "RG9uJ3QgZWF0IHRvbyBtdWNoOiB5b3UgbWlnaHQgc3RhcnQgaGljY291Z2hpbmch" },
  1.1140 +          { "Don't play hack at your work; your boss might hit you!", 
  1.1141 +            "RG9uJ3QgcGxheSBoYWNrIGF0IHlvdXIgd29yazsgeW91ciBib3NzIG1pZ2h0IGhpdCB5b3Uh" },
  1.1142 +          { "Don't tell a soul you found a secret door, otherwise it isn't a secret anymore.", 
  1.1143 +            "RG9uJ3QgdGVsbCBhIHNvdWwgeW91IGZvdW5kIGEgc2VjcmV0IGRvb3IsIG90aGVyd2lzZSBpdCBpc24ndCBhIHNlY3JldCBhbnltb3JlLg==" },
  1.1144 +          { "Drinking potions of booze may land you in jail if you are under 21.", 
  1.1145 +            "RHJpbmtpbmcgcG90aW9ucyBvZiBib296ZSBtYXkgbGFuZCB5b3UgaW4gamFpbCBpZiB5b3UgYXJlIHVuZGVyIDIxLg==" },
  1.1146 +          { "Drop your vanity and get rid of your jewels! Pickpockets about!", 
  1.1147 +            "RHJvcCB5b3VyIHZhbml0eSBhbmQgZ2V0IHJpZCBvZiB5b3VyIGpld2VscyEgUGlja3BvY2tldHMgYWJvdXQh" },
  1.1148 +          { "Eat 10 cloves of garlic and keep all humans at a two-square distance.", 
  1.1149 +            "RWF0IDEwIGNsb3ZlcyBvZiBnYXJsaWMgYW5kIGtlZXAgYWxsIGh1bWFucyBhdCBhIHR3by1zcXVhcmUgZGlzdGFuY2Uu" },
  1.1150 +          { "Eels hide under mud. Use a unicorn to clear the water and make them visible.", 
  1.1151 +            "RWVscyBoaWRlIHVuZGVyIG11ZC4gVXNlIGEgdW5pY29ybiB0byBjbGVhciB0aGUgd2F0ZXIgYW5kIG1ha2UgdGhlbSB2aXNpYmxlLg==" },
  1.1152 +          { "Engrave your wishes with a wand of wishing.", 
  1.1153 +            "RW5ncmF2ZSB5b3VyIHdpc2hlcyB3aXRoIGEgd2FuZCBvZiB3aXNoaW5nLg==" },
  1.1154 +          { "Eventually you will come to admire the swift elegance of a retreating nymph.", 
  1.1155 +            "RXZlbnR1YWxseSB5b3Ugd2lsbCBjb21lIHRvIGFkbWlyZSB0aGUgc3dpZnQgZWxlZ2FuY2Ugb2YgYSByZXRyZWF0aW5nIG55bXBoLg==" },
  1.1156 +          { "Ever heard hissing outside? I *knew* you hadn't!", 
  1.1157 +            "RXZlciBoZWFyZCBoaXNzaW5nIG91dHNpZGU/IEkgKmtuZXcqIHlvdSBoYWRuJ3Qh" },
  1.1158 +          { "Ever lifted a dragon corpse?", 
  1.1159 +            "RXZlciBsaWZ0ZWQgYSBkcmFnb24gY29ycHNlPw==" },
  1.1160 +          { "Ever seen a leocrotta dancing the tengu?", 
  1.1161 +            "RXZlciBzZWVuIGEgbGVvY3JvdHRhIGRhbmNpbmcgdGhlIHRlbmd1Pw==" },
  1.1162 +          { "Ever seen your weapon glow plaid?", 
  1.1163 +            "RXZlciBzZWVuIHlvdXIgd2VhcG9uIGdsb3cgcGxhaWQ/" },
  1.1164 +          { "Ever tamed a shopkeeper?", 
  1.1165 +            "RXZlciB0YW1lZCBhIHNob3BrZWVwZXI/" },
  1.1166 +          { "Ever tried digging through a Vault Guard?", 
  1.1167 +            "RXZlciB0cmllZCBkaWdnaW5nIHRocm91Z2ggYSBWYXVsdCBHdWFyZD8=" },
  1.1168 +          { "Ever tried enchanting a rope?", 
  1.1169 +            "RXZlciB0cmllZCBlbmNoYW50aW5nIGEgcm9wZT8=" },
  1.1170 +          { "Floating eyes can't stand Hawaiian shirts.", 
  1.1171 +            "RmxvYXRpbmcgZXllcyBjYW4ndCBzdGFuZCBIYXdhaWlhbiBzaGlydHMu" },
  1.1172 +          { "For any remedy there is a misery.", 
  1.1173 +            "Rm9yIGFueSByZW1lZHkgdGhlcmUgaXMgYSBtaXNlcnku" },
  1.1174 +          { "Giant bats turn into giant vampires.", 
  1.1175 +            "R2lhbnQgYmF0cyB0dXJuIGludG8gZ2lhbnQgdmFtcGlyZXMu" },
  1.1176 +          { "Good day for overcoming obstacles. Try a steeplechase.", 
  1.1177 +            "R29vZCBkYXkgZm9yIG92ZXJjb21pbmcgb2JzdGFjbGVzLiBUcnkgYSBzdGVlcGxlY2hhc2Uu" },
  1.1178 +          { "Half Moon tonight. (At least it's better than no Moon at all.)", 
  1.1179 +            "SGFsZiBNb29uIHRvbmlnaHQuIChBdCBsZWFzdCBpdCdzIGJldHRlciB0aGFuIG5vIE1vb24gYXQgYWxsLik=" },
  1.1180 +          { "Help! I'm being held prisoner in a fortune cookie factory!", 
  1.1181 +            "SGVscCEgSSdtIGJlaW5nIGhlbGQgcHJpc29uZXIgaW4gYSBmb3J0dW5lIGNvb2tpZSBmYWN0b3J5IQ==" },
  1.1182 +          { "Housecats have nine lives, kittens only one.", 
  1.1183 +            "SG91c2VjYXRzIGhhdmUgbmluZSBsaXZlcywga2l0dGVucyBvbmx5IG9uZS4=" },
  1.1184 +          { "How long can you tread water?", 
  1.1185 +            "SG93IGxvbmcgY2FuIHlvdSB0cmVhZCB3YXRlcj8=" },
  1.1186 +          { "Hungry? There is an abundance of food on the next level.", 
  1.1187 +            "SHVuZ3J5PyBUaGVyZSBpcyBhbiBhYnVuZGFuY2Ugb2YgZm9vZCBvbiB0aGUgbmV4dCBsZXZlbC4=" },
  1.1188 +          { "I guess you've never hit a mail daemon with the Amulet of Yendor...", 
  1.1189 +            "SSBndWVzcyB5b3UndmUgbmV2ZXIgaGl0IGEgbWFpbCBkYWVtb24gd2l0aCB0aGUgQW11bGV0IG9mIFllbmRvci4uLg==" },
  1.1190 +          { "If you are the shopkeeper, you can take things for free.", 
  1.1191 +            "SWYgeW91IGFyZSB0aGUgc2hvcGtlZXBlciwgeW91IGNhbiB0YWtlIHRoaW5ncyBmb3IgZnJlZS4=" },
  1.1192 +          { "If you can't learn to do it well, learn to enjoy doing it badly.", 
  1.1193 +            "SWYgeW91IGNhbid0IGxlYXJuIHRvIGRvIGl0IHdlbGwsIGxlYXJuIHRvIGVuam95IGRvaW5nIGl0IGJhZGx5Lg==" },
  1.1194 +          { "If you thought the Wizard was bad, just wait till you meet the Warlord!", 
  1.1195 +            "SWYgeW91IHRob3VnaHQgdGhlIFdpemFyZCB3YXMgYmFkLCBqdXN0IHdhaXQgdGlsbCB5b3UgbWVldCB0aGUgV2FybG9yZCE=" },
  1.1196 +          { "If you turn blind, don't expect your dog to be turned into a seeing-eye dog.", 
  1.1197 +            "SWYgeW91IHR1cm4gYmxpbmQsIGRvbid0IGV4cGVjdCB5b3VyIGRvZyB0byBiZSB0dXJuZWQgaW50byBhIHNlZWluZy1leWUgZG9nLg==" },
  1.1198 +          { "If you want to feel great, you must eat something real big.", 
  1.1199 +            "SWYgeW91IHdhbnQgdG8gZmVlbCBncmVhdCwgeW91IG11c3QgZWF0IHNvbWV0aGluZyByZWFsIGJpZy4=" },
  1.1200 +          { "If you want to float, you'd better eat a floating eye.", 
  1.1201 +            "SWYgeW91IHdhbnQgdG8gZmxvYXQsIHlvdSdkIGJldHRlciBlYXQgYSBmbG9hdGluZyBleWUu" },
  1.1202 +          { "If your ghost kills a player, it increases your score.", 
  1.1203 +            "SWYgeW91ciBnaG9zdCBraWxscyBhIHBsYXllciwgaXQgaW5jcmVhc2VzIHlvdXIgc2NvcmUu" },
  1.1204 +          { "Increase mindpower: Tame your own ghost!", 
  1.1205 +            "SW5jcmVhc2UgbWluZHBvd2VyOiBUYW1lIHlvdXIgb3duIGdob3N0IQ==" },
  1.1206 +          { "It furthers one to see the great man.", 
  1.1207 +            "SXQgZnVydGhlcnMgb25lIHRvIHNlZSB0aGUgZ3JlYXQgbWFuLg==" },
  1.1208 +          { "It's easy to overlook a monster in a wood.", 
  1.1209 +            "SXQncyBlYXN5IHRvIG92ZXJsb29rIGEgbW9uc3RlciBpbiBhIHdvb2Qu" },
  1.1210 +          { "Just below any trapdoor there may be another one. Just keep falling!", 
  1.1211 +            "SnVzdCBiZWxvdyBhbnkgdHJhcGRvb3IgdGhlcmUgbWF5IGJlIGFub3RoZXIgb25lLiBKdXN0IGtlZXAgZmFsbGluZyE=" },
  1.1212 +          { "Katanas are very sharp; watch you don't cut yourself.", 
  1.1213 +            "S2F0YW5hcyBhcmUgdmVyeSBzaGFycDsgd2F0Y2ggeW91IGRvbid0IGN1dCB5b3Vyc2VsZi4=" },
  1.1214 +          { "Keep a clear mind: quaff clear potions.", 
  1.1215 +            "S2VlcCBhIGNsZWFyIG1pbmQ6IHF1YWZmIGNsZWFyIHBvdGlvbnMu" },
  1.1216 +          { "Kicking the terminal doesn't hurt the monsters.", 
  1.1217 +            "S2lja2luZyB0aGUgdGVybWluYWwgZG9lc24ndCBodXJ0IHRoZSBtb25zdGVycy4=" },
  1.1218 +          { "Killer bees keep appearing till you kill their queen.", 
  1.1219 +            "S2lsbGVyIGJlZXMga2VlcCBhcHBlYXJpbmcgdGlsbCB5b3Uga2lsbCB0aGVpciBxdWVlbi4=" },
  1.1220 +          { "Killer bunnies can be tamed with carrots only.", 
  1.1221 +            "S2lsbGVyIGJ1bm5pZXMgY2FuIGJlIHRhbWVkIHdpdGggY2Fycm90cyBvbmx5Lg==" },
  1.1222 +          { "Latest news? Put `rec.games.roguelike.nethack' in your .newsrc!", 
  1.1223 +            "TGF0ZXN0IG5ld3M/IFB1dCBgcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrJyBpbiB5b3VyIC5uZXdzcmMh" },
  1.1224 +          { "Learn how to spell. Play NetHack!", 
  1.1225 +            "TGVhcm4gaG93IHRvIHNwZWxsLiBQbGF5IE5ldEhhY2sh" },
  1.1226 +          { "Leprechauns hide their gold in a secret room.", 
  1.1227 +            "TGVwcmVjaGF1bnMgaGlkZSB0aGVpciBnb2xkIGluIGEgc2VjcmV0IHJvb20u" },
  1.1228 +          { "Let your fingers do the walking on the yulkjhnb keys.", 
  1.1229 +            "TGV0IHlvdXIgZmluZ2VycyBkbyB0aGUgd2Fsa2luZyBvbiB0aGUgeXVsa2pobmIga2V5cy4=" },
  1.1230 +          { "Let's face it: this time you're not going to win.", 
  1.1231 +            "TGV0J3MgZmFjZSBpdDogdGhpcyB0aW1lIHlvdSdyZSBub3QgZ29pbmcgdG8gd2luLg==" },
  1.1232 +          { "Let's have a party, drink a lot of booze.", 
  1.1233 +            "TGV0J3MgaGF2ZSBhIHBhcnR5LCBkcmluayBhIGxvdCBvZiBib296ZS4=" },
  1.1234 +          { "Liquor sellers do not drink; they hate to see you twice.", 
  1.1235 +            "TGlxdW9yIHNlbGxlcnMgZG8gbm90IGRyaW5rOyB0aGV5IGhhdGUgdG8gc2VlIHlvdSB0d2ljZS4=" },
  1.1236 +          { "Lunar eclipse tonight. May as well quit now!", 
  1.1237 +            "THVuYXIgZWNsaXBzZSB0b25pZ2h0LiBNYXkgYXMgd2VsbCBxdWl0IG5vdyE=" },
  1.1238 +          { "Meeting your own ghost decreases your luck considerably!", 
  1.1239 +            "TWVldGluZyB5b3VyIG93biBnaG9zdCBkZWNyZWFzZXMgeW91ciBsdWNrIGNvbnNpZGVyYWJseSE=" },
  1.1240 +          { "Money to invest? Take it to the local branch of the Magic Memory Vault!", 
  1.1241 +            "TW9uZXkgdG8gaW52ZXN0PyBUYWtlIGl0IHRvIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIE1hZ2ljIE1lbW9yeSBWYXVsdCE=" },
  1.1242 +          { "Monsters come from nowhere to hit you everywhere.", 
  1.1243 +            "TW9uc3RlcnMgY29tZSBmcm9tIG5vd2hlcmUgdG8gaGl0IHlvdSBldmVyeXdoZXJlLg==" },
  1.1244 +          { "Monsters sleep because you are boring, not because they ever get tired.", 
  1.1245 +            "TW9uc3RlcnMgc2xlZXAgYmVjYXVzZSB5b3UgYXJlIGJvcmluZywgbm90IGJlY2F1c2UgdGhleSBldmVyIGdldCB0aXJlZC4=" },
  1.1246 +          { "Most monsters prefer minced meat. That's why they are hitting you!", 
  1.1247 +            "TW9zdCBtb25zdGVycyBwcmVmZXIgbWluY2VkIG1lYXQuIFRoYXQncyB3aHkgdGhleSBhcmUgaGl0dGluZyB5b3Uh" },
  1.1248 +          { "Most of the bugs in NetHack are on the floor.", 
  1.1249 +            "TW9zdCBvZiB0aGUgYnVncyBpbiBOZXRIYWNrIGFyZSBvbiB0aGUgZmxvb3Iu" },
  1.1250 +          { "Much ado Nothing Happens.", 
  1.1251 +            "TXVjaCBhZG8gTm90aGluZyBIYXBwZW5zLg==" },
  1.1252 +          { "Multi-player NetHack is a myth.", 
  1.1253 +            "TXVsdGktcGxheWVyIE5ldEhhY2sgaXMgYSBteXRoLg==" },
  1.1254 +          { "NetHack is addictive. Too late, you're already hooked.", 
  1.1255 +            "TmV0SGFjayBpcyBhZGRpY3RpdmUuIFRvbyBsYXRlLCB5b3UncmUgYWxyZWFkeSBob29rZWQu" },
  1.1256 +          { "Never ask a shopkeeper for a price list.", 
  1.1257 +            "TmV2ZXIgYXNrIGEgc2hvcGtlZXBlciBmb3IgYSBwcmljZSBsaXN0Lg==" },
  1.1258 +          { "Never burn a tree, unless you like getting whacked with a +5 shovel.", 
  1.1259 +            "TmV2ZXIgYnVybiBhIHRyZWUsIHVubGVzcyB5b3UgbGlrZSBnZXR0aW5nIHdoYWNrZWQgd2l0aCBhICs1IHNob3ZlbC4=" },
  1.1260 +          { "Never eat with glowing hands!", 
  1.1261 +            "TmV2ZXIgZWF0IHdpdGggZ2xvd2luZyBoYW5kcyE=" },
  1.1262 +          { "Never mind the monsters hitting you: they just replace the charwomen.", 
  1.1263 +            "TmV2ZXIgbWluZCB0aGUgbW9uc3RlcnMgaGl0dGluZyB5b3U6IHRoZXkganVzdCByZXBsYWNlIHRoZSBjaGFyd29tZW4u" },
  1.1264 +          { "Never play leapfrog with a unicorn.", 
  1.1265 +            "TmV2ZXIgcGxheSBsZWFwZnJvZyB3aXRoIGEgdW5pY29ybi4=" },
  1.1266 +          { "Never step on a cursed engraving.", 
  1.1267 +            "TmV2ZXIgc3RlcCBvbiBhIGN1cnNlZCBlbmdyYXZpbmcu" },
  1.1268 +          { "Never swim with a camera: there's nothing to take pictures of.", 
  1.1269 +            "TmV2ZXIgc3dpbSB3aXRoIGEgY2FtZXJhOiB0aGVyZSdzIG5vdGhpbmcgdG8gdGFrZSBwaWN0dXJlcyBvZi4=" },
  1.1270 +          { "Never teach your pet rust monster to fetch.", 
  1.1271 +            "TmV2ZXIgdGVhY2ggeW91ciBwZXQgcnVzdCBtb25zdGVyIHRvIGZldGNoLg==" },
  1.1272 +          { "Never trust a random generator in magic fields.", 
  1.1273 +            "TmV2ZXIgdHJ1c3QgYSByYW5kb20gZ2VuZXJhdG9yIGluIG1hZ2ljIGZpZWxkcy4=" },
  1.1274 +          { "Never use a wand of death.", 
  1.1275 +            "TmV2ZXIgdXNlIGEgd2FuZCBvZiBkZWF0aC4=" },
  1.1276 +          { "No level contains two shops. The maze is no level. So...", 
  1.1277 +            "Tm8gbGV2ZWwgY29udGFpbnMgdHdvIHNob3BzLiBUaGUgbWF6ZSBpcyBubyBsZXZlbC4gU28uLi4=" },
  1.1278 +          { "No part of this fortune may be reproduced, stored in a retrieval system, ...", 
  1.1279 +            "Tm8gcGFydCBvZiB0aGlzIGZvcnR1bmUgbWF5IGJlIHJlcHJvZHVjZWQsIHN0b3JlZCBpbiBhIHJldHJpZXZhbCBzeXN0ZW0sIC4uLg==" },
  1.1280 +          { "Not all rumors are as misleading as this one.", 
  1.1281 +            "Tm90IGFsbCBydW1vcnMgYXJlIGFzIG1pc2xlYWRpbmcgYXMgdGhpcyBvbmUu" },
  1.1282 +          { "Nymphs and nurses like beautiful rings.", 
  1.1283 +            "TnltcGhzIGFuZCBudXJzZXMgbGlrZSBiZWF1dGlmdWwgcmluZ3Mu" },
  1.1284 +          { "Nymphs are blondes. Are you a gentleman?", 
  1.1285 +            "TnltcGhzIGFyZSBibG9uZGVzLiBBcmUgeW91IGEgZ2VudGxlbWFuPw==" },
  1.1286 +          { "Offering a unicorn a worthless piece of glass might prove to be fatal!", 
  1.1287 +            "T2ZmZXJpbmcgYSB1bmljb3JuIGEgd29ydGhsZXNzIHBpZWNlIG9mIGdsYXNzIG1pZ2h0IHByb3ZlIHRvIGJlIGZhdGFsIQ==" },
  1.1288 +          { "Old hackers never die: young ones do.", 
  1.1289 +            "T2xkIGhhY2tlcnMgbmV2ZXIgZGllOiB5b3VuZyBvbmVzIGRvLg==" },
  1.1290 +          { "One has to leave shops before closing time.", 
  1.1291 +            "T25lIGhhcyB0byBsZWF2ZSBzaG9wcyBiZWZvcmUgY2xvc2luZyB0aW1lLg==" },
  1.1292 +          { "One homunculus a day keeps the doctor away.", 
  1.1293 +            "T25lIGhvbXVuY3VsdXMgYSBkYXkga2VlcHMgdGhlIGRvY3RvciBhd2F5Lg==" },
  1.1294 +          { "One level further down somebody is getting killed, right now.", 
  1.1295 +            "T25lIGxldmVsIGZ1cnRoZXIgZG93biBzb21lYm9keSBpcyBnZXR0aW5nIGtpbGxlZCwgcmlnaHQgbm93Lg==" },
  1.1296 +          { "Only a wizard can use a magic whistle.", 
  1.1297 +            "T25seSBhIHdpemFyZCBjYW4gdXNlIGEgbWFnaWMgd2hpc3RsZS4=" },
  1.1298 +          { "Only adventurers of evil alignment think of killing their dog.", 
  1.1299 +            "T25seSBhZHZlbnR1cmVycyBvZiBldmlsIGFsaWdubWVudCB0aGluayBvZiBraWxsaW5nIHRoZWlyIGRvZy4=" },
  1.1300 +          { "Only chaotic evils kill sleeping monsters.", 
  1.1301 +            "T25seSBjaGFvdGljIGV2aWxzIGtpbGwgc2xlZXBpbmcgbW9uc3RlcnMu" },
  1.1302 +          { "Only real trappers escape traps.", 
  1.1303 +            "T25seSByZWFsIHRyYXBwZXJzIGVzY2FwZSB0cmFwcy4=" },
  1.1304 +          { "Only real wizards can write scrolls.", 
  1.1305 +            "T25seSByZWFsIHdpemFyZHMgY2FuIHdyaXRlIHNjcm9sbHMu" },
  1.1306 +          { "Operation OVERKILL has started now.", 
  1.1307 +            "T3BlcmF0aW9uIE9WRVJLSUxMIGhhcyBzdGFydGVkIG5vdy4=" },
  1.1308 +          { "PLEASE ignore previous rumor.", 
  1.1309 +            "UExFQVNFIGlnbm9yZSBwcmV2aW91cyBydW1vci4=" },
  1.1310 +          { "Polymorph into an ettin; meet your opponents face to face to face.", 
  1.1311 +            "UG9seW1vcnBoIGludG8gYW4gZXR0aW47IG1lZXQgeW91ciBvcHBvbmVudHMgZmFjZSB0byBmYWNlIHRvIGZhY2Uu" },
  1.1312 +          { "Praying will frighten demons.", 
  1.1313 +            "UHJheWluZyB3aWxsIGZyaWdodGVuIGRlbW9ucy4=" },
  1.1314 +          { "Row (3x) that boat gently down the stream, Charon (4x), death is but a dream.", 
  1.1315 +            "Um93ICgzeCkgdGhhdCBib2F0IGdlbnRseSBkb3duIHRoZSBzdHJlYW0sIENoYXJvbiAoNHgpLCBkZWF0aCBpcyBidXQgYSBkcmVhbS4=" },
  1.1316 +          { "Running is good for your legs.", 
  1.1317 +            "UnVubmluZyBpcyBnb29kIGZvciB5b3VyIGxlZ3Mu" },
  1.1318 +          { "Screw up your courage! You've screwed up everything else.", 
  1.1319 +            "U2NyZXcgdXAgeW91ciBjb3VyYWdlISBZb3UndmUgc2NyZXdlZCB1cCBldmVyeXRoaW5nIGVsc2Uu" },
  1.1320 +          { "Seepage? Leaky pipes? Rising damp? Summon the plumber!", 
  1.1321 +            "U2VlcGFnZT8gTGVha3kgcGlwZXM/IFJpc2luZyBkYW1wPyBTdW1tb24gdGhlIHBsdW1iZXIh" },
  1.1322 +          { "Segmentation fault (core dumped).", 
  1.1323 +            "U2VnbWVudGF0aW9uIGZhdWx0IChjb3JlIGR1bXBlZCku" },
  1.1324 +          { "Shopkeepers sometimes die from old age.", 
  1.1325 +            "U2hvcGtlZXBlcnMgc29tZXRpbWVzIGRpZSBmcm9tIG9sZCBhZ2Uu" },
  1.1326 +          { "Some mazes (especially small ones) have no solutions, says man 6 maze.", 
  1.1327 +            "U29tZSBtYXplcyAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBoYXZlIG5vIHNvbHV0aW9ucywgc2F5cyBtYW4gNiBtYXplLg==" },
  1.1328 +          { "Some questions the Sphynx asks just *don't* have any answers.", 
  1.1329 +            "U29tZSBxdWVzdGlvbnMgdGhlIFNwaHlueCBhc2tzIGp1c3QgKmRvbid0KiBoYXZlIGFueSBhbnN3ZXJzLg==" },
  1.1330 +          { "Sometimes \"mu\" is the answer.", 
  1.1331 +            "U29tZXRpbWVzICJtdSIgaXMgdGhlIGFuc3dlci4=" },
  1.1332 +          { "Sorry, no fortune this time. Better luck next cookie!", 
  1.1333 +            "U29ycnksIG5vIGZvcnR1bmUgdGhpcyB0aW1lLiBCZXR0ZXIgbHVjayBuZXh0IGNvb2tpZSE=" },
  1.1334 +          { "Spare your scrolls of make-edible until it's really necessary!", 
  1.1335 +            "U3BhcmUgeW91ciBzY3JvbGxzIG9mIG1ha2UtZWRpYmxlIHVudGlsIGl0J3MgcmVhbGx5IG5lY2Vzc2FyeSE=" },
  1.1336 +          { "Suddenly, the dungeon will collapse...", 
  1.1337 +            "U3VkZGVubHksIHRoZSBkdW5nZW9uIHdpbGwgY29sbGFwc2UuLi4=" },
  1.1338 +          { "Taming a mail daemon may cause a system security violation.", 
  1.1339 +            "VGFtaW5nIGEgbWFpbCBkYWVtb24gbWF5IGNhdXNlIGEgc3lzdGVtIHNlY3VyaXR5IHZpb2xhdGlvbi4=" },
  1.1340 +          { "The crowd was so tough, the Stooges won't play the Dungeon anymore, nyuk nyuk.", 
  1.1341 +            "VGhlIGNyb3dkIHdhcyBzbyB0b3VnaCwgdGhlIFN0b29nZXMgd29uJ3QgcGxheSB0aGUgRHVuZ2VvbiBhbnltb3JlLCBueXVrIG55dWsu" },
  1.1342 +          { "The leprechauns hide their treasure in a small hidden room.", 
  1.1343 +            "VGhlIGxlcHJlY2hhdW5zIGhpZGUgdGhlaXIgdHJlYXN1cmUgaW4gYSBzbWFsbCBoaWRkZW4gcm9vbS4=" },
  1.1344 +          { "The longer the wand the better.", 
  1.1345 +            "VGhlIGxvbmdlciB0aGUgd2FuZCB0aGUgYmV0dGVyLg==" },
  1.1346 +          { "The magic word is \"XYZZY\".", 
  1.1347 +            "VGhlIG1hZ2ljIHdvcmQgaXMgIlhZWlpZIi4=" },
  1.1348 +          { "The meek shall inherit your bones files.", 
  1.1349 +            "VGhlIG1lZWsgc2hhbGwgaW5oZXJpdCB5b3VyIGJvbmVzIGZpbGVzLg==" },
  1.1350 +          { "The mines are dark and deep, and I have levels to go before I sleep.", 
  1.1351 +            "VGhlIG1pbmVzIGFyZSBkYXJrIGFuZCBkZWVwLCBhbmQgSSBoYXZlIGxldmVscyB0byBnbyBiZWZvcmUgSSBzbGVlcC4=" },
  1.1352 +          { "The use of dynamite is dangerous.", 
  1.1353 +            "VGhlIHVzZSBvZiBkeW5hbWl0ZSBpcyBkYW5nZXJvdXMu" },
  1.1354 +          { "There are no worms in the UNIX version.", 
  1.1355 +            "VGhlcmUgYXJlIG5vIHdvcm1zIGluIHRoZSBVTklYIHZlcnNpb24u" },
  1.1356 +          { "There is a trap on this level!", 
  1.1357 +            "VGhlcmUgaXMgYSB0cmFwIG9uIHRoaXMgbGV2ZWwh" },
  1.1358 +          { "They say that Demogorgon, Asmodeus, Orcus, Yeenoghu & Juiblex is no law firm.", 
  1.1359 +            "VGhleSBzYXkgdGhhdCBEZW1vZ29yZ29uLCBBc21vZGV1cywgT3JjdXMsIFllZW5vZ2h1ICYgSnVpYmxleCBpcyBubyBsYXcgZmlybS4=" },
  1.1360 +          { "They say that Geryon has an evil twin, beware!", 
  1.1361 +            "VGhleSBzYXkgdGhhdCBHZXJ5b24gaGFzIGFuIGV2aWwgdHdpbiwgYmV3YXJlIQ==" },
  1.1362 +          { "They say that Medusa would make a terrible pet.", 
  1.1363 +            "VGhleSBzYXkgdGhhdCBNZWR1c2Egd291bGQgbWFrZSBhIHRlcnJpYmxlIHBldC4=" },
  1.1364 +          { "They say that NetHack bugs are Seldon planned.", 
  1.1365 +            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGJ1Z3MgYXJlIFNlbGRvbiBwbGFubmVkLg==" },
  1.1366 +          { "They say that NetHack comes in 256 flavors.", 
  1.1367 +            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGNvbWVzIGluIDI1NiBmbGF2b3JzLg==" },
  1.1368 +          { "They say that NetHack is just a computer game.", 
  1.1369 +            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIGp1c3QgYSBjb21wdXRlciBnYW1lLg==" },
  1.1370 +          { "They say that NetHack is more than just a computer game.", 
  1.1371 +            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG1vcmUgdGhhbiBqdXN0IGEgY29tcHV0ZXIgZ2FtZS4=" },
  1.1372 +          { "They say that NetHack is never what it used to be.", 
  1.1373 +            "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG5ldmVyIHdoYXQgaXQgdXNlZCB0byBiZS4=" },
  1.1374 +          { "They say that a baby dragon is too small to hurt or help you.", 
  1.1375 +            "VGhleSBzYXkgdGhhdCBhIGJhYnkgZHJhZ29uIGlzIHRvbyBzbWFsbCB0byBodXJ0IG9yIGhlbHAgeW91Lg==" },
  1.1376 +          { "They say that a black pudding is simply a brown pudding gone bad.", 
  1.1377 +            "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHB1ZGRpbmcgaXMgc2ltcGx5IGEgYnJvd24gcHVkZGluZyBnb25lIGJhZC4=" },
  1.1378 +          { "They say that a black sheep has 3 bags full of wool.", 
  1.1379 +            "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHNoZWVwIGhhcyAzIGJhZ3MgZnVsbCBvZiB3b29sLg==" },
  1.1380 +          { "They say that a blank scroll is like a blank check.", 
  1.1381 +            "VGhleSBzYXkgdGhhdCBhIGJsYW5rIHNjcm9sbCBpcyBsaWtlIGEgYmxhbmsgY2hlY2su" },
  1.1382 +          { "They say that a cat named Morris has nine lives.", 
  1.1383 +            "VGhleSBzYXkgdGhhdCBhIGNhdCBuYW1lZCBNb3JyaXMgaGFzIG5pbmUgbGl2ZXMu" },
  1.1384 +          { "They say that a desperate shopper might pay any price in a shop.", 
  1.1385 +            "VGhleSBzYXkgdGhhdCBhIGRlc3BlcmF0ZSBzaG9wcGVyIG1pZ2h0IHBheSBhbnkgcHJpY2UgaW4gYSBzaG9wLg==" },
  1.1386 +          { "They say that a diamond dog is everybody's best friend.", 
  1.1387 +            "VGhleSBzYXkgdGhhdCBhIGRpYW1vbmQgZG9nIGlzIGV2ZXJ5Ym9keSdzIGJlc3QgZnJpZW5kLg==" },
  1.1388 +          { "They say that a dwarf lord can carry a pick-axe because his armor is light.", 
  1.1389 +            "VGhleSBzYXkgdGhhdCBhIGR3YXJmIGxvcmQgY2FuIGNhcnJ5IGEgcGljay1heGUgYmVjYXVzZSBoaXMgYXJtb3IgaXMgbGlnaHQu" },
  1.1390 +          { "They say that a floating eye can defeat Medusa.", 
  1.1391 +            "VGhleSBzYXkgdGhhdCBhIGZsb2F0aW5nIGV5ZSBjYW4gZGVmZWF0IE1lZHVzYS4=" },
  1.1392 +          { "They say that a fortune only has 1 line and you can't read between it.", 
  1.1393 +            "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lIGFuZCB5b3UgY2FuJ3QgcmVhZCBiZXR3ZWVuIGl0Lg==" },
  1.1394 +          { "They say that a fortune only has 1 line, but you can read between it.", 
  1.1395 +            "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lLCBidXQgeW91IGNhbiByZWFkIGJldHdlZW4gaXQu" },
  1.1396 +          { "They say that a fountain looks nothing like a regularly erupting geyser.", 
  1.1397 +            "VGhleSBzYXkgdGhhdCBhIGZvdW50YWluIGxvb2tzIG5vdGhpbmcgbGlrZSBhIHJlZ3VsYXJseSBlcnVwdGluZyBnZXlzZXIu" },
  1.1398 +          { "They say that a gold doubloon is worth more than its weight in gold.", 
  1.1399 +            "VGhleSBzYXkgdGhhdCBhIGdvbGQgZG91Ymxvb24gaXMgd29ydGggbW9yZSB0aGFuIGl0cyB3ZWlnaHQgaW4gZ29sZC4=" },
  1.1400 +          { "They say that a grid bug won't pay a shopkeeper for zapping you in a shop.", 
  1.1401 +            "VGhleSBzYXkgdGhhdCBhIGdyaWQgYnVnIHdvbid0IHBheSBhIHNob3BrZWVwZXIgZm9yIHphcHBpbmcgeW91IGluIGEgc2hvcC4=" },
  1.1402 +          { "They say that a gypsy could tell your fortune for a price.", 
  1.1403 +            "VGhleSBzYXkgdGhhdCBhIGd5cHN5IGNvdWxkIHRlbGwgeW91ciBmb3J0dW5lIGZvciBhIHByaWNlLg==" },
  1.1404 +          { "They say that a hacker named Alice once level teleported by using a mirror.", 
  1.1405 +            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBBbGljZSBvbmNlIGxldmVsIHRlbGVwb3J0ZWQgYnkgdXNpbmcgYSBtaXJyb3Iu" },
  1.1406 +          { "They say that a hacker named David once slew a giant with a sling and a rock.", 
  1.1407 +            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEYXZpZCBvbmNlIHNsZXcgYSBnaWFudCB3aXRoIGEgc2xpbmcgYW5kIGEgcm9jay4=" },
  1.1408 +          { "They say that a hacker named Dorothy once rode a fog cloud to Oz.", 
  1.1409 +            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEb3JvdGh5IG9uY2Ugcm9kZSBhIGZvZyBjbG91ZCB0byBPei4=" },
  1.1410 +          { "They say that a hacker named Mary once lost a white sheep in the mazes.", 
  1.1411 +            "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBNYXJ5IG9uY2UgbG9zdCBhIHdoaXRlIHNoZWVwIGluIHRoZSBtYXplcy4=" },
  1.1412 +          { "They say that a helm of brilliance is not to be taken lightly.", 
  1.1413 +            "VGhleSBzYXkgdGhhdCBhIGhlbG0gb2YgYnJpbGxpYW5jZSBpcyBub3QgdG8gYmUgdGFrZW4gbGlnaHRseS4=" },
  1.1414 +          { "They say that a hot dog and a hell hound are the same thing.", 
  1.1415 +            "VGhleSBzYXkgdGhhdCBhIGhvdCBkb2cgYW5kIGEgaGVsbCBob3VuZCBhcmUgdGhlIHNhbWUgdGhpbmcu" },
  1.1416 +          { "They say that a lamp named Aladdin's Lamp contains a djinni with 3 wishes.", 
  1.1417 +            "VGhleSBzYXkgdGhhdCBhIGxhbXAgbmFtZWQgQWxhZGRpbidzIExhbXAgY29udGFpbnMgYSBkamlubmkgd2l0aCAzIHdpc2hlcy4=" },
  1.1418 +          { "They say that a large dog named Lassie will lead you to the amulet.", 
  1.1419 +            "VGhleSBzYXkgdGhhdCBhIGxhcmdlIGRvZyBuYW1lZCBMYXNzaWUgd2lsbCBsZWFkIHlvdSB0byB0aGUgYW11bGV0Lg==" },
  1.1420 +          { "They say that a long sword is not a light sword.", 
  1.1421 +            "VGhleSBzYXkgdGhhdCBhIGxvbmcgc3dvcmQgaXMgbm90IGEgbGlnaHQgc3dvcmQu" },
  1.1422 +          { "They say that a manes won't mince words with you.", 
  1.1423 +            "VGhleSBzYXkgdGhhdCBhIG1hbmVzIHdvbid0IG1pbmNlIHdvcmRzIHdpdGggeW91Lg==" },
  1.1424 +          { "They say that a mind is a terrible thing to waste.", 
  1.1425 +            "VGhleSBzYXkgdGhhdCBhIG1pbmQgaXMgYSB0ZXJyaWJsZSB0aGluZyB0byB3YXN0ZS4=" },
  1.1426 +          { "They say that a plain nymph will only wear a wire ring in one ear.", 
  1.1427 +            "VGhleSBzYXkgdGhhdCBhIHBsYWluIG55bXBoIHdpbGwgb25seSB3ZWFyIGEgd2lyZSByaW5nIGluIG9uZSBlYXIu" },
  1.1428 +          { "They say that a plumed hat could be a previously used crested helmet.", 
  1.1429 +            "VGhleSBzYXkgdGhhdCBhIHBsdW1lZCBoYXQgY291bGQgYmUgYSBwcmV2aW91c2x5IHVzZWQgY3Jlc3RlZCBoZWxtZXQu" },
  1.1430 +          { "They say that a potion of oil is difficult to grasp.", 
  1.1431 +            "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiBvaWwgaXMgZGlmZmljdWx0IHRvIGdyYXNwLg==" },
  1.1432 +          { "They say that a potion of yogurt is a cancelled potion of sickness.", 
  1.1433 +            "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiB5b2d1cnQgaXMgYSBjYW5jZWxsZWQgcG90aW9uIG9mIHNpY2tuZXNzLg==" },
  1.1434 +          { "They say that a purple worm is not a baby purple dragon.", 
  1.1435 +            "VGhleSBzYXkgdGhhdCBhIHB1cnBsZSB3b3JtIGlzIG5vdCBhIGJhYnkgcHVycGxlIGRyYWdvbi4=" },
  1.1436 +          { "They say that a quivering blob tastes different than a gelatinous cube.", 
  1.1437 +            "VGhleSBzYXkgdGhhdCBhIHF1aXZlcmluZyBibG9iIHRhc3RlcyBkaWZmZXJlbnQgdGhhbiBhIGdlbGF0aW5vdXMgY3ViZS4=" },
  1.1438 +          { "They say that a runed broadsword named Stormbringer attracts vortices.", 
  1.1439 +            "VGhleSBzYXkgdGhhdCBhIHJ1bmVkIGJyb2Fkc3dvcmQgbmFtZWQgU3Rvcm1icmluZ2VyIGF0dHJhY3RzIHZvcnRpY2VzLg==" },
  1.1440 +          { "They say that a scroll of summoning has other names.", 
  1.1441 +            "VGhleSBzYXkgdGhhdCBhIHNjcm9sbCBvZiBzdW1tb25pbmcgaGFzIG90aGVyIG5hbWVzLg==" },
  1.1442 +          { "They say that a shaman can bestow blessings but usually doesn't.", 
  1.1443 +            "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiBjYW4gYmVzdG93IGJsZXNzaW5ncyBidXQgdXN1YWxseSBkb2Vzbid0Lg==" },
  1.1444 +          { "They say that a shaman will bless you for an eye of newt and wing of bat.", 
  1.1445 +            "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiB3aWxsIGJsZXNzIHlvdSBmb3IgYW4gZXllIG9mIG5ld3QgYW5kIHdpbmcgb2YgYmF0Lg==" },
  1.1446 +          { "They say that a shimmering gold shield is not a polished silver shield.", 
  1.1447 +            "VGhleSBzYXkgdGhhdCBhIHNoaW1tZXJpbmcgZ29sZCBzaGllbGQgaXMgbm90IGEgcG9saXNoZWQgc2lsdmVyIHNoaWVsZC4=" },
  1.1448 +          { "They say that a spear will hit a neo-otyugh. (Do YOU know what that is?)", 
  1.1449 +            "VGhleSBzYXkgdGhhdCBhIHNwZWFyIHdpbGwgaGl0IGEgbmVvLW90eXVnaC4gKERvIFlPVSBrbm93IHdoYXQgdGhhdCBpcz8p" },
  1.1450 +          { "They say that a spotted dragon is the ultimate shape changer.", 
  1.1451 +            "VGhleSBzYXkgdGhhdCBhIHNwb3R0ZWQgZHJhZ29uIGlzIHRoZSB1bHRpbWF0ZSBzaGFwZSBjaGFuZ2VyLg==" },
  1.1452 +          { "They say that a stethoscope is no good if you can only hear your heartbeat.", 
  1.1453 +            "VGhleSBzYXkgdGhhdCBhIHN0ZXRob3Njb3BlIGlzIG5vIGdvb2QgaWYgeW91IGNhbiBvbmx5IGhlYXIgeW91ciBoZWFydGJlYXQu" },
  1.1454 +          { "They say that a succubus named Suzy will sometimes warn you of danger.", 
  1.1455 +            "VGhleSBzYXkgdGhhdCBhIHN1Y2N1YnVzIG5hbWVkIFN1enkgd2lsbCBzb21ldGltZXMgd2FybiB5b3Ugb2YgZGFuZ2VyLg==" },
  1.1456 +          { "They say that a wand of cancellation is not like a wand of polymorph.", 
  1.1457 +            "VGhleSBzYXkgdGhhdCBhIHdhbmQgb2YgY2FuY2VsbGF0aW9uIGlzIG5vdCBsaWtlIGEgd2FuZCBvZiBwb2x5bW9ycGgu" },
  1.1458 +          { "They say that a wood golem named Pinocchio would be easy to control.", 
  1.1459 +            "VGhleSBzYXkgdGhhdCBhIHdvb2QgZ29sZW0gbmFtZWQgUGlub2NjaGlvIHdvdWxkIGJlIGVhc3kgdG8gY29udHJvbC4=" },
  1.1460 +          { "They say that after killing a dragon it's time for a change of scenery.", 
  1.1461 +            "VGhleSBzYXkgdGhhdCBhZnRlciBraWxsaW5nIGEgZHJhZ29uIGl0J3MgdGltZSBmb3IgYSBjaGFuZ2Ugb2Ygc2NlbmVyeS4=" },
  1.1462 +          { "They say that an amulet of strangulation is worse than ring around the collar.", 
  1.1463 +            "VGhleSBzYXkgdGhhdCBhbiBhbXVsZXQgb2Ygc3RyYW5ndWxhdGlvbiBpcyB3b3JzZSB0aGFuIHJpbmcgYXJvdW5kIHRoZSBjb2xsYXIu" },
  1.1464 +          { "They say that an attic is the best place to hide your toys.", 
  1.1465 +            "VGhleSBzYXkgdGhhdCBhbiBhdHRpYyBpcyB0aGUgYmVzdCBwbGFjZSB0byBoaWRlIHlvdXIgdG95cy4=" },
  1.1466 +          { "They say that an axe named Cleaver once belonged to a hacker named Beaver.", 
  1.1467 +            "VGhleSBzYXkgdGhhdCBhbiBheGUgbmFtZWQgQ2xlYXZlciBvbmNlIGJlbG9uZ2VkIHRvIGEgaGFja2VyIG5hbWVkIEJlYXZlci4=" },
  1.1468 +          { "They say that an eye of newt and a wing of bat are double the trouble.", 
  1.1469 +            "VGhleSBzYXkgdGhhdCBhbiBleWUgb2YgbmV3dCBhbmQgYSB3aW5nIG9mIGJhdCBhcmUgZG91YmxlIHRoZSB0cm91YmxlLg==" },
  1.1470 +          { "They say that an incubus named Izzy sometimes makes women feel sensitive.", 
  1.1471 +            "VGhleSBzYXkgdGhhdCBhbiBpbmN1YnVzIG5hbWVkIEl6enkgc29tZXRpbWVzIG1ha2VzIHdvbWVuIGZlZWwgc2Vuc2l0aXZlLg==" },
  1.1472 +          { "They say that an opulent throne room is rarely a place to wish you'd be in.", 
  1.1473 +            "VGhleSBzYXkgdGhhdCBhbiBvcHVsZW50IHRocm9uZSByb29tIGlzIHJhcmVseSBhIHBsYWNlIHRvIHdpc2ggeW91J2QgYmUgaW4u" },
  1.1474 +          { "They say that an unlucky hacker once had a nose bleed at an altar and died.", 
  1.1475 +            "VGhleSBzYXkgdGhhdCBhbiB1bmx1Y2t5IGhhY2tlciBvbmNlIGhhZCBhIG5vc2UgYmxlZWQgYXQgYW4gYWx0YXIgYW5kIGRpZWQu" },
  1.1476 +          { "They say that and they say this but they never say never, never!", 
  1.1477 +            "VGhleSBzYXkgdGhhdCBhbmQgdGhleSBzYXkgdGhpcyBidXQgdGhleSBuZXZlciBzYXkgbmV2ZXIsIG5ldmVyIQ==" },
  1.1478 +          { "They say that any quantum mechanic knows that speed kills.", 
  1.1479 +            "VGhleSBzYXkgdGhhdCBhbnkgcXVhbnR1bSBtZWNoYW5pYyBrbm93cyB0aGF0IHNwZWVkIGtpbGxzLg==" },
  1.1480 +          { "They say that applying a unicorn horn means you've missed the point.", 
  1.1481 +            "VGhleSBzYXkgdGhhdCBhcHBseWluZyBhIHVuaWNvcm4gaG9ybiBtZWFucyB5b3UndmUgbWlzc2VkIHRoZSBwb2ludC4=" },
  1.1482 +          { "They say that blue stones are radioactive, beware.", 
  1.1483 +            "VGhleSBzYXkgdGhhdCBibHVlIHN0b25lcyBhcmUgcmFkaW9hY3RpdmUsIGJld2FyZS4=" },
  1.1484 +          { "They say that building a dungeon is a team effort.", 
  1.1485 +            "VGhleSBzYXkgdGhhdCBidWlsZGluZyBhIGR1bmdlb24gaXMgYSB0ZWFtIGVmZm9ydC4=" },
  1.1486 +          { "They say that chaotic characters never get a kick out of altars.", 
  1.1487 +            "VGhleSBzYXkgdGhhdCBjaGFvdGljIGNoYXJhY3RlcnMgbmV2ZXIgZ2V0IGEga2ljayBvdXQgb2YgYWx0YXJzLg==" },
  1.1488 +          { "They say that collapsing a dungeon often creates a panic.", 
  1.1489 +            "VGhleSBzYXkgdGhhdCBjb2xsYXBzaW5nIGEgZHVuZ2VvbiBvZnRlbiBjcmVhdGVzIGEgcGFuaWMu" },
  1.1490 +          { "They say that counting your eggs before they hatch shows that you care.", 
  1.1491 +            "VGhleSBzYXkgdGhhdCBjb3VudGluZyB5b3VyIGVnZ3MgYmVmb3JlIHRoZXkgaGF0Y2ggc2hvd3MgdGhhdCB5b3UgY2FyZS4=" },
  1.1492 +          { "They say that dipping a bag of tricks in a fountain won't make it an icebox.", 
  1.1493 +            "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGEgYmFnIG9mIHRyaWNrcyBpbiBhIGZvdW50YWluIHdvbid0IG1ha2UgaXQgYW4gaWNlYm94Lg==" },
  1.1494 +          { "They say that dipping an eel and brown mold in hot water makes bouillabaisse.", 
  1.1495 +            "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGFuIGVlbCBhbmQgYnJvd24gbW9sZCBpbiBob3Qgd2F0ZXIgbWFrZXMgYm91aWxsYWJhaXNzZS4=" },
  1.1496 +          { "They say that donating a doubloon is extremely pious charity.", 
  1.1497 +            "VGhleSBzYXkgdGhhdCBkb25hdGluZyBhIGRvdWJsb29uIGlzIGV4dHJlbWVseSBwaW91cyBjaGFyaXR5Lg==" },
  1.1498 +          { "They say that eating royal jelly attracts grizzly owlbears.", 
  1.1499 +            "VGhleSBzYXkgdGhhdCBlYXRpbmcgcm95YWwgamVsbHkgYXR0cmFjdHMgZ3JpenpseSBvd2xiZWFycy4=" },
  1.1500 +          { "They say that eggs, pancakes and juice are just a mundane breakfast.", 
  1.1501 +            "VGhleSBzYXkgdGhhdCBlZ2dzLCBwYW5jYWtlcyBhbmQganVpY2UgYXJlIGp1c3QgYSBtdW5kYW5lIGJyZWFrZmFzdC4=" },
  1.1502 +          { "They say that everyone knows why Medusa stands alone in the dark.", 
  1.1503 +            "VGhleSBzYXkgdGhhdCBldmVyeW9uZSBrbm93cyB3aHkgTWVkdXNhIHN0YW5kcyBhbG9uZSBpbiB0aGUgZGFyay4=" },
  1.1504 +          { "They say that everyone wanted rec.games.hack to undergo a name change.", 
  1.1505 +            "VGhleSBzYXkgdGhhdCBldmVyeW9uZSB3YW50ZWQgcmVjLmdhbWVzLmhhY2sgdG8gdW5kZXJnbyBhIG5hbWUgY2hhbmdlLg==" },
  1.1506 +          { "They say that finding a winning strategy is a deliberate move on your part.", 
  1.1507 +            "VGhleSBzYXkgdGhhdCBmaW5kaW5nIGEgd2lubmluZyBzdHJhdGVneSBpcyBhIGRlbGliZXJhdGUgbW92ZSBvbiB5b3VyIHBhcnQu" },
  1.1508 +          { "They say that finding worthless glass is worth something.", 
  1.1509 +            "VGhleSBzYXkgdGhhdCBmaW5kaW5nIHdvcnRobGVzcyBnbGFzcyBpcyB3b3J0aCBzb21ldGhpbmcu" },
  1.1510 +          { "They say that fortune cookies are food for thought.", 
  1.1511 +            "VGhleSBzYXkgdGhhdCBmb3J0dW5lIGNvb2tpZXMgYXJlIGZvb2QgZm9yIHRob3VnaHQu" },
  1.1512 +          { "They say that gold is only wasted on a pet dragon.", 
  1.1513 +            "VGhleSBzYXkgdGhhdCBnb2xkIGlzIG9ubHkgd2FzdGVkIG9uIGEgcGV0IGRyYWdvbi4=" },
  1.1514 +          { "They say that good things come to those that wait.", 
  1.1515 +            "VGhleSBzYXkgdGhhdCBnb29kIHRoaW5ncyBjb21lIHRvIHRob3NlIHRoYXQgd2FpdC4=" },
  1.1516 +          { "They say that greased objects will slip out of monsters' hands.", 
  1.1517 +            "VGhleSBzYXkgdGhhdCBncmVhc2VkIG9iamVjdHMgd2lsbCBzbGlwIG91dCBvZiBtb25zdGVycycgaGFuZHMu" },
  1.1518 +          { "They say that if you can't spell then you'll wish you had a spell book.", 
  1.1519 +            "VGhleSBzYXkgdGhhdCBpZiB5b3UgY2FuJ3Qgc3BlbGwgdGhlbiB5b3UnbGwgd2lzaCB5b3UgaGFkIGEgc3BlbGwgYm9vay4=" },
  1.1520 +          { "They say that if you live by the sword, you'll die by the sword.", 
  1.1521 +            "VGhleSBzYXkgdGhhdCBpZiB5b3UgbGl2ZSBieSB0aGUgc3dvcmQsIHlvdSdsbCBkaWUgYnkgdGhlIHN3b3JkLg==" },
  1.1522 +          { "They say that if you play like a monster you'll have a better game.", 
  1.1523 +            "VGhleSBzYXkgdGhhdCBpZiB5b3UgcGxheSBsaWtlIGEgbW9uc3RlciB5b3UnbGwgaGF2ZSBhIGJldHRlciBnYW1lLg==" },
  1.1524 +          { "They say that if you sleep with a demon you might awake with a headache.", 
  1.1525 +            "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc2xlZXAgd2l0aCBhIGRlbW9uIHlvdSBtaWdodCBhd2FrZSB3aXRoIGEgaGVhZGFjaGUu" },
  1.1526 +          { "They say that if you step on a crack you could break your mother's back.", 
  1.1527 +            "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc3RlcCBvbiBhIGNyYWNrIHlvdSBjb3VsZCBicmVhayB5b3VyIG1vdGhlcidzIGJhY2su" },
  1.1528 +          { "They say that if you're invisible you can still be heard!", 
  1.1529 +            "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgaW52aXNpYmxlIHlvdSBjYW4gc3RpbGwgYmUgaGVhcmQh" },
  1.1530 +          { "They say that if you're lucky you can feel the runes on a scroll.", 
  1.1531 +            "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgbHVja3kgeW91IGNhbiBmZWVsIHRoZSBydW5lcyBvbiBhIHNjcm9sbC4=" },
  1.1532 +          { "They say that in the big picture gold is only small change.", 
  1.1533 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgYmlnIHBpY3R1cmUgZ29sZCBpcyBvbmx5IHNtYWxsIGNoYW5nZS4=" },
  1.1534 +          { "They say that in the dungeon it's not what you know that really matters.", 
  1.1535 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBpdCdzIG5vdCB3aGF0IHlvdSBrbm93IHRoYXQgcmVhbGx5IG1hdHRlcnMu" },
  1.1536 +          { "They say that in the dungeon moon rocks are really dilithium crystals.", 
  1.1537 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBtb29uIHJvY2tzIGFyZSByZWFsbHkgZGlsaXRoaXVtIGNyeXN0YWxzLg==" },
  1.1538 +          { "They say that in the dungeon the boorish customer is never right.", 
  1.1539 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB0aGUgYm9vcmlzaCBjdXN0b21lciBpcyBuZXZlciByaWdodC4=" },
  1.1540 +          { "They say that in the dungeon you don't need a watch to tell time.", 
  1.1541 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgZG9uJ3QgbmVlZCBhIHdhdGNoIHRvIHRlbGwgdGltZS4=" },
  1.1542 +          { "They say that in the dungeon you need something old, new, burrowed and blue.", 
  1.1543 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgbmVlZCBzb21ldGhpbmcgb2xkLCBuZXcsIGJ1cnJvd2VkIGFuZCBibHVlLg==" },
  1.1544 +          { "They say that in the dungeon you should always count your blessings.", 
  1.1545 +            "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3Ugc2hvdWxkIGFsd2F5cyBjb3VudCB5b3VyIGJsZXNzaW5ncy4=" },
  1.1546 +          { "They say that iron golem plate mail isn't worth wishing for.", 
  1.1547 +            "VGhleSBzYXkgdGhhdCBpcm9uIGdvbGVtIHBsYXRlIG1haWwgaXNuJ3Qgd29ydGggd2lzaGluZyBmb3Iu" },
  1.1548 +          { "They say that it takes four quarterstaffs to make one staff.", 
  1.1549 +            "VGhleSBzYXkgdGhhdCBpdCB0YWtlcyBmb3VyIHF1YXJ0ZXJzdGFmZnMgdG8gbWFrZSBvbmUgc3RhZmYu" },
  1.1550 +          { "They say that it's not over till the fat ladies sing.", 
  1.1551 +            "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWRpZXMgc2luZy4=" },
  1.1552 +          { "They say that it's not over till the fat lady shouts `Off with its head'.", 
  1.1553 +            "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWR5IHNob3V0cyBgT2ZmIHdpdGggaXRzIGhlYWQnLg==" },
  1.1554 +          { "They say that kicking a heavy statue is really a dumb move.", 
  1.1555 +            "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgaGVhdnkgc3RhdHVlIGlzIHJlYWxseSBhIGR1bWIgbW92ZS4=" },
  1.1556 +          { "They say that kicking a valuable gem doesn't seem to make sense.", 
  1.1557 +            "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgdmFsdWFibGUgZ2VtIGRvZXNuJ3Qgc2VlbSB0byBtYWtlIHNlbnNlLg==" },
  1.1558 +          { "They say that leprechauns know Latin and you should too.", 
  1.1559 +            "VGhleSBzYXkgdGhhdCBsZXByZWNoYXVucyBrbm93IExhdGluIGFuZCB5b3Ugc2hvdWxkIHRvby4=" },
  1.1560 +          { "They say that minotaurs get lost outside of the mazes.", 
  1.1561 +            "VGhleSBzYXkgdGhhdCBtaW5vdGF1cnMgZ2V0IGxvc3Qgb3V0c2lkZSBvZiB0aGUgbWF6ZXMu" },
  1.1562 +          { "They say that most trolls are born again.", 
  1.1563 +            "VGhleSBzYXkgdGhhdCBtb3N0IHRyb2xscyBhcmUgYm9ybiBhZ2Fpbi4=" },
  1.1564 +          { "They say that naming your cat Garfield will make you more attractive.", 
  1.1565 +            "VGhleSBzYXkgdGhhdCBuYW1pbmcgeW91ciBjYXQgR2FyZmllbGQgd2lsbCBtYWtlIHlvdSBtb3JlIGF0dHJhY3RpdmUu" },
  1.1566 +          { "They say that no one knows everything about everything in the dungeon.", 
  1.1567 +            "VGhleSBzYXkgdGhhdCBubyBvbmUga25vd3MgZXZlcnl0aGluZyBhYm91dCBldmVyeXRoaW5nIGluIHRoZSBkdW5nZW9uLg==" },
  1.1568 +          { "They say that no one plays NetHack just for the fun of it.", 
  1.1569 +            "VGhleSBzYXkgdGhhdCBubyBvbmUgcGxheXMgTmV0SGFjayBqdXN0IGZvciB0aGUgZnVuIG9mIGl0Lg==" },
  1.1570 +          { "They say that no one really subscribes to rec.games.roguelike.nethack.", 
  1.1571 +            "VGhleSBzYXkgdGhhdCBubyBvbmUgcmVhbGx5IHN1YnNjcmliZXMgdG8gcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrLg==" },
  1.1572 +          { "They say that no one will admit to starting a rumor.", 
  1.1573 +            "VGhleSBzYXkgdGhhdCBubyBvbmUgd2lsbCBhZG1pdCB0byBzdGFydGluZyBhIHJ1bW9yLg==" },
  1.1574 +          { "They say that nurses sometimes carry scalpels and never use them.", 
  1.1575 +            "VGhleSBzYXkgdGhhdCBudXJzZXMgc29tZXRpbWVzIGNhcnJ5IHNjYWxwZWxzIGFuZCBuZXZlciB1c2UgdGhlbS4=" },
  1.1576 +          { "They say that once you've met one wizard you've met them all.", 
  1.1577 +            "VGhleSBzYXkgdGhhdCBvbmNlIHlvdSd2ZSBtZXQgb25lIHdpemFyZCB5b3UndmUgbWV0IHRoZW0gYWxsLg==" },
  1.1578 +          { "They say that one troll is worth 10,000 newts.", 
  1.1579 +            "VGhleSBzYXkgdGhhdCBvbmUgdHJvbGwgaXMgd29ydGggMTAsMDAwIG5ld3RzLg==" },
  1.1580 +          { "They say that only David can find the zoo!", 
  1.1581 +            "VGhleSBzYXkgdGhhdCBvbmx5IERhdmlkIGNhbiBmaW5kIHRoZSB6b28h" },
  1.1582 +          { "They say that only angels play their harps for their pets.", 
  1.1583 +            "VGhleSBzYXkgdGhhdCBvbmx5IGFuZ2VscyBwbGF5IHRoZWlyIGhhcnBzIGZvciB0aGVpciBwZXRzLg==" },
  1.1584 +          { "They say that only big spenders carry gold.", 
  1.1585 +            "VGhleSBzYXkgdGhhdCBvbmx5IGJpZyBzcGVuZGVycyBjYXJyeSBnb2xkLg==" },
  1.1586 +          { "They say that orc shamans are healthy, wealthy and wise.", 
  1.1587 +            "VGhleSBzYXkgdGhhdCBvcmMgc2hhbWFucyBhcmUgaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZS4=" },
  1.1588 +          { "They say that playing NetHack is like walking into a death trap.", 
  1.1589 +            "VGhleSBzYXkgdGhhdCBwbGF5aW5nIE5ldEhhY2sgaXMgbGlrZSB3YWxraW5nIGludG8gYSBkZWF0aCB0cmFwLg==" },
  1.1590 +          { "They say that problem breathing is best treated by a proper diet.", 
  1.1591 +            "VGhleSBzYXkgdGhhdCBwcm9ibGVtIGJyZWF0aGluZyBpcyBiZXN0IHRyZWF0ZWQgYnkgYSBwcm9wZXIgZGlldC4=" },
  1.1592 +          { "They say that quaffing many potions of levitation can give you a headache.", 
  1.1593 +            "VGhleSBzYXkgdGhhdCBxdWFmZmluZyBtYW55IHBvdGlvbnMgb2YgbGV2aXRhdGlvbiBjYW4gZ2l2ZSB5b3UgYSBoZWFkYWNoZS4=" },
  1.1594 +          { "They say that queen bees get that way by eating royal jelly.", 
  1.1595 +            "VGhleSBzYXkgdGhhdCBxdWVlbiBiZWVzIGdldCB0aGF0IHdheSBieSBlYXRpbmcgcm95YWwgamVsbHku" },
  1.1596 +          { "They say that reading a scare monster scroll is the same as saying Elbereth.", 
  1.1597 +            "VGhleSBzYXkgdGhhdCByZWFkaW5nIGEgc2NhcmUgbW9uc3RlciBzY3JvbGwgaXMgdGhlIHNhbWUgYXMgc2F5aW5nIEVsYmVyZXRoLg==" },
  1.1598 +          { "They say that real hackers always are controlled.", 
  1.1599 +            "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgYWx3YXlzIGFyZSBjb250cm9sbGVkLg==" },
  1.1600 +          { "They say that real hackers never sleep.", 
  1.1601 +            "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgbmV2ZXIgc2xlZXAu" },
  1.1602 +          { "They say that shopkeepers are insured by Croesus himself!", 
  1.1603 +            "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBhcmUgaW5zdXJlZCBieSBDcm9lc3VzIGhpbXNlbGYh" },
  1.1604 +          { "They say that shopkeepers never carry more than 20 gold pieces, at night.", 
  1.1605 +            "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBjYXJyeSBtb3JlIHRoYW4gMjAgZ29sZCBwaWVjZXMsIGF0IG5pZ2h0Lg==" },
  1.1606 +          { "They say that shopkeepers never sell blessed potions of invisibility.", 
  1.1607 +            "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBzZWxsIGJsZXNzZWQgcG90aW9ucyBvZiBpbnZpc2liaWxpdHku" },
  1.1608 +          { "They say that soldiers wear kid gloves and silly helmets.", 
  1.1609 +            "VGhleSBzYXkgdGhhdCBzb2xkaWVycyB3ZWFyIGtpZCBnbG92ZXMgYW5kIHNpbGx5IGhlbG1ldHMu" },
  1.1610 +          { "They say that some Kops are on the take.", 
  1.1611 +            "VGhleSBzYXkgdGhhdCBzb21lIEtvcHMgYXJlIG9uIHRoZSB0YWtlLg==" },
  1.1612 +          { "They say that some guards' palms can be greased.", 
  1.1613 +            "VGhleSBzYXkgdGhhdCBzb21lIGd1YXJkcycgcGFsbXMgY2FuIGJlIGdyZWFzZWQu" },
  1.1614 +          { "They say that some monsters may kiss your boots to stop your drum playing.", 
  1.1615 +            "VGhleSBzYXkgdGhhdCBzb21lIG1vbnN0ZXJzIG1heSBraXNzIHlvdXIgYm9vdHMgdG8gc3RvcCB5b3VyIGRydW0gcGxheWluZy4=" },
  1.1616 +          { "They say that sometimes you can be the hit of the party when playing a horn.", 
  1.1617 +            "VGhleSBzYXkgdGhhdCBzb21ldGltZXMgeW91IGNhbiBiZSB0aGUgaGl0IG9mIHRoZSBwYXJ0eSB3aGVuIHBsYXlpbmcgYSBob3JuLg==" },
  1.1618 +          { "They say that the NetHack gods generally welcome your sacrifices.", 
  1.1619 +            "VGhleSBzYXkgdGhhdCB0aGUgTmV0SGFjayBnb2RzIGdlbmVyYWxseSB3ZWxjb21lIHlvdXIgc2FjcmlmaWNlcy4=" },
  1.1620 +          { "They say that the Three Rings are named Vilya, Nenya and Narya.", 
  1.1621 +            "VGhleSBzYXkgdGhhdCB0aGUgVGhyZWUgUmluZ3MgYXJlIG5hbWVkIFZpbHlhLCBOZW55YSBhbmQgTmFyeWEu" },
  1.1622 +          { "They say that the Wizard of Yendor has a death wish.", 
  1.1623 +            "VGhleSBzYXkgdGhhdCB0aGUgV2l6YXJkIG9mIFllbmRvciBoYXMgYSBkZWF0aCB3aXNoLg==" },
  1.1624 +          { "They say that the `hair of the dog' is sometimes an effective remedy.", 
  1.1625 +            "VGhleSBzYXkgdGhhdCB0aGUgYGhhaXIgb2YgdGhlIGRvZycgaXMgc29tZXRpbWVzIGFuIGVmZmVjdGl2ZSByZW1lZHku" },
  1.1626 +          { "They say that the best time to save your game is now before its too late.", 
  1.1627 +            "VGhleSBzYXkgdGhhdCB0aGUgYmVzdCB0aW1lIHRvIHNhdmUgeW91ciBnYW1lIGlzIG5vdyBiZWZvcmUgaXRzIHRvbyBsYXRlLg==" },
  1.1628 +          { "They say that the biggest obstacle in NetHack is your mind.", 
  1.1629 +            "VGhleSBzYXkgdGhhdCB0aGUgYmlnZ2VzdCBvYnN0YWNsZSBpbiBOZXRIYWNrIGlzIHlvdXIgbWluZC4=" },
  1.1630 +          { "They say that the gods are angry when they hit you with objects.", 
  1.1631 +            "VGhleSBzYXkgdGhhdCB0aGUgZ29kcyBhcmUgYW5ncnkgd2hlbiB0aGV5IGhpdCB5b3Ugd2l0aCBvYmplY3RzLg==" },
  1.1632 +          { "They say that the priesthood are specially favored by the gods.", 
  1.1633 +            "VGhleSBzYXkgdGhhdCB0aGUgcHJpZXN0aG9vZCBhcmUgc3BlY2lhbGx5IGZhdm9yZWQgYnkgdGhlIGdvZHMu" },
  1.1634 +          { "They say that the way to make a unicorn happy is to give it what it wants.", 
  1.1635 +            "VGhleSBzYXkgdGhhdCB0aGUgd2F5IHRvIG1ha2UgYSB1bmljb3JuIGhhcHB5IGlzIHRvIGdpdmUgaXQgd2hhdCBpdCB3YW50cy4=" },
  1.1636 +          { "They say that there are no black or white stones, only gray.", 
  1.1637 +            "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gYmxhY2sgb3Igd2hpdGUgc3RvbmVzLCBvbmx5IGdyYXku" },
  1.1638 +          { "They say that there are no skeletons hence there are no skeleton keys.", 
  1.1639 +            "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gc2tlbGV0b25zIGhlbmNlIHRoZXJlIGFyZSBubyBza2VsZXRvbiBrZXlzLg==" },
  1.1640 +          { "They say that there is a clever rogue in every hacker just dying to escape.", 
  1.1641 +            "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBhIGNsZXZlciByb2d1ZSBpbiBldmVyeSBoYWNrZXIganVzdCBkeWluZyB0byBlc2NhcGUu" },
  1.1642 +          { "They say that there is no such thing as free advice.", 
  1.1643 +            "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGZyZWUgYWR2aWNlLg==" },
  1.1644 +          { "They say that there is only one way to win at NetHack.", 
  1.1645 +            "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgdG8gd2luIGF0IE5ldEhhY2su" },
  1.1646 +          { "They say that there once was a fearsome chaotic samurai named Luk No.", 
  1.1647 +            "VGhleSBzYXkgdGhhdCB0aGVyZSBvbmNlIHdhcyBhIGZlYXJzb21lIGNoYW90aWMgc2FtdXJhaSBuYW1lZCBMdWsgTm8u" },
  1.1648 +          { "They say that there was a time when cursed holy water wasn't water.", 
  1.1649 +            "VGhleSBzYXkgdGhhdCB0aGVyZSB3YXMgYSB0aW1lIHdoZW4gY3Vyc2VkIGhvbHkgd2F0ZXIgd2Fzbid0IHdhdGVyLg==" },
  1.1650 +          { "They say that there's no point in crying over a gray ooze.", 
  1.1651 +            "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGNyeWluZyBvdmVyIGEgZ3JheSBvb3plLg==" },
  1.1652 +          { "They say that there's only hope left after you've opened Pandora's box.", 
  1.1653 +            "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG9ubHkgaG9wZSBsZWZ0IGFmdGVyIHlvdSd2ZSBvcGVuZWQgUGFuZG9yYSdzIGJveC4=" },
  1.1654 +          { "They say that trapdoors should always be marked `Caution: Trap Door'.", 
  1.1655 +            "VGhleSBzYXkgdGhhdCB0cmFwZG9vcnMgc2hvdWxkIGFsd2F5cyBiZSBtYXJrZWQgYENhdXRpb246IFRyYXAgRG9vcicu" },
  1.1656 +          { "They say that using an amulet of change isn't a difficult operation.", 
  1.1657 +            "VGhleSBzYXkgdGhhdCB1c2luZyBhbiBhbXVsZXQgb2YgY2hhbmdlIGlzbid0IGEgZGlmZmljdWx0IG9wZXJhdGlvbi4=" },
  1.1658 +          { "They say that water walking boots are better if you are fast like Hermes.", 
  1.1659 +            "VGhleSBzYXkgdGhhdCB3YXRlciB3YWxraW5nIGJvb3RzIGFyZSBiZXR0ZXIgaWYgeW91IGFyZSBmYXN0IGxpa2UgSGVybWVzLg==" },
  1.1660 +          { "They say that when you wear a circular amulet you might resemble a troll.", 
  1.1661 +            "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSB3ZWFyIGEgY2lyY3VsYXIgYW11bGV0IHlvdSBtaWdodCByZXNlbWJsZSBhIHRyb2xsLg==" },
  1.1662 +          { "They say that when you're hungry you can get a pizza in 30 moves or it's free.", 
  1.1663 +            "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSdyZSBodW5ncnkgeW91IGNhbiBnZXQgYSBwaXp6YSBpbiAzMCBtb3ZlcyBvciBpdCdzIGZyZWUu" },
  1.1664 +          { "They say that when your god is angry you should try another one.", 
  1.1665 +            "VGhleSBzYXkgdGhhdCB3aGVuIHlvdXIgZ29kIGlzIGFuZ3J5IHlvdSBzaG91bGQgdHJ5IGFub3RoZXIgb25lLg==" },
  1.1666 +          { "They say that wielding a unicorn horn takes strength.", 
  1.1667 +            "VGhleSBzYXkgdGhhdCB3aWVsZGluZyBhIHVuaWNvcm4gaG9ybiB0YWtlcyBzdHJlbmd0aC4=" },
  1.1668 +          { "They say that with speed boots you never worry about hit and run accidents.", 
  1.1669 +            "VGhleSBzYXkgdGhhdCB3aXRoIHNwZWVkIGJvb3RzIHlvdSBuZXZlciB3b3JyeSBhYm91dCBoaXQgYW5kIHJ1biBhY2NpZGVudHMu" },
  1.1670 +          { "They say that you can defeat a killer bee with a unicorn horn.", 
  1.1671 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIGRlZmVhdCBhIGtpbGxlciBiZWUgd2l0aCBhIHVuaWNvcm4gaG9ybi4=" },
  1.1672 +          { "They say that you can only cross the River Styx in Charon's boat.", 
  1.1673 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgY3Jvc3MgdGhlIFJpdmVyIFN0eXggaW4gQ2hhcm9uJ3MgYm9hdC4=" },
  1.1674 +          { "They say that you can only kill a lich once and then you'd better be careful.", 
  1.1675 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkga2lsbCBhIGxpY2ggb25jZSBhbmQgdGhlbiB5b3UnZCBiZXR0ZXIgYmUgY2FyZWZ1bC4=" },
  1.1676 +          { "They say that you can only wish for things you've already had.", 
  1.1677 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgd2lzaCBmb3IgdGhpbmdzIHlvdSd2ZSBhbHJlYWR5IGhhZC4=" },
  1.1678 +          { "They say that you can train a cat by talking gently to it.", 
  1.1679 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgY2F0IGJ5IHRhbGtpbmcgZ2VudGx5IHRvIGl0Lg==" },
  1.1680 +          { "They say that you can train a dog by talking firmly to it.", 
  1.1681 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgZG9nIGJ5IHRhbGtpbmcgZmlybWx5IHRvIGl0Lg==" },
  1.1682 +          { "They say that you can trust your gold with the king.", 
  1.1683 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRydXN0IHlvdXIgZ29sZCB3aXRoIHRoZSBraW5nLg==" },
  1.1684 +          { "They say that you can't wipe your greasy bare hands on a blank scroll.", 
  1.1685 +            "VGhleSBzYXkgdGhhdCB5b3UgY2FuJ3Qgd2lwZSB5b3VyIGdyZWFzeSBiYXJlIGhhbmRzIG9uIGEgYmxhbmsgc2Nyb2xsLg==" },
  1.1686 +          { "They say that you cannot trust scrolls of rumor.", 
  1.1687 +            "VGhleSBzYXkgdGhhdCB5b3UgY2Fubm90IHRydXN0IHNjcm9sbHMgb2YgcnVtb3Iu" },
  1.1688 +          { "They say that you could fall head over heels for an energy vortex.", 
  1.1689 +            "VGhleSBzYXkgdGhhdCB5b3UgY291bGQgZmFsbCBoZWFkIG92ZXIgaGVlbHMgZm9yIGFuIGVuZXJneSB2b3J0ZXgu" },
  1.1690 +          { "They say that you need a key in order to open locked doors.", 
  1.1691 +            "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIGtleSBpbiBvcmRlciB0byBvcGVuIGxvY2tlZCBkb29ycy4=" },
  1.1692 +          { "They say that you need a mirror to notice a mimic in an antique shop.", 
  1.1693 +            "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIG1pcnJvciB0byBub3RpY2UgYSBtaW1pYyBpbiBhbiBhbnRpcXVlIHNob3Au" },
  1.1694 +          { "They say that you really can use a pick-axe unless you really can't.", 
  1.1695 +            "VGhleSBzYXkgdGhhdCB5b3UgcmVhbGx5IGNhbiB1c2UgYSBwaWNrLWF4ZSB1bmxlc3MgeW91IHJlYWxseSBjYW4ndC4=" },
  1.1696 +          { "They say that you should always store your tools in the cellar.", 
  1.1697 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBzdG9yZSB5b3VyIHRvb2xzIGluIHRoZSBjZWxsYXIu" },
  1.1698 +          { "They say that you should be careful while climbing the ladder to success.", 
  1.1699 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hpbGUgY2xpbWJpbmcgdGhlIGxhZGRlciB0byBzdWNjZXNzLg==" },
  1.1700 +          { "They say that you should call your armor `rustproof'.", 
  1.1701 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGNhbGwgeW91ciBhcm1vciBgcnVzdHByb29mJy4=" },
  1.1702 +          { "They say that you should name your dog Spuds to have a cool pet.", 
  1.1703 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciBkb2cgU3B1ZHMgdG8gaGF2ZSBhIGNvb2wgcGV0Lg==" },
  1.1704 +          { "They say that you should name your weapon after your first monster kill.", 
  1.1705 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciB3ZWFwb24gYWZ0ZXIgeW91ciBmaXJzdCBtb25zdGVyIGtpbGwu" },
  1.1706 +          { "They say that you should never introduce a rope golem to a succubus.", 
  1.1707 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIGludHJvZHVjZSBhIHJvcGUgZ29sZW0gdG8gYSBzdWNjdWJ1cy4=" },
  1.1708 +          { "They say that you should never sleep near invisible ring wraiths.", 
  1.1709 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHNsZWVwIG5lYXIgaW52aXNpYmxlIHJpbmcgd3JhaXRocy4=" },
  1.1710 +          { "They say that you should never try to leave the dungeon with a bag of gems.", 
  1.1711 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBsZWF2ZSB0aGUgZHVuZ2VvbiB3aXRoIGEgYmFnIG9mIGdlbXMu" },
  1.1712 +          { "They say that you should remove your armor before sitting on a throne.", 
  1.1713 +            "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIHJlbW92ZSB5b3VyIGFybW9yIGJlZm9yZSBzaXR0aW5nIG9uIGEgdGhyb25lLg==" },
  1.1714 +          { "This fortune cookie is copy protected.", 
  1.1715 +            "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyBjb3B5IHByb3RlY3RlZC4=" },
  1.1716 +          { "This fortune cookie is the property of Fortune Cookies, Inc.", 
  1.1717 +            "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyB0aGUgcHJvcGVydHkgb2YgRm9ydHVuZSBDb29raWVzLCBJbmMu" },
  1.1718 +          { "Tired? Try a scroll of charging on yourself.", 
  1.1719 +            "VGlyZWQ/IFRyeSBhIHNjcm9sbCBvZiBjaGFyZ2luZyBvbiB5b3Vyc2VsZi4=" },
  1.1720 +          { "To achieve the next higher rating, you need 3 more points.", 
  1.1721 +            "VG8gYWNoaWV2ZSB0aGUgbmV4dCBoaWdoZXIgcmF0aW5nLCB5b3UgbmVlZCAzIG1vcmUgcG9pbnRzLg==" },
  1.1722 +          { "To reach heaven, escape the dungeon while wearing a ring of levitation.", 
  1.1723 +            "VG8gcmVhY2ggaGVhdmVuLCBlc2NhcGUgdGhlIGR1bmdlb24gd2hpbGUgd2VhcmluZyBhIHJpbmcgb2YgbGV2aXRhdGlvbi4=" },
  1.1724 +          { "Tourists wear shirts loud enough to wake the dead.", 
  1.1725 +            "VG91cmlzdHMgd2VhciBzaGlydHMgbG91ZCBlbm91Z2ggdG8gd2FrZSB0aGUgZGVhZC4=" },
  1.1726 +          { "Try calling your katana Moulinette.", 
  1.1727 +            "VHJ5IGNhbGxpbmcgeW91ciBrYXRhbmEgTW91bGluZXR0ZS4=" },
  1.1728 +          { "Ulch! That meat was painted!", 
  1.1729 +            "VWxjaCEgVGhhdCBtZWF0IHdhcyBwYWludGVkIQ==" },
  1.1730 +          { "Unfortunately, this message was left intentionally blank.", 
  1.1731 +            "VW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzYWdlIHdhcyBsZWZ0IGludGVudGlvbmFsbHkgYmxhbmsu" },
  1.1732 +          { "Using a morning star in the evening has no effect.", 
  1.1733 +            "VXNpbmcgYSBtb3JuaW5nIHN0YXIgaW4gdGhlIGV2ZW5pbmcgaGFzIG5vIGVmZmVjdC4=" },
  1.1734 +          { "Want a hint? Zap a wand of make invisible on your weapon!", 
  1.1735 +            "V2FudCBhIGhpbnQ/IFphcCBhIHdhbmQgb2YgbWFrZSBpbnZpc2libGUgb24geW91ciB3ZWFwb24h" },
  1.1736 +          { "Want to ascend in a hurry? Apply at Gizmonic Institute.", 
  1.1737 +            "V2FudCB0byBhc2NlbmQgaW4gYSBodXJyeT8gQXBwbHkgYXQgR2l6bW9uaWMgSW5zdGl0dXRlLg==" },
  1.1738 +          { "Wanted: shopkeepers. Send a scroll of mail to Mage of Yendor/Level 35/Dungeon.", 
  1.1739 +            "V2FudGVkOiBzaG9wa2VlcGVycy4gU2VuZCBhIHNjcm9sbCBvZiBtYWlsIHRvIE1hZ2Ugb2YgWWVuZG9yL0xldmVsIDM1L0R1bmdlb24u" },
  1.1740 +          { "Warning: fortune reading can be hazardous to your health.", 
  1.1741 +            "V2FybmluZzogZm9ydHVuZSByZWFkaW5nIGNhbiBiZSBoYXphcmRvdXMgdG8geW91ciBoZWFsdGgu" },
  1.1742 +          { "We have new ways of detecting treachery...", 
  1.1743 +            "V2UgaGF2ZSBuZXcgd2F5cyBvZiBkZXRlY3RpbmcgdHJlYWNoZXJ5Li4u" },
  1.1744 +          { "Wet towels make great weapons!", 
  1.1745 +            "V2V0IHRvd2VscyBtYWtlIGdyZWF0IHdlYXBvbnMh" },
  1.1746 +          { "What a pity, you cannot read it!", 
  1.1747 +            "V2hhdCBhIHBpdHksIHlvdSBjYW5ub3QgcmVhZCBpdCE=" },
  1.1748 +          { "When a piercer drops in on you, you will be tempted to hit the ceiling!", 
  1.1749 +            "V2hlbiBhIHBpZXJjZXIgZHJvcHMgaW4gb24geW91LCB5b3Ugd2lsbCBiZSB0ZW1wdGVkIHRvIGhpdCB0aGUgY2VpbGluZyE=" },
  1.1750 +          { "When in a maze follow the right wall and you will never get lost.", 
  1.1751 +            "V2hlbiBpbiBhIG1hemUgZm9sbG93IHRoZSByaWdodCB3YWxsIGFuZCB5b3Ugd2lsbCBuZXZlciBnZXQgbG9zdC4=" },
  1.1752 +          { "When you have a key, you don't have to wait for the guard.", 
  1.1753 +            "V2hlbiB5b3UgaGF2ZSBhIGtleSwgeW91IGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIGd1YXJkLg==" },
  1.1754 +          { "Why are you wasting time reading fortunes?", 
  1.1755 +            "V2h5IGFyZSB5b3Ugd2FzdGluZyB0aW1lIHJlYWRpbmcgZm9ydHVuZXM/" },
  1.1756 +          { "Wish for a master key and open the Magic Memory Vault!", 
  1.1757 +            "V2lzaCBmb3IgYSBtYXN0ZXIga2V5IGFuZCBvcGVuIHRoZSBNYWdpYyBNZW1vcnkgVmF1bHQh" },
  1.1758 +          { "Wizard expects every monster to do its duty.", 
  1.1759 +            "V2l6YXJkIGV4cGVjdHMgZXZlcnkgbW9uc3RlciB0byBkbyBpdHMgZHV0eS4=" },
  1.1760 +          { "Wow! You could've had a potion of fruit juice!", 
  1.1761 +            "V293ISBZb3UgY291bGQndmUgaGFkIGEgcG90aW9uIG9mIGZydWl0IGp1aWNlIQ==" },
  1.1762 +          { "Yet Another Silly Message (YASM).", 
  1.1763 +            "WWV0IEFub3RoZXIgU2lsbHkgTWVzc2FnZSAoWUFTTSku" },
  1.1764 +          { "You are destined to be misled by a fortune.", 
  1.1765 +            "WW91IGFyZSBkZXN0aW5lZCB0byBiZSBtaXNsZWQgYnkgYSBmb3J0dW5lLg==" },
  1.1766 +          { "You can get a genuine Amulet of Yendor by doing the following: --More--", 
  1.1767 +            "WW91IGNhbiBnZXQgYSBnZW51aW5lIEFtdWxldCBvZiBZZW5kb3IgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogLS1Nb3JlLS0=" },
  1.1768 +          { "You can protect yourself from black dragons by doing the following: --More--", 
  1.1769 +            "WW91IGNhbiBwcm90ZWN0IHlvdXJzZWxmIGZyb20gYmxhY2sgZHJhZ29ucyBieSBkb2luZyB0aGUgZm9sbG93aW5nOiAtLU1vcmUtLQ==" },
  1.1770 +          { "You can't get by the snake.", 
  1.1771 +            "WW91IGNhbid0IGdldCBieSB0aGUgc25ha2Uu" },
  1.1772 +          { "You feel like someone is pulling your leg.", 
  1.1773 +            "WW91IGZlZWwgbGlrZSBzb21lb25lIGlzIHB1bGxpbmcgeW91ciBsZWcu" },
  1.1774 +          { "You have to outwit the Sphynx or pay her.", 
  1.1775 +            "WW91IGhhdmUgdG8gb3V0d2l0IHRoZSBTcGh5bnggb3IgcGF5IGhlci4=" },
  1.1776 +          { "You hear the fortune cookie's hissing!", 
  1.1777 +            "WW91IGhlYXIgdGhlIGZvcnR1bmUgY29va2llJ3MgaGlzc2luZyE=" },
  1.1778 +          { "You may get rich selling letters, but beware of being blackmailed!", 
  1.1779 +            "WW91IG1heSBnZXQgcmljaCBzZWxsaW5nIGxldHRlcnMsIGJ1dCBiZXdhcmUgb2YgYmVpbmcgYmxhY2ttYWlsZWQh" },
  1.1780 +          { "You offend Shai-Hulud by sheathing your crysknife without having drawn blood.", 
  1.1781 +            "WW91IG9mZmVuZCBTaGFpLUh1bHVkIGJ5IHNoZWF0aGluZyB5b3VyIGNyeXNrbmlmZSB3aXRob3V0IGhhdmluZyBkcmF3biBibG9vZC4=" },
  1.1782 +          { "You swallowed the fortune!", 
  1.1783 +            "WW91IHN3YWxsb3dlZCB0aGUgZm9ydHVuZSE=" },
  1.1784 +          { "You want to regain strength? Two levels ahead is a guesthouse!", 
  1.1785 +            "WW91IHdhbnQgdG8gcmVnYWluIHN0cmVuZ3RoPyBUd28gbGV2ZWxzIGFoZWFkIGlzIGEgZ3Vlc3Rob3VzZSE=" },
  1.1786 +          { "You will encounter a tall, dark, and gruesome creature...", 
  1.1787 +            "WW91IHdpbGwgZW5jb3VudGVyIGEgdGFsbCwgZGFyaywgYW5kIGdydWVzb21lIGNyZWF0dXJlLi4u" },
  1.1788 +
  1.1789 +          { "The End", "VGhlIEVuZA==" }
  1.1790 +      };
  1.1791 +
  1.1792 +/* PL_Base64Encode, random strings */
  1.1793 +PRBool test_004(void)
  1.1794 +{
  1.1795 +    int i;
  1.1796 +    char result[ 4096 ];
  1.1797 +
  1.1798 +    printf("Test 004 (PL_Base64Encode, random strings)                            ..."); fflush(stdout);
  1.1799 +
  1.1800 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1801 +    {
  1.1802 +        PRUint32 plen = PL_strlen(array[i].plaintext);
  1.1803 +        PRUint32 clen = ((plen + 2)/3)*4;
  1.1804 +
  1.1805 +        char *rv = PL_Base64Encode(array[i].plaintext, plen, result);
  1.1806 +
  1.1807 +        if( rv != result )
  1.1808 +        {
  1.1809 +            printf("FAIL\n\t(%d): return value\n", i);
  1.1810 +            return PR_FALSE;
  1.1811 +        }
  1.1812 +
  1.1813 +        if( 0 != PL_strncmp(result, array[i].cyphertext, clen) )
  1.1814 +        {
  1.1815 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
  1.1816 +                   i, array[i].plaintext, array[i].cyphertext, clen, result);
  1.1817 +            return PR_FALSE;
  1.1818 +        }
  1.1819 +    }
  1.1820 +
  1.1821 +    printf("PASS\n");
  1.1822 +    return PR_TRUE;
  1.1823 +}
  1.1824 +
  1.1825 +/* PL_Base64Encode, single characters, malloc */
  1.1826 +PRBool test_005(void)
  1.1827 +{
  1.1828 +    PRUint32 a, b;
  1.1829 +    unsigned char plain[ 4 ];
  1.1830 +    unsigned char cypher[ 5 ];
  1.1831 +    char *rv;
  1.1832 +
  1.1833 +    printf("Test 005 (PL_Base64Encode, single characters, malloc)                 ..."); fflush(stdout);
  1.1834 +
  1.1835 +    plain[1] = plain[2] = plain[3] = (unsigned char)0;
  1.1836 +    cypher[2] = cypher[3] = (unsigned char)'=';
  1.1837 +    cypher[4] = (unsigned char)0;
  1.1838 +
  1.1839 +    for( a = 0; a < 64; a++ )
  1.1840 +    {
  1.1841 +        cypher[0] = base[a];
  1.1842 +
  1.1843 +        for( b = 0; b < 4; b++ )
  1.1844 +        {
  1.1845 +            plain[0] = (unsigned char)(a * 4 + b);
  1.1846 +            cypher[1] = base[(b * 16)];
  1.1847 +
  1.1848 +            rv = PL_Base64Encode((char *)plain, 1, (char *)0);
  1.1849 +            if( (char *)0 == rv )
  1.1850 +            {
  1.1851 +                printf("FAIL\n\t(%d, %d): no return value\n", a, b);
  1.1852 +                return PR_FALSE;
  1.1853 +            }
  1.1854 +
  1.1855 +            if( 0 != PL_strcmp((char *)cypher, rv) )
  1.1856 +            {
  1.1857 +                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
  1.1858 +                       a, b, cypher, rv);
  1.1859 +                PR_DELETE(rv);
  1.1860 +                return PR_FALSE;
  1.1861 +            }
  1.1862 +
  1.1863 +            PR_DELETE(rv);
  1.1864 +        }
  1.1865 +    }
  1.1866 +
  1.1867 +    printf("PASS\n");
  1.1868 +    return PR_TRUE;
  1.1869 +}
  1.1870 +
  1.1871 +/* PL_Base64Encode, double characters, malloc */
  1.1872 +PRBool test_006(void)
  1.1873 +{
  1.1874 +    PRUint32 a, b, c, d;
  1.1875 +    unsigned char plain[ 4 ];
  1.1876 +    unsigned char cypher[ 5 ];
  1.1877 +    char *rv;
  1.1878 +
  1.1879 +    printf("Test 006 (PL_Base64Encode, double characters, malloc)                 ..."); fflush(stdout);
  1.1880 +
  1.1881 +    plain[2] = plain[3] = (unsigned char)0;
  1.1882 +    cypher[3] = (unsigned char)'=';
  1.1883 +    cypher[4] = (unsigned char)0;
  1.1884 +
  1.1885 +    for( a = 0; a < 64; a++ )
  1.1886 +    {
  1.1887 +        cypher[0] = base[a];
  1.1888 +        for( b = 0; b < 4; b++ )
  1.1889 +        {
  1.1890 +            plain[0] = (a*4) + b;
  1.1891 +            for( c = 0; c < 16; c++ )
  1.1892 +            {
  1.1893 +                cypher[1] = base[b*16 + c];
  1.1894 +                for( d = 0; d < 16; d++ )
  1.1895 +                {
  1.1896 +                    plain[1] = c*16 + d;
  1.1897 +                    cypher[2] = base[d*4];
  1.1898 +
  1.1899 +                    rv = PL_Base64Encode((char *)plain, 2, (char *)0);
  1.1900 +                    if( (char *)0 == rv )
  1.1901 +                    {
  1.1902 +                        printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
  1.1903 +                        return PR_FALSE;
  1.1904 +                    }
  1.1905 +
  1.1906 +                    if( 0 != PL_strcmp((char *)cypher, rv) )
  1.1907 +                    {
  1.1908 +                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
  1.1909 +                               a, b, c, d, cypher, rv);
  1.1910 +                        PR_DELETE(rv);
  1.1911 +                        return PR_FALSE;
  1.1912 +                    }
  1.1913 +
  1.1914 +                    PR_DELETE(rv);
  1.1915 +                }
  1.1916 +            }
  1.1917 +        }
  1.1918 +    }
  1.1919 +
  1.1920 +    printf("PASS\n");
  1.1921 +    return PR_TRUE;
  1.1922 +}
  1.1923 +
  1.1924 +/* PL_Base64Encode, triple characters, malloc */
  1.1925 +PRBool test_007(void)
  1.1926 +{
  1.1927 +    PRUint32 a, b, c, d, e, f;
  1.1928 +    unsigned char plain[ 4 ];
  1.1929 +    unsigned char cypher[ 5 ];
  1.1930 +    char *rv;
  1.1931 +
  1.1932 +    printf("Test 007 (PL_Base64Encode, triple characters, malloc)                 ..."); fflush(stdout);
  1.1933 +
  1.1934 +    cypher[4] = (unsigned char)0;
  1.1935 +
  1.1936 +    for( a = 0; a < 64; a++ )
  1.1937 +    {
  1.1938 +        cypher[0] = base[a];
  1.1939 +        for( b = 0; b < 4; b++ )
  1.1940 +        {
  1.1941 +            plain[0] = (a*4) + b;
  1.1942 +            for( c = 0; c < 16; c++ )
  1.1943 +            {
  1.1944 +                cypher[1] = base[b*16 + c];
  1.1945 +                for( d = 0; d < 16; d++ )
  1.1946 +                {
  1.1947 +                    plain[1] = c*16 + d;
  1.1948 +                    for( e = 0; e < 4; e++ )
  1.1949 +                    {
  1.1950 +                        cypher[2] = base[d*4 + e];
  1.1951 +                        for( f = 0; f < 64; f++ )
  1.1952 +                        {
  1.1953 +                            plain[2] = e * 64 + f;
  1.1954 +                            cypher[3] = base[f];
  1.1955 +
  1.1956 +                            rv = PL_Base64Encode((char *)plain, 3, (char *)0);
  1.1957 +                            if( (char *)0 == rv )
  1.1958 +                            {
  1.1959 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a, b, c, d, e, f);
  1.1960 +                                return PR_FALSE;
  1.1961 +                            }
  1.1962 +
  1.1963 +                            if( 0 != PL_strcmp((char *)cypher, rv) )
  1.1964 +                            {
  1.1965 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
  1.1966 +                                       a, b, c, d, e, f, cypher, rv);
  1.1967 +                                PR_DELETE(rv);
  1.1968 +                                return PR_FALSE;
  1.1969 +                            }
  1.1970 +
  1.1971 +                            PR_DELETE(rv);
  1.1972 +                        }
  1.1973 +                    }
  1.1974 +                }
  1.1975 +            }
  1.1976 +        }
  1.1977 +    }
  1.1978 +
  1.1979 +    printf("PASS\n");
  1.1980 +    return PR_TRUE;
  1.1981 +}
  1.1982 +
  1.1983 +/* PL_Base64Encode, random strings, malloc */
  1.1984 +PRBool test_008(void)
  1.1985 +{
  1.1986 +    int i;
  1.1987 +
  1.1988 +    printf("Test 008 (PL_Base64Encode, random strings, malloc)                    ..."); fflush(stdout);
  1.1989 +
  1.1990 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.1991 +    {
  1.1992 +        PRUint32 plen = PL_strlen(array[i].plaintext);
  1.1993 +        PRUint32 clen = ((plen + 2)/3)*4;
  1.1994 +
  1.1995 +        char *rv = PL_Base64Encode(array[i].plaintext, plen, (char *)0);
  1.1996 +
  1.1997 +        if( (char *)0 == rv )
  1.1998 +        {
  1.1999 +            printf("FAIL\n\t(%d): no return value\n", i);
  1.2000 +            return PR_FALSE;
  1.2001 +        }
  1.2002 +
  1.2003 +        if( 0 != PL_strcmp(rv, array[i].cyphertext) )
  1.2004 +        {
  1.2005 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
  1.2006 +                   i, array[i].plaintext, array[i].cyphertext, rv);
  1.2007 +            return PR_FALSE;
  1.2008 +        }
  1.2009 +    }
  1.2010 +
  1.2011 +    printf("PASS\n");
  1.2012 +    return PR_TRUE;
  1.2013 +}
  1.2014 +
  1.2015 +/* PL_Base64Decode, single characters */
  1.2016 +PRBool test_009(void)
  1.2017 +{
  1.2018 +    PRUint32 a, b;
  1.2019 +    unsigned char plain[ 4 ];
  1.2020 +    unsigned char cypher[ 5 ];
  1.2021 +    char result[ 8 ];
  1.2022 +    char *rv;
  1.2023 +
  1.2024 +    printf("Test 009 (PL_Base64Decode, single characters, equals)                 ..."); fflush(stdout);
  1.2025 +
  1.2026 +    plain[1] = plain[2] = plain[3] = (unsigned char)0;
  1.2027 +    cypher[2] = cypher[3] = (unsigned char)'=';
  1.2028 +    cypher[4] = (unsigned char)0;
  1.2029 +
  1.2030 +    for( a = 0; a < 64; a++ )
  1.2031 +    {
  1.2032 +        cypher[0] = base[a];
  1.2033 +
  1.2034 +        for( b = 0; b < 4; b++ )
  1.2035 +        {
  1.2036 +            plain[0] = (unsigned char)(a * 4 + b);
  1.2037 +            cypher[1] = base[(b * 16)];
  1.2038 +
  1.2039 +            rv = PL_Base64Decode((char *)cypher, 4, result);
  1.2040 +            if( rv != result )
  1.2041 +            {
  1.2042 +                printf("FAIL\n\t(%d, %d): return value\n", a, b);
  1.2043 +                return PR_FALSE;
  1.2044 +            }
  1.2045 +
  1.2046 +            if( 0 != PL_strncmp((char *)plain, result, 1) )
  1.2047 +            {
  1.2048 +                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n",
  1.2049 +                       a, b, plain, result);
  1.2050 +                return PR_FALSE;
  1.2051 +            }
  1.2052 +        }
  1.2053 +    }
  1.2054 +
  1.2055 +    printf("PASS\n");
  1.2056 +    return PR_TRUE;
  1.2057 +}
  1.2058 +
  1.2059 +/* PL_Base64Decode, single characters */
  1.2060 +PRBool test_010(void)
  1.2061 +{
  1.2062 +    PRUint32 a, b;
  1.2063 +    unsigned char plain[ 4 ];
  1.2064 +    unsigned char cypher[ 5 ];
  1.2065 +    char result[ 8 ];
  1.2066 +    char *rv;
  1.2067 +
  1.2068 +    printf("Test 010 (PL_Base64Decode, single characters, no equals)              ..."); fflush(stdout);
  1.2069 +
  1.2070 +    plain[1] = plain[2] = plain[3] = (unsigned char)0;
  1.2071 +    cypher[2] = cypher[3] = (unsigned char)0;
  1.2072 +    cypher[4] = (unsigned char)0;
  1.2073 +
  1.2074 +    for( a = 0; a < 64; a++ )
  1.2075 +    {
  1.2076 +        cypher[0] = base[a];
  1.2077 +
  1.2078 +        for( b = 0; b < 4; b++ )
  1.2079 +        {
  1.2080 +            plain[0] = (unsigned char)(a * 4 + b);
  1.2081 +            cypher[1] = base[(b * 16)];
  1.2082 +
  1.2083 +            rv = PL_Base64Decode((char *)cypher, 2, result);
  1.2084 +            if( rv != result )
  1.2085 +            {
  1.2086 +                printf("FAIL\n\t(%d, %d): return value\n", a, b);
  1.2087 +                return PR_FALSE;
  1.2088 +            }
  1.2089 +
  1.2090 +            if( 0 != PL_strncmp((char *)plain, result, 1) )
  1.2091 +            {
  1.2092 +                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n",
  1.2093 +                       a, b, plain, result);
  1.2094 +                return PR_FALSE;
  1.2095 +            }
  1.2096 +        }
  1.2097 +    }
  1.2098 +
  1.2099 +    printf("PASS\n");
  1.2100 +    return PR_TRUE;
  1.2101 +}
  1.2102 +
  1.2103 +/* PL_Base64Decode, double characters */
  1.2104 +PRBool test_011(void)
  1.2105 +{
  1.2106 +    PRUint32 a, b, c, d;
  1.2107 +    unsigned char plain[ 4 ];
  1.2108 +    unsigned char cypher[ 5 ];
  1.2109 +    char result[ 8 ];
  1.2110 +    char *rv;
  1.2111 +
  1.2112 +    printf("Test 011 (PL_Base64Decode, double characters, equals)                 ..."); fflush(stdout);
  1.2113 +
  1.2114 +    plain[2] = plain[3] = (unsigned char)0;
  1.2115 +    cypher[3] = (unsigned char)'=';
  1.2116 +    cypher[4] = (unsigned char)0;
  1.2117 +
  1.2118 +    for( a = 0; a < 64; a++ )
  1.2119 +    {
  1.2120 +        cypher[0] = base[a];
  1.2121 +        for( b = 0; b < 4; b++ )
  1.2122 +        {
  1.2123 +            plain[0] = (a*4) + b;
  1.2124 +            for( c = 0; c < 16; c++ )
  1.2125 +            {
  1.2126 +                cypher[1] = base[b*16 + c];
  1.2127 +                for( d = 0; d < 16; d++ )
  1.2128 +                {
  1.2129 +                    plain[1] = c*16 + d;
  1.2130 +                    cypher[2] = base[d*4];
  1.2131 +
  1.2132 +                    rv = PL_Base64Decode((char *)cypher, 4, result);
  1.2133 +                    if( rv != result )
  1.2134 +                    {
  1.2135 +                        printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
  1.2136 +                        return PR_FALSE;
  1.2137 +                    }
  1.2138 +
  1.2139 +                    if( 0 != PL_strncmp((char *)plain, result, 2) )
  1.2140 +                    {
  1.2141 +                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
  1.2142 +                               a, b, c, d, plain, result);
  1.2143 +                        return PR_FALSE;
  1.2144 +                    }
  1.2145 +                }
  1.2146 +            }
  1.2147 +        }
  1.2148 +    }
  1.2149 +
  1.2150 +    printf("PASS\n");
  1.2151 +    return PR_TRUE;
  1.2152 +}
  1.2153 +
  1.2154 +/* PL_Base64Decode, double characters */
  1.2155 +PRBool test_012(void)
  1.2156 +{
  1.2157 +    PRUint32 a, b, c, d;
  1.2158 +    unsigned char plain[ 4 ];
  1.2159 +    unsigned char cypher[ 5 ];
  1.2160 +    char result[ 8 ];
  1.2161 +    char *rv;
  1.2162 +
  1.2163 +    printf("Test 012 (PL_Base64Decode, double characters, no equals)              ..."); fflush(stdout);
  1.2164 +
  1.2165 +    plain[2] = plain[3] = (unsigned char)0;
  1.2166 +    cypher[3] = (unsigned char)0;
  1.2167 +    cypher[4] = (unsigned char)0;
  1.2168 +
  1.2169 +    for( a = 0; a < 64; a++ )
  1.2170 +    {
  1.2171 +        cypher[0] = base[a];
  1.2172 +        for( b = 0; b < 4; b++ )
  1.2173 +        {
  1.2174 +            plain[0] = (a*4) + b;
  1.2175 +            for( c = 0; c < 16; c++ )
  1.2176 +            {
  1.2177 +                cypher[1] = base[b*16 + c];
  1.2178 +                for( d = 0; d < 16; d++ )
  1.2179 +                {
  1.2180 +                    plain[1] = c*16 + d;
  1.2181 +                    cypher[2] = base[d*4];
  1.2182 +
  1.2183 +                    rv = PL_Base64Decode((char *)cypher, 3, result);
  1.2184 +                    if( rv != result )
  1.2185 +                    {
  1.2186 +                        printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
  1.2187 +                        return PR_FALSE;
  1.2188 +                    }
  1.2189 +
  1.2190 +                    if( 0 != PL_strncmp((char *)plain, result, 2) )
  1.2191 +                    {
  1.2192 +                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
  1.2193 +                               a, b, c, d, cypher, result);
  1.2194 +                        return PR_FALSE;
  1.2195 +                    }
  1.2196 +                }
  1.2197 +            }
  1.2198 +        }
  1.2199 +    }
  1.2200 +
  1.2201 +    printf("PASS\n");
  1.2202 +    return PR_TRUE;
  1.2203 +}
  1.2204 +
  1.2205 +/* PL_Base64Decode, triple characters */
  1.2206 +PRBool test_013(void)
  1.2207 +{
  1.2208 +    PRUint32 a, b, c, d, e, f;
  1.2209 +    unsigned char plain[ 4 ];
  1.2210 +    unsigned char cypher[ 5 ];
  1.2211 +    char result[ 8 ];
  1.2212 +    char *rv;
  1.2213 +
  1.2214 +    printf("Test 013 (PL_Base64Decode, triple characters)                         ..."); fflush(stdout);
  1.2215 +
  1.2216 +    cypher[4] = (unsigned char)0;
  1.2217 +
  1.2218 +    for( a = 0; a < 64; a++ )
  1.2219 +    {
  1.2220 +        cypher[0] = base[a];
  1.2221 +        for( b = 0; b < 4; b++ )
  1.2222 +        {
  1.2223 +            plain[0] = (a*4) + b;
  1.2224 +            for( c = 0; c < 16; c++ )
  1.2225 +            {
  1.2226 +                cypher[1] = base[b*16 + c];
  1.2227 +                for( d = 0; d < 16; d++ )
  1.2228 +                {
  1.2229 +                    plain[1] = c*16 + d;
  1.2230 +                    for( e = 0; e < 4; e++ )
  1.2231 +                    {
  1.2232 +                        cypher[2] = base[d*4 + e];
  1.2233 +                        for( f = 0; f < 64; f++ )
  1.2234 +                        {
  1.2235 +                            plain[2] = e * 64 + f;
  1.2236 +                            cypher[3] = base[f];
  1.2237 +
  1.2238 +                            rv = PL_Base64Decode((char *)cypher, 4, result);
  1.2239 +                            if( rv != result )
  1.2240 +                            {
  1.2241 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b, c, d, e, f);
  1.2242 +                                return PR_FALSE;
  1.2243 +                            }
  1.2244 +
  1.2245 +                            if( 0 != PL_strncmp((char *)plain, result, 3) )
  1.2246 +                            {
  1.2247 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.3s.\"\n",
  1.2248 +                                       a, b, c, d, e, f, plain, result);
  1.2249 +                                return PR_FALSE;
  1.2250 +                            }
  1.2251 +                        }
  1.2252 +                    }
  1.2253 +                }
  1.2254 +            }
  1.2255 +        }
  1.2256 +    }
  1.2257 +
  1.2258 +    printf("PASS\n");
  1.2259 +    return PR_TRUE;
  1.2260 +}
  1.2261 +
  1.2262 +/* PL_Base64Decode, random strings */
  1.2263 +PRBool test_014(void)
  1.2264 +{
  1.2265 +    int i;
  1.2266 +    char result[ 4096 ];
  1.2267 +
  1.2268 +    printf("Test 014 (PL_Base64Decode, random strings, equals)                    ..."); fflush(stdout);
  1.2269 +
  1.2270 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2271 +    {
  1.2272 +        PRUint32 clen = PL_strlen(array[i].cyphertext);
  1.2273 +        PRUint32 plen = (clen * 3) / 4;
  1.2274 +
  1.2275 +        char *rv = PL_Base64Decode(array[i].cyphertext, clen, result);
  1.2276 +
  1.2277 +        if( rv != result )
  1.2278 +        {
  1.2279 +            printf("FAIL\n\t(%d): return value\n", i);
  1.2280 +            return PR_FALSE;
  1.2281 +        }
  1.2282 +
  1.2283 +        if( 0 == (clen & 3) )
  1.2284 +        {
  1.2285 +            if( '=' == array[i].cyphertext[clen-1] )
  1.2286 +            {
  1.2287 +                if( '=' == array[i].cyphertext[clen-2] )
  1.2288 +                {
  1.2289 +                    plen -= 2;
  1.2290 +                }
  1.2291 +                else
  1.2292 +                {
  1.2293 +                    plen -= 1;
  1.2294 +                }
  1.2295 +            }
  1.2296 +        }
  1.2297 +
  1.2298 +        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
  1.2299 +        {
  1.2300 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
  1.2301 +                   i, array[i].cyphertext, array[i].plaintext, plen, result);
  1.2302 +            return PR_FALSE;
  1.2303 +        }
  1.2304 +    }
  1.2305 +
  1.2306 +    printf("PASS\n");
  1.2307 +    return PR_TRUE;
  1.2308 +}
  1.2309 +
  1.2310 +/* PL_Base64Decode, random strings */
  1.2311 +PRBool test_015(void)
  1.2312 +{
  1.2313 +    int i;
  1.2314 +    char buffer[ 4096 ];
  1.2315 +    char result[ 4096 ];
  1.2316 +    char *rv;
  1.2317 +
  1.2318 +    printf("Test 015 (PL_Base64Decode, random strings, no equals)                 ..."); fflush(stdout);
  1.2319 +
  1.2320 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2321 +    {
  1.2322 +        PRUint32 clen, plen;
  1.2323 +
  1.2324 +        PL_strcpy(buffer, array[i].cyphertext);
  1.2325 +        clen = PL_strlen(buffer);
  1.2326 +
  1.2327 +        if( 0 == (clen & 3) )
  1.2328 +        {
  1.2329 +            if( '=' == buffer[clen-1] )
  1.2330 +            {
  1.2331 +                if( '=' == buffer[clen-2] )
  1.2332 +                {
  1.2333 +                    buffer[clen-2] = buffer[clen-1] = (char)0;
  1.2334 +                    clen -= 2;
  1.2335 +                }
  1.2336 +                else
  1.2337 +                {
  1.2338 +                    buffer[clen-1] = (char)0;
  1.2339 +                    clen -= 1;
  1.2340 +                }
  1.2341 +            }
  1.2342 +        }
  1.2343 +
  1.2344 +        plen = (clen * 3) / 4;
  1.2345 +
  1.2346 +        rv = PL_Base64Decode(buffer, clen, result);
  1.2347 +
  1.2348 +        if( rv != result )
  1.2349 +        {
  1.2350 +            printf("FAIL\n\t(%d): return value\n", i);
  1.2351 +            return PR_FALSE;
  1.2352 +        }
  1.2353 +
  1.2354 +        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
  1.2355 +        {
  1.2356 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
  1.2357 +                   i, array[i].cyphertext, array[i].plaintext, plen, result);
  1.2358 +            return PR_FALSE;
  1.2359 +        }
  1.2360 +    }
  1.2361 +
  1.2362 +    printf("PASS\n");
  1.2363 +    return PR_TRUE;
  1.2364 +}
  1.2365 +
  1.2366 +/* PL_Base64Decode, single characters, malloc */
  1.2367 +PRBool test_016(void)
  1.2368 +{
  1.2369 +    PRUint32 a, b;
  1.2370 +    unsigned char plain[ 4 ];
  1.2371 +    unsigned char cypher[ 5 ];
  1.2372 +    char *rv;
  1.2373 +
  1.2374 +    printf("Test 016 (PL_Base64Decode, single characters, equals, malloc)         ..."); fflush(stdout);
  1.2375 +
  1.2376 +    plain[1] = plain[2] = plain[3] = (unsigned char)0;
  1.2377 +    cypher[2] = cypher[3] = (unsigned char)'=';
  1.2378 +    cypher[4] = (unsigned char)0;
  1.2379 +
  1.2380 +    for( a = 0; a < 64; a++ )
  1.2381 +    {
  1.2382 +        cypher[0] = base[a];
  1.2383 +
  1.2384 +        for( b = 0; b < 4; b++ )
  1.2385 +        {
  1.2386 +            plain[0] = (unsigned char)(a * 4 + b);
  1.2387 +            cypher[1] = base[(b * 16)];
  1.2388 +
  1.2389 +            rv = PL_Base64Decode((char *)cypher, 4, (char *)0);
  1.2390 +            if( (char *)0 == rv )
  1.2391 +            {
  1.2392 +                printf("FAIL\n\t(%d, %d): no return value\n", a, b);
  1.2393 +                return PR_FALSE;
  1.2394 +            }
  1.2395 +
  1.2396 +            if( 0 != PL_strcmp((char *)plain, rv) )
  1.2397 +            {
  1.2398 +                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
  1.2399 +                       a, b, plain, rv);
  1.2400 +                PR_DELETE(rv);
  1.2401 +                return PR_FALSE;
  1.2402 +            }
  1.2403 +
  1.2404 +            PR_DELETE(rv);
  1.2405 +        }
  1.2406 +    }
  1.2407 +
  1.2408 +    printf("PASS\n");
  1.2409 +    return PR_TRUE;
  1.2410 +}
  1.2411 +
  1.2412 +/* PL_Base64Decode, single characters, malloc */
  1.2413 +PRBool test_017(void)
  1.2414 +{
  1.2415 +    PRUint32 a, b;
  1.2416 +    unsigned char plain[ 4 ];
  1.2417 +    unsigned char cypher[ 5 ];
  1.2418 +    char *rv;
  1.2419 +
  1.2420 +    printf("Test 017 (PL_Base64Decode, single characters, no equals, malloc)      ..."); fflush(stdout);
  1.2421 +
  1.2422 +    plain[1] = plain[2] = plain[3] = (unsigned char)0;
  1.2423 +    cypher[2] = cypher[3] = (unsigned char)0;
  1.2424 +    cypher[4] = (unsigned char)0;
  1.2425 +
  1.2426 +    for( a = 0; a < 64; a++ )
  1.2427 +    {
  1.2428 +        cypher[0] = base[a];
  1.2429 +
  1.2430 +        for( b = 0; b < 4; b++ )
  1.2431 +        {
  1.2432 +            plain[0] = (unsigned char)(a * 4 + b);
  1.2433 +            cypher[1] = base[(b * 16)];
  1.2434 +
  1.2435 +            rv = PL_Base64Decode((char *)cypher, 2, (char *)0);
  1.2436 +            if( (char *)0 == rv )
  1.2437 +            {
  1.2438 +                printf("FAIL\n\t(%d, %d): no return value\n", a, b);
  1.2439 +                return PR_FALSE;
  1.2440 +            }
  1.2441 +
  1.2442 +            if( 0 != PL_strcmp((char *)plain, rv) )
  1.2443 +            {
  1.2444 +                printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
  1.2445 +                       a, b, plain, rv);
  1.2446 +                PR_DELETE(rv);
  1.2447 +                return PR_FALSE;
  1.2448 +            }
  1.2449 +
  1.2450 +            PR_DELETE(rv);
  1.2451 +        }
  1.2452 +    }
  1.2453 +
  1.2454 +    printf("PASS\n");
  1.2455 +    return PR_TRUE;
  1.2456 +}
  1.2457 +
  1.2458 +/* PL_Base64Decode, double characters, malloc */
  1.2459 +PRBool test_018(void)
  1.2460 +{
  1.2461 +    PRUint32 a, b, c, d;
  1.2462 +    unsigned char plain[ 4 ];
  1.2463 +    unsigned char cypher[ 5 ];
  1.2464 +    char *rv;
  1.2465 +
  1.2466 +    printf("Test 018 (PL_Base64Decode, double characters, equals, malloc)         ..."); fflush(stdout);
  1.2467 +
  1.2468 +    plain[2] = plain[3] = (unsigned char)0;
  1.2469 +    cypher[3] = (unsigned char)'=';
  1.2470 +    cypher[4] = (unsigned char)0;
  1.2471 +
  1.2472 +    for( a = 0; a < 64; a++ )
  1.2473 +    {
  1.2474 +        cypher[0] = base[a];
  1.2475 +        for( b = 0; b < 4; b++ )
  1.2476 +        {
  1.2477 +            plain[0] = (a*4) + b;
  1.2478 +            for( c = 0; c < 16; c++ )
  1.2479 +            {
  1.2480 +                cypher[1] = base[b*16 + c];
  1.2481 +                for( d = 0; d < 16; d++ )
  1.2482 +                {
  1.2483 +                    plain[1] = c*16 + d;
  1.2484 +                    cypher[2] = base[d*4];
  1.2485 +
  1.2486 +                    rv = PL_Base64Decode((char *)cypher, 4, (char *)0);
  1.2487 +                    if( (char *)0 == rv )
  1.2488 +                    {
  1.2489 +                        printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
  1.2490 +                        return PR_FALSE;
  1.2491 +                    }
  1.2492 +
  1.2493 +                    if( 0 != PL_strcmp((char *)plain, rv) )
  1.2494 +                    {
  1.2495 +                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
  1.2496 +                               a, b, c, d, plain, rv);
  1.2497 +                        PR_DELETE(rv);
  1.2498 +                        return PR_FALSE;
  1.2499 +                    }
  1.2500 +
  1.2501 +                    PR_DELETE(rv);
  1.2502 +                }
  1.2503 +            }
  1.2504 +        }
  1.2505 +    }
  1.2506 +
  1.2507 +    printf("PASS\n");
  1.2508 +    return PR_TRUE;
  1.2509 +}
  1.2510 +
  1.2511 +/* PL_Base64Decode, double characters, malloc */
  1.2512 +PRBool test_019(void)
  1.2513 +{
  1.2514 +    PRUint32 a, b, c, d;
  1.2515 +    unsigned char plain[ 4 ];
  1.2516 +    unsigned char cypher[ 5 ];
  1.2517 +    char *rv;
  1.2518 +
  1.2519 +    printf("Test 019 (PL_Base64Decode, double characters, no equals, malloc)      ..."); fflush(stdout);
  1.2520 +
  1.2521 +    plain[2] = plain[3] = (unsigned char)0;
  1.2522 +    cypher[3] = (unsigned char)0;
  1.2523 +    cypher[4] = (unsigned char)0;
  1.2524 +
  1.2525 +    for( a = 0; a < 64; a++ )
  1.2526 +    {
  1.2527 +        cypher[0] = base[a];
  1.2528 +        for( b = 0; b < 4; b++ )
  1.2529 +        {
  1.2530 +            plain[0] = (a*4) + b;
  1.2531 +            for( c = 0; c < 16; c++ )
  1.2532 +            {
  1.2533 +                cypher[1] = base[b*16 + c];
  1.2534 +                for( d = 0; d < 16; d++ )
  1.2535 +                {
  1.2536 +                    plain[1] = c*16 + d;
  1.2537 +                    cypher[2] = base[d*4];
  1.2538 +
  1.2539 +                    rv = PL_Base64Decode((char *)cypher, 3, (char *)0);
  1.2540 +                    if( (char *)0 == rv )
  1.2541 +                    {
  1.2542 +                        printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
  1.2543 +                        return PR_FALSE;
  1.2544 +                    }
  1.2545 +
  1.2546 +                    if( 0 != PL_strcmp((char *)plain, rv) )
  1.2547 +                    {
  1.2548 +                        printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
  1.2549 +                               a, b, c, d, cypher, rv);
  1.2550 +                        PR_DELETE(rv);
  1.2551 +                        return PR_FALSE;
  1.2552 +                    }
  1.2553 +
  1.2554 +                    PR_DELETE(rv);
  1.2555 +                }
  1.2556 +            }
  1.2557 +        }
  1.2558 +    }
  1.2559 +
  1.2560 +    printf("PASS\n");
  1.2561 +    return PR_TRUE;
  1.2562 +}
  1.2563 +
  1.2564 +/* PL_Base64Decode, triple characters, malloc */
  1.2565 +PRBool test_020(void)
  1.2566 +{
  1.2567 +    PRUint32 a, b, c, d, e, f;
  1.2568 +    unsigned char plain[ 4 ];
  1.2569 +    unsigned char cypher[ 5 ];
  1.2570 +    char *rv;
  1.2571 +
  1.2572 +    printf("Test 020 (PL_Base64Decode, triple characters, malloc)                 ..."); fflush(stdout);
  1.2573 +
  1.2574 +    cypher[4] = (unsigned char)0;
  1.2575 +    plain[3] = (unsigned char)0;
  1.2576 +
  1.2577 +    for( a = 0; a < 64; a++ )
  1.2578 +    {
  1.2579 +        cypher[0] = base[a];
  1.2580 +        for( b = 0; b < 4; b++ )
  1.2581 +        {
  1.2582 +            plain[0] = (a*4) + b;
  1.2583 +            for( c = 0; c < 16; c++ )
  1.2584 +            {
  1.2585 +                cypher[1] = base[b*16 + c];
  1.2586 +                for( d = 0; d < 16; d++ )
  1.2587 +                {
  1.2588 +                    plain[1] = c*16 + d;
  1.2589 +                    for( e = 0; e < 4; e++ )
  1.2590 +                    {
  1.2591 +                        cypher[2] = base[d*4 + e];
  1.2592 +                        for( f = 0; f < 64; f++ )
  1.2593 +                        {
  1.2594 +                            plain[2] = e * 64 + f;
  1.2595 +                            cypher[3] = base[f];
  1.2596 +
  1.2597 +                            rv = PL_Base64Decode((char *)cypher, 4, (char *)0);
  1.2598 +                            if( (char *)0 == rv )
  1.2599 +                            {
  1.2600 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a, b, c, d, e, f);
  1.2601 +                                return PR_FALSE;
  1.2602 +                            }
  1.2603 +
  1.2604 +                            if( 0 != PL_strcmp((char *)plain, rv) )
  1.2605 +                            {
  1.2606 +                                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.3s.\"\n",
  1.2607 +                                       a, b, c, d, e, f, plain, rv);
  1.2608 +                                PR_DELETE(rv);
  1.2609 +                                return PR_FALSE;
  1.2610 +                            }
  1.2611 +
  1.2612 +                            PR_DELETE(rv);
  1.2613 +                        }
  1.2614 +                    }
  1.2615 +                }
  1.2616 +            }
  1.2617 +        }
  1.2618 +    }
  1.2619 +
  1.2620 +    printf("PASS\n");
  1.2621 +    return PR_TRUE;
  1.2622 +}
  1.2623 +
  1.2624 +/* PL_Base64Decode, random strings, malloc */
  1.2625 +PRBool test_021(void)
  1.2626 +{
  1.2627 +    int i;
  1.2628 +
  1.2629 +    printf("Test 021 (PL_Base64Decode, random strings, equals, malloc)            ..."); fflush(stdout);
  1.2630 +
  1.2631 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2632 +    {
  1.2633 +        PRUint32 clen = PL_strlen(array[i].cyphertext);
  1.2634 +
  1.2635 +        char *rv = PL_Base64Decode(array[i].cyphertext, clen, (char *)0);
  1.2636 +
  1.2637 +        if( (char *)0 == rv )
  1.2638 +        {
  1.2639 +            printf("FAIL\n\t(%d): no return value\n", i);
  1.2640 +            return PR_FALSE;
  1.2641 +        }
  1.2642 +
  1.2643 +        if( 0 != PL_strcmp(rv, array[i].plaintext) )
  1.2644 +        {
  1.2645 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
  1.2646 +                   i, array[i].cyphertext, array[i].plaintext, rv);
  1.2647 +            PR_DELETE(rv);
  1.2648 +            return PR_FALSE;
  1.2649 +        }
  1.2650 +
  1.2651 +        PR_DELETE(rv);
  1.2652 +    }
  1.2653 +
  1.2654 +    printf("PASS\n");
  1.2655 +    return PR_TRUE;
  1.2656 +}
  1.2657 +
  1.2658 +/* PL_Base64Encode, random strings, malloc */
  1.2659 +PRBool test_022(void)
  1.2660 +{
  1.2661 +    int i;
  1.2662 +    char buffer[ 4096 ];
  1.2663 +    char *rv;
  1.2664 +
  1.2665 +    printf("Test 022 (PL_Base64Decode, random strings, no equals, malloc)         ..."); fflush(stdout);
  1.2666 +
  1.2667 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2668 +    {
  1.2669 +        PRUint32 clen;
  1.2670 +
  1.2671 +        PL_strcpy(buffer, array[i].cyphertext);
  1.2672 +        clen = PL_strlen(buffer);
  1.2673 +
  1.2674 +        if( 0 == (clen & 3) )
  1.2675 +        {
  1.2676 +            if( '=' == buffer[clen-1] )
  1.2677 +            {
  1.2678 +                if( '=' == buffer[clen-2] )
  1.2679 +                {
  1.2680 +                    buffer[clen-2] = buffer[clen-1] = (char)0;
  1.2681 +                    clen -= 2;
  1.2682 +                }
  1.2683 +                else
  1.2684 +                {
  1.2685 +                    buffer[clen-1] = (char)0;
  1.2686 +                    clen -= 1;
  1.2687 +                }
  1.2688 +            }
  1.2689 +        }
  1.2690 +
  1.2691 +        rv = PL_Base64Decode(buffer, clen, (char *)0);
  1.2692 +
  1.2693 +        if( (char *)0 == rv )
  1.2694 +        {
  1.2695 +            printf("FAIL\n\t(%d): no return value\n", i);
  1.2696 +            return PR_FALSE;
  1.2697 +        }
  1.2698 +
  1.2699 +        if( 0 != PL_strcmp(rv, array[i].plaintext) )
  1.2700 +        {
  1.2701 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
  1.2702 +                   i, array[i].cyphertext, array[i].plaintext, rv);
  1.2703 +            return PR_FALSE;
  1.2704 +        }
  1.2705 +    }
  1.2706 +
  1.2707 +    printf("PASS\n");
  1.2708 +    return PR_TRUE;
  1.2709 +}
  1.2710 +
  1.2711 +/* PL_Base64Encode, random strings */
  1.2712 +PRBool test_023(void)
  1.2713 +{
  1.2714 +    int i;
  1.2715 +    char result[ 4096 ];
  1.2716 +
  1.2717 +    printf("Test 023 (PL_Base64Encode, random strings, strlen)                    ..."); fflush(stdout);
  1.2718 +
  1.2719 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2720 +    {
  1.2721 +        PRUint32 plen = PL_strlen(array[i].plaintext);
  1.2722 +        PRUint32 clen = ((plen + 2)/3)*4;
  1.2723 +
  1.2724 +        char *rv = PL_Base64Encode(array[i].plaintext, 0, result);
  1.2725 +
  1.2726 +        if( rv != result )
  1.2727 +        {
  1.2728 +            printf("FAIL\n\t(%d): return value\n", i);
  1.2729 +            return PR_FALSE;
  1.2730 +        }
  1.2731 +
  1.2732 +        if( 0 != PL_strncmp(result, array[i].cyphertext, clen) )
  1.2733 +        {
  1.2734 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
  1.2735 +                   i, array[i].plaintext, array[i].cyphertext, clen, result);
  1.2736 +            return PR_FALSE;
  1.2737 +        }
  1.2738 +    }
  1.2739 +
  1.2740 +    printf("PASS\n");
  1.2741 +    return PR_TRUE;
  1.2742 +}
  1.2743 +
  1.2744 +/* PL_Base64Encode, random strings, malloc */
  1.2745 +PRBool test_024(void)
  1.2746 +{
  1.2747 +    int i;
  1.2748 +
  1.2749 +    printf("Test 024 (PL_Base64Encode, random strings, malloc, strlen)            ..."); fflush(stdout);
  1.2750 +
  1.2751 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2752 +    {
  1.2753 +        PRUint32 plen = PL_strlen(array[i].plaintext);
  1.2754 +        PRUint32 clen = ((plen + 2)/3)*4;
  1.2755 +
  1.2756 +        char *rv = PL_Base64Encode(array[i].plaintext, 0, (char *)0);
  1.2757 +
  1.2758 +        if( (char *)0 == rv )
  1.2759 +        {
  1.2760 +            printf("FAIL\n\t(%d): no return value\n", i);
  1.2761 +            return PR_FALSE;
  1.2762 +        }
  1.2763 +
  1.2764 +        if( 0 != PL_strcmp(rv, array[i].cyphertext) )
  1.2765 +        {
  1.2766 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
  1.2767 +                   i, array[i].plaintext, array[i].cyphertext, rv);
  1.2768 +            return PR_FALSE;
  1.2769 +        }
  1.2770 +    }
  1.2771 +
  1.2772 +    printf("PASS\n");
  1.2773 +    return PR_TRUE;
  1.2774 +}
  1.2775 +
  1.2776 +/* PL_Base64Decode, random strings */
  1.2777 +PRBool test_025(void)
  1.2778 +{
  1.2779 +    int i;
  1.2780 +    char result[ 4096 ];
  1.2781 +
  1.2782 +    printf("Test 025 (PL_Base64Decode, random strings, equals, strlen)            ..."); fflush(stdout);
  1.2783 +
  1.2784 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2785 +    {
  1.2786 +        PRUint32 clen = PL_strlen(array[i].cyphertext);
  1.2787 +        PRUint32 plen = (clen * 3) / 4;
  1.2788 +
  1.2789 +        char *rv = PL_Base64Decode(array[i].cyphertext, 0, result);
  1.2790 +
  1.2791 +        if( rv != result )
  1.2792 +        {
  1.2793 +            printf("FAIL\n\t(%d): return value\n", i);
  1.2794 +            return PR_FALSE;
  1.2795 +        }
  1.2796 +
  1.2797 +        if( 0 == (clen & 3) )
  1.2798 +        {
  1.2799 +            if( '=' == array[i].cyphertext[clen-1] )
  1.2800 +            {
  1.2801 +                if( '=' == array[i].cyphertext[clen-2] )
  1.2802 +                {
  1.2803 +                    plen -= 2;
  1.2804 +                }
  1.2805 +                else
  1.2806 +                {
  1.2807 +                    plen -= 1;
  1.2808 +                }
  1.2809 +            }
  1.2810 +        }
  1.2811 +
  1.2812 +        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
  1.2813 +        {
  1.2814 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
  1.2815 +                   i, array[i].cyphertext, array[i].plaintext, plen, result);
  1.2816 +            return PR_FALSE;
  1.2817 +        }
  1.2818 +    }
  1.2819 +
  1.2820 +    printf("PASS\n");
  1.2821 +    return PR_TRUE;
  1.2822 +}
  1.2823 +
  1.2824 +/* PL_Base64Decode, random strings */
  1.2825 +PRBool test_026(void)
  1.2826 +{
  1.2827 +    int i;
  1.2828 +    char buffer[ 4096 ];
  1.2829 +    char result[ 4096 ];
  1.2830 +    char *rv;
  1.2831 +
  1.2832 +    printf("Test 026 (PL_Base64Decode, random strings, no equals, strlen)         ..."); fflush(stdout);
  1.2833 +
  1.2834 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2835 +    {
  1.2836 +        PRUint32 clen, plen;
  1.2837 +
  1.2838 +        PL_strcpy(buffer, array[i].cyphertext);
  1.2839 +        clen = PL_strlen(buffer);
  1.2840 +
  1.2841 +        if( 0 == (clen & 3) )
  1.2842 +        {
  1.2843 +            if( '=' == buffer[clen-1] )
  1.2844 +            {
  1.2845 +                if( '=' == buffer[clen-2] )
  1.2846 +                {
  1.2847 +                    buffer[clen-2] = buffer[clen-1] = (char)0;
  1.2848 +                    clen -= 2;
  1.2849 +                }
  1.2850 +                else
  1.2851 +                {
  1.2852 +                    buffer[clen-1] = (char)0;
  1.2853 +                    clen -= 1;
  1.2854 +                }
  1.2855 +            }
  1.2856 +        }
  1.2857 +
  1.2858 +        plen = (clen * 3) / 4;
  1.2859 +
  1.2860 +        rv = PL_Base64Decode(buffer, 0, result);
  1.2861 +
  1.2862 +        if( rv != result )
  1.2863 +        {
  1.2864 +            printf("FAIL\n\t(%d): return value\n", i);
  1.2865 +            return PR_FALSE;
  1.2866 +        }
  1.2867 +
  1.2868 +        if( 0 != PL_strncmp(result, array[i].plaintext, plen) )
  1.2869 +        {
  1.2870 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", 
  1.2871 +                   i, array[i].cyphertext, array[i].plaintext, plen, result);
  1.2872 +            return PR_FALSE;
  1.2873 +        }
  1.2874 +    }
  1.2875 +
  1.2876 +    printf("PASS\n");
  1.2877 +    return PR_TRUE;
  1.2878 +}
  1.2879 +
  1.2880 +/* PL_Base64Decode, random strings, malloc */
  1.2881 +PRBool test_027(void)
  1.2882 +{
  1.2883 +    int i;
  1.2884 +
  1.2885 +    printf("Test 027 (PL_Base64Decode, random strings, equals, malloc, strlen)    ..."); fflush(stdout);
  1.2886 +
  1.2887 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2888 +    {
  1.2889 +        PRUint32 clen = PL_strlen(array[i].cyphertext);
  1.2890 +
  1.2891 +        char *rv = PL_Base64Decode(array[i].cyphertext, 0, (char *)0);
  1.2892 +
  1.2893 +        if( (char *)0 == rv )
  1.2894 +        {
  1.2895 +            printf("FAIL\n\t(%d): no return value\n", i);
  1.2896 +            return PR_FALSE;
  1.2897 +        }
  1.2898 +
  1.2899 +        if( 0 != PL_strcmp(rv, array[i].plaintext) )
  1.2900 +        {
  1.2901 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
  1.2902 +                   i, array[i].cyphertext, array[i].plaintext, rv);
  1.2903 +            PR_DELETE(rv);
  1.2904 +            return PR_FALSE;
  1.2905 +        }
  1.2906 +
  1.2907 +        PR_DELETE(rv);
  1.2908 +    }
  1.2909 +
  1.2910 +    printf("PASS\n");
  1.2911 +    return PR_TRUE;
  1.2912 +}
  1.2913 +
  1.2914 +/* PL_Base64Encode, random strings, malloc */
  1.2915 +PRBool test_028(void)
  1.2916 +{
  1.2917 +    int i;
  1.2918 +    char buffer[ 4096 ];
  1.2919 +    char *rv;
  1.2920 +
  1.2921 +    printf("Test 028 (PL_Base64Decode, random strings, no equals, malloc, strlen) ..."); fflush(stdout);
  1.2922 +
  1.2923 +    for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
  1.2924 +    {
  1.2925 +        PRUint32 clen;
  1.2926 +
  1.2927 +        PL_strcpy(buffer, array[i].cyphertext);
  1.2928 +        clen = PL_strlen(buffer);
  1.2929 +
  1.2930 +        if( 0 == (clen & 3) )
  1.2931 +        {
  1.2932 +            if( '=' == buffer[clen-1] )
  1.2933 +            {
  1.2934 +                if( '=' == buffer[clen-2] )
  1.2935 +                {
  1.2936 +                    buffer[clen-2] = buffer[clen-1] = (char)0;
  1.2937 +                    clen -= 2;
  1.2938 +                }
  1.2939 +                else
  1.2940 +                {
  1.2941 +                    buffer[clen-1] = (char)0;
  1.2942 +                    clen -= 1;
  1.2943 +                }
  1.2944 +            }
  1.2945 +        }
  1.2946 +
  1.2947 +        rv = PL_Base64Decode(buffer, 0, (char *)0);
  1.2948 +
  1.2949 +        if( (char *)0 == rv )
  1.2950 +        {
  1.2951 +            printf("FAIL\n\t(%d): no return value\n", i);
  1.2952 +            return PR_FALSE;
  1.2953 +        }
  1.2954 +
  1.2955 +        if( 0 != PL_strcmp(rv, array[i].plaintext) )
  1.2956 +        {
  1.2957 +            printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", 
  1.2958 +                   i, array[i].cyphertext, array[i].plaintext, rv);
  1.2959 +            return PR_FALSE;
  1.2960 +        }
  1.2961 +    }
  1.2962 +
  1.2963 +    printf("PASS\n");
  1.2964 +    return PR_TRUE;
  1.2965 +}
  1.2966 +
  1.2967 +int
  1.2968 +main
  1.2969 +(
  1.2970 +    int     argc,
  1.2971 +    char   *argv[]
  1.2972 +)
  1.2973 +{
  1.2974 +    printf("Testing the Portable Library base64 functions:\n");
  1.2975 +    printf("(warning: the \"triple characters\" tests are slow)\n");
  1.2976 +
  1.2977 +    if( 1
  1.2978 +        && test_001()
  1.2979 +        && test_002()
  1.2980 +        && test_003()
  1.2981 +        && test_004()
  1.2982 +        && test_005()
  1.2983 +        && test_006()
  1.2984 +        && test_007()
  1.2985 +        && test_008()
  1.2986 +        && test_009()
  1.2987 +        && test_010()
  1.2988 +        && test_011()
  1.2989 +        && test_012()
  1.2990 +        && test_013()
  1.2991 +        && test_014()
  1.2992 +        && test_015()
  1.2993 +        && test_016()
  1.2994 +        && test_017()
  1.2995 +        && test_018()
  1.2996 +        && test_019()
  1.2997 +        && test_020()
  1.2998 +        && test_021()
  1.2999 +        && test_022()
  1.3000 +        && test_023()
  1.3001 +        && test_024()
  1.3002 +        && test_025()
  1.3003 +        && test_026()
  1.3004 +        && test_027()
  1.3005 +        && test_028()
  1.3006 +      )
  1.3007 +    {
  1.3008 +        printf("Suite passed.\n");
  1.3009 +        return 0;
  1.3010 +    }
  1.3011 +    else
  1.3012 +    {
  1.3013 +        printf("Suite failed.\n");
  1.3014 +        return 1;
  1.3015 +    }
  1.3016 +
  1.3017 +    /*NOTREACHED*/
  1.3018 +}

mercurial