tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

base64t.c (109790B)


      1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #include "plbase64.h"
      7 #include "plstr.h"
      8 #include "nspr.h"
      9 
     10 #include <stdio.h>
     11 
     12 static unsigned char *base = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
     13 
     14 /* PL_Base64Encode, single characters */
     15 PRBool test_001(void) {
     16  PRUint32 a, b;
     17  unsigned char plain[4];
     18  unsigned char cypher[5];
     19  char result[8];
     20  char* rv;
     21 
     22  printf(
     23      "Test 001 (PL_Base64Encode, single characters)                         "
     24      "...");
     25  fflush(stdout);
     26 
     27  plain[1] = plain[2] = plain[3] = (unsigned char)0;
     28  cypher[2] = cypher[3] = (unsigned char)'=';
     29  cypher[4] = (unsigned char)0;
     30 
     31  for (a = 0; a < 64; a++) {
     32    cypher[0] = base[a];
     33 
     34    for (b = 0; b < 4; b++) {
     35      plain[0] = (unsigned char)(a * 4 + b);
     36      cypher[1] = base[(b * 16)];
     37 
     38      rv = PL_Base64Encode((char*)plain, 1, result);
     39      if (rv != result) {
     40        printf("FAIL\n\t(%d, %d): return value\n", a, b);
     41        return PR_FALSE;
     42      }
     43 
     44      if (0 != PL_strncmp((char*)cypher, result, 4)) {
     45        printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.4s.\"\n", a, b,
     46               cypher, result);
     47        return PR_FALSE;
     48      }
     49    }
     50  }
     51 
     52  printf("PASS\n");
     53  return PR_TRUE;
     54 }
     55 
     56 /* PL_Base64Encode, double characters */
     57 PRBool test_002(void) {
     58  PRUint32 a, b, c, d;
     59  unsigned char plain[4];
     60  unsigned char cypher[5];
     61  char result[8];
     62  char* rv;
     63 
     64  printf(
     65      "Test 002 (PL_Base64Encode, double characters)                         "
     66      "...");
     67  fflush(stdout);
     68 
     69  plain[2] = plain[3] = (unsigned char)0;
     70  cypher[3] = (unsigned char)'=';
     71  cypher[4] = (unsigned char)0;
     72 
     73  for (a = 0; a < 64; a++) {
     74    cypher[0] = base[a];
     75    for (b = 0; b < 4; b++) {
     76      plain[0] = (a * 4) + b;
     77      for (c = 0; c < 16; c++) {
     78        cypher[1] = base[b * 16 + c];
     79        for (d = 0; d < 16; d++) {
     80          plain[1] = c * 16 + d;
     81          cypher[2] = base[d * 4];
     82 
     83          rv = PL_Base64Encode((char*)plain, 2, result);
     84          if (rv != result) {
     85            printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
     86            return PR_FALSE;
     87          }
     88 
     89          if (0 != PL_strncmp((char*)cypher, result, 4)) {
     90            printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
     91                   a, b, c, d, cypher, result);
     92            return PR_FALSE;
     93          }
     94        }
     95      }
     96    }
     97  }
     98 
     99  printf("PASS\n");
    100  return PR_TRUE;
    101 }
    102 
    103 /* PL_Base64Encode, triple characters */
    104 PRBool test_003(void) {
    105  PRUint32 a, b, c, d, e, f;
    106  unsigned char plain[4];
    107  unsigned char cypher[5];
    108  char result[8];
    109  char* rv;
    110 
    111  printf(
    112      "Test 003 (PL_Base64Encode, triple characters)                         "
    113      "...");
    114  fflush(stdout);
    115 
    116  cypher[4] = (unsigned char)0;
    117 
    118  for (a = 0; a < 64; a++) {
    119    cypher[0] = base[a];
    120    for (b = 0; b < 4; b++) {
    121      plain[0] = (a * 4) + b;
    122      for (c = 0; c < 16; c++) {
    123        cypher[1] = base[b * 16 + c];
    124        for (d = 0; d < 16; d++) {
    125          plain[1] = c * 16 + d;
    126          for (e = 0; e < 4; e++) {
    127            cypher[2] = base[d * 4 + e];
    128            for (f = 0; f < 64; f++) {
    129              plain[2] = e * 64 + f;
    130              cypher[3] = base[f];
    131 
    132              rv = PL_Base64Encode((char*)plain, 3, result);
    133              if (rv != result) {
    134                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b,
    135                       c, d, e, f);
    136                return PR_FALSE;
    137              }
    138 
    139              if (0 != PL_strncmp((char*)cypher, result, 4)) {
    140                printf(
    141                    "FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
    142                    "\"%.4s.\"\n",
    143                    a, b, c, d, e, f, cypher, result);
    144                return PR_FALSE;
    145              }
    146            }
    147          }
    148        }
    149      }
    150    }
    151  }
    152 
    153  printf("PASS\n");
    154  return PR_TRUE;
    155 }
    156 
    157 static struct {
    158  const char* plaintext;
    159  const char* cyphertext;
    160 } array[] = {
    161    /* Cyphertexts generated with uuenview 0.5.13 */
    162    {" ", "IA=="},
    163    {".", "Lg=="},
    164    {"/", "Lw=="},
    165    {"C", "Qw=="},
    166    {"H", "SA=="},
    167    {"S", "Uw=="},
    168    {"^", "Xg=="},
    169    {"a", "YQ=="},
    170    {"o", "bw=="},
    171    {"t", "dA=="},
    172 
    173    {"AB", "QUI="},
    174    {"AH", "QUg="},
    175    {"AQ", "QVE="},
    176    {"BD", "QkQ="},
    177    {"CR", "Q1I="},
    178    {"CS", "Q1M="},
    179    {"DB", "REI="},
    180    {"DC", "REM="},
    181    {"EK", "RUs="},
    182    {"ET", "RVQ="},
    183    {"IM", "SU0="},
    184    {"JR", "SlI="},
    185    {"LO", "TE8="},
    186    {"LW", "TFc="},
    187    {"ML", "TUw="},
    188    {"SB", "U0I="},
    189    {"TO", "VE8="},
    190    {"VS", "VlM="},
    191    {"WP", "V1A="},
    192    /* legitimate two-letter words */
    193    {"ad", "YWQ="},
    194    {"ah", "YWg="},
    195    {"am", "YW0="},
    196    {"an", "YW4="},
    197    {"as", "YXM="},
    198    {"at", "YXQ="},
    199    {"ax", "YXg="},
    200    {"be", "YmU="},
    201    {"by", "Ynk="},
    202    {"do", "ZG8="},
    203    {"go", "Z28="},
    204    {"he", "aGU="},
    205    {"hi", "aGk="},
    206    {"if", "aWY="},
    207    {"in", "aW4="},
    208    {"is", "aXM="},
    209    {"it", "aXQ="},
    210    {"me", "bWU="},
    211    {"my", "bXk="},
    212    {"no", "bm8="},
    213    {"of", "b2Y="},
    214    {"on", "b24="},
    215    {"or", "b3I="},
    216    {"ox", "b3g="},
    217    {"so", "c28="},
    218    {"to", "dG8="},
    219    {"up", "dXA="},
    220    {"us", "dXM="},
    221    {"we", "d2U="},
    222    /* all three-letter entries in /usr/dict/words */
    223    {"1st", "MXN0"},
    224    {"2nd", "Mm5k"},
    225    {"3rd", "M3Jk"},
    226    {"4th", "NHRo"},
    227    {"5th", "NXRo"},
    228    {"6th", "NnRo"},
    229    {"7th", "N3Ro"},
    230    {"8th", "OHRo"},
    231    {"9th", "OXRo"},
    232    {"AAA", "QUFB"},
    233    {"AAU", "QUFV"},
    234    {"ABA", "QUJB"},
    235    {"abc", "YWJj"},
    236    {"Abe", "QWJl"},
    237    {"Abo", "QWJv"},
    238    {"ace", "YWNl"},
    239    {"ACM", "QUNN"},
    240    {"ACS", "QUNT"},
    241    {"act", "YWN0"},
    242    {"Ada", "QWRh"},
    243    {"add", "YWRk"},
    244    {"ado", "YWRv"},
    245    {"aft", "YWZ0"},
    246    {"age", "YWdl"},
    247    {"ago", "YWdv"},
    248    {"aid", "YWlk"},
    249    {"ail", "YWls"},
    250    {"aim", "YWlt"},
    251    {"air", "YWly"},
    252    {"ala", "YWxh"},
    253    {"alb", "YWxi"},
    254    {"ale", "YWxl"},
    255    {"Ali", "QWxp"},
    256    {"all", "YWxs"},
    257    {"alp", "YWxw"},
    258    {"A&M", "QSZN"},
    259    {"AMA", "QU1B"},
    260    {"ami", "YW1p"},
    261    {"amp", "YW1w"},
    262    {"Amy", "QW15"},
    263    {"amy", "YW15"},
    264    {"ana", "YW5h"},
    265    {"and", "YW5k"},
    266    {"ani", "YW5p"},
    267    {"Ann", "QW5u"},
    268    {"ant", "YW50"},
    269    {"any", "YW55"},
    270    {"A&P", "QSZQ"},
    271    {"ape", "YXBl"},
    272    {"Apr", "QXBy"},
    273    {"APS", "QVBT"},
    274    {"apt", "YXB0"},
    275    {"arc", "YXJj"},
    276    {"are", "YXJl"},
    277    {"ark", "YXJr"},
    278    {"arm", "YXJt"},
    279    {"art", "YXJ0"},
    280    {"a's", "YSdz"},
    281    {"ash", "YXNo"},
    282    {"ask", "YXNr"},
    283    {"ass", "YXNz"},
    284    {"ate", "YXRl"},
    285    {"Aug", "QXVn"},
    286    {"auk", "YXVr"},
    287    {"Ave", "QXZl"},
    288    {"awe", "YXdl"},
    289    {"awl", "YXds"},
    290    {"awn", "YXdu"},
    291    {"axe", "YXhl"},
    292    {"aye", "YXll"},
    293    {"bad", "YmFk"},
    294    {"bag", "YmFn"},
    295    {"bah", "YmFo"},
    296    {"bam", "YmFt"},
    297    {"ban", "YmFu"},
    298    {"bar", "YmFy"},
    299    {"bat", "YmF0"},
    300    {"bay", "YmF5"},
    301    {"bed", "YmVk"},
    302    {"bee", "YmVl"},
    303    {"beg", "YmVn"},
    304    {"bel", "YmVs"},
    305    {"Ben", "QmVu"},
    306    {"bet", "YmV0"},
    307    {"bey", "YmV5"},
    308    {"bib", "Ymli"},
    309    {"bid", "Ymlk"},
    310    {"big", "Ymln"},
    311    {"bin", "Ymlu"},
    312    {"bit", "Yml0"},
    313    {"biz", "Yml6"},
    314    {"BMW", "Qk1X"},
    315    {"boa", "Ym9h"},
    316    {"bob", "Ym9i"},
    317    {"bog", "Ym9n"},
    318    {"bon", "Ym9u"},
    319    {"boo", "Ym9v"},
    320    {"bop", "Ym9w"},
    321    {"bow", "Ym93"},
    322    {"box", "Ym94"},
    323    {"boy", "Ym95"},
    324    {"b's", "Yidz"},
    325    {"BTL", "QlRM"},
    326    {"BTU", "QlRV"},
    327    {"bub", "YnVi"},
    328    {"bud", "YnVk"},
    329    {"bug", "YnVn"},
    330    {"bum", "YnVt"},
    331    {"bun", "YnVu"},
    332    {"bus", "YnVz"},
    333    {"but", "YnV0"},
    334    {"buy", "YnV5"},
    335    {"bye", "Ynll"},
    336    {"cab", "Y2Fi"},
    337    {"Cal", "Q2Fs"},
    338    {"cam", "Y2Ft"},
    339    {"can", "Y2Fu"},
    340    {"cap", "Y2Fw"},
    341    {"car", "Y2Fy"},
    342    {"cat", "Y2F0"},
    343    {"caw", "Y2F3"},
    344    {"CBS", "Q0JT"},
    345    {"CDC", "Q0RD"},
    346    {"CEQ", "Q0VR"},
    347    {"chi", "Y2hp"},
    348    {"CIA", "Q0lB"},
    349    {"cit", "Y2l0"},
    350    {"cod", "Y29k"},
    351    {"cog", "Y29n"},
    352    {"col", "Y29s"},
    353    {"con", "Y29u"},
    354    {"coo", "Y29v"},
    355    {"cop", "Y29w"},
    356    {"cos", "Y29z"},
    357    {"cot", "Y290"},
    358    {"cow", "Y293"},
    359    {"cox", "Y294"},
    360    {"coy", "Y295"},
    361    {"CPA", "Q1BB"},
    362    {"cpu", "Y3B1"},
    363    {"CRT", "Q1JU"},
    364    {"cry", "Y3J5"},
    365    {"c's", "Yydz"},
    366    {"cub", "Y3Vi"},
    367    {"cud", "Y3Vk"},
    368    {"cue", "Y3Vl"},
    369    {"cup", "Y3Vw"},
    370    {"cur", "Y3Vy"},
    371    {"cut", "Y3V0"},
    372    {"dab", "ZGFi"},
    373    {"dad", "ZGFk"},
    374    {"dam", "ZGFt"},
    375    {"Dan", "RGFu"},
    376    {"Dar", "RGFy"},
    377    {"day", "ZGF5"},
    378    {"Dec", "RGVj"},
    379    {"Dee", "RGVl"},
    380    {"Del", "RGVs"},
    381    {"den", "ZGVu"},
    382    {"Des", "RGVz"},
    383    {"dew", "ZGV3"},
    384    {"dey", "ZGV5"},
    385    {"did", "ZGlk"},
    386    {"die", "ZGll"},
    387    {"dig", "ZGln"},
    388    {"dim", "ZGlt"},
    389    {"din", "ZGlu"},
    390    {"dip", "ZGlw"},
    391    {"Dis", "RGlz"},
    392    {"DNA", "RE5B"},
    393    {"DOD", "RE9E"},
    394    {"doe", "ZG9l"},
    395    {"dog", "ZG9n"},
    396    {"don", "ZG9u"},
    397    {"dot", "ZG90"},
    398    {"Dow", "RG93"},
    399    {"dry", "ZHJ5"},
    400    {"d's", "ZCdz"},
    401    {"dub", "ZHVi"},
    402    {"dud", "ZHVk"},
    403    {"due", "ZHVl"},
    404    {"dug", "ZHVn"},
    405    {"dun", "ZHVu"},
    406    {"dye", "ZHll"},
    407    {"ear", "ZWFy"},
    408    {"eat", "ZWF0"},
    409    {"ebb", "ZWJi"},
    410    {"EDT", "RURU"},
    411    {"eel", "ZWVs"},
    412    {"eft", "ZWZ0"},
    413    {"e.g", "ZS5n"},
    414    {"egg", "ZWdn"},
    415    {"ego", "ZWdv"},
    416    {"eke", "ZWtl"},
    417    {"Eli", "RWxp"},
    418    {"elk", "ZWxr"},
    419    {"ell", "ZWxs"},
    420    {"elm", "ZWxt"},
    421    {"Ely", "RWx5"},
    422    {"end", "ZW5k"},
    423    {"Eng", "RW5n"},
    424    {"EPA", "RVBB"},
    425    {"era", "ZXJh"},
    426    {"ere", "ZXJl"},
    427    {"erg", "ZXJn"},
    428    {"err", "ZXJy"},
    429    {"e's", "ZSdz"},
    430    {"EST", "RVNU"},
    431    {"eta", "ZXRh"},
    432    {"etc", "ZXRj"},
    433    {"Eva", "RXZh"},
    434    {"eve", "ZXZl"},
    435    {"ewe", "ZXdl"},
    436    {"eye", "ZXll"},
    437    {"FAA", "RkFB"},
    438    {"fad", "ZmFk"},
    439    {"fag", "ZmFn"},
    440    {"fan", "ZmFu"},
    441    {"far", "ZmFy"},
    442    {"fat", "ZmF0"},
    443    {"fay", "ZmF5"},
    444    {"FBI", "RkJJ"},
    445    {"FCC", "RkND"},
    446    {"FDA", "RkRB"},
    447    {"Feb", "RmVi"},
    448    {"fed", "ZmVk"},
    449    {"fee", "ZmVl"},
    450    {"few", "ZmV3"},
    451    {"fib", "Zmli"},
    452    {"fig", "Zmln"},
    453    {"fin", "Zmlu"},
    454    {"fir", "Zmly"},
    455    {"fit", "Zml0"},
    456    {"fix", "Zml4"},
    457    {"Flo", "Rmxv"},
    458    {"flu", "Zmx1"},
    459    {"fly", "Zmx5"},
    460    {"FMC", "Rk1D"},
    461    {"fob", "Zm9i"},
    462    {"foe", "Zm9l"},
    463    {"fog", "Zm9n"},
    464    {"fop", "Zm9w"},
    465    {"for", "Zm9y"},
    466    {"fox", "Zm94"},
    467    {"FPC", "RlBD"},
    468    {"fro", "ZnJv"},
    469    {"fry", "ZnJ5"},
    470    {"f's", "Zidz"},
    471    {"FTC", "RlRD"},
    472    {"fum", "ZnVt"},
    473    {"fun", "ZnVu"},
    474    {"fur", "ZnVy"},
    475    {"gab", "Z2Fi"},
    476    {"gad", "Z2Fk"},
    477    {"gag", "Z2Fn"},
    478    {"gal", "Z2Fs"},
    479    {"gam", "Z2Ft"},
    480    {"GAO", "R0FP"},
    481    {"gap", "Z2Fw"},
    482    {"gar", "Z2Fy"},
    483    {"gas", "Z2Fz"},
    484    {"gay", "Z2F5"},
    485    {"gee", "Z2Vl"},
    486    {"gel", "Z2Vs"},
    487    {"gem", "Z2Vt"},
    488    {"get", "Z2V0"},
    489    {"gig", "Z2ln"},
    490    {"Gil", "R2ls"},
    491    {"gin", "Z2lu"},
    492    {"GMT", "R01U"},
    493    {"GNP", "R05Q"},
    494    {"gnu", "Z251"},
    495    {"Goa", "R29h"},
    496    {"gob", "Z29i"},
    497    {"god", "Z29k"},
    498    {"gog", "Z29n"},
    499    {"GOP", "R09Q"},
    500    {"got", "Z290"},
    501    {"GPO", "R1BP"},
    502    {"g's", "Zydz"},
    503    {"GSA", "R1NB"},
    504    {"gum", "Z3Vt"},
    505    {"gun", "Z3Vu"},
    506    {"Gus", "R3Vz"},
    507    {"gut", "Z3V0"},
    508    {"guy", "Z3V5"},
    509    {"gym", "Z3lt"},
    510    {"gyp", "Z3lw"},
    511    {"had", "aGFk"},
    512    {"Hal", "SGFs"},
    513    {"ham", "aGFt"},
    514    {"Han", "SGFu"},
    515    {"hap", "aGFw"},
    516    {"hat", "aGF0"},
    517    {"haw", "aGF3"},
    518    {"hay", "aGF5"},
    519    {"hem", "aGVt"},
    520    {"hen", "aGVu"},
    521    {"her", "aGVy"},
    522    {"hew", "aGV3"},
    523    {"hex", "aGV4"},
    524    {"hey", "aGV5"},
    525    {"hid", "aGlk"},
    526    {"him", "aGlt"},
    527    {"hip", "aGlw"},
    528    {"his", "aGlz"},
    529    {"hit", "aGl0"},
    530    {"hob", "aG9i"},
    531    {"hoc", "aG9j"},
    532    {"hoe", "aG9l"},
    533    {"hog", "aG9n"},
    534    {"hoi", "aG9p"},
    535    {"Hom", "SG9t"},
    536    {"hop", "aG9w"},
    537    {"hot", "aG90"},
    538    {"how", "aG93"},
    539    {"hoy", "aG95"},
    540    {"h's", "aCdz"},
    541    {"hub", "aHVi"},
    542    {"hue", "aHVl"},
    543    {"hug", "aHVn"},
    544    {"huh", "aHVo"},
    545    {"hum", "aHVt"},
    546    {"Hun", "SHVu"},
    547    {"hut", "aHV0"},
    548    {"Ian", "SWFu"},
    549    {"IBM", "SUJN"},
    550    {"Ibn", "SWJu"},
    551    {"ICC", "SUND"},
    552    {"ice", "aWNl"},
    553    {"icy", "aWN5"},
    554    {"I'd", "SSdk"},
    555    {"Ida", "SWRh"},
    556    {"i.e", "aS5l"},
    557    {"iii", "aWlp"},
    558    {"Ike", "SWtl"},
    559    {"ill", "aWxs"},
    560    {"I'm", "SSdt"},
    561    {"imp", "aW1w"},
    562    {"Inc", "SW5j"},
    563    {"ink", "aW5r"},
    564    {"inn", "aW5u"},
    565    {"ion", "aW9u"},
    566    {"Ira", "SXJh"},
    567    {"ire", "aXJl"},
    568    {"irk", "aXJr"},
    569    {"IRS", "SVJT"},
    570    {"i's", "aSdz"},
    571    {"Ito", "SXRv"},
    572    {"ITT", "SVRU"},
    573    {"ivy", "aXZ5"},
    574    {"jab", "amFi"},
    575    {"jag", "amFn"},
    576    {"jam", "amFt"},
    577    {"Jan", "SmFu"},
    578    {"jar", "amFy"},
    579    {"jaw", "amF3"},
    580    {"jay", "amF5"},
    581    {"Jed", "SmVk"},
    582    {"jet", "amV0"},
    583    {"Jew", "SmV3"},
    584    {"jig", "amln"},
    585    {"Jim", "Smlt"},
    586    {"job", "am9i"},
    587    {"Joe", "Sm9l"},
    588    {"jog", "am9n"},
    589    {"Jon", "Sm9u"},
    590    {"jot", "am90"},
    591    {"joy", "am95"},
    592    {"j's", "aidz"},
    593    {"jug", "anVn"},
    594    {"jut", "anV0"},
    595    {"Kay", "S2F5"},
    596    {"keg", "a2Vn"},
    597    {"ken", "a2Vu"},
    598    {"key", "a2V5"},
    599    {"kid", "a2lk"},
    600    {"Kim", "S2lt"},
    601    {"kin", "a2lu"},
    602    {"kit", "a2l0"},
    603    {"k's", "aydz"},
    604    {"lab", "bGFi"},
    605    {"lac", "bGFj"},
    606    {"lad", "bGFk"},
    607    {"lag", "bGFn"},
    608    {"lam", "bGFt"},
    609    {"Lao", "TGFv"},
    610    {"lap", "bGFw"},
    611    {"law", "bGF3"},
    612    {"lax", "bGF4"},
    613    {"lay", "bGF5"},
    614    {"lea", "bGVh"},
    615    {"led", "bGVk"},
    616    {"lee", "bGVl"},
    617    {"leg", "bGVn"},
    618    {"Len", "TGVu"},
    619    {"Leo", "TGVv"},
    620    {"let", "bGV0"},
    621    {"Lev", "TGV2"},
    622    {"Lew", "TGV3"},
    623    {"lew", "bGV3"},
    624    {"lid", "bGlk"},
    625    {"lie", "bGll"},
    626    {"lim", "bGlt"},
    627    {"Lin", "TGlu"},
    628    {"lip", "bGlw"},
    629    {"lit", "bGl0"},
    630    {"Liz", "TGl6"},
    631    {"lob", "bG9i"},
    632    {"log", "bG9n"},
    633    {"lop", "bG9w"},
    634    {"Los", "TG9z"},
    635    {"lot", "bG90"},
    636    {"Lou", "TG91"},
    637    {"low", "bG93"},
    638    {"loy", "bG95"},
    639    {"l's", "bCdz"},
    640    {"LSI", "TFNJ"},
    641    {"Ltd", "THRk"},
    642    {"LTV", "TFRW"},
    643    {"lug", "bHVn"},
    644    {"lux", "bHV4"},
    645    {"lye", "bHll"},
    646    {"Mac", "TWFj"},
    647    {"mad", "bWFk"},
    648    {"Mae", "TWFl"},
    649    {"man", "bWFu"},
    650    {"Mao", "TWFv"},
    651    {"map", "bWFw"},
    652    {"mar", "bWFy"},
    653    {"mat", "bWF0"},
    654    {"maw", "bWF3"},
    655    {"Max", "TWF4"},
    656    {"max", "bWF4"},
    657    {"may", "bWF5"},
    658    {"MBA", "TUJB"},
    659    {"Meg", "TWVn"},
    660    {"Mel", "TWVs"},
    661    {"men", "bWVu"},
    662    {"met", "bWV0"},
    663    {"mew", "bWV3"},
    664    {"mid", "bWlk"},
    665    {"mig", "bWln"},
    666    {"min", "bWlu"},
    667    {"MIT", "TUlU"},
    668    {"mix", "bWl4"},
    669    {"mob", "bW9i"},
    670    {"Moe", "TW9l"},
    671    {"moo", "bW9v"},
    672    {"mop", "bW9w"},
    673    {"mot", "bW90"},
    674    {"mow", "bW93"},
    675    {"MPH", "TVBI"},
    676    {"Mrs", "TXJz"},
    677    {"m's", "bSdz"},
    678    {"mud", "bXVk"},
    679    {"mug", "bXVn"},
    680    {"mum", "bXVt"},
    681    {"nab", "bmFi"},
    682    {"nag", "bmFn"},
    683    {"Nan", "TmFu"},
    684    {"nap", "bmFw"},
    685    {"Nat", "TmF0"},
    686    {"nay", "bmF5"},
    687    {"NBC", "TkJD"},
    688    {"NBS", "TkJT"},
    689    {"NCO", "TkNP"},
    690    {"NCR", "TkNS"},
    691    {"Ned", "TmVk"},
    692    {"nee", "bmVl"},
    693    {"net", "bmV0"},
    694    {"new", "bmV3"},
    695    {"nib", "bmli"},
    696    {"NIH", "TklI"},
    697    {"nil", "bmls"},
    698    {"nip", "bmlw"},
    699    {"nit", "bml0"},
    700    {"NNE", "Tk5F"},
    701    {"NNW", "Tk5X"},
    702    {"nob", "bm9i"},
    703    {"nod", "bm9k"},
    704    {"non", "bm9u"},
    705    {"nor", "bm9y"},
    706    {"not", "bm90"},
    707    {"Nov", "Tm92"},
    708    {"now", "bm93"},
    709    {"NRC", "TlJD"},
    710    {"n's", "bidz"},
    711    {"NSF", "TlNG"},
    712    {"nun", "bnVu"},
    713    {"nut", "bnV0"},
    714    {"NYC", "TllD"},
    715    {"NYU", "TllV"},
    716    {"oaf", "b2Fm"},
    717    {"oak", "b2Fr"},
    718    {"oar", "b2Fy"},
    719    {"oat", "b2F0"},
    720    {"Oct", "T2N0"},
    721    {"odd", "b2Rk"},
    722    {"ode", "b2Rl"},
    723    {"off", "b2Zm"},
    724    {"oft", "b2Z0"},
    725    {"ohm", "b2ht"},
    726    {"oil", "b2ls"},
    727    {"old", "b2xk"},
    728    {"one", "b25l"},
    729    {"opt", "b3B0"},
    730    {"orb", "b3Ji"},
    731    {"ore", "b3Jl"},
    732    {"Orr", "T3Jy"},
    733    {"o's", "bydz"},
    734    {"Ott", "T3R0"},
    735    {"our", "b3Vy"},
    736    {"out", "b3V0"},
    737    {"ova", "b3Zh"},
    738    {"owe", "b3dl"},
    739    {"owl", "b3ds"},
    740    {"own", "b3du"},
    741    {"pad", "cGFk"},
    742    {"pal", "cGFs"},
    743    {"Pam", "UGFt"},
    744    {"pan", "cGFu"},
    745    {"pap", "cGFw"},
    746    {"par", "cGFy"},
    747    {"pat", "cGF0"},
    748    {"paw", "cGF3"},
    749    {"pax", "cGF4"},
    750    {"pay", "cGF5"},
    751    {"Paz", "UGF6"},
    752    {"PBS", "UEJT"},
    753    {"PDP", "UERQ"},
    754    {"pea", "cGVh"},
    755    {"pee", "cGVl"},
    756    {"peg", "cGVn"},
    757    {"pen", "cGVu"},
    758    {"pep", "cGVw"},
    759    {"per", "cGVy"},
    760    {"pet", "cGV0"},
    761    {"pew", "cGV3"},
    762    {"PhD", "UGhE"},
    763    {"phi", "cGhp"},
    764    {"pie", "cGll"},
    765    {"pig", "cGln"},
    766    {"pin", "cGlu"},
    767    {"pip", "cGlw"},
    768    {"pit", "cGl0"},
    769    {"ply", "cGx5"},
    770    {"pod", "cG9k"},
    771    {"Poe", "UG9l"},
    772    {"poi", "cG9p"},
    773    {"pol", "cG9s"},
    774    {"pop", "cG9w"},
    775    {"pot", "cG90"},
    776    {"pow", "cG93"},
    777    {"ppm", "cHBt"},
    778    {"pro", "cHJv"},
    779    {"pry", "cHJ5"},
    780    {"p's", "cCdz"},
    781    {"psi", "cHNp"},
    782    {"PTA", "UFRB"},
    783    {"pub", "cHVi"},
    784    {"PUC", "UFVD"},
    785    {"pug", "cHVn"},
    786    {"pun", "cHVu"},
    787    {"pup", "cHVw"},
    788    {"pus", "cHVz"},
    789    {"put", "cHV0"},
    790    {"PVC", "UFZD"},
    791    {"QED", "UUVE"},
    792    {"q's", "cSdz"},
    793    {"qua", "cXVh"},
    794    {"quo", "cXVv"},
    795    {"Rae", "UmFl"},
    796    {"rag", "cmFn"},
    797    {"raj", "cmFq"},
    798    {"ram", "cmFt"},
    799    {"ran", "cmFu"},
    800    {"rap", "cmFw"},
    801    {"rat", "cmF0"},
    802    {"raw", "cmF3"},
    803    {"ray", "cmF5"},
    804    {"RCA", "UkNB"},
    805    {"R&D", "UiZE"},
    806    {"reb", "cmVi"},
    807    {"red", "cmVk"},
    808    {"rep", "cmVw"},
    809    {"ret", "cmV0"},
    810    {"rev", "cmV2"},
    811    {"Rex", "UmV4"},
    812    {"rho", "cmhv"},
    813    {"rib", "cmli"},
    814    {"rid", "cmlk"},
    815    {"rig", "cmln"},
    816    {"rim", "cmlt"},
    817    {"Rio", "Umlv"},
    818    {"rip", "cmlw"},
    819    {"RNA", "Uk5B"},
    820    {"rob", "cm9i"},
    821    {"rod", "cm9k"},
    822    {"roe", "cm9l"},
    823    {"Ron", "Um9u"},
    824    {"rot", "cm90"},
    825    {"row", "cm93"},
    826    {"Roy", "Um95"},
    827    {"RPM", "UlBN"},
    828    {"r's", "cidz"},
    829    {"rub", "cnVi"},
    830    {"rue", "cnVl"},
    831    {"rug", "cnVn"},
    832    {"rum", "cnVt"},
    833    {"run", "cnVu"},
    834    {"rut", "cnV0"},
    835    {"rye", "cnll"},
    836    {"sac", "c2Fj"},
    837    {"sad", "c2Fk"},
    838    {"sag", "c2Fn"},
    839    {"Sal", "U2Fs"},
    840    {"Sam", "U2Ft"},
    841    {"San", "U2Fu"},
    842    {"Sao", "U2Fv"},
    843    {"sap", "c2Fw"},
    844    {"sat", "c2F0"},
    845    {"saw", "c2F3"},
    846    {"sax", "c2F4"},
    847    {"say", "c2F5"},
    848    {"Sci", "U2Np"},
    849    {"SCM", "U0NN"},
    850    {"sea", "c2Vh"},
    851    {"sec", "c2Vj"},
    852    {"see", "c2Vl"},
    853    {"sen", "c2Vu"},
    854    {"seq", "c2Vx"},
    855    {"set", "c2V0"},
    856    {"sew", "c2V3"},
    857    {"sex", "c2V4"},
    858    {"she", "c2hl"},
    859    {"Shu", "U2h1"},
    860    {"shy", "c2h5"},
    861    {"sib", "c2li"},
    862    {"sic", "c2lj"},
    863    {"sin", "c2lu"},
    864    {"sip", "c2lw"},
    865    {"sir", "c2ly"},
    866    {"sis", "c2lz"},
    867    {"sit", "c2l0"},
    868    {"six", "c2l4"},
    869    {"ski", "c2tp"},
    870    {"sky", "c2t5"},
    871    {"sly", "c2x5"},
    872    {"sob", "c29i"},
    873    {"Soc", "U29j"},
    874    {"sod", "c29k"},
    875    {"Sol", "U29s"},
    876    {"son", "c29u"},
    877    {"sop", "c29w"},
    878    {"sou", "c291"},
    879    {"sow", "c293"},
    880    {"soy", "c295"},
    881    {"spa", "c3Bh"},
    882    {"spy", "c3B5"},
    883    {"Sri", "U3Jp"},
    884    {"s's", "cydz"},
    885    {"SSE", "U1NF"},
    886    {"SST", "U1NU"},
    887    {"SSW", "U1NX"},
    888    {"Stu", "U3R1"},
    889    {"sub", "c3Vi"},
    890    {"sud", "c3Vk"},
    891    {"sue", "c3Vl"},
    892    {"sum", "c3Vt"},
    893    {"sun", "c3Vu"},
    894    {"sup", "c3Vw"},
    895    {"Sus", "U3Vz"},
    896    {"tab", "dGFi"},
    897    {"tad", "dGFk"},
    898    {"tag", "dGFn"},
    899    {"tam", "dGFt"},
    900    {"tan", "dGFu"},
    901    {"tao", "dGFv"},
    902    {"tap", "dGFw"},
    903    {"tar", "dGFy"},
    904    {"tat", "dGF0"},
    905    {"tau", "dGF1"},
    906    {"tax", "dGF4"},
    907    {"tea", "dGVh"},
    908    {"Ted", "VGVk"},
    909    {"ted", "dGVk"},
    910    {"tee", "dGVl"},
    911    {"Tel", "VGVs"},
    912    {"ten", "dGVu"},
    913    {"the", "dGhl"},
    914    {"thy", "dGh5"},
    915    {"tic", "dGlj"},
    916    {"tid", "dGlk"},
    917    {"tie", "dGll"},
    918    {"til", "dGls"},
    919    {"Tim", "VGlt"},
    920    {"tin", "dGlu"},
    921    {"tip", "dGlw"},
    922    {"tit", "dGl0"},
    923    {"TNT", "VE5U"},
    924    {"toe", "dG9l"},
    925    {"tog", "dG9n"},
    926    {"Tom", "VG9t"},
    927    {"ton", "dG9u"},
    928    {"too", "dG9v"},
    929    {"top", "dG9w"},
    930    {"tor", "dG9y"},
    931    {"tot", "dG90"},
    932    {"tow", "dG93"},
    933    {"toy", "dG95"},
    934    {"TRW", "VFJX"},
    935    {"try", "dHJ5"},
    936    {"t's", "dCdz"},
    937    {"TTL", "VFRM"},
    938    {"TTY", "VFRZ"},
    939    {"tub", "dHVi"},
    940    {"tug", "dHVn"},
    941    {"tum", "dHVt"},
    942    {"tun", "dHVu"},
    943    {"TVA", "VFZB"},
    944    {"TWA", "VFdB"},
    945    {"two", "dHdv"},
    946    {"TWX", "VFdY"},
    947    {"ugh", "dWdo"},
    948    {"UHF", "VUhG"},
    949    {"Uri", "VXJp"},
    950    {"urn", "dXJu"},
    951    {"U.S", "VS5T"},
    952    {"u's", "dSdz"},
    953    {"USA", "VVNB"},
    954    {"USC", "VVND"},
    955    {"use", "dXNl"},
    956    {"USN", "VVNO"},
    957    {"van", "dmFu"},
    958    {"vat", "dmF0"},
    959    {"vee", "dmVl"},
    960    {"vet", "dmV0"},
    961    {"vex", "dmV4"},
    962    {"VHF", "VkhG"},
    963    {"via", "dmlh"},
    964    {"vie", "dmll"},
    965    {"vii", "dmlp"},
    966    {"vis", "dmlz"},
    967    {"viz", "dml6"},
    968    {"von", "dm9u"},
    969    {"vow", "dm93"},
    970    {"v's", "didz"},
    971    {"WAC", "V0FD"},
    972    {"wad", "d2Fk"},
    973    {"wag", "d2Fn"},
    974    {"wah", "d2Fo"},
    975    {"wan", "d2Fu"},
    976    {"war", "d2Fy"},
    977    {"was", "d2Fz"},
    978    {"wax", "d2F4"},
    979    {"way", "d2F5"},
    980    {"web", "d2Vi"},
    981    {"wed", "d2Vk"},
    982    {"wee", "d2Vl"},
    983    {"Wei", "V2Vp"},
    984    {"wet", "d2V0"},
    985    {"who", "d2hv"},
    986    {"why", "d2h5"},
    987    {"wig", "d2ln"},
    988    {"win", "d2lu"},
    989    {"wit", "d2l0"},
    990    {"woe", "d29l"},
    991    {"wok", "d29r"},
    992    {"won", "d29u"},
    993    {"woo", "d29v"},
    994    {"wop", "d29w"},
    995    {"wow", "d293"},
    996    {"wry", "d3J5"},
    997    {"w's", "dydz"},
    998    {"x's", "eCdz"},
    999    {"yah", "eWFo"},
   1000    {"yak", "eWFr"},
   1001    {"yam", "eWFt"},
   1002    {"yap", "eWFw"},
   1003    {"yaw", "eWF3"},
   1004    {"yea", "eWVh"},
   1005    {"yen", "eWVu"},
   1006    {"yet", "eWV0"},
   1007    {"yin", "eWlu"},
   1008    {"yip", "eWlw"},
   1009    {"yon", "eW9u"},
   1010    {"you", "eW91"},
   1011    {"yow", "eW93"},
   1012    {"y's", "eSdz"},
   1013    {"yuh", "eXVo"},
   1014    {"zag", "emFn"},
   1015    {"Zan", "WmFu"},
   1016    {"zap", "emFw"},
   1017    {"Zen", "WmVu"},
   1018    {"zig", "emln"},
   1019    {"zip", "emlw"},
   1020    {"Zoe", "Wm9l"},
   1021    {"zoo", "em9v"},
   1022    {"z's", "eidz"},
   1023    /* the false rumors file */
   1024    {"\"So when I die, the first thing I will see in heaven is a score list?\"",
   1025     "IlNvIHdoZW4gSSBkaWUsIHRoZSBmaXJzdCB0aGluZyBJIHdpbGwgc2VlIGluIGhlYXZlbiBpc"
   1026     "yBhIHNjb3JlIGxpc3Q/Ig=="},
   1027    {"1st Law of Hacking: leaving is much more difficult than entering.",
   1028     "MXN0IExhdyBvZiBIYWNraW5nOiBsZWF2aW5nIGlzIG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhb"
   1029     "iBlbnRlcmluZy4="},
   1030    {"2nd Law of Hacking: first in, first out.",
   1031     "Mm5kIExhdyBvZiBIYWNraW5nOiBmaXJzdCBpbiwgZmlyc3Qgb3V0Lg=="},
   1032    {"3rd Law of Hacking: the last blow counts most.",
   1033     "M3JkIExhdyBvZiBIYWNraW5nOiB0aGUgbGFzdCBibG93IGNvdW50cyBtb3N0Lg=="},
   1034    {"4th Law of Hacking: you will find the exit at the entrance.",
   1035     "NHRoIExhdyBvZiBIYWNraW5nOiB5b3Ugd2lsbCBmaW5kIHRoZSBleGl0IGF0IHRoZSBlbnRyY"
   1036     "W5jZS4="},
   1037    {"A chameleon imitating a mail daemon often delivers scrolls of fire.",
   1038     "QSBjaGFtZWxlb24gaW1pdGF0aW5nIGEgbWFpbCBkYWVtb24gb2Z0ZW4gZGVsaXZlcnMgc2Nyb"
   1039     "2xscyBvZiBmaXJlLg=="},
   1040    {"A cockatrice corpse is guaranteed to be untainted!",
   1041     "QSBjb2NrYXRyaWNlIGNvcnBzZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVudGFpbnRlZCE="},
   1042    {"A dead cockatrice is just a dead lizard.",
   1043     "QSBkZWFkIGNvY2thdHJpY2UgaXMganVzdCBhIGRlYWQgbGl6YXJkLg=="},
   1044    {"A dragon is just a snake that ate a scroll of fire.",
   1045     "QSBkcmFnb24gaXMganVzdCBhIHNuYWtlIHRoYXQgYXRlIGEgc2Nyb2xsIG9mIGZpcmUu"},
   1046    {"A fading corridor enlightens your insight.",
   1047     "QSBmYWRpbmcgY29ycmlkb3IgZW5saWdodGVucyB5b3VyIGluc2lnaHQu"},
   1048    {"A glowing potion is too hot to drink.",
   1049     "QSBnbG93aW5nIHBvdGlvbiBpcyB0b28gaG90IHRvIGRyaW5rLg=="},
   1050    {"A good amulet may protect you against guards.",
   1051     "QSBnb29kIGFtdWxldCBtYXkgcHJvdGVjdCB5b3UgYWdhaW5zdCBndWFyZHMu"},
   1052    {"A lizard corpse is a good thing to turn undead.",
   1053     "QSBsaXphcmQgY29ycHNlIGlzIGEgZ29vZCB0aGluZyB0byB0dXJuIHVuZGVhZC4="},
   1054    {"A long worm can be defined recursively. So how should you attack it?",
   1055     "QSBsb25nIHdvcm0gY2FuIGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuIFNvIGhvdyBzaG91bGQge"
   1056     "W91IGF0dGFjayBpdD8="},
   1057    {"A monstrous mind is a toy forever.",
   1058     "QSBtb25zdHJvdXMgbWluZCBpcyBhIHRveSBmb3JldmVyLg=="},
   1059    {"A nymph will be very pleased if you call her by her real name: Lorelei.",
   1060     "QSBueW1waCB3aWxsIGJlIHZlcnkgcGxlYXNlZCBpZiB5b3UgY2FsbCBoZXIgYnkgaGVyIHJlY"
   1061     "WwgbmFtZTogTG9yZWxlaS4="},
   1062    {"A ring of dungeon master control is a great find.",
   1063     "QSByaW5nIG9mIGR1bmdlb24gbWFzdGVyIGNvbnRyb2wgaXMgYSBncmVhdCBmaW5kLg=="},
   1064    {"A ring of extra ring finger is useless if not enchanted.",
   1065     "QSByaW5nIG9mIGV4dHJhIHJpbmcgZmluZ2VyIGlzIHVzZWxlc3MgaWYgbm90IGVuY2hhbnRlZ"
   1066     "C4="},
   1067    {"A rope may form a trail in a maze.",
   1068     "QSByb3BlIG1heSBmb3JtIGEgdHJhaWwgaW4gYSBtYXplLg=="},
   1069    {"A staff may recharge if you drop it for awhile.",
   1070     "QSBzdGFmZiBtYXkgcmVjaGFyZ2UgaWYgeW91IGRyb3AgaXQgZm9yIGF3aGlsZS4="},
   1071    {"A visit to the Zoo is very educational; you meet interesting animals.",
   1072     "QSB2aXNpdCB0byB0aGUgWm9vIGlzIHZlcnkgZWR1Y2F0aW9uYWw7IHlvdSBtZWV0IGludGVyZ"
   1073     "XN0aW5nIGFuaW1hbHMu"},
   1074    {"A wand of deaf is a more dangerous weapon than a wand of sheep.",
   1075     "QSB3YW5kIG9mIGRlYWYgaXMgYSBtb3JlIGRhbmdlcm91cyB3ZWFwb24gdGhhbiBhIHdhbmQgb"
   1076     "2Ygc2hlZXAu"},
   1077    {"A wand of vibration might bring the whole cave crashing about your ears.",
   1078     "QSB3YW5kIG9mIHZpYnJhdGlvbiBtaWdodCBicmluZyB0aGUgd2hvbGUgY2F2ZSBjcmFzaGluZ"
   1079     "yBhYm91dCB5b3VyIGVhcnMu"},
   1080    {"A winner never quits. A quitter never wins.",
   1081     "QSB3aW5uZXIgbmV2ZXIgcXVpdHMuIEEgcXVpdHRlciBuZXZlciB3aW5zLg=="},
   1082    {"A wish? Okay, make me a fortune cookie!",
   1083     "QSB3aXNoPyBPa2F5LCBtYWtlIG1lIGEgZm9ydHVuZSBjb29raWUh"},
   1084    {"Afraid of mimics? Try to wear a ring of true seeing.",
   1085     "QWZyYWlkIG9mIG1pbWljcz8gVHJ5IHRvIHdlYXIgYSByaW5nIG9mIHRydWUgc2VlaW5nLg="
   1086     "="},
   1087    {"All monsters are created evil, but some are more evil than others.",
   1088     "QWxsIG1vbnN0ZXJzIGFyZSBjcmVhdGVkIGV2aWwsIGJ1dCBzb21lIGFyZSBtb3JlIGV2aWwgd"
   1089     "GhhbiBvdGhlcnMu"},
   1090    {"Always attack a floating eye from behind!",
   1091     "QWx3YXlzIGF0dGFjayBhIGZsb2F0aW5nIGV5ZSBmcm9tIGJlaGluZCE="},
   1092    {"An elven cloak is always the height of fashion.",
   1093     "QW4gZWx2ZW4gY2xvYWsgaXMgYWx3YXlzIHRoZSBoZWlnaHQgb2YgZmFzaGlvbi4="},
   1094    {"Any small object that is accidentally dropped will hide under a larger "
   1095     "object.",
   1096     "QW55IHNtYWxsIG9iamVjdCB0aGF0IGlzIGFjY2lkZW50YWxseSBkcm9wcGVkIHdpbGwgaGlkZ"
   1097     "SB1bmRlciBhIGxhcmdlciBvYmplY3Qu"},
   1098    {"Balrogs do not appear above level 20.",
   1099     "QmFscm9ncyBkbyBub3QgYXBwZWFyIGFib3ZlIGxldmVsIDIwLg=="},
   1100    {"Banana peels work especially well against Keystone Kops.",
   1101     "QmFuYW5hIHBlZWxzIHdvcmsgZXNwZWNpYWxseSB3ZWxsIGFnYWluc3QgS2V5c3RvbmUgS29wc"
   1102     "y4="},
   1103    {"Be careful when eating bananas. Monsters might slip on the peels.",
   1104     "QmUgY2FyZWZ1bCB3aGVuIGVhdGluZyBiYW5hbmFzLiBNb25zdGVycyBtaWdodCBzbGlwIG9uI"
   1105     "HRoZSBwZWVscy4="},
   1106    {"Better leave the dungeon; otherwise you might get hurt badly.",
   1107     "QmV0dGVyIGxlYXZlIHRoZSBkdW5nZW9uOyBvdGhlcndpc2UgeW91IG1pZ2h0IGdldCBodXJ0I"
   1108     "GJhZGx5Lg=="},
   1109    {"Beware of the potion of nitroglycerin -- it's not for the weak of heart.",
   1110     "QmV3YXJlIG9mIHRoZSBwb3Rpb24gb2Ygbml0cm9nbHljZXJpbiAtLSBpdCdzIG5vdCBmb3Igd"
   1111     "GhlIHdlYWsgb2YgaGVhcnQu"},
   1112    {"Beware: there's always a chance that your wand explodes as you try to "
   1113     "zap it!",
   1114     "QmV3YXJlOiB0aGVyZSdzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHlvdXIgd2FuZCBleHBsb2Rlc"
   1115     "yBhcyB5b3UgdHJ5IHRvIHphcCBpdCE="},
   1116    {"Beyond the 23rd level lies a happy retirement in a room of your own.",
   1117     "QmV5b25kIHRoZSAyM3JkIGxldmVsIGxpZXMgYSBoYXBweSByZXRpcmVtZW50IGluIGEgcm9vb"
   1118     "SBvZiB5b3VyIG93bi4="},
   1119    {"Changing your suit without dropping your sword? You must be kidding!",
   1120     "Q2hhbmdpbmcgeW91ciBzdWl0IHdpdGhvdXQgZHJvcHBpbmcgeW91ciBzd29yZD8gWW91IG11c"
   1121     "3QgYmUga2lkZGluZyE="},
   1122    {"Cockatrices might turn themselves to stone faced with a mirror.",
   1123     "Q29ja2F0cmljZXMgbWlnaHQgdHVybiB0aGVtc2VsdmVzIHRvIHN0b25lIGZhY2VkIHdpdGggY"
   1124     "SBtaXJyb3Iu"},
   1125    {"Consumption of home-made food is strictly forbidden in this dungeon.",
   1126     "Q29uc3VtcHRpb24gb2YgaG9tZS1tYWRlIGZvb2QgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIGluI"
   1127     "HRoaXMgZHVuZ2Vvbi4="},
   1128    {"Dark room? Your chance to develop your photographs!",
   1129     "RGFyayByb29tPyBZb3VyIGNoYW5jZSB0byBkZXZlbG9wIHlvdXIgcGhvdG9ncmFwaHMh"},
   1130    {"Dark rooms are not *completely* dark: just wait and let your eyes "
   1131     "adjust...",
   1132     "RGFyayByb29tcyBhcmUgbm90ICpjb21wbGV0ZWx5KiBkYXJrOiBqdXN0IHdhaXQgYW5kIGxld"
   1133     "CB5b3VyIGV5ZXMgYWRqdXN0Li4u"},
   1134    {"David London sez, \"Hey guys, *WIELD* a lizard corpse against a "
   1135     "cockatrice!\"",
   1136     "RGF2aWQgTG9uZG9uIHNleiwgIkhleSBndXlzLCAqV0lFTEQqIGEgbGl6YXJkIGNvcnBzZSBhZ"
   1137     "2FpbnN0IGEgY29ja2F0cmljZSEi"},
   1138    {"Death is just life's way of telling you you've been fired.",
   1139     "RGVhdGggaXMganVzdCBsaWZlJ3Mgd2F5IG9mIHRlbGxpbmcgeW91IHlvdSd2ZSBiZWVuIGZpc"
   1140     "mVkLg=="},
   1141    {"Demi-gods don't need any help from the gods.",
   1142     "RGVtaS1nb2RzIGRvbid0IG5lZWQgYW55IGhlbHAgZnJvbSB0aGUgZ29kcy4="},
   1143    {"Demons *HATE* Priests and Priestesses.",
   1144     "RGVtb25zICpIQVRFKiBQcmllc3RzIGFuZCBQcmllc3Rlc3Nlcy4="},
   1145    {"Didn't you forget to pay?", "RGlkbid0IHlvdSBmb3JnZXQgdG8gcGF5Pw=="},
   1146    {"Didn't your mother tell you not to eat food off the floor?",
   1147     "RGlkbid0IHlvdXIgbW90aGVyIHRlbGwgeW91IG5vdCB0byBlYXQgZm9vZCBvZmYgdGhlIGZsb"
   1148     "29yPw=="},
   1149    {"Direct a direct hit on your direct opponent, directing in the right "
   1150     "direction.",
   1151     "RGlyZWN0IGEgZGlyZWN0IGhpdCBvbiB5b3VyIGRpcmVjdCBvcHBvbmVudCwgZGlyZWN0aW5nI"
   1152     "GluIHRoZSByaWdodCBkaXJlY3Rpb24u"},
   1153    {"Do you want to make more money? Sure, we all do! Join the Fort Ludios "
   1154     "guard!",
   1155     "RG8geW91IHdhbnQgdG8gbWFrZSBtb3JlIG1vbmV5PyBTdXJlLCB3ZSBhbGwgZG8hIEpvaW4gd"
   1156     "GhlIEZvcnQgTHVkaW9zIGd1YXJkIQ=="},
   1157    {"Don't eat too much: you might start hiccoughing!",
   1158     "RG9uJ3QgZWF0IHRvbyBtdWNoOiB5b3UgbWlnaHQgc3RhcnQgaGljY291Z2hpbmch"},
   1159    {"Don't play hack at your work; your boss might hit you!",
   1160     "RG9uJ3QgcGxheSBoYWNrIGF0IHlvdXIgd29yazsgeW91ciBib3NzIG1pZ2h0IGhpdCB5b3U"
   1161     "h"},
   1162    {"Don't tell a soul you found a secret door, otherwise it isn't a secret "
   1163     "anymore.",
   1164     "RG9uJ3QgdGVsbCBhIHNvdWwgeW91IGZvdW5kIGEgc2VjcmV0IGRvb3IsIG90aGVyd2lzZSBpd"
   1165     "CBpc24ndCBhIHNlY3JldCBhbnltb3JlLg=="},
   1166    {"Drinking potions of booze may land you in jail if you are under 21.",
   1167     "RHJpbmtpbmcgcG90aW9ucyBvZiBib296ZSBtYXkgbGFuZCB5b3UgaW4gamFpbCBpZiB5b3UgY"
   1168     "XJlIHVuZGVyIDIxLg=="},
   1169    {"Drop your vanity and get rid of your jewels! Pickpockets about!",
   1170     "RHJvcCB5b3VyIHZhbml0eSBhbmQgZ2V0IHJpZCBvZiB5b3VyIGpld2VscyEgUGlja3BvY2tld"
   1171     "HMgYWJvdXQh"},
   1172    {"Eat 10 cloves of garlic and keep all humans at a two-square distance.",
   1173     "RWF0IDEwIGNsb3ZlcyBvZiBnYXJsaWMgYW5kIGtlZXAgYWxsIGh1bWFucyBhdCBhIHR3by1zc"
   1174     "XVhcmUgZGlzdGFuY2Uu"},
   1175    {"Eels hide under mud. Use a unicorn to clear the water and make them "
   1176     "visible.",
   1177     "RWVscyBoaWRlIHVuZGVyIG11ZC4gVXNlIGEgdW5pY29ybiB0byBjbGVhciB0aGUgd2F0ZXIgY"
   1178     "W5kIG1ha2UgdGhlbSB2aXNpYmxlLg=="},
   1179    {"Engrave your wishes with a wand of wishing.",
   1180     "RW5ncmF2ZSB5b3VyIHdpc2hlcyB3aXRoIGEgd2FuZCBvZiB3aXNoaW5nLg=="},
   1181    {"Eventually you will come to admire the swift elegance of a retreating "
   1182     "nymph.",
   1183     "RXZlbnR1YWxseSB5b3Ugd2lsbCBjb21lIHRvIGFkbWlyZSB0aGUgc3dpZnQgZWxlZ2FuY2Ugb"
   1184     "2YgYSByZXRyZWF0aW5nIG55bXBoLg=="},
   1185    {"Ever heard hissing outside? I *knew* you hadn't!",
   1186     "RXZlciBoZWFyZCBoaXNzaW5nIG91dHNpZGU/IEkgKmtuZXcqIHlvdSBoYWRuJ3Qh"},
   1187    {"Ever lifted a dragon corpse?",
   1188     "RXZlciBsaWZ0ZWQgYSBkcmFnb24gY29ycHNlPw=="},
   1189    {"Ever seen a leocrotta dancing the tengu?",
   1190     "RXZlciBzZWVuIGEgbGVvY3JvdHRhIGRhbmNpbmcgdGhlIHRlbmd1Pw=="},
   1191    {"Ever seen your weapon glow plaid?",
   1192     "RXZlciBzZWVuIHlvdXIgd2VhcG9uIGdsb3cgcGxhaWQ/"},
   1193    {"Ever tamed a shopkeeper?", "RXZlciB0YW1lZCBhIHNob3BrZWVwZXI/"},
   1194    {"Ever tried digging through a Vault Guard?",
   1195     "RXZlciB0cmllZCBkaWdnaW5nIHRocm91Z2ggYSBWYXVsdCBHdWFyZD8="},
   1196    {"Ever tried enchanting a rope?",
   1197     "RXZlciB0cmllZCBlbmNoYW50aW5nIGEgcm9wZT8="},
   1198    {"Floating eyes can't stand Hawaiian shirts.",
   1199     "RmxvYXRpbmcgZXllcyBjYW4ndCBzdGFuZCBIYXdhaWlhbiBzaGlydHMu"},
   1200    {"For any remedy there is a misery.",
   1201     "Rm9yIGFueSByZW1lZHkgdGhlcmUgaXMgYSBtaXNlcnku"},
   1202    {"Giant bats turn into giant vampires.",
   1203     "R2lhbnQgYmF0cyB0dXJuIGludG8gZ2lhbnQgdmFtcGlyZXMu"},
   1204    {"Good day for overcoming obstacles. Try a steeplechase.",
   1205     "R29vZCBkYXkgZm9yIG92ZXJjb21pbmcgb2JzdGFjbGVzLiBUcnkgYSBzdGVlcGxlY2hhc2U"
   1206     "u"},
   1207    {"Half Moon tonight. (At least it's better than no Moon at all.)",
   1208     "SGFsZiBNb29uIHRvbmlnaHQuIChBdCBsZWFzdCBpdCdzIGJldHRlciB0aGFuIG5vIE1vb24gY"
   1209     "XQgYWxsLik="},
   1210    {"Help! I'm being held prisoner in a fortune cookie factory!",
   1211     "SGVscCEgSSdtIGJlaW5nIGhlbGQgcHJpc29uZXIgaW4gYSBmb3J0dW5lIGNvb2tpZSBmYWN0b"
   1212     "3J5IQ=="},
   1213    {"Housecats have nine lives, kittens only one.",
   1214     "SG91c2VjYXRzIGhhdmUgbmluZSBsaXZlcywga2l0dGVucyBvbmx5IG9uZS4="},
   1215    {"How long can you tread water?",
   1216     "SG93IGxvbmcgY2FuIHlvdSB0cmVhZCB3YXRlcj8="},
   1217    {"Hungry? There is an abundance of food on the next level.",
   1218     "SHVuZ3J5PyBUaGVyZSBpcyBhbiBhYnVuZGFuY2Ugb2YgZm9vZCBvbiB0aGUgbmV4dCBsZXZlb"
   1219     "C4="},
   1220    {"I guess you've never hit a mail daemon with the Amulet of Yendor...",
   1221     "SSBndWVzcyB5b3UndmUgbmV2ZXIgaGl0IGEgbWFpbCBkYWVtb24gd2l0aCB0aGUgQW11bGV0I"
   1222     "G9mIFllbmRvci4uLg=="},
   1223    {"If you are the shopkeeper, you can take things for free.",
   1224     "SWYgeW91IGFyZSB0aGUgc2hvcGtlZXBlciwgeW91IGNhbiB0YWtlIHRoaW5ncyBmb3IgZnJlZ"
   1225     "S4="},
   1226    {"If you can't learn to do it well, learn to enjoy doing it badly.",
   1227     "SWYgeW91IGNhbid0IGxlYXJuIHRvIGRvIGl0IHdlbGwsIGxlYXJuIHRvIGVuam95IGRvaW5nI"
   1228     "Gl0IGJhZGx5Lg=="},
   1229    {"If you thought the Wizard was bad, just wait till you meet the Warlord!",
   1230     "SWYgeW91IHRob3VnaHQgdGhlIFdpemFyZCB3YXMgYmFkLCBqdXN0IHdhaXQgdGlsbCB5b3Ugb"
   1231     "WVldCB0aGUgV2FybG9yZCE="},
   1232    {"If you turn blind, don't expect your dog to be turned into a seeing-eye "
   1233     "dog.",
   1234     "SWYgeW91IHR1cm4gYmxpbmQsIGRvbid0IGV4cGVjdCB5b3VyIGRvZyB0byBiZSB0dXJuZWQga"
   1235     "W50byBhIHNlZWluZy1leWUgZG9nLg=="},
   1236    {"If you want to feel great, you must eat something real big.",
   1237     "SWYgeW91IHdhbnQgdG8gZmVlbCBncmVhdCwgeW91IG11c3QgZWF0IHNvbWV0aGluZyByZWFsI"
   1238     "GJpZy4="},
   1239    {"If you want to float, you'd better eat a floating eye.",
   1240     "SWYgeW91IHdhbnQgdG8gZmxvYXQsIHlvdSdkIGJldHRlciBlYXQgYSBmbG9hdGluZyBleWU"
   1241     "u"},
   1242    {"If your ghost kills a player, it increases your score.",
   1243     "SWYgeW91ciBnaG9zdCBraWxscyBhIHBsYXllciwgaXQgaW5jcmVhc2VzIHlvdXIgc2NvcmU"
   1244     "u"},
   1245    {"Increase mindpower: Tame your own ghost!",
   1246     "SW5jcmVhc2UgbWluZHBvd2VyOiBUYW1lIHlvdXIgb3duIGdob3N0IQ=="},
   1247    {"It furthers one to see the great man.",
   1248     "SXQgZnVydGhlcnMgb25lIHRvIHNlZSB0aGUgZ3JlYXQgbWFuLg=="},
   1249    {"It's easy to overlook a monster in a wood.",
   1250     "SXQncyBlYXN5IHRvIG92ZXJsb29rIGEgbW9uc3RlciBpbiBhIHdvb2Qu"},
   1251    {"Just below any trapdoor there may be another one. Just keep falling!",
   1252     "SnVzdCBiZWxvdyBhbnkgdHJhcGRvb3IgdGhlcmUgbWF5IGJlIGFub3RoZXIgb25lLiBKdXN0I"
   1253     "GtlZXAgZmFsbGluZyE="},
   1254    {"Katanas are very sharp; watch you don't cut yourself.",
   1255     "S2F0YW5hcyBhcmUgdmVyeSBzaGFycDsgd2F0Y2ggeW91IGRvbid0IGN1dCB5b3Vyc2VsZi4"
   1256     "="},
   1257    {"Keep a clear mind: quaff clear potions.",
   1258     "S2VlcCBhIGNsZWFyIG1pbmQ6IHF1YWZmIGNsZWFyIHBvdGlvbnMu"},
   1259    {"Kicking the terminal doesn't hurt the monsters.",
   1260     "S2lja2luZyB0aGUgdGVybWluYWwgZG9lc24ndCBodXJ0IHRoZSBtb25zdGVycy4="},
   1261    {"Killer bees keep appearing till you kill their queen.",
   1262     "S2lsbGVyIGJlZXMga2VlcCBhcHBlYXJpbmcgdGlsbCB5b3Uga2lsbCB0aGVpciBxdWVlbi4"
   1263     "="},
   1264    {"Killer bunnies can be tamed with carrots only.",
   1265     "S2lsbGVyIGJ1bm5pZXMgY2FuIGJlIHRhbWVkIHdpdGggY2Fycm90cyBvbmx5Lg=="},
   1266    {"Latest news? Put `rec.games.roguelike.nethack' in your .newsrc!",
   1267     "TGF0ZXN0IG5ld3M/"
   1268     "IFB1dCBgcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrJyBpbiB5b3VyIC5uZXdzcmMh"},
   1269    {"Learn how to spell. Play NetHack!",
   1270     "TGVhcm4gaG93IHRvIHNwZWxsLiBQbGF5IE5ldEhhY2sh"},
   1271    {"Leprechauns hide their gold in a secret room.",
   1272     "TGVwcmVjaGF1bnMgaGlkZSB0aGVpciBnb2xkIGluIGEgc2VjcmV0IHJvb20u"},
   1273    {"Let your fingers do the walking on the yulkjhnb keys.",
   1274     "TGV0IHlvdXIgZmluZ2VycyBkbyB0aGUgd2Fsa2luZyBvbiB0aGUgeXVsa2pobmIga2V5cy4"
   1275     "="},
   1276    {"Let's face it: this time you're not going to win.",
   1277     "TGV0J3MgZmFjZSBpdDogdGhpcyB0aW1lIHlvdSdyZSBub3QgZ29pbmcgdG8gd2luLg=="},
   1278    {"Let's have a party, drink a lot of booze.",
   1279     "TGV0J3MgaGF2ZSBhIHBhcnR5LCBkcmluayBhIGxvdCBvZiBib296ZS4="},
   1280    {"Liquor sellers do not drink; they hate to see you twice.",
   1281     "TGlxdW9yIHNlbGxlcnMgZG8gbm90IGRyaW5rOyB0aGV5IGhhdGUgdG8gc2VlIHlvdSB0d2ljZ"
   1282     "S4="},
   1283    {"Lunar eclipse tonight. May as well quit now!",
   1284     "THVuYXIgZWNsaXBzZSB0b25pZ2h0LiBNYXkgYXMgd2VsbCBxdWl0IG5vdyE="},
   1285    {"Meeting your own ghost decreases your luck considerably!",
   1286     "TWVldGluZyB5b3VyIG93biBnaG9zdCBkZWNyZWFzZXMgeW91ciBsdWNrIGNvbnNpZGVyYWJse"
   1287     "SE="},
   1288    {"Money to invest? Take it to the local branch of the Magic Memory Vault!",
   1289     "TW9uZXkgdG8gaW52ZXN0PyBUYWtlIGl0IHRvIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIE1hZ"
   1290     "2ljIE1lbW9yeSBWYXVsdCE="},
   1291    {"Monsters come from nowhere to hit you everywhere.",
   1292     "TW9uc3RlcnMgY29tZSBmcm9tIG5vd2hlcmUgdG8gaGl0IHlvdSBldmVyeXdoZXJlLg=="},
   1293    {"Monsters sleep because you are boring, not because they ever get tired.",
   1294     "TW9uc3RlcnMgc2xlZXAgYmVjYXVzZSB5b3UgYXJlIGJvcmluZywgbm90IGJlY2F1c2UgdGhle"
   1295     "SBldmVyIGdldCB0aXJlZC4="},
   1296    {"Most monsters prefer minced meat. That's why they are hitting you!",
   1297     "TW9zdCBtb25zdGVycyBwcmVmZXIgbWluY2VkIG1lYXQuIFRoYXQncyB3aHkgdGhleSBhcmUga"
   1298     "Gl0dGluZyB5b3Uh"},
   1299    {"Most of the bugs in NetHack are on the floor.",
   1300     "TW9zdCBvZiB0aGUgYnVncyBpbiBOZXRIYWNrIGFyZSBvbiB0aGUgZmxvb3Iu"},
   1301    {"Much ado Nothing Happens.", "TXVjaCBhZG8gTm90aGluZyBIYXBwZW5zLg=="},
   1302    {"Multi-player NetHack is a myth.",
   1303     "TXVsdGktcGxheWVyIE5ldEhhY2sgaXMgYSBteXRoLg=="},
   1304    {"NetHack is addictive. Too late, you're already hooked.",
   1305     "TmV0SGFjayBpcyBhZGRpY3RpdmUuIFRvbyBsYXRlLCB5b3UncmUgYWxyZWFkeSBob29rZWQ"
   1306     "u"},
   1307    {"Never ask a shopkeeper for a price list.",
   1308     "TmV2ZXIgYXNrIGEgc2hvcGtlZXBlciBmb3IgYSBwcmljZSBsaXN0Lg=="},
   1309    {"Never burn a tree, unless you like getting whacked with a +5 shovel.",
   1310     "TmV2ZXIgYnVybiBhIHRyZWUsIHVubGVzcyB5b3UgbGlrZSBnZXR0aW5nIHdoYWNrZWQgd2l0a"
   1311     "CBhICs1IHNob3ZlbC4="},
   1312    {"Never eat with glowing hands!",
   1313     "TmV2ZXIgZWF0IHdpdGggZ2xvd2luZyBoYW5kcyE="},
   1314    {"Never mind the monsters hitting you: they just replace the charwomen.",
   1315     "TmV2ZXIgbWluZCB0aGUgbW9uc3RlcnMgaGl0dGluZyB5b3U6IHRoZXkganVzdCByZXBsYWNlI"
   1316     "HRoZSBjaGFyd29tZW4u"},
   1317    {"Never play leapfrog with a unicorn.",
   1318     "TmV2ZXIgcGxheSBsZWFwZnJvZyB3aXRoIGEgdW5pY29ybi4="},
   1319    {"Never step on a cursed engraving.",
   1320     "TmV2ZXIgc3RlcCBvbiBhIGN1cnNlZCBlbmdyYXZpbmcu"},
   1321    {"Never swim with a camera: there's nothing to take pictures of.",
   1322     "TmV2ZXIgc3dpbSB3aXRoIGEgY2FtZXJhOiB0aGVyZSdzIG5vdGhpbmcgdG8gdGFrZSBwaWN0d"
   1323     "XJlcyBvZi4="},
   1324    {"Never teach your pet rust monster to fetch.",
   1325     "TmV2ZXIgdGVhY2ggeW91ciBwZXQgcnVzdCBtb25zdGVyIHRvIGZldGNoLg=="},
   1326    {"Never trust a random generator in magic fields.",
   1327     "TmV2ZXIgdHJ1c3QgYSByYW5kb20gZ2VuZXJhdG9yIGluIG1hZ2ljIGZpZWxkcy4="},
   1328    {"Never use a wand of death.", "TmV2ZXIgdXNlIGEgd2FuZCBvZiBkZWF0aC4="},
   1329    {"No level contains two shops. The maze is no level. So...",
   1330     "Tm8gbGV2ZWwgY29udGFpbnMgdHdvIHNob3BzLiBUaGUgbWF6ZSBpcyBubyBsZXZlbC4gU28uL"
   1331     "i4="},
   1332    {"No part of this fortune may be reproduced, stored in a retrieval system, "
   1333     "...",
   1334     "Tm8gcGFydCBvZiB0aGlzIGZvcnR1bmUgbWF5IGJlIHJlcHJvZHVjZWQsIHN0b3JlZCBpbiBhI"
   1335     "HJldHJpZXZhbCBzeXN0ZW0sIC4uLg=="},
   1336    {"Not all rumors are as misleading as this one.",
   1337     "Tm90IGFsbCBydW1vcnMgYXJlIGFzIG1pc2xlYWRpbmcgYXMgdGhpcyBvbmUu"},
   1338    {"Nymphs and nurses like beautiful rings.",
   1339     "TnltcGhzIGFuZCBudXJzZXMgbGlrZSBiZWF1dGlmdWwgcmluZ3Mu"},
   1340    {"Nymphs are blondes. Are you a gentleman?",
   1341     "TnltcGhzIGFyZSBibG9uZGVzLiBBcmUgeW91IGEgZ2VudGxlbWFuPw=="},
   1342    {"Offering a unicorn a worthless piece of glass might prove to be fatal!",
   1343     "T2ZmZXJpbmcgYSB1bmljb3JuIGEgd29ydGhsZXNzIHBpZWNlIG9mIGdsYXNzIG1pZ2h0IHByb"
   1344     "3ZlIHRvIGJlIGZhdGFsIQ=="},
   1345    {"Old hackers never die: young ones do.",
   1346     "T2xkIGhhY2tlcnMgbmV2ZXIgZGllOiB5b3VuZyBvbmVzIGRvLg=="},
   1347    {"One has to leave shops before closing time.",
   1348     "T25lIGhhcyB0byBsZWF2ZSBzaG9wcyBiZWZvcmUgY2xvc2luZyB0aW1lLg=="},
   1349    {"One homunculus a day keeps the doctor away.",
   1350     "T25lIGhvbXVuY3VsdXMgYSBkYXkga2VlcHMgdGhlIGRvY3RvciBhd2F5Lg=="},
   1351    {"One level further down somebody is getting killed, right now.",
   1352     "T25lIGxldmVsIGZ1cnRoZXIgZG93biBzb21lYm9keSBpcyBnZXR0aW5nIGtpbGxlZCwgcmlna"
   1353     "HQgbm93Lg=="},
   1354    {"Only a wizard can use a magic whistle.",
   1355     "T25seSBhIHdpemFyZCBjYW4gdXNlIGEgbWFnaWMgd2hpc3RsZS4="},
   1356    {"Only adventurers of evil alignment think of killing their dog.",
   1357     "T25seSBhZHZlbnR1cmVycyBvZiBldmlsIGFsaWdubWVudCB0aGluayBvZiBraWxsaW5nIHRoZ"
   1358     "WlyIGRvZy4="},
   1359    {"Only chaotic evils kill sleeping monsters.",
   1360     "T25seSBjaGFvdGljIGV2aWxzIGtpbGwgc2xlZXBpbmcgbW9uc3RlcnMu"},
   1361    {"Only real trappers escape traps.",
   1362     "T25seSByZWFsIHRyYXBwZXJzIGVzY2FwZSB0cmFwcy4="},
   1363    {"Only real wizards can write scrolls.",
   1364     "T25seSByZWFsIHdpemFyZHMgY2FuIHdyaXRlIHNjcm9sbHMu"},
   1365    {"Operation OVERKILL has started now.",
   1366     "T3BlcmF0aW9uIE9WRVJLSUxMIGhhcyBzdGFydGVkIG5vdy4="},
   1367    {"PLEASE ignore previous rumor.",
   1368     "UExFQVNFIGlnbm9yZSBwcmV2aW91cyBydW1vci4="},
   1369    {"Polymorph into an ettin; meet your opponents face to face to face.",
   1370     "UG9seW1vcnBoIGludG8gYW4gZXR0aW47IG1lZXQgeW91ciBvcHBvbmVudHMgZmFjZSB0byBmY"
   1371     "WNlIHRvIGZhY2Uu"},
   1372    {"Praying will frighten demons.",
   1373     "UHJheWluZyB3aWxsIGZyaWdodGVuIGRlbW9ucy4="},
   1374    {"Row (3x) that boat gently down the stream, Charon (4x), death is but a "
   1375     "dream.",
   1376     "Um93ICgzeCkgdGhhdCBib2F0IGdlbnRseSBkb3duIHRoZSBzdHJlYW0sIENoYXJvbiAoNHgpL"
   1377     "CBkZWF0aCBpcyBidXQgYSBkcmVhbS4="},
   1378    {"Running is good for your legs.",
   1379     "UnVubmluZyBpcyBnb29kIGZvciB5b3VyIGxlZ3Mu"},
   1380    {"Screw up your courage! You've screwed up everything else.",
   1381     "U2NyZXcgdXAgeW91ciBjb3VyYWdlISBZb3UndmUgc2NyZXdlZCB1cCBldmVyeXRoaW5nIGVsc"
   1382     "2Uu"},
   1383    {"Seepage? Leaky pipes? Rising damp? Summon the plumber!",
   1384     "U2VlcGFnZT8gTGVha3kgcGlwZXM/"
   1385     "IFJpc2luZyBkYW1wPyBTdW1tb24gdGhlIHBsdW1iZXIh"},
   1386    {"Segmentation fault (core dumped).",
   1387     "U2VnbWVudGF0aW9uIGZhdWx0IChjb3JlIGR1bXBlZCku"},
   1388    {"Shopkeepers sometimes die from old age.",
   1389     "U2hvcGtlZXBlcnMgc29tZXRpbWVzIGRpZSBmcm9tIG9sZCBhZ2Uu"},
   1390    {"Some mazes (especially small ones) have no solutions, says man 6 maze.",
   1391     "U29tZSBtYXplcyAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBoYXZlIG5vIHNvbHV0aW9ucywgc"
   1392     "2F5cyBtYW4gNiBtYXplLg=="},
   1393    {"Some questions the Sphynx asks just *don't* have any answers.",
   1394     "U29tZSBxdWVzdGlvbnMgdGhlIFNwaHlueCBhc2tzIGp1c3QgKmRvbid0KiBoYXZlIGFueSBhb"
   1395     "nN3ZXJzLg=="},
   1396    {"Sometimes \"mu\" is the answer.",
   1397     "U29tZXRpbWVzICJtdSIgaXMgdGhlIGFuc3dlci4="},
   1398    {"Sorry, no fortune this time. Better luck next cookie!",
   1399     "U29ycnksIG5vIGZvcnR1bmUgdGhpcyB0aW1lLiBCZXR0ZXIgbHVjayBuZXh0IGNvb2tpZSE"
   1400     "="},
   1401    {"Spare your scrolls of make-edible until it's really necessary!",
   1402     "U3BhcmUgeW91ciBzY3JvbGxzIG9mIG1ha2UtZWRpYmxlIHVudGlsIGl0J3MgcmVhbGx5IG5lY"
   1403     "2Vzc2FyeSE="},
   1404    {"Suddenly, the dungeon will collapse...",
   1405     "U3VkZGVubHksIHRoZSBkdW5nZW9uIHdpbGwgY29sbGFwc2UuLi4="},
   1406    {"Taming a mail daemon may cause a system security violation.",
   1407     "VGFtaW5nIGEgbWFpbCBkYWVtb24gbWF5IGNhdXNlIGEgc3lzdGVtIHNlY3VyaXR5IHZpb2xhd"
   1408     "Glvbi4="},
   1409    {"The crowd was so tough, the Stooges won't play the Dungeon anymore, nyuk "
   1410     "nyuk.",
   1411     "VGhlIGNyb3dkIHdhcyBzbyB0b3VnaCwgdGhlIFN0b29nZXMgd29uJ3QgcGxheSB0aGUgRHVuZ"
   1412     "2VvbiBhbnltb3JlLCBueXVrIG55dWsu"},
   1413    {"The leprechauns hide their treasure in a small hidden room.",
   1414     "VGhlIGxlcHJlY2hhdW5zIGhpZGUgdGhlaXIgdHJlYXN1cmUgaW4gYSBzbWFsbCBoaWRkZW4gc"
   1415     "m9vbS4="},
   1416    {"The longer the wand the better.",
   1417     "VGhlIGxvbmdlciB0aGUgd2FuZCB0aGUgYmV0dGVyLg=="},
   1418    {"The magic word is \"XYZZY\".", "VGhlIG1hZ2ljIHdvcmQgaXMgIlhZWlpZIi4="},
   1419    {"The meek shall inherit your bones files.",
   1420     "VGhlIG1lZWsgc2hhbGwgaW5oZXJpdCB5b3VyIGJvbmVzIGZpbGVzLg=="},
   1421    {"The mines are dark and deep, and I have levels to go before I sleep.",
   1422     "VGhlIG1pbmVzIGFyZSBkYXJrIGFuZCBkZWVwLCBhbmQgSSBoYXZlIGxldmVscyB0byBnbyBiZ"
   1423     "WZvcmUgSSBzbGVlcC4="},
   1424    {"The use of dynamite is dangerous.",
   1425     "VGhlIHVzZSBvZiBkeW5hbWl0ZSBpcyBkYW5nZXJvdXMu"},
   1426    {"There are no worms in the UNIX version.",
   1427     "VGhlcmUgYXJlIG5vIHdvcm1zIGluIHRoZSBVTklYIHZlcnNpb24u"},
   1428    {"There is a trap on this level!",
   1429     "VGhlcmUgaXMgYSB0cmFwIG9uIHRoaXMgbGV2ZWwh"},
   1430    {"They say that Demogorgon, Asmodeus, Orcus, Yeenoghu & Juiblex is no law "
   1431     "firm.",
   1432     "VGhleSBzYXkgdGhhdCBEZW1vZ29yZ29uLCBBc21vZGV1cywgT3JjdXMsIFllZW5vZ2h1ICYgS"
   1433     "nVpYmxleCBpcyBubyBsYXcgZmlybS4="},
   1434    {"They say that Geryon has an evil twin, beware!",
   1435     "VGhleSBzYXkgdGhhdCBHZXJ5b24gaGFzIGFuIGV2aWwgdHdpbiwgYmV3YXJlIQ=="},
   1436    {"They say that Medusa would make a terrible pet.",
   1437     "VGhleSBzYXkgdGhhdCBNZWR1c2Egd291bGQgbWFrZSBhIHRlcnJpYmxlIHBldC4="},
   1438    {"They say that NetHack bugs are Seldon planned.",
   1439     "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGJ1Z3MgYXJlIFNlbGRvbiBwbGFubmVkLg=="},
   1440    {"They say that NetHack comes in 256 flavors.",
   1441     "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGNvbWVzIGluIDI1NiBmbGF2b3JzLg=="},
   1442    {"They say that NetHack is just a computer game.",
   1443     "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIGp1c3QgYSBjb21wdXRlciBnYW1lLg=="},
   1444    {"They say that NetHack is more than just a computer game.",
   1445     "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG1vcmUgdGhhbiBqdXN0IGEgY29tcHV0ZXIgZ2FtZ"
   1446     "S4="},
   1447    {"They say that NetHack is never what it used to be.",
   1448     "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG5ldmVyIHdoYXQgaXQgdXNlZCB0byBiZS4="},
   1449    {"They say that a baby dragon is too small to hurt or help you.",
   1450     "VGhleSBzYXkgdGhhdCBhIGJhYnkgZHJhZ29uIGlzIHRvbyBzbWFsbCB0byBodXJ0IG9yIGhlb"
   1451     "HAgeW91Lg=="},
   1452    {"They say that a black pudding is simply a brown pudding gone bad.",
   1453     "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHB1ZGRpbmcgaXMgc2ltcGx5IGEgYnJvd24gcHVkZGluZ"
   1454     "yBnb25lIGJhZC4="},
   1455    {"They say that a black sheep has 3 bags full of wool.",
   1456     "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHNoZWVwIGhhcyAzIGJhZ3MgZnVsbCBvZiB3b29sLg="
   1457     "="},
   1458    {"They say that a blank scroll is like a blank check.",
   1459     "VGhleSBzYXkgdGhhdCBhIGJsYW5rIHNjcm9sbCBpcyBsaWtlIGEgYmxhbmsgY2hlY2su"},
   1460    {"They say that a cat named Morris has nine lives.",
   1461     "VGhleSBzYXkgdGhhdCBhIGNhdCBuYW1lZCBNb3JyaXMgaGFzIG5pbmUgbGl2ZXMu"},
   1462    {"They say that a desperate shopper might pay any price in a shop.",
   1463     "VGhleSBzYXkgdGhhdCBhIGRlc3BlcmF0ZSBzaG9wcGVyIG1pZ2h0IHBheSBhbnkgcHJpY2Uga"
   1464     "W4gYSBzaG9wLg=="},
   1465    {"They say that a diamond dog is everybody's best friend.",
   1466     "VGhleSBzYXkgdGhhdCBhIGRpYW1vbmQgZG9nIGlzIGV2ZXJ5Ym9keSdzIGJlc3QgZnJpZW5kL"
   1467     "g=="},
   1468    {"They say that a dwarf lord can carry a pick-axe because his armor is "
   1469     "light.",
   1470     "VGhleSBzYXkgdGhhdCBhIGR3YXJmIGxvcmQgY2FuIGNhcnJ5IGEgcGljay1heGUgYmVjYXVzZ"
   1471     "SBoaXMgYXJtb3IgaXMgbGlnaHQu"},
   1472    {"They say that a floating eye can defeat Medusa.",
   1473     "VGhleSBzYXkgdGhhdCBhIGZsb2F0aW5nIGV5ZSBjYW4gZGVmZWF0IE1lZHVzYS4="},
   1474    {"They say that a fortune only has 1 line and you can't read between it.",
   1475     "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lIGFuZCB5b3UgY2FuJ3Qgc"
   1476     "mVhZCBiZXR3ZWVuIGl0Lg=="},
   1477    {"They say that a fortune only has 1 line, but you can read between it.",
   1478     "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lLCBidXQgeW91IGNhbiByZ"
   1479     "WFkIGJldHdlZW4gaXQu"},
   1480    {"They say that a fountain looks nothing like a regularly erupting geyser.",
   1481     "VGhleSBzYXkgdGhhdCBhIGZvdW50YWluIGxvb2tzIG5vdGhpbmcgbGlrZSBhIHJlZ3VsYXJse"
   1482     "SBlcnVwdGluZyBnZXlzZXIu"},
   1483    {"They say that a gold doubloon is worth more than its weight in gold.",
   1484     "VGhleSBzYXkgdGhhdCBhIGdvbGQgZG91Ymxvb24gaXMgd29ydGggbW9yZSB0aGFuIGl0cyB3Z"
   1485     "WlnaHQgaW4gZ29sZC4="},
   1486    {"They say that a grid bug won't pay a shopkeeper for zapping you in a "
   1487     "shop.",
   1488     "VGhleSBzYXkgdGhhdCBhIGdyaWQgYnVnIHdvbid0IHBheSBhIHNob3BrZWVwZXIgZm9yIHphc"
   1489     "HBpbmcgeW91IGluIGEgc2hvcC4="},
   1490    {"They say that a gypsy could tell your fortune for a price.",
   1491     "VGhleSBzYXkgdGhhdCBhIGd5cHN5IGNvdWxkIHRlbGwgeW91ciBmb3J0dW5lIGZvciBhIHBya"
   1492     "WNlLg=="},
   1493    {"They say that a hacker named Alice once level teleported by using a "
   1494     "mirror.",
   1495     "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBBbGljZSBvbmNlIGxldmVsIHRlbGVwb3J0Z"
   1496     "WQgYnkgdXNpbmcgYSBtaXJyb3Iu"},
   1497    {"They say that a hacker named David once slew a giant with a sling and a "
   1498     "rock.",
   1499     "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEYXZpZCBvbmNlIHNsZXcgYSBnaWFudCB3a"
   1500     "XRoIGEgc2xpbmcgYW5kIGEgcm9jay4="},
   1501    {"They say that a hacker named Dorothy once rode a fog cloud to Oz.",
   1502     "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEb3JvdGh5IG9uY2Ugcm9kZSBhIGZvZyBjb"
   1503     "G91ZCB0byBPei4="},
   1504    {"They say that a hacker named Mary once lost a white sheep in the mazes.",
   1505     "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBNYXJ5IG9uY2UgbG9zdCBhIHdoaXRlIHNoZ"
   1506     "WVwIGluIHRoZSBtYXplcy4="},
   1507    {"They say that a helm of brilliance is not to be taken lightly.",
   1508     "VGhleSBzYXkgdGhhdCBhIGhlbG0gb2YgYnJpbGxpYW5jZSBpcyBub3QgdG8gYmUgdGFrZW4gb"
   1509     "GlnaHRseS4="},
   1510    {"They say that a hot dog and a hell hound are the same thing.",
   1511     "VGhleSBzYXkgdGhhdCBhIGhvdCBkb2cgYW5kIGEgaGVsbCBob3VuZCBhcmUgdGhlIHNhbWUgd"
   1512     "Ghpbmcu"},
   1513    {"They say that a lamp named Aladdin's Lamp contains a djinni with 3 "
   1514     "wishes.",
   1515     "VGhleSBzYXkgdGhhdCBhIGxhbXAgbmFtZWQgQWxhZGRpbidzIExhbXAgY29udGFpbnMgYSBka"
   1516     "mlubmkgd2l0aCAzIHdpc2hlcy4="},
   1517    {"They say that a large dog named Lassie will lead you to the amulet.",
   1518     "VGhleSBzYXkgdGhhdCBhIGxhcmdlIGRvZyBuYW1lZCBMYXNzaWUgd2lsbCBsZWFkIHlvdSB0b"
   1519     "yB0aGUgYW11bGV0Lg=="},
   1520    {"They say that a long sword is not a light sword.",
   1521     "VGhleSBzYXkgdGhhdCBhIGxvbmcgc3dvcmQgaXMgbm90IGEgbGlnaHQgc3dvcmQu"},
   1522    {"They say that a manes won't mince words with you.",
   1523     "VGhleSBzYXkgdGhhdCBhIG1hbmVzIHdvbid0IG1pbmNlIHdvcmRzIHdpdGggeW91Lg=="},
   1524    {"They say that a mind is a terrible thing to waste.",
   1525     "VGhleSBzYXkgdGhhdCBhIG1pbmQgaXMgYSB0ZXJyaWJsZSB0aGluZyB0byB3YXN0ZS4="},
   1526    {"They say that a plain nymph will only wear a wire ring in one ear.",
   1527     "VGhleSBzYXkgdGhhdCBhIHBsYWluIG55bXBoIHdpbGwgb25seSB3ZWFyIGEgd2lyZSByaW5nI"
   1528     "GluIG9uZSBlYXIu"},
   1529    {"They say that a plumed hat could be a previously used crested helmet.",
   1530     "VGhleSBzYXkgdGhhdCBhIHBsdW1lZCBoYXQgY291bGQgYmUgYSBwcmV2aW91c2x5IHVzZWQgY"
   1531     "3Jlc3RlZCBoZWxtZXQu"},
   1532    {"They say that a potion of oil is difficult to grasp.",
   1533     "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiBvaWwgaXMgZGlmZmljdWx0IHRvIGdyYXNwLg="
   1534     "="},
   1535    {"They say that a potion of yogurt is a cancelled potion of sickness.",
   1536     "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiB5b2d1cnQgaXMgYSBjYW5jZWxsZWQgcG90aW9uI"
   1537     "G9mIHNpY2tuZXNzLg=="},
   1538    {"They say that a purple worm is not a baby purple dragon.",
   1539     "VGhleSBzYXkgdGhhdCBhIHB1cnBsZSB3b3JtIGlzIG5vdCBhIGJhYnkgcHVycGxlIGRyYWdvb"
   1540     "i4="},
   1541    {"They say that a quivering blob tastes different than a gelatinous cube.",
   1542     "VGhleSBzYXkgdGhhdCBhIHF1aXZlcmluZyBibG9iIHRhc3RlcyBkaWZmZXJlbnQgdGhhbiBhI"
   1543     "GdlbGF0aW5vdXMgY3ViZS4="},
   1544    {"They say that a runed broadsword named Stormbringer attracts vortices.",
   1545     "VGhleSBzYXkgdGhhdCBhIHJ1bmVkIGJyb2Fkc3dvcmQgbmFtZWQgU3Rvcm1icmluZ2VyIGF0d"
   1546     "HJhY3RzIHZvcnRpY2VzLg=="},
   1547    {"They say that a scroll of summoning has other names.",
   1548     "VGhleSBzYXkgdGhhdCBhIHNjcm9sbCBvZiBzdW1tb25pbmcgaGFzIG90aGVyIG5hbWVzLg="
   1549     "="},
   1550    {"They say that a shaman can bestow blessings but usually doesn't.",
   1551     "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiBjYW4gYmVzdG93IGJsZXNzaW5ncyBidXQgdXN1YWxse"
   1552     "SBkb2Vzbid0Lg=="},
   1553    {"They say that a shaman will bless you for an eye of newt and wing of "
   1554     "bat.",
   1555     "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiB3aWxsIGJsZXNzIHlvdSBmb3IgYW4gZXllIG9mIG5ld"
   1556     "3QgYW5kIHdpbmcgb2YgYmF0Lg=="},
   1557    {"They say that a shimmering gold shield is not a polished silver shield.",
   1558     "VGhleSBzYXkgdGhhdCBhIHNoaW1tZXJpbmcgZ29sZCBzaGllbGQgaXMgbm90IGEgcG9saXNoZ"
   1559     "WQgc2lsdmVyIHNoaWVsZC4="},
   1560    {"They say that a spear will hit a neo-otyugh. (Do YOU know what that is?)",
   1561     "VGhleSBzYXkgdGhhdCBhIHNwZWFyIHdpbGwgaGl0IGEgbmVvLW90eXVnaC4gKERvIFlPVSBrb"
   1562     "m93IHdoYXQgdGhhdCBpcz8p"},
   1563    {"They say that a spotted dragon is the ultimate shape changer.",
   1564     "VGhleSBzYXkgdGhhdCBhIHNwb3R0ZWQgZHJhZ29uIGlzIHRoZSB1bHRpbWF0ZSBzaGFwZSBja"
   1565     "GFuZ2VyLg=="},
   1566    {"They say that a stethoscope is no good if you can only hear your "
   1567     "heartbeat.",
   1568     "VGhleSBzYXkgdGhhdCBhIHN0ZXRob3Njb3BlIGlzIG5vIGdvb2QgaWYgeW91IGNhbiBvbmx5I"
   1569     "GhlYXIgeW91ciBoZWFydGJlYXQu"},
   1570    {"They say that a succubus named Suzy will sometimes warn you of danger.",
   1571     "VGhleSBzYXkgdGhhdCBhIHN1Y2N1YnVzIG5hbWVkIFN1enkgd2lsbCBzb21ldGltZXMgd2Fyb"
   1572     "iB5b3Ugb2YgZGFuZ2VyLg=="},
   1573    {"They say that a wand of cancellation is not like a wand of polymorph.",
   1574     "VGhleSBzYXkgdGhhdCBhIHdhbmQgb2YgY2FuY2VsbGF0aW9uIGlzIG5vdCBsaWtlIGEgd2FuZ"
   1575     "CBvZiBwb2x5bW9ycGgu"},
   1576    {"They say that a wood golem named Pinocchio would be easy to control.",
   1577     "VGhleSBzYXkgdGhhdCBhIHdvb2QgZ29sZW0gbmFtZWQgUGlub2NjaGlvIHdvdWxkIGJlIGVhc"
   1578     "3kgdG8gY29udHJvbC4="},
   1579    {"They say that after killing a dragon it's time for a change of scenery.",
   1580     "VGhleSBzYXkgdGhhdCBhZnRlciBraWxsaW5nIGEgZHJhZ29uIGl0J3MgdGltZSBmb3IgYSBja"
   1581     "GFuZ2Ugb2Ygc2NlbmVyeS4="},
   1582    {"They say that an amulet of strangulation is worse than ring around the "
   1583     "collar.",
   1584     "VGhleSBzYXkgdGhhdCBhbiBhbXVsZXQgb2Ygc3RyYW5ndWxhdGlvbiBpcyB3b3JzZSB0aGFuI"
   1585     "HJpbmcgYXJvdW5kIHRoZSBjb2xsYXIu"},
   1586    {"They say that an attic is the best place to hide your toys.",
   1587     "VGhleSBzYXkgdGhhdCBhbiBhdHRpYyBpcyB0aGUgYmVzdCBwbGFjZSB0byBoaWRlIHlvdXIgd"
   1588     "G95cy4="},
   1589    {"They say that an axe named Cleaver once belonged to a hacker named "
   1590     "Beaver.",
   1591     "VGhleSBzYXkgdGhhdCBhbiBheGUgbmFtZWQgQ2xlYXZlciBvbmNlIGJlbG9uZ2VkIHRvIGEga"
   1592     "GFja2VyIG5hbWVkIEJlYXZlci4="},
   1593    {"They say that an eye of newt and a wing of bat are double the trouble.",
   1594     "VGhleSBzYXkgdGhhdCBhbiBleWUgb2YgbmV3dCBhbmQgYSB3aW5nIG9mIGJhdCBhcmUgZG91Y"
   1595     "mxlIHRoZSB0cm91YmxlLg=="},
   1596    {"They say that an incubus named Izzy sometimes makes women feel "
   1597     "sensitive.",
   1598     "VGhleSBzYXkgdGhhdCBhbiBpbmN1YnVzIG5hbWVkIEl6enkgc29tZXRpbWVzIG1ha2VzIHdvb"
   1599     "WVuIGZlZWwgc2Vuc2l0aXZlLg=="},
   1600    {"They say that an opulent throne room is rarely a place to wish you'd be "
   1601     "in.",
   1602     "VGhleSBzYXkgdGhhdCBhbiBvcHVsZW50IHRocm9uZSByb29tIGlzIHJhcmVseSBhIHBsYWNlI"
   1603     "HRvIHdpc2ggeW91J2QgYmUgaW4u"},
   1604    {"They say that an unlucky hacker once had a nose bleed at an altar and "
   1605     "died.",
   1606     "VGhleSBzYXkgdGhhdCBhbiB1bmx1Y2t5IGhhY2tlciBvbmNlIGhhZCBhIG5vc2UgYmxlZWQgY"
   1607     "XQgYW4gYWx0YXIgYW5kIGRpZWQu"},
   1608    {"They say that and they say this but they never say never, never!",
   1609     "VGhleSBzYXkgdGhhdCBhbmQgdGhleSBzYXkgdGhpcyBidXQgdGhleSBuZXZlciBzYXkgbmV2Z"
   1610     "XIsIG5ldmVyIQ=="},
   1611    {"They say that any quantum mechanic knows that speed kills.",
   1612     "VGhleSBzYXkgdGhhdCBhbnkgcXVhbnR1bSBtZWNoYW5pYyBrbm93cyB0aGF0IHNwZWVkIGtpb"
   1613     "GxzLg=="},
   1614    {"They say that applying a unicorn horn means you've missed the point.",
   1615     "VGhleSBzYXkgdGhhdCBhcHBseWluZyBhIHVuaWNvcm4gaG9ybiBtZWFucyB5b3UndmUgbWlzc"
   1616     "2VkIHRoZSBwb2ludC4="},
   1617    {"They say that blue stones are radioactive, beware.",
   1618     "VGhleSBzYXkgdGhhdCBibHVlIHN0b25lcyBhcmUgcmFkaW9hY3RpdmUsIGJld2FyZS4="},
   1619    {"They say that building a dungeon is a team effort.",
   1620     "VGhleSBzYXkgdGhhdCBidWlsZGluZyBhIGR1bmdlb24gaXMgYSB0ZWFtIGVmZm9ydC4="},
   1621    {"They say that chaotic characters never get a kick out of altars.",
   1622     "VGhleSBzYXkgdGhhdCBjaGFvdGljIGNoYXJhY3RlcnMgbmV2ZXIgZ2V0IGEga2ljayBvdXQgb"
   1623     "2YgYWx0YXJzLg=="},
   1624    {"They say that collapsing a dungeon often creates a panic.",
   1625     "VGhleSBzYXkgdGhhdCBjb2xsYXBzaW5nIGEgZHVuZ2VvbiBvZnRlbiBjcmVhdGVzIGEgcGFua"
   1626     "WMu"},
   1627    {"They say that counting your eggs before they hatch shows that you care.",
   1628     "VGhleSBzYXkgdGhhdCBjb3VudGluZyB5b3VyIGVnZ3MgYmVmb3JlIHRoZXkgaGF0Y2ggc2hvd"
   1629     "3MgdGhhdCB5b3UgY2FyZS4="},
   1630    {"They say that dipping a bag of tricks in a fountain won't make it an "
   1631     "icebox.",
   1632     "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGEgYmFnIG9mIHRyaWNrcyBpbiBhIGZvdW50YWluIHdvb"
   1633     "id0IG1ha2UgaXQgYW4gaWNlYm94Lg=="},
   1634    {"They say that dipping an eel and brown mold in hot water makes "
   1635     "bouillabaisse.",
   1636     "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGFuIGVlbCBhbmQgYnJvd24gbW9sZCBpbiBob3Qgd2F0Z"
   1637     "XIgbWFrZXMgYm91aWxsYWJhaXNzZS4="},
   1638    {"They say that donating a doubloon is extremely pious charity.",
   1639     "VGhleSBzYXkgdGhhdCBkb25hdGluZyBhIGRvdWJsb29uIGlzIGV4dHJlbWVseSBwaW91cyBja"
   1640     "GFyaXR5Lg=="},
   1641    {"They say that eating royal jelly attracts grizzly owlbears.",
   1642     "VGhleSBzYXkgdGhhdCBlYXRpbmcgcm95YWwgamVsbHkgYXR0cmFjdHMgZ3JpenpseSBvd2xiZ"
   1643     "WFycy4="},
   1644    {"They say that eggs, pancakes and juice are just a mundane breakfast.",
   1645     "VGhleSBzYXkgdGhhdCBlZ2dzLCBwYW5jYWtlcyBhbmQganVpY2UgYXJlIGp1c3QgYSBtdW5kY"
   1646     "W5lIGJyZWFrZmFzdC4="},
   1647    {"They say that everyone knows why Medusa stands alone in the dark.",
   1648     "VGhleSBzYXkgdGhhdCBldmVyeW9uZSBrbm93cyB3aHkgTWVkdXNhIHN0YW5kcyBhbG9uZSBpb"
   1649     "iB0aGUgZGFyay4="},
   1650    {"They say that everyone wanted rec.games.hack to undergo a name change.",
   1651     "VGhleSBzYXkgdGhhdCBldmVyeW9uZSB3YW50ZWQgcmVjLmdhbWVzLmhhY2sgdG8gdW5kZXJnb"
   1652     "yBhIG5hbWUgY2hhbmdlLg=="},
   1653    {"They say that finding a winning strategy is a deliberate move on your "
   1654     "part.",
   1655     "VGhleSBzYXkgdGhhdCBmaW5kaW5nIGEgd2lubmluZyBzdHJhdGVneSBpcyBhIGRlbGliZXJhd"
   1656     "GUgbW92ZSBvbiB5b3VyIHBhcnQu"},
   1657    {"They say that finding worthless glass is worth something.",
   1658     "VGhleSBzYXkgdGhhdCBmaW5kaW5nIHdvcnRobGVzcyBnbGFzcyBpcyB3b3J0aCBzb21ldGhpb"
   1659     "mcu"},
   1660    {"They say that fortune cookies are food for thought.",
   1661     "VGhleSBzYXkgdGhhdCBmb3J0dW5lIGNvb2tpZXMgYXJlIGZvb2QgZm9yIHRob3VnaHQu"},
   1662    {"They say that gold is only wasted on a pet dragon.",
   1663     "VGhleSBzYXkgdGhhdCBnb2xkIGlzIG9ubHkgd2FzdGVkIG9uIGEgcGV0IGRyYWdvbi4="},
   1664    {"They say that good things come to those that wait.",
   1665     "VGhleSBzYXkgdGhhdCBnb29kIHRoaW5ncyBjb21lIHRvIHRob3NlIHRoYXQgd2FpdC4="},
   1666    {"They say that greased objects will slip out of monsters' hands.",
   1667     "VGhleSBzYXkgdGhhdCBncmVhc2VkIG9iamVjdHMgd2lsbCBzbGlwIG91dCBvZiBtb25zdGVyc"
   1668     "ycgaGFuZHMu"},
   1669    {"They say that if you can't spell then you'll wish you had a spell book.",
   1670     "VGhleSBzYXkgdGhhdCBpZiB5b3UgY2FuJ3Qgc3BlbGwgdGhlbiB5b3UnbGwgd2lzaCB5b3Uga"
   1671     "GFkIGEgc3BlbGwgYm9vay4="},
   1672    {"They say that if you live by the sword, you'll die by the sword.",
   1673     "VGhleSBzYXkgdGhhdCBpZiB5b3UgbGl2ZSBieSB0aGUgc3dvcmQsIHlvdSdsbCBkaWUgYnkgd"
   1674     "GhlIHN3b3JkLg=="},
   1675    {"They say that if you play like a monster you'll have a better game.",
   1676     "VGhleSBzYXkgdGhhdCBpZiB5b3UgcGxheSBsaWtlIGEgbW9uc3RlciB5b3UnbGwgaGF2ZSBhI"
   1677     "GJldHRlciBnYW1lLg=="},
   1678    {"They say that if you sleep with a demon you might awake with a headache.",
   1679     "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc2xlZXAgd2l0aCBhIGRlbW9uIHlvdSBtaWdodCBhd2FrZ"
   1680     "SB3aXRoIGEgaGVhZGFjaGUu"},
   1681    {"They say that if you step on a crack you could break your mother's back.",
   1682     "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc3RlcCBvbiBhIGNyYWNrIHlvdSBjb3VsZCBicmVhayB5b"
   1683     "3VyIG1vdGhlcidzIGJhY2su"},
   1684    {"They say that if you're invisible you can still be heard!",
   1685     "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgaW52aXNpYmxlIHlvdSBjYW4gc3RpbGwgYmUgaGVhc"
   1686     "mQh"},
   1687    {"They say that if you're lucky you can feel the runes on a scroll.",
   1688     "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgbHVja3kgeW91IGNhbiBmZWVsIHRoZSBydW5lcyBvb"
   1689     "iBhIHNjcm9sbC4="},
   1690    {"They say that in the big picture gold is only small change.",
   1691     "VGhleSBzYXkgdGhhdCBpbiB0aGUgYmlnIHBpY3R1cmUgZ29sZCBpcyBvbmx5IHNtYWxsIGNoY"
   1692     "W5nZS4="},
   1693    {"They say that in the dungeon it's not what you know that really matters.",
   1694     "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBpdCdzIG5vdCB3aGF0IHlvdSBrbm93IHRoY"
   1695     "XQgcmVhbGx5IG1hdHRlcnMu"},
   1696    {"They say that in the dungeon moon rocks are really dilithium crystals.",
   1697     "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBtb29uIHJvY2tzIGFyZSByZWFsbHkgZGlsa"
   1698     "XRoaXVtIGNyeXN0YWxzLg=="},
   1699    {"They say that in the dungeon the boorish customer is never right.",
   1700     "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB0aGUgYm9vcmlzaCBjdXN0b21lciBpcyBuZ"
   1701     "XZlciByaWdodC4="},
   1702    {"They say that in the dungeon you don't need a watch to tell time.",
   1703     "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgZG9uJ3QgbmVlZCBhIHdhdGNoIHRvI"
   1704     "HRlbGwgdGltZS4="},
   1705    {"They say that in the dungeon you need something old, new, burrowed and "
   1706     "blue.",
   1707     "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgbmVlZCBzb21ldGhpbmcgb2xkLCBuZ"
   1708     "XcsIGJ1cnJvd2VkIGFuZCBibHVlLg=="},
   1709    {"They say that in the dungeon you should always count your blessings.",
   1710     "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3Ugc2hvdWxkIGFsd2F5cyBjb3VudCB5b"
   1711     "3VyIGJsZXNzaW5ncy4="},
   1712    {"They say that iron golem plate mail isn't worth wishing for.",
   1713     "VGhleSBzYXkgdGhhdCBpcm9uIGdvbGVtIHBsYXRlIG1haWwgaXNuJ3Qgd29ydGggd2lzaGluZ"
   1714     "yBmb3Iu"},
   1715    {"They say that it takes four quarterstaffs to make one staff.",
   1716     "VGhleSBzYXkgdGhhdCBpdCB0YWtlcyBmb3VyIHF1YXJ0ZXJzdGFmZnMgdG8gbWFrZSBvbmUgc"
   1717     "3RhZmYu"},
   1718    {"They say that it's not over till the fat ladies sing.",
   1719     "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWRpZXMgc2luZy4"
   1720     "="},
   1721    {"They say that it's not over till the fat lady shouts `Off with its "
   1722     "head'.",
   1723     "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWR5IHNob3V0cyBgT"
   1724     "2ZmIHdpdGggaXRzIGhlYWQnLg=="},
   1725    {"They say that kicking a heavy statue is really a dumb move.",
   1726     "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgaGVhdnkgc3RhdHVlIGlzIHJlYWxseSBhIGR1bWIgb"
   1727     "W92ZS4="},
   1728    {"They say that kicking a valuable gem doesn't seem to make sense.",
   1729     "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgdmFsdWFibGUgZ2VtIGRvZXNuJ3Qgc2VlbSB0byBtY"
   1730     "WtlIHNlbnNlLg=="},
   1731    {"They say that leprechauns know Latin and you should too.",
   1732     "VGhleSBzYXkgdGhhdCBsZXByZWNoYXVucyBrbm93IExhdGluIGFuZCB5b3Ugc2hvdWxkIHRvb"
   1733     "y4="},
   1734    {"They say that minotaurs get lost outside of the mazes.",
   1735     "VGhleSBzYXkgdGhhdCBtaW5vdGF1cnMgZ2V0IGxvc3Qgb3V0c2lkZSBvZiB0aGUgbWF6ZXM"
   1736     "u"},
   1737    {"They say that most trolls are born again.",
   1738     "VGhleSBzYXkgdGhhdCBtb3N0IHRyb2xscyBhcmUgYm9ybiBhZ2Fpbi4="},
   1739    {"They say that naming your cat Garfield will make you more attractive.",
   1740     "VGhleSBzYXkgdGhhdCBuYW1pbmcgeW91ciBjYXQgR2FyZmllbGQgd2lsbCBtYWtlIHlvdSBtb"
   1741     "3JlIGF0dHJhY3RpdmUu"},
   1742    {"They say that no one knows everything about everything in the dungeon.",
   1743     "VGhleSBzYXkgdGhhdCBubyBvbmUga25vd3MgZXZlcnl0aGluZyBhYm91dCBldmVyeXRoaW5nI"
   1744     "GluIHRoZSBkdW5nZW9uLg=="},
   1745    {"They say that no one plays NetHack just for the fun of it.",
   1746     "VGhleSBzYXkgdGhhdCBubyBvbmUgcGxheXMgTmV0SGFjayBqdXN0IGZvciB0aGUgZnVuIG9mI"
   1747     "Gl0Lg=="},
   1748    {"They say that no one really subscribes to rec.games.roguelike.nethack.",
   1749     "VGhleSBzYXkgdGhhdCBubyBvbmUgcmVhbGx5IHN1YnNjcmliZXMgdG8gcmVjLmdhbWVzLnJvZ"
   1750     "3VlbGlrZS5uZXRoYWNrLg=="},
   1751    {"They say that no one will admit to starting a rumor.",
   1752     "VGhleSBzYXkgdGhhdCBubyBvbmUgd2lsbCBhZG1pdCB0byBzdGFydGluZyBhIHJ1bW9yLg="
   1753     "="},
   1754    {"They say that nurses sometimes carry scalpels and never use them.",
   1755     "VGhleSBzYXkgdGhhdCBudXJzZXMgc29tZXRpbWVzIGNhcnJ5IHNjYWxwZWxzIGFuZCBuZXZlc"
   1756     "iB1c2UgdGhlbS4="},
   1757    {"They say that once you've met one wizard you've met them all.",
   1758     "VGhleSBzYXkgdGhhdCBvbmNlIHlvdSd2ZSBtZXQgb25lIHdpemFyZCB5b3UndmUgbWV0IHRoZ"
   1759     "W0gYWxsLg=="},
   1760    {"They say that one troll is worth 10,000 newts.",
   1761     "VGhleSBzYXkgdGhhdCBvbmUgdHJvbGwgaXMgd29ydGggMTAsMDAwIG5ld3RzLg=="},
   1762    {"They say that only David can find the zoo!",
   1763     "VGhleSBzYXkgdGhhdCBvbmx5IERhdmlkIGNhbiBmaW5kIHRoZSB6b28h"},
   1764    {"They say that only angels play their harps for their pets.",
   1765     "VGhleSBzYXkgdGhhdCBvbmx5IGFuZ2VscyBwbGF5IHRoZWlyIGhhcnBzIGZvciB0aGVpciBwZ"
   1766     "XRzLg=="},
   1767    {"They say that only big spenders carry gold.",
   1768     "VGhleSBzYXkgdGhhdCBvbmx5IGJpZyBzcGVuZGVycyBjYXJyeSBnb2xkLg=="},
   1769    {"They say that orc shamans are healthy, wealthy and wise.",
   1770     "VGhleSBzYXkgdGhhdCBvcmMgc2hhbWFucyBhcmUgaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZ"
   1771     "S4="},
   1772    {"They say that playing NetHack is like walking into a death trap.",
   1773     "VGhleSBzYXkgdGhhdCBwbGF5aW5nIE5ldEhhY2sgaXMgbGlrZSB3YWxraW5nIGludG8gYSBkZ"
   1774     "WF0aCB0cmFwLg=="},
   1775    {"They say that problem breathing is best treated by a proper diet.",
   1776     "VGhleSBzYXkgdGhhdCBwcm9ibGVtIGJyZWF0aGluZyBpcyBiZXN0IHRyZWF0ZWQgYnkgYSBwc"
   1777     "m9wZXIgZGlldC4="},
   1778    {"They say that quaffing many potions of levitation can give you a "
   1779     "headache.",
   1780     "VGhleSBzYXkgdGhhdCBxdWFmZmluZyBtYW55IHBvdGlvbnMgb2YgbGV2aXRhdGlvbiBjYW4gZ"
   1781     "2l2ZSB5b3UgYSBoZWFkYWNoZS4="},
   1782    {"They say that queen bees get that way by eating royal jelly.",
   1783     "VGhleSBzYXkgdGhhdCBxdWVlbiBiZWVzIGdldCB0aGF0IHdheSBieSBlYXRpbmcgcm95YWwga"
   1784     "mVsbHku"},
   1785    {"They say that reading a scare monster scroll is the same as saying "
   1786     "Elbereth.",
   1787     "VGhleSBzYXkgdGhhdCByZWFkaW5nIGEgc2NhcmUgbW9uc3RlciBzY3JvbGwgaXMgdGhlIHNhb"
   1788     "WUgYXMgc2F5aW5nIEVsYmVyZXRoLg=="},
   1789    {"They say that real hackers always are controlled.",
   1790     "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgYWx3YXlzIGFyZSBjb250cm9sbGVkLg=="},
   1791    {"They say that real hackers never sleep.",
   1792     "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgbmV2ZXIgc2xlZXAu"},
   1793    {"They say that shopkeepers are insured by Croesus himself!",
   1794     "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBhcmUgaW5zdXJlZCBieSBDcm9lc3VzIGhpbXNlb"
   1795     "GYh"},
   1796    {"They say that shopkeepers never carry more than 20 gold pieces, at "
   1797     "night.",
   1798     "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBjYXJyeSBtb3JlIHRoYW4gMjAgZ29sZ"
   1799     "CBwaWVjZXMsIGF0IG5pZ2h0Lg=="},
   1800    {"They say that shopkeepers never sell blessed potions of invisibility.",
   1801     "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBzZWxsIGJsZXNzZWQgcG90aW9ucyBvZ"
   1802     "iBpbnZpc2liaWxpdHku"},
   1803    {"They say that soldiers wear kid gloves and silly helmets.",
   1804     "VGhleSBzYXkgdGhhdCBzb2xkaWVycyB3ZWFyIGtpZCBnbG92ZXMgYW5kIHNpbGx5IGhlbG1ld"
   1805     "HMu"},
   1806    {"They say that some Kops are on the take.",
   1807     "VGhleSBzYXkgdGhhdCBzb21lIEtvcHMgYXJlIG9uIHRoZSB0YWtlLg=="},
   1808    {"They say that some guards' palms can be greased.",
   1809     "VGhleSBzYXkgdGhhdCBzb21lIGd1YXJkcycgcGFsbXMgY2FuIGJlIGdyZWFzZWQu"},
   1810    {"They say that some monsters may kiss your boots to stop your drum "
   1811     "playing.",
   1812     "VGhleSBzYXkgdGhhdCBzb21lIG1vbnN0ZXJzIG1heSBraXNzIHlvdXIgYm9vdHMgdG8gc3Rvc"
   1813     "CB5b3VyIGRydW0gcGxheWluZy4="},
   1814    {"They say that sometimes you can be the hit of the party when playing a "
   1815     "horn.",
   1816     "VGhleSBzYXkgdGhhdCBzb21ldGltZXMgeW91IGNhbiBiZSB0aGUgaGl0IG9mIHRoZSBwYXJ0e"
   1817     "SB3aGVuIHBsYXlpbmcgYSBob3JuLg=="},
   1818    {"They say that the NetHack gods generally welcome your sacrifices.",
   1819     "VGhleSBzYXkgdGhhdCB0aGUgTmV0SGFjayBnb2RzIGdlbmVyYWxseSB3ZWxjb21lIHlvdXIgc"
   1820     "2FjcmlmaWNlcy4="},
   1821    {"They say that the Three Rings are named Vilya, Nenya and Narya.",
   1822     "VGhleSBzYXkgdGhhdCB0aGUgVGhyZWUgUmluZ3MgYXJlIG5hbWVkIFZpbHlhLCBOZW55YSBhb"
   1823     "mQgTmFyeWEu"},
   1824    {"They say that the Wizard of Yendor has a death wish.",
   1825     "VGhleSBzYXkgdGhhdCB0aGUgV2l6YXJkIG9mIFllbmRvciBoYXMgYSBkZWF0aCB3aXNoLg="
   1826     "="},
   1827    {"They say that the `hair of the dog' is sometimes an effective remedy.",
   1828     "VGhleSBzYXkgdGhhdCB0aGUgYGhhaXIgb2YgdGhlIGRvZycgaXMgc29tZXRpbWVzIGFuIGVmZ"
   1829     "mVjdGl2ZSByZW1lZHku"},
   1830    {"They say that the best time to save your game is now before its too "
   1831     "late.",
   1832     "VGhleSBzYXkgdGhhdCB0aGUgYmVzdCB0aW1lIHRvIHNhdmUgeW91ciBnYW1lIGlzIG5vdyBiZ"
   1833     "WZvcmUgaXRzIHRvbyBsYXRlLg=="},
   1834    {"They say that the biggest obstacle in NetHack is your mind.",
   1835     "VGhleSBzYXkgdGhhdCB0aGUgYmlnZ2VzdCBvYnN0YWNsZSBpbiBOZXRIYWNrIGlzIHlvdXIgb"
   1836     "WluZC4="},
   1837    {"They say that the gods are angry when they hit you with objects.",
   1838     "VGhleSBzYXkgdGhhdCB0aGUgZ29kcyBhcmUgYW5ncnkgd2hlbiB0aGV5IGhpdCB5b3Ugd2l0a"
   1839     "CBvYmplY3RzLg=="},
   1840    {"They say that the priesthood are specially favored by the gods.",
   1841     "VGhleSBzYXkgdGhhdCB0aGUgcHJpZXN0aG9vZCBhcmUgc3BlY2lhbGx5IGZhdm9yZWQgYnkgd"
   1842     "GhlIGdvZHMu"},
   1843    {"They say that the way to make a unicorn happy is to give it what it "
   1844     "wants.",
   1845     "VGhleSBzYXkgdGhhdCB0aGUgd2F5IHRvIG1ha2UgYSB1bmljb3JuIGhhcHB5IGlzIHRvIGdpd"
   1846     "mUgaXQgd2hhdCBpdCB3YW50cy4="},
   1847    {"They say that there are no black or white stones, only gray.",
   1848     "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gYmxhY2sgb3Igd2hpdGUgc3RvbmVzLCBvbmx5I"
   1849     "GdyYXku"},
   1850    {"They say that there are no skeletons hence there are no skeleton keys.",
   1851     "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gc2tlbGV0b25zIGhlbmNlIHRoZXJlIGFyZSBub"
   1852     "yBza2VsZXRvbiBrZXlzLg=="},
   1853    {"They say that there is a clever rogue in every hacker just dying to "
   1854     "escape.",
   1855     "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBhIGNsZXZlciByb2d1ZSBpbiBldmVyeSBoYWNrZXIga"
   1856     "nVzdCBkeWluZyB0byBlc2NhcGUu"},
   1857    {"They say that there is no such thing as free advice.",
   1858     "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGZyZWUgYWR2aWNlLg="
   1859     "="},
   1860    {"They say that there is only one way to win at NetHack.",
   1861     "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgdG8gd2luIGF0IE5ldEhhY2s"
   1862     "u"},
   1863    {"They say that there once was a fearsome chaotic samurai named Luk No.",
   1864     "VGhleSBzYXkgdGhhdCB0aGVyZSBvbmNlIHdhcyBhIGZlYXJzb21lIGNoYW90aWMgc2FtdXJha"
   1865     "SBuYW1lZCBMdWsgTm8u"},
   1866    {"They say that there was a time when cursed holy water wasn't water.",
   1867     "VGhleSBzYXkgdGhhdCB0aGVyZSB3YXMgYSB0aW1lIHdoZW4gY3Vyc2VkIGhvbHkgd2F0ZXIgd"
   1868     "2Fzbid0IHdhdGVyLg=="},
   1869    {"They say that there's no point in crying over a gray ooze.",
   1870     "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGNyeWluZyBvdmVyIGEgZ3JheSBvb"
   1871     "3plLg=="},
   1872    {"They say that there's only hope left after you've opened Pandora's box.",
   1873     "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG9ubHkgaG9wZSBsZWZ0IGFmdGVyIHlvdSd2ZSBvcGVuZ"
   1874     "WQgUGFuZG9yYSdzIGJveC4="},
   1875    {"They say that trapdoors should always be marked `Caution: Trap Door'.",
   1876     "VGhleSBzYXkgdGhhdCB0cmFwZG9vcnMgc2hvdWxkIGFsd2F5cyBiZSBtYXJrZWQgYENhdXRpb"
   1877     "246IFRyYXAgRG9vcicu"},
   1878    {"They say that using an amulet of change isn't a difficult operation.",
   1879     "VGhleSBzYXkgdGhhdCB1c2luZyBhbiBhbXVsZXQgb2YgY2hhbmdlIGlzbid0IGEgZGlmZmljd"
   1880     "Wx0IG9wZXJhdGlvbi4="},
   1881    {"They say that water walking boots are better if you are fast like "
   1882     "Hermes.",
   1883     "VGhleSBzYXkgdGhhdCB3YXRlciB3YWxraW5nIGJvb3RzIGFyZSBiZXR0ZXIgaWYgeW91IGFyZ"
   1884     "SBmYXN0IGxpa2UgSGVybWVzLg=="},
   1885    {"They say that when you wear a circular amulet you might resemble a "
   1886     "troll.",
   1887     "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSB3ZWFyIGEgY2lyY3VsYXIgYW11bGV0IHlvdSBtaWdod"
   1888     "CByZXNlbWJsZSBhIHRyb2xsLg=="},
   1889    {"They say that when you're hungry you can get a pizza in 30 moves or it's "
   1890     "free.",
   1891     "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSdyZSBodW5ncnkgeW91IGNhbiBnZXQgYSBwaXp6YSBpb"
   1892     "iAzMCBtb3ZlcyBvciBpdCdzIGZyZWUu"},
   1893    {"They say that when your god is angry you should try another one.",
   1894     "VGhleSBzYXkgdGhhdCB3aGVuIHlvdXIgZ29kIGlzIGFuZ3J5IHlvdSBzaG91bGQgdHJ5IGFub"
   1895     "3RoZXIgb25lLg=="},
   1896    {"They say that wielding a unicorn horn takes strength.",
   1897     "VGhleSBzYXkgdGhhdCB3aWVsZGluZyBhIHVuaWNvcm4gaG9ybiB0YWtlcyBzdHJlbmd0aC4"
   1898     "="},
   1899    {"They say that with speed boots you never worry about hit and run "
   1900     "accidents.",
   1901     "VGhleSBzYXkgdGhhdCB3aXRoIHNwZWVkIGJvb3RzIHlvdSBuZXZlciB3b3JyeSBhYm91dCBoa"
   1902     "XQgYW5kIHJ1biBhY2NpZGVudHMu"},
   1903    {"They say that you can defeat a killer bee with a unicorn horn.",
   1904     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIGRlZmVhdCBhIGtpbGxlciBiZWUgd2l0aCBhIHVuaWNvc"
   1905     "m4gaG9ybi4="},
   1906    {"They say that you can only cross the River Styx in Charon's boat.",
   1907     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgY3Jvc3MgdGhlIFJpdmVyIFN0eXggaW4gQ2hhc"
   1908     "m9uJ3MgYm9hdC4="},
   1909    {"They say that you can only kill a lich once and then you'd better be "
   1910     "careful.",
   1911     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkga2lsbCBhIGxpY2ggb25jZSBhbmQgdGhlbiB5b"
   1912     "3UnZCBiZXR0ZXIgYmUgY2FyZWZ1bC4="},
   1913    {"They say that you can only wish for things you've already had.",
   1914     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgd2lzaCBmb3IgdGhpbmdzIHlvdSd2ZSBhbHJlY"
   1915     "WR5IGhhZC4="},
   1916    {"They say that you can train a cat by talking gently to it.",
   1917     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgY2F0IGJ5IHRhbGtpbmcgZ2VudGx5IHRvI"
   1918     "Gl0Lg=="},
   1919    {"They say that you can train a dog by talking firmly to it.",
   1920     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgZG9nIGJ5IHRhbGtpbmcgZmlybWx5IHRvI"
   1921     "Gl0Lg=="},
   1922    {"They say that you can trust your gold with the king.",
   1923     "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRydXN0IHlvdXIgZ29sZCB3aXRoIHRoZSBraW5nLg="
   1924     "="},
   1925    {"They say that you can't wipe your greasy bare hands on a blank scroll.",
   1926     "VGhleSBzYXkgdGhhdCB5b3UgY2FuJ3Qgd2lwZSB5b3VyIGdyZWFzeSBiYXJlIGhhbmRzIG9uI"
   1927     "GEgYmxhbmsgc2Nyb2xsLg=="},
   1928    {"They say that you cannot trust scrolls of rumor.",
   1929     "VGhleSBzYXkgdGhhdCB5b3UgY2Fubm90IHRydXN0IHNjcm9sbHMgb2YgcnVtb3Iu"},
   1930    {"They say that you could fall head over heels for an energy vortex.",
   1931     "VGhleSBzYXkgdGhhdCB5b3UgY291bGQgZmFsbCBoZWFkIG92ZXIgaGVlbHMgZm9yIGFuIGVuZ"
   1932     "XJneSB2b3J0ZXgu"},
   1933    {"They say that you need a key in order to open locked doors.",
   1934     "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIGtleSBpbiBvcmRlciB0byBvcGVuIGxvY2tlZCBkb"
   1935     "29ycy4="},
   1936    {"They say that you need a mirror to notice a mimic in an antique shop.",
   1937     "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIG1pcnJvciB0byBub3RpY2UgYSBtaW1pYyBpbiBhb"
   1938     "iBhbnRpcXVlIHNob3Au"},
   1939    {"They say that you really can use a pick-axe unless you really can't.",
   1940     "VGhleSBzYXkgdGhhdCB5b3UgcmVhbGx5IGNhbiB1c2UgYSBwaWNrLWF4ZSB1bmxlc3MgeW91I"
   1941     "HJlYWxseSBjYW4ndC4="},
   1942    {"They say that you should always store your tools in the cellar.",
   1943     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBzdG9yZSB5b3VyIHRvb2xzIGluIHRoZ"
   1944     "SBjZWxsYXIu"},
   1945    {"They say that you should be careful while climbing the ladder to "
   1946     "success.",
   1947     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hpbGUgY2xpbWJpbmcgdGhlI"
   1948     "GxhZGRlciB0byBzdWNjZXNzLg=="},
   1949    {"They say that you should call your armor `rustproof'.",
   1950     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGNhbGwgeW91ciBhcm1vciBgcnVzdHByb29mJy4"
   1951     "="},
   1952    {"They say that you should name your dog Spuds to have a cool pet.",
   1953     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciBkb2cgU3B1ZHMgdG8gaGF2ZSBhI"
   1954     "GNvb2wgcGV0Lg=="},
   1955    {"They say that you should name your weapon after your first monster kill.",
   1956     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciB3ZWFwb24gYWZ0ZXIgeW91ciBma"
   1957     "XJzdCBtb25zdGVyIGtpbGwu"},
   1958    {"They say that you should never introduce a rope golem to a succubus.",
   1959     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIGludHJvZHVjZSBhIHJvcGUgZ29sZW0gd"
   1960     "G8gYSBzdWNjdWJ1cy4="},
   1961    {"They say that you should never sleep near invisible ring wraiths.",
   1962     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHNsZWVwIG5lYXIgaW52aXNpYmxlIHJpb"
   1963     "mcgd3JhaXRocy4="},
   1964    {"They say that you should never try to leave the dungeon with a bag of "
   1965     "gems.",
   1966     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBsZWF2ZSB0aGUgZHVuZ2Vvb"
   1967     "iB3aXRoIGEgYmFnIG9mIGdlbXMu"},
   1968    {"They say that you should remove your armor before sitting on a throne.",
   1969     "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIHJlbW92ZSB5b3VyIGFybW9yIGJlZm9yZSBzaXR0a"
   1970     "W5nIG9uIGEgdGhyb25lLg=="},
   1971    {"This fortune cookie is copy protected.",
   1972     "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyBjb3B5IHByb3RlY3RlZC4="},
   1973    {"This fortune cookie is the property of Fortune Cookies, Inc.",
   1974     "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyB0aGUgcHJvcGVydHkgb2YgRm9ydHVuZSBDb29raWVzL"
   1975     "CBJbmMu"},
   1976    {"Tired? Try a scroll of charging on yourself.",
   1977     "VGlyZWQ/IFRyeSBhIHNjcm9sbCBvZiBjaGFyZ2luZyBvbiB5b3Vyc2VsZi4="},
   1978    {"To achieve the next higher rating, you need 3 more points.",
   1979     "VG8gYWNoaWV2ZSB0aGUgbmV4dCBoaWdoZXIgcmF0aW5nLCB5b3UgbmVlZCAzIG1vcmUgcG9pb"
   1980     "nRzLg=="},
   1981    {"To reach heaven, escape the dungeon while wearing a ring of levitation.",
   1982     "VG8gcmVhY2ggaGVhdmVuLCBlc2NhcGUgdGhlIGR1bmdlb24gd2hpbGUgd2VhcmluZyBhIHJpb"
   1983     "mcgb2YgbGV2aXRhdGlvbi4="},
   1984    {"Tourists wear shirts loud enough to wake the dead.",
   1985     "VG91cmlzdHMgd2VhciBzaGlydHMgbG91ZCBlbm91Z2ggdG8gd2FrZSB0aGUgZGVhZC4="},
   1986    {"Try calling your katana Moulinette.",
   1987     "VHJ5IGNhbGxpbmcgeW91ciBrYXRhbmEgTW91bGluZXR0ZS4="},
   1988    {"Ulch! That meat was painted!",
   1989     "VWxjaCEgVGhhdCBtZWF0IHdhcyBwYWludGVkIQ=="},
   1990    {"Unfortunately, this message was left intentionally blank.",
   1991     "VW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzYWdlIHdhcyBsZWZ0IGludGVudGlvbmFsbHkgYmxhb"
   1992     "msu"},
   1993    {"Using a morning star in the evening has no effect.",
   1994     "VXNpbmcgYSBtb3JuaW5nIHN0YXIgaW4gdGhlIGV2ZW5pbmcgaGFzIG5vIGVmZmVjdC4="},
   1995    {"Want a hint? Zap a wand of make invisible on your weapon!",
   1996     "V2FudCBhIGhpbnQ/"
   1997     "IFphcCBhIHdhbmQgb2YgbWFrZSBpbnZpc2libGUgb24geW91ciB3ZWFwb24h"},
   1998    {"Want to ascend in a hurry? Apply at Gizmonic Institute.",
   1999     "V2FudCB0byBhc2NlbmQgaW4gYSBodXJyeT8gQXBwbHkgYXQgR2l6bW9uaWMgSW5zdGl0dXRlL"
   2000     "g=="},
   2001    {"Wanted: shopkeepers. Send a scroll of mail to Mage of Yendor/Level "
   2002     "35/Dungeon.",
   2003     "V2FudGVkOiBzaG9wa2VlcGVycy4gU2VuZCBhIHNjcm9sbCBvZiBtYWlsIHRvIE1hZ2Ugb2YgW"
   2004     "WVuZG9yL0xldmVsIDM1L0R1bmdlb24u"},
   2005    {"Warning: fortune reading can be hazardous to your health.",
   2006     "V2FybmluZzogZm9ydHVuZSByZWFkaW5nIGNhbiBiZSBoYXphcmRvdXMgdG8geW91ciBoZWFsd"
   2007     "Ggu"},
   2008    {"We have new ways of detecting treachery...",
   2009     "V2UgaGF2ZSBuZXcgd2F5cyBvZiBkZXRlY3RpbmcgdHJlYWNoZXJ5Li4u"},
   2010    {"Wet towels make great weapons!",
   2011     "V2V0IHRvd2VscyBtYWtlIGdyZWF0IHdlYXBvbnMh"},
   2012    {"What a pity, you cannot read it!",
   2013     "V2hhdCBhIHBpdHksIHlvdSBjYW5ub3QgcmVhZCBpdCE="},
   2014    {"When a piercer drops in on you, you will be tempted to hit the ceiling!",
   2015     "V2hlbiBhIHBpZXJjZXIgZHJvcHMgaW4gb24geW91LCB5b3Ugd2lsbCBiZSB0ZW1wdGVkIHRvI"
   2016     "GhpdCB0aGUgY2VpbGluZyE="},
   2017    {"When in a maze follow the right wall and you will never get lost.",
   2018     "V2hlbiBpbiBhIG1hemUgZm9sbG93IHRoZSByaWdodCB3YWxsIGFuZCB5b3Ugd2lsbCBuZXZlc"
   2019     "iBnZXQgbG9zdC4="},
   2020    {"When you have a key, you don't have to wait for the guard.",
   2021     "V2hlbiB5b3UgaGF2ZSBhIGtleSwgeW91IGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIGd1Y"
   2022     "XJkLg=="},
   2023    {"Why are you wasting time reading fortunes?",
   2024     "V2h5IGFyZSB5b3Ugd2FzdGluZyB0aW1lIHJlYWRpbmcgZm9ydHVuZXM/"},
   2025    {"Wish for a master key and open the Magic Memory Vault!",
   2026     "V2lzaCBmb3IgYSBtYXN0ZXIga2V5IGFuZCBvcGVuIHRoZSBNYWdpYyBNZW1vcnkgVmF1bHQ"
   2027     "h"},
   2028    {"Wizard expects every monster to do its duty.",
   2029     "V2l6YXJkIGV4cGVjdHMgZXZlcnkgbW9uc3RlciB0byBkbyBpdHMgZHV0eS4="},
   2030    {"Wow! You could've had a potion of fruit juice!",
   2031     "V293ISBZb3UgY291bGQndmUgaGFkIGEgcG90aW9uIG9mIGZydWl0IGp1aWNlIQ=="},
   2032    {"Yet Another Silly Message (YASM).",
   2033     "WWV0IEFub3RoZXIgU2lsbHkgTWVzc2FnZSAoWUFTTSku"},
   2034    {"You are destined to be misled by a fortune.",
   2035     "WW91IGFyZSBkZXN0aW5lZCB0byBiZSBtaXNsZWQgYnkgYSBmb3J0dW5lLg=="},
   2036    {"You can get a genuine Amulet of Yendor by doing the following: --More--",
   2037     "WW91IGNhbiBnZXQgYSBnZW51aW5lIEFtdWxldCBvZiBZZW5kb3IgYnkgZG9pbmcgdGhlIGZvb"
   2038     "Gxvd2luZzogLS1Nb3JlLS0="},
   2039    {"You can protect yourself from black dragons by doing the following: "
   2040     "--More--",
   2041     "WW91IGNhbiBwcm90ZWN0IHlvdXJzZWxmIGZyb20gYmxhY2sgZHJhZ29ucyBieSBkb2luZyB0a"
   2042     "GUgZm9sbG93aW5nOiAtLU1vcmUtLQ=="},
   2043    {"You can't get by the snake.", "WW91IGNhbid0IGdldCBieSB0aGUgc25ha2Uu"},
   2044    {"You feel like someone is pulling your leg.",
   2045     "WW91IGZlZWwgbGlrZSBzb21lb25lIGlzIHB1bGxpbmcgeW91ciBsZWcu"},
   2046    {"You have to outwit the Sphynx or pay her.",
   2047     "WW91IGhhdmUgdG8gb3V0d2l0IHRoZSBTcGh5bnggb3IgcGF5IGhlci4="},
   2048    {"You hear the fortune cookie's hissing!",
   2049     "WW91IGhlYXIgdGhlIGZvcnR1bmUgY29va2llJ3MgaGlzc2luZyE="},
   2050    {"You may get rich selling letters, but beware of being blackmailed!",
   2051     "WW91IG1heSBnZXQgcmljaCBzZWxsaW5nIGxldHRlcnMsIGJ1dCBiZXdhcmUgb2YgYmVpbmcgY"
   2052     "mxhY2ttYWlsZWQh"},
   2053    {"You offend Shai-Hulud by sheathing your crysknife without having drawn "
   2054     "blood.",
   2055     "WW91IG9mZmVuZCBTaGFpLUh1bHVkIGJ5IHNoZWF0aGluZyB5b3VyIGNyeXNrbmlmZSB3aXRob"
   2056     "3V0IGhhdmluZyBkcmF3biBibG9vZC4="},
   2057    {"You swallowed the fortune!", "WW91IHN3YWxsb3dlZCB0aGUgZm9ydHVuZSE="},
   2058    {"You want to regain strength? Two levels ahead is a guesthouse!",
   2059     "WW91IHdhbnQgdG8gcmVnYWluIHN0cmVuZ3RoPyBUd28gbGV2ZWxzIGFoZWFkIGlzIGEgZ3Vlc"
   2060     "3Rob3VzZSE="},
   2061    {"You will encounter a tall, dark, and gruesome creature...",
   2062     "WW91IHdpbGwgZW5jb3VudGVyIGEgdGFsbCwgZGFyaywgYW5kIGdydWVzb21lIGNyZWF0dXJlL"
   2063     "i4u"},
   2064 
   2065    {"The End", "VGhlIEVuZA=="}};
   2066 
   2067 /* PL_Base64Encode, random strings */
   2068 PRBool test_004(void) {
   2069  int i;
   2070  char result[4096];
   2071 
   2072  printf(
   2073      "Test 004 (PL_Base64Encode, random strings)                            "
   2074      "...");
   2075  fflush(stdout);
   2076 
   2077  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2078    PRUint32 plen = PL_strlen(array[i].plaintext);
   2079    PRUint32 clen = ((plen + 2) / 3) * 4;
   2080 
   2081    char* rv = PL_Base64Encode(array[i].plaintext, plen, result);
   2082 
   2083    if (rv != result) {
   2084      printf("FAIL\n\t(%d): return value\n", i);
   2085      return PR_FALSE;
   2086    }
   2087 
   2088    if (0 != PL_strncmp(result, array[i].cyphertext, clen)) {
   2089      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
   2090             array[i].plaintext, array[i].cyphertext, clen, result);
   2091      return PR_FALSE;
   2092    }
   2093  }
   2094 
   2095  printf("PASS\n");
   2096  return PR_TRUE;
   2097 }
   2098 
   2099 /* PL_Base64Encode, single characters, malloc */
   2100 PRBool test_005(void) {
   2101  PRUint32 a, b;
   2102  unsigned char plain[4];
   2103  unsigned char cypher[5];
   2104  char* rv;
   2105 
   2106  printf(
   2107      "Test 005 (PL_Base64Encode, single characters, malloc)                 "
   2108      "...");
   2109  fflush(stdout);
   2110 
   2111  plain[1] = plain[2] = plain[3] = (unsigned char)0;
   2112  cypher[2] = cypher[3] = (unsigned char)'=';
   2113  cypher[4] = (unsigned char)0;
   2114 
   2115  for (a = 0; a < 64; a++) {
   2116    cypher[0] = base[a];
   2117 
   2118    for (b = 0; b < 4; b++) {
   2119      plain[0] = (unsigned char)(a * 4 + b);
   2120      cypher[1] = base[(b * 16)];
   2121 
   2122      rv = PL_Base64Encode((char*)plain, 1, (char*)0);
   2123      if ((char*)0 == rv) {
   2124        printf("FAIL\n\t(%d, %d): no return value\n", a, b);
   2125        return PR_FALSE;
   2126      }
   2127 
   2128      if (0 != PL_strcmp((char*)cypher, rv)) {
   2129        printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, cypher,
   2130               rv);
   2131        PR_DELETE(rv);
   2132        return PR_FALSE;
   2133      }
   2134 
   2135      PR_DELETE(rv);
   2136    }
   2137  }
   2138 
   2139  printf("PASS\n");
   2140  return PR_TRUE;
   2141 }
   2142 
   2143 /* PL_Base64Encode, double characters, malloc */
   2144 PRBool test_006(void) {
   2145  PRUint32 a, b, c, d;
   2146  unsigned char plain[4];
   2147  unsigned char cypher[5];
   2148  char* rv;
   2149 
   2150  printf(
   2151      "Test 006 (PL_Base64Encode, double characters, malloc)                 "
   2152      "...");
   2153  fflush(stdout);
   2154 
   2155  plain[2] = plain[3] = (unsigned char)0;
   2156  cypher[3] = (unsigned char)'=';
   2157  cypher[4] = (unsigned char)0;
   2158 
   2159  for (a = 0; a < 64; a++) {
   2160    cypher[0] = base[a];
   2161    for (b = 0; b < 4; b++) {
   2162      plain[0] = (a * 4) + b;
   2163      for (c = 0; c < 16; c++) {
   2164        cypher[1] = base[b * 16 + c];
   2165        for (d = 0; d < 16; d++) {
   2166          plain[1] = c * 16 + d;
   2167          cypher[2] = base[d * 4];
   2168 
   2169          rv = PL_Base64Encode((char*)plain, 2, (char*)0);
   2170          if ((char*)0 == rv) {
   2171            printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
   2172            return PR_FALSE;
   2173          }
   2174 
   2175          if (0 != PL_strcmp((char*)cypher, rv)) {
   2176            printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
   2177                   a, b, c, d, cypher, rv);
   2178            PR_DELETE(rv);
   2179            return PR_FALSE;
   2180          }
   2181 
   2182          PR_DELETE(rv);
   2183        }
   2184      }
   2185    }
   2186  }
   2187 
   2188  printf("PASS\n");
   2189  return PR_TRUE;
   2190 }
   2191 
   2192 /* PL_Base64Encode, triple characters, malloc */
   2193 PRBool test_007(void) {
   2194  PRUint32 a, b, c, d, e, f;
   2195  unsigned char plain[4];
   2196  unsigned char cypher[5];
   2197  char* rv;
   2198 
   2199  printf(
   2200      "Test 007 (PL_Base64Encode, triple characters, malloc)                 "
   2201      "...");
   2202  fflush(stdout);
   2203 
   2204  cypher[4] = (unsigned char)0;
   2205 
   2206  for (a = 0; a < 64; a++) {
   2207    cypher[0] = base[a];
   2208    for (b = 0; b < 4; b++) {
   2209      plain[0] = (a * 4) + b;
   2210      for (c = 0; c < 16; c++) {
   2211        cypher[1] = base[b * 16 + c];
   2212        for (d = 0; d < 16; d++) {
   2213          plain[1] = c * 16 + d;
   2214          for (e = 0; e < 4; e++) {
   2215            cypher[2] = base[d * 4 + e];
   2216            for (f = 0; f < 64; f++) {
   2217              plain[2] = e * 64 + f;
   2218              cypher[3] = base[f];
   2219 
   2220              rv = PL_Base64Encode((char*)plain, 3, (char*)0);
   2221              if ((char*)0 == rv) {
   2222                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a,
   2223                       b, c, d, e, f);
   2224                return PR_FALSE;
   2225              }
   2226 
   2227              if (0 != PL_strcmp((char*)cypher, rv)) {
   2228                printf(
   2229                    "FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
   2230                    "\"%.4s.\"\n",
   2231                    a, b, c, d, e, f, cypher, rv);
   2232                PR_DELETE(rv);
   2233                return PR_FALSE;
   2234              }
   2235 
   2236              PR_DELETE(rv);
   2237            }
   2238          }
   2239        }
   2240      }
   2241    }
   2242  }
   2243 
   2244  printf("PASS\n");
   2245  return PR_TRUE;
   2246 }
   2247 
   2248 /* PL_Base64Encode, random strings, malloc */
   2249 PRBool test_008(void) {
   2250  int i;
   2251 
   2252  printf(
   2253      "Test 008 (PL_Base64Encode, random strings, malloc)                    "
   2254      "...");
   2255  fflush(stdout);
   2256 
   2257  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2258    PRUint32 plen = PL_strlen(array[i].plaintext);
   2259    PRUint32 clen = ((plen + 2) / 3) * 4;
   2260 
   2261    char* rv = PL_Base64Encode(array[i].plaintext, plen, (char*)0);
   2262 
   2263    if ((char*)0 == rv) {
   2264      printf("FAIL\n\t(%d): no return value\n", i);
   2265      return PR_FALSE;
   2266    }
   2267 
   2268    if (0 != PL_strcmp(rv, array[i].cyphertext)) {
   2269      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
   2270             array[i].plaintext, array[i].cyphertext, rv);
   2271      return PR_FALSE;
   2272    }
   2273  }
   2274 
   2275  printf("PASS\n");
   2276  return PR_TRUE;
   2277 }
   2278 
   2279 /* PL_Base64Decode, single characters */
   2280 PRBool test_009(void) {
   2281  PRUint32 a, b;
   2282  unsigned char plain[4];
   2283  unsigned char cypher[5];
   2284  char result[8];
   2285  char* rv;
   2286 
   2287  printf(
   2288      "Test 009 (PL_Base64Decode, single characters, equals)                 "
   2289      "...");
   2290  fflush(stdout);
   2291 
   2292  plain[1] = plain[2] = plain[3] = (unsigned char)0;
   2293  cypher[2] = cypher[3] = (unsigned char)'=';
   2294  cypher[4] = (unsigned char)0;
   2295 
   2296  for (a = 0; a < 64; a++) {
   2297    cypher[0] = base[a];
   2298 
   2299    for (b = 0; b < 4; b++) {
   2300      plain[0] = (unsigned char)(a * 4 + b);
   2301      cypher[1] = base[(b * 16)];
   2302 
   2303      rv = PL_Base64Decode((char*)cypher, 4, result);
   2304      if (rv != result) {
   2305        printf("FAIL\n\t(%d, %d): return value\n", a, b);
   2306        return PR_FALSE;
   2307      }
   2308 
   2309      if (0 != PL_strncmp((char*)plain, result, 1)) {
   2310        printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n", a, b,
   2311               plain, result);
   2312        return PR_FALSE;
   2313      }
   2314    }
   2315  }
   2316 
   2317  printf("PASS\n");
   2318  return PR_TRUE;
   2319 }
   2320 
   2321 /* PL_Base64Decode, single characters */
   2322 PRBool test_010(void) {
   2323  PRUint32 a, b;
   2324  unsigned char plain[4];
   2325  unsigned char cypher[5];
   2326  char result[8];
   2327  char* rv;
   2328 
   2329  printf(
   2330      "Test 010 (PL_Base64Decode, single characters, no equals)              "
   2331      "...");
   2332  fflush(stdout);
   2333 
   2334  plain[1] = plain[2] = plain[3] = (unsigned char)0;
   2335  cypher[2] = cypher[3] = (unsigned char)0;
   2336  cypher[4] = (unsigned char)0;
   2337 
   2338  for (a = 0; a < 64; a++) {
   2339    cypher[0] = base[a];
   2340 
   2341    for (b = 0; b < 4; b++) {
   2342      plain[0] = (unsigned char)(a * 4 + b);
   2343      cypher[1] = base[(b * 16)];
   2344 
   2345      rv = PL_Base64Decode((char*)cypher, 2, result);
   2346      if (rv != result) {
   2347        printf("FAIL\n\t(%d, %d): return value\n", a, b);
   2348        return PR_FALSE;
   2349      }
   2350 
   2351      if (0 != PL_strncmp((char*)plain, result, 1)) {
   2352        printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n", a, b,
   2353               plain, result);
   2354        return PR_FALSE;
   2355      }
   2356    }
   2357  }
   2358 
   2359  printf("PASS\n");
   2360  return PR_TRUE;
   2361 }
   2362 
   2363 /* PL_Base64Decode, double characters */
   2364 PRBool test_011(void) {
   2365  PRUint32 a, b, c, d;
   2366  unsigned char plain[4];
   2367  unsigned char cypher[5];
   2368  char result[8];
   2369  char* rv;
   2370 
   2371  printf(
   2372      "Test 011 (PL_Base64Decode, double characters, equals)                 "
   2373      "...");
   2374  fflush(stdout);
   2375 
   2376  plain[2] = plain[3] = (unsigned char)0;
   2377  cypher[3] = (unsigned char)'=';
   2378  cypher[4] = (unsigned char)0;
   2379 
   2380  for (a = 0; a < 64; a++) {
   2381    cypher[0] = base[a];
   2382    for (b = 0; b < 4; b++) {
   2383      plain[0] = (a * 4) + b;
   2384      for (c = 0; c < 16; c++) {
   2385        cypher[1] = base[b * 16 + c];
   2386        for (d = 0; d < 16; d++) {
   2387          plain[1] = c * 16 + d;
   2388          cypher[2] = base[d * 4];
   2389 
   2390          rv = PL_Base64Decode((char*)cypher, 4, result);
   2391          if (rv != result) {
   2392            printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
   2393            return PR_FALSE;
   2394          }
   2395 
   2396          if (0 != PL_strncmp((char*)plain, result, 2)) {
   2397            printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
   2398                   a, b, c, d, plain, result);
   2399            return PR_FALSE;
   2400          }
   2401        }
   2402      }
   2403    }
   2404  }
   2405 
   2406  printf("PASS\n");
   2407  return PR_TRUE;
   2408 }
   2409 
   2410 /* PL_Base64Decode, double characters */
   2411 PRBool test_012(void) {
   2412  PRUint32 a, b, c, d;
   2413  unsigned char plain[4];
   2414  unsigned char cypher[5];
   2415  char result[8];
   2416  char* rv;
   2417 
   2418  printf(
   2419      "Test 012 (PL_Base64Decode, double characters, no equals)              "
   2420      "...");
   2421  fflush(stdout);
   2422 
   2423  plain[2] = plain[3] = (unsigned char)0;
   2424  cypher[3] = (unsigned char)0;
   2425  cypher[4] = (unsigned char)0;
   2426 
   2427  for (a = 0; a < 64; a++) {
   2428    cypher[0] = base[a];
   2429    for (b = 0; b < 4; b++) {
   2430      plain[0] = (a * 4) + b;
   2431      for (c = 0; c < 16; c++) {
   2432        cypher[1] = base[b * 16 + c];
   2433        for (d = 0; d < 16; d++) {
   2434          plain[1] = c * 16 + d;
   2435          cypher[2] = base[d * 4];
   2436 
   2437          rv = PL_Base64Decode((char*)cypher, 3, result);
   2438          if (rv != result) {
   2439            printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a, b, c, d);
   2440            return PR_FALSE;
   2441          }
   2442 
   2443          if (0 != PL_strncmp((char*)plain, result, 2)) {
   2444            printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
   2445                   a, b, c, d, cypher, result);
   2446            return PR_FALSE;
   2447          }
   2448        }
   2449      }
   2450    }
   2451  }
   2452 
   2453  printf("PASS\n");
   2454  return PR_TRUE;
   2455 }
   2456 
   2457 /* PL_Base64Decode, triple characters */
   2458 PRBool test_013(void) {
   2459  PRUint32 a, b, c, d, e, f;
   2460  unsigned char plain[4];
   2461  unsigned char cypher[5];
   2462  char result[8];
   2463  char* rv;
   2464 
   2465  printf(
   2466      "Test 013 (PL_Base64Decode, triple characters)                         "
   2467      "...");
   2468  fflush(stdout);
   2469 
   2470  cypher[4] = (unsigned char)0;
   2471 
   2472  for (a = 0; a < 64; a++) {
   2473    cypher[0] = base[a];
   2474    for (b = 0; b < 4; b++) {
   2475      plain[0] = (a * 4) + b;
   2476      for (c = 0; c < 16; c++) {
   2477        cypher[1] = base[b * 16 + c];
   2478        for (d = 0; d < 16; d++) {
   2479          plain[1] = c * 16 + d;
   2480          for (e = 0; e < 4; e++) {
   2481            cypher[2] = base[d * 4 + e];
   2482            for (f = 0; f < 64; f++) {
   2483              plain[2] = e * 64 + f;
   2484              cypher[3] = base[f];
   2485 
   2486              rv = PL_Base64Decode((char*)cypher, 4, result);
   2487              if (rv != result) {
   2488                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a, b,
   2489                       c, d, e, f);
   2490                return PR_FALSE;
   2491              }
   2492 
   2493              if (0 != PL_strncmp((char*)plain, result, 3)) {
   2494                printf(
   2495                    "FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
   2496                    "\"%.3s.\"\n",
   2497                    a, b, c, d, e, f, plain, result);
   2498                return PR_FALSE;
   2499              }
   2500            }
   2501          }
   2502        }
   2503      }
   2504    }
   2505  }
   2506 
   2507  printf("PASS\n");
   2508  return PR_TRUE;
   2509 }
   2510 
   2511 /* PL_Base64Decode, random strings */
   2512 PRBool test_014(void) {
   2513  int i;
   2514  char result[4096];
   2515 
   2516  printf(
   2517      "Test 014 (PL_Base64Decode, random strings, equals)                    "
   2518      "...");
   2519  fflush(stdout);
   2520 
   2521  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2522    PRUint32 clen = PL_strlen(array[i].cyphertext);
   2523    PRUint32 plen = (clen * 3) / 4;
   2524 
   2525    char* rv = PL_Base64Decode(array[i].cyphertext, clen, result);
   2526 
   2527    if (rv != result) {
   2528      printf("FAIL\n\t(%d): return value\n", i);
   2529      return PR_FALSE;
   2530    }
   2531 
   2532    if (0 == (clen & 3)) {
   2533      if ('=' == array[i].cyphertext[clen - 1]) {
   2534        if ('=' == array[i].cyphertext[clen - 2]) {
   2535          plen -= 2;
   2536        } else {
   2537          plen -= 1;
   2538        }
   2539      }
   2540    }
   2541 
   2542    if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
   2543      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
   2544             array[i].cyphertext, array[i].plaintext, plen, result);
   2545      return PR_FALSE;
   2546    }
   2547  }
   2548 
   2549  printf("PASS\n");
   2550  return PR_TRUE;
   2551 }
   2552 
   2553 /* PL_Base64Decode, random strings */
   2554 PRBool test_015(void) {
   2555  int i;
   2556  char buffer[4096];
   2557  char result[4096];
   2558  char* rv;
   2559 
   2560  printf(
   2561      "Test 015 (PL_Base64Decode, random strings, no equals)                 "
   2562      "...");
   2563  fflush(stdout);
   2564 
   2565  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2566    PRUint32 clen, plen;
   2567 
   2568    PL_strcpy(buffer, array[i].cyphertext);
   2569    clen = PL_strlen(buffer);
   2570 
   2571    if (0 == (clen & 3)) {
   2572      if ('=' == buffer[clen - 1]) {
   2573        if ('=' == buffer[clen - 2]) {
   2574          buffer[clen - 2] = buffer[clen - 1] = (char)0;
   2575          clen -= 2;
   2576        } else {
   2577          buffer[clen - 1] = (char)0;
   2578          clen -= 1;
   2579        }
   2580      }
   2581    }
   2582 
   2583    plen = (clen * 3) / 4;
   2584 
   2585    rv = PL_Base64Decode(buffer, clen, result);
   2586 
   2587    if (rv != result) {
   2588      printf("FAIL\n\t(%d): return value\n", i);
   2589      return PR_FALSE;
   2590    }
   2591 
   2592    if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
   2593      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
   2594             array[i].cyphertext, array[i].plaintext, plen, result);
   2595      return PR_FALSE;
   2596    }
   2597  }
   2598 
   2599  printf("PASS\n");
   2600  return PR_TRUE;
   2601 }
   2602 
   2603 /* PL_Base64Decode, single characters, malloc */
   2604 PRBool test_016(void) {
   2605  PRUint32 a, b;
   2606  unsigned char plain[4];
   2607  unsigned char cypher[5];
   2608  char* rv;
   2609 
   2610  printf(
   2611      "Test 016 (PL_Base64Decode, single characters, equals, malloc)         "
   2612      "...");
   2613  fflush(stdout);
   2614 
   2615  plain[1] = plain[2] = plain[3] = (unsigned char)0;
   2616  cypher[2] = cypher[3] = (unsigned char)'=';
   2617  cypher[4] = (unsigned char)0;
   2618 
   2619  for (a = 0; a < 64; a++) {
   2620    cypher[0] = base[a];
   2621 
   2622    for (b = 0; b < 4; b++) {
   2623      plain[0] = (unsigned char)(a * 4 + b);
   2624      cypher[1] = base[(b * 16)];
   2625 
   2626      rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
   2627      if ((char*)0 == rv) {
   2628        printf("FAIL\n\t(%d, %d): no return value\n", a, b);
   2629        return PR_FALSE;
   2630      }
   2631 
   2632      if (0 != PL_strcmp((char*)plain, rv)) {
   2633        printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, plain,
   2634               rv);
   2635        PR_DELETE(rv);
   2636        return PR_FALSE;
   2637      }
   2638 
   2639      PR_DELETE(rv);
   2640    }
   2641  }
   2642 
   2643  printf("PASS\n");
   2644  return PR_TRUE;
   2645 }
   2646 
   2647 /* PL_Base64Decode, single characters, malloc */
   2648 PRBool test_017(void) {
   2649  PRUint32 a, b;
   2650  unsigned char plain[4];
   2651  unsigned char cypher[5];
   2652  char* rv;
   2653 
   2654  printf(
   2655      "Test 017 (PL_Base64Decode, single characters, no equals, malloc)      "
   2656      "...");
   2657  fflush(stdout);
   2658 
   2659  plain[1] = plain[2] = plain[3] = (unsigned char)0;
   2660  cypher[2] = cypher[3] = (unsigned char)0;
   2661  cypher[4] = (unsigned char)0;
   2662 
   2663  for (a = 0; a < 64; a++) {
   2664    cypher[0] = base[a];
   2665 
   2666    for (b = 0; b < 4; b++) {
   2667      plain[0] = (unsigned char)(a * 4 + b);
   2668      cypher[1] = base[(b * 16)];
   2669 
   2670      rv = PL_Base64Decode((char*)cypher, 2, (char*)0);
   2671      if ((char*)0 == rv) {
   2672        printf("FAIL\n\t(%d, %d): no return value\n", a, b);
   2673        return PR_FALSE;
   2674      }
   2675 
   2676      if (0 != PL_strcmp((char*)plain, rv)) {
   2677        printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n", a, b, plain,
   2678               rv);
   2679        PR_DELETE(rv);
   2680        return PR_FALSE;
   2681      }
   2682 
   2683      PR_DELETE(rv);
   2684    }
   2685  }
   2686 
   2687  printf("PASS\n");
   2688  return PR_TRUE;
   2689 }
   2690 
   2691 /* PL_Base64Decode, double characters, malloc */
   2692 PRBool test_018(void) {
   2693  PRUint32 a, b, c, d;
   2694  unsigned char plain[4];
   2695  unsigned char cypher[5];
   2696  char* rv;
   2697 
   2698  printf(
   2699      "Test 018 (PL_Base64Decode, double characters, equals, malloc)         "
   2700      "...");
   2701  fflush(stdout);
   2702 
   2703  plain[2] = plain[3] = (unsigned char)0;
   2704  cypher[3] = (unsigned char)'=';
   2705  cypher[4] = (unsigned char)0;
   2706 
   2707  for (a = 0; a < 64; a++) {
   2708    cypher[0] = base[a];
   2709    for (b = 0; b < 4; b++) {
   2710      plain[0] = (a * 4) + b;
   2711      for (c = 0; c < 16; c++) {
   2712        cypher[1] = base[b * 16 + c];
   2713        for (d = 0; d < 16; d++) {
   2714          plain[1] = c * 16 + d;
   2715          cypher[2] = base[d * 4];
   2716 
   2717          rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
   2718          if ((char*)0 == rv) {
   2719            printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
   2720            return PR_FALSE;
   2721          }
   2722 
   2723          if (0 != PL_strcmp((char*)plain, rv)) {
   2724            printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
   2725                   a, b, c, d, plain, rv);
   2726            PR_DELETE(rv);
   2727            return PR_FALSE;
   2728          }
   2729 
   2730          PR_DELETE(rv);
   2731        }
   2732      }
   2733    }
   2734  }
   2735 
   2736  printf("PASS\n");
   2737  return PR_TRUE;
   2738 }
   2739 
   2740 /* PL_Base64Decode, double characters, malloc */
   2741 PRBool test_019(void) {
   2742  PRUint32 a, b, c, d;
   2743  unsigned char plain[4];
   2744  unsigned char cypher[5];
   2745  char* rv;
   2746 
   2747  printf(
   2748      "Test 019 (PL_Base64Decode, double characters, no equals, malloc)      "
   2749      "...");
   2750  fflush(stdout);
   2751 
   2752  plain[2] = plain[3] = (unsigned char)0;
   2753  cypher[3] = (unsigned char)0;
   2754  cypher[4] = (unsigned char)0;
   2755 
   2756  for (a = 0; a < 64; a++) {
   2757    cypher[0] = base[a];
   2758    for (b = 0; b < 4; b++) {
   2759      plain[0] = (a * 4) + b;
   2760      for (c = 0; c < 16; c++) {
   2761        cypher[1] = base[b * 16 + c];
   2762        for (d = 0; d < 16; d++) {
   2763          plain[1] = c * 16 + d;
   2764          cypher[2] = base[d * 4];
   2765 
   2766          rv = PL_Base64Decode((char*)cypher, 3, (char*)0);
   2767          if ((char*)0 == rv) {
   2768            printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a, b, c, d);
   2769            return PR_FALSE;
   2770          }
   2771 
   2772          if (0 != PL_strcmp((char*)plain, rv)) {
   2773            printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
   2774                   a, b, c, d, cypher, rv);
   2775            PR_DELETE(rv);
   2776            return PR_FALSE;
   2777          }
   2778 
   2779          PR_DELETE(rv);
   2780        }
   2781      }
   2782    }
   2783  }
   2784 
   2785  printf("PASS\n");
   2786  return PR_TRUE;
   2787 }
   2788 
   2789 /* PL_Base64Decode, triple characters, malloc */
   2790 PRBool test_020(void) {
   2791  PRUint32 a, b, c, d, e, f;
   2792  unsigned char plain[4];
   2793  unsigned char cypher[5];
   2794  char* rv;
   2795 
   2796  printf(
   2797      "Test 020 (PL_Base64Decode, triple characters, malloc)                 "
   2798      "...");
   2799  fflush(stdout);
   2800 
   2801  cypher[4] = (unsigned char)0;
   2802  plain[3] = (unsigned char)0;
   2803 
   2804  for (a = 0; a < 64; a++) {
   2805    cypher[0] = base[a];
   2806    for (b = 0; b < 4; b++) {
   2807      plain[0] = (a * 4) + b;
   2808      for (c = 0; c < 16; c++) {
   2809        cypher[1] = base[b * 16 + c];
   2810        for (d = 0; d < 16; d++) {
   2811          plain[1] = c * 16 + d;
   2812          for (e = 0; e < 4; e++) {
   2813            cypher[2] = base[d * 4 + e];
   2814            for (f = 0; f < 64; f++) {
   2815              plain[2] = e * 64 + f;
   2816              cypher[3] = base[f];
   2817 
   2818              rv = PL_Base64Decode((char*)cypher, 4, (char*)0);
   2819              if ((char*)0 == rv) {
   2820                printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a,
   2821                       b, c, d, e, f);
   2822                return PR_FALSE;
   2823              }
   2824 
   2825              if (0 != PL_strcmp((char*)plain, rv)) {
   2826                printf(
   2827                    "FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got "
   2828                    "\"%.3s.\"\n",
   2829                    a, b, c, d, e, f, plain, rv);
   2830                PR_DELETE(rv);
   2831                return PR_FALSE;
   2832              }
   2833 
   2834              PR_DELETE(rv);
   2835            }
   2836          }
   2837        }
   2838      }
   2839    }
   2840  }
   2841 
   2842  printf("PASS\n");
   2843  return PR_TRUE;
   2844 }
   2845 
   2846 /* PL_Base64Decode, random strings, malloc */
   2847 PRBool test_021(void) {
   2848  int i;
   2849 
   2850  printf(
   2851      "Test 021 (PL_Base64Decode, random strings, equals, malloc)            "
   2852      "...");
   2853  fflush(stdout);
   2854 
   2855  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2856    PRUint32 clen = PL_strlen(array[i].cyphertext);
   2857 
   2858    char* rv = PL_Base64Decode(array[i].cyphertext, clen, (char*)0);
   2859 
   2860    if ((char*)0 == rv) {
   2861      printf("FAIL\n\t(%d): no return value\n", i);
   2862      return PR_FALSE;
   2863    }
   2864 
   2865    if (0 != PL_strcmp(rv, array[i].plaintext)) {
   2866      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
   2867             array[i].cyphertext, array[i].plaintext, rv);
   2868      PR_DELETE(rv);
   2869      return PR_FALSE;
   2870    }
   2871 
   2872    PR_DELETE(rv);
   2873  }
   2874 
   2875  printf("PASS\n");
   2876  return PR_TRUE;
   2877 }
   2878 
   2879 /* PL_Base64Encode, random strings, malloc */
   2880 PRBool test_022(void) {
   2881  int i;
   2882  char buffer[4096];
   2883  char* rv;
   2884 
   2885  printf(
   2886      "Test 022 (PL_Base64Decode, random strings, no equals, malloc)         "
   2887      "...");
   2888  fflush(stdout);
   2889 
   2890  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2891    PRUint32 clen;
   2892 
   2893    PL_strcpy(buffer, array[i].cyphertext);
   2894    clen = PL_strlen(buffer);
   2895 
   2896    if (0 == (clen & 3)) {
   2897      if ('=' == buffer[clen - 1]) {
   2898        if ('=' == buffer[clen - 2]) {
   2899          buffer[clen - 2] = buffer[clen - 1] = (char)0;
   2900          clen -= 2;
   2901        } else {
   2902          buffer[clen - 1] = (char)0;
   2903          clen -= 1;
   2904        }
   2905      }
   2906    }
   2907 
   2908    rv = PL_Base64Decode(buffer, clen, (char*)0);
   2909 
   2910    if ((char*)0 == rv) {
   2911      printf("FAIL\n\t(%d): no return value\n", i);
   2912      return PR_FALSE;
   2913    }
   2914 
   2915    if (0 != PL_strcmp(rv, array[i].plaintext)) {
   2916      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
   2917             array[i].cyphertext, array[i].plaintext, rv);
   2918      return PR_FALSE;
   2919    }
   2920  }
   2921 
   2922  printf("PASS\n");
   2923  return PR_TRUE;
   2924 }
   2925 
   2926 /* PL_Base64Encode, random strings */
   2927 PRBool test_023(void) {
   2928  int i;
   2929  char result[4096];
   2930 
   2931  printf(
   2932      "Test 023 (PL_Base64Encode, random strings, strlen)                    "
   2933      "...");
   2934  fflush(stdout);
   2935 
   2936  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2937    PRUint32 plen = PL_strlen(array[i].plaintext);
   2938    PRUint32 clen = ((plen + 2) / 3) * 4;
   2939 
   2940    char* rv = PL_Base64Encode(array[i].plaintext, 0, result);
   2941 
   2942    if (rv != result) {
   2943      printf("FAIL\n\t(%d): return value\n", i);
   2944      return PR_FALSE;
   2945    }
   2946 
   2947    if (0 != PL_strncmp(result, array[i].cyphertext, clen)) {
   2948      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
   2949             array[i].plaintext, array[i].cyphertext, clen, result);
   2950      return PR_FALSE;
   2951    }
   2952  }
   2953 
   2954  printf("PASS\n");
   2955  return PR_TRUE;
   2956 }
   2957 
   2958 /* PL_Base64Encode, random strings, malloc */
   2959 PRBool test_024(void) {
   2960  int i;
   2961 
   2962  printf(
   2963      "Test 024 (PL_Base64Encode, random strings, malloc, strlen)            "
   2964      "...");
   2965  fflush(stdout);
   2966 
   2967  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   2968    PRUint32 plen = PL_strlen(array[i].plaintext);
   2969    PRUint32 clen = ((plen + 2) / 3) * 4;
   2970 
   2971    char* rv = PL_Base64Encode(array[i].plaintext, 0, (char*)0);
   2972 
   2973    if ((char*)0 == rv) {
   2974      printf("FAIL\n\t(%d): no return value\n", i);
   2975      return PR_FALSE;
   2976    }
   2977 
   2978    if (0 != PL_strcmp(rv, array[i].cyphertext)) {
   2979      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
   2980             array[i].plaintext, array[i].cyphertext, rv);
   2981      return PR_FALSE;
   2982    }
   2983  }
   2984 
   2985  printf("PASS\n");
   2986  return PR_TRUE;
   2987 }
   2988 
   2989 /* PL_Base64Decode, random strings */
   2990 PRBool test_025(void) {
   2991  int i;
   2992  char result[4096];
   2993 
   2994  printf(
   2995      "Test 025 (PL_Base64Decode, random strings, equals, strlen)            "
   2996      "...");
   2997  fflush(stdout);
   2998 
   2999  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   3000    PRUint32 clen = PL_strlen(array[i].cyphertext);
   3001    PRUint32 plen = (clen * 3) / 4;
   3002 
   3003    char* rv = PL_Base64Decode(array[i].cyphertext, 0, result);
   3004 
   3005    if (rv != result) {
   3006      printf("FAIL\n\t(%d): return value\n", i);
   3007      return PR_FALSE;
   3008    }
   3009 
   3010    if (0 == (clen & 3)) {
   3011      if ('=' == array[i].cyphertext[clen - 1]) {
   3012        if ('=' == array[i].cyphertext[clen - 2]) {
   3013          plen -= 2;
   3014        } else {
   3015          plen -= 1;
   3016        }
   3017      }
   3018    }
   3019 
   3020    if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
   3021      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
   3022             array[i].cyphertext, array[i].plaintext, plen, result);
   3023      return PR_FALSE;
   3024    }
   3025  }
   3026 
   3027  printf("PASS\n");
   3028  return PR_TRUE;
   3029 }
   3030 
   3031 /* PL_Base64Decode, random strings */
   3032 PRBool test_026(void) {
   3033  int i;
   3034  char buffer[4096];
   3035  char result[4096];
   3036  char* rv;
   3037 
   3038  printf(
   3039      "Test 026 (PL_Base64Decode, random strings, no equals, strlen)         "
   3040      "...");
   3041  fflush(stdout);
   3042 
   3043  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   3044    PRUint32 clen, plen;
   3045 
   3046    PL_strcpy(buffer, array[i].cyphertext);
   3047    clen = PL_strlen(buffer);
   3048 
   3049    if (0 == (clen & 3)) {
   3050      if ('=' == buffer[clen - 1]) {
   3051        if ('=' == buffer[clen - 2]) {
   3052          buffer[clen - 2] = buffer[clen - 1] = (char)0;
   3053          clen -= 2;
   3054        } else {
   3055          buffer[clen - 1] = (char)0;
   3056          clen -= 1;
   3057        }
   3058      }
   3059    }
   3060 
   3061    plen = (clen * 3) / 4;
   3062 
   3063    rv = PL_Base64Decode(buffer, 0, result);
   3064 
   3065    if (rv != result) {
   3066      printf("FAIL\n\t(%d): return value\n", i);
   3067      return PR_FALSE;
   3068    }
   3069 
   3070    if (0 != PL_strncmp(result, array[i].plaintext, plen)) {
   3071      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n", i,
   3072             array[i].cyphertext, array[i].plaintext, plen, result);
   3073      return PR_FALSE;
   3074    }
   3075  }
   3076 
   3077  printf("PASS\n");
   3078  return PR_TRUE;
   3079 }
   3080 
   3081 /* PL_Base64Decode, random strings, malloc */
   3082 PRBool test_027(void) {
   3083  int i;
   3084 
   3085  printf(
   3086      "Test 027 (PL_Base64Decode, random strings, equals, malloc, strlen)    "
   3087      "...");
   3088  fflush(stdout);
   3089 
   3090  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   3091    PRUint32 clen = PL_strlen(array[i].cyphertext);
   3092 
   3093    char* rv = PL_Base64Decode(array[i].cyphertext, 0, (char*)0);
   3094 
   3095    if ((char*)0 == rv) {
   3096      printf("FAIL\n\t(%d): no return value\n", i);
   3097      return PR_FALSE;
   3098    }
   3099 
   3100    if (0 != PL_strcmp(rv, array[i].plaintext)) {
   3101      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
   3102             array[i].cyphertext, array[i].plaintext, rv);
   3103      PR_DELETE(rv);
   3104      return PR_FALSE;
   3105    }
   3106 
   3107    PR_DELETE(rv);
   3108  }
   3109 
   3110  printf("PASS\n");
   3111  return PR_TRUE;
   3112 }
   3113 
   3114 /* PL_Base64Encode, random strings, malloc */
   3115 PRBool test_028(void) {
   3116  int i;
   3117  char buffer[4096];
   3118  char* rv;
   3119 
   3120  printf(
   3121      "Test 028 (PL_Base64Decode, random strings, no equals, malloc, strlen) "
   3122      "...");
   3123  fflush(stdout);
   3124 
   3125  for (i = 0; i < sizeof(array) / sizeof(array[0]); i++) {
   3126    PRUint32 clen;
   3127 
   3128    PL_strcpy(buffer, array[i].cyphertext);
   3129    clen = PL_strlen(buffer);
   3130 
   3131    if (0 == (clen & 3)) {
   3132      if ('=' == buffer[clen - 1]) {
   3133        if ('=' == buffer[clen - 2]) {
   3134          buffer[clen - 2] = buffer[clen - 1] = (char)0;
   3135          clen -= 2;
   3136        } else {
   3137          buffer[clen - 1] = (char)0;
   3138          clen -= 1;
   3139        }
   3140      }
   3141    }
   3142 
   3143    rv = PL_Base64Decode(buffer, 0, (char*)0);
   3144 
   3145    if ((char*)0 == rv) {
   3146      printf("FAIL\n\t(%d): no return value\n", i);
   3147      return PR_FALSE;
   3148    }
   3149 
   3150    if (0 != PL_strcmp(rv, array[i].plaintext)) {
   3151      printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n", i,
   3152             array[i].cyphertext, array[i].plaintext, rv);
   3153      return PR_FALSE;
   3154    }
   3155  }
   3156 
   3157  printf("PASS\n");
   3158  return PR_TRUE;
   3159 }
   3160 
   3161 int main(int argc, char* argv[]) {
   3162  printf("Testing the Portable Library base64 functions:\n");
   3163  printf("(warning: the \"triple characters\" tests are slow)\n");
   3164 
   3165  if (1 && test_001() && test_002() && test_003() && test_004() && test_005() &&
   3166      test_006() && test_007() && test_008() && test_009() && test_010() &&
   3167      test_011() && test_012() && test_013() && test_014() && test_015() &&
   3168      test_016() && test_017() && test_018() && test_019() && test_020() &&
   3169      test_021() && test_022() && test_023() && test_024() && test_025() &&
   3170      test_026() && test_027() && test_028()) {
   3171    printf("Suite passed.\n");
   3172    return 0;
   3173  } else {
   3174    printf("Suite failed.\n");
   3175    return 1;
   3176  }
   3177 
   3178  /*NOTREACHED*/
   3179 }