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 }