| ofs | hex dump | ascii | 
|---|
| 0000 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 00 00 00 00 00 00 00 00 00 00 00 | elnode-20190702.1509/........... | 
| 0020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0060 | 00 00 00 00 30 30 30 30 37 35 35 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000755.0000000.0000000.0000 | 
| 0080 | 30 30 30 30 30 30 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 32 32 36 32 00 20 35 00 00 00 | 0000000.00000000000.012262..5... | 
| 00a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 00e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0100 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 0120 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 0140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 01a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 01c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 01e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0200 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 64 65 66 61 75 6c 74 2d 77 65 62 | elnode-20190702.1509/default-web | 
| 0220 | 73 65 72 76 65 72 2d 69 6d 61 67 65 2e 70 6e 67    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | server-image.png................ | 
| 0240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0260 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 0280 | 30 30 31 37 37 30 35 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 37 35 31 30 00 20 30 00 00 00 | 0017705.00000000000.017510..0... | 
| 02a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 02c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 02e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0300 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 0320 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 0340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 03a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 03c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 03e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0400 | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52    00 00 01 2c 00 00 00 b4 08 03 00 00 00 19 e1 e1 | .PNG........IHDR...,............ | 
| 0420 | dd 00 00 03 00 50 4c 54 45 00 00 00 60 a0 bf 00    66 99 cc e0 eb 43 43 43 ca c8 c7 a3 a3 a3 31 7c | .....PLTE...`...f....CCC......1| | 
| 0440 | a3 fe fe fe 1c 1c 1c d9 d5 d5 c0 be be 85 85 85    15 6f 9c a5 c9 db 8a a1 ae d8 e8 ef 64 64 64 a4 | .................o..........ddd. | 
| 0460 | c4 d5 68 92 a7 5e 90 a9 8d b5 ca e9 f1 f6 d0 cd    cd e3 e0 df b9 b8 b7 2b 2b 2b c8 c6 c6 82 a0 b0 | ..h..^.................+++...... | 
| 0480 | a6 b0 b7 e1 dd dd b7 cc da 73 73 73 21 74 9e 0c    6d 9d 0a 0a 0a 4b 86 a4 e9 e8 e7 b6 ba bd b2 c1 | .........sss!t..m....K.......... | 
| 04a0 | ca 93 93 93 c1 c0 bf bc ba ba b9 bd c0 54 54 54    b8 b6 b6 c2 d2 dc 3c 3c 3c d3 d0 cf 04 68 9a db | .............TTT......<<<....h.. | 
| 04c0 | d8 d7 96 c0 d5 ed f4 f8 72 aa c7 b5 b4 b4 3c 8a    b1 55 99 bb c4 c1 c2 e9 e5 e5 c2 c5 c8 19 74 a3 | ........r.....<..U............t. | 
| 04e0 | f5 f0 ef f1 ed ed 89 b1 c6 b1 b5 b8 85 ad c2 cc    c9 ca 2b 7c a5 7a 9a aa 33 33 33 a5 ac af 99 99 | ..................+|.z..333..... | 
| 0500 | 99 f3 f1 f2 49 92 b6 ab bc c5 6b 6b 6b 9c a7 ad    33 85 ad d5 d1 d1 90 b7 cb 13 13 13 24 24 24 dd | ....I.....kkk...3...........$$$. | 
| 0520 | d9 d9 e3 df e0 4b 4b 4b 52 89 a5 6a a6 c3 be d1    db 5b 5b 5b e5 e1 e1 6f 98 ac c1 d9 e6 e1 ed f3 | .....KKKR..j.....[[[...o........ | 
| 0540 | 79 79 79 db d7 d8 8a 8a 8a ed e9 ea 51 91 b3 82    b4 cd d2 cf d0 2b 7f a9 99 c2 d6 a2 b3 bd 78 ae | yyy.........Q........+........x. | 
| 0560 | c9 ab cc dd ea e6 e8 8d ac bd ca c7 c8 3a 7f a2    44 8b af 74 a4 bd a5 ad b0 d2 e4 ed 93 bd d2 f4 | .............:..D..t............ | 
| 0580 | f8 fa c1 bf c0 cd dc e5 22 7a a6 8b ba d0 f3 ef    f0 1e 78 a5 b9 b7 b8 b4 d2 e1 5d 8d a6 92 a5 af | ........"z........x.......]..... | 
| 05a0 | 9c af b9 65 a2 c1 9f c5 d9 13 72 a0 51 97 b8 5a    9c bd 69 9a b3 ab ab ab 6c 95 aa b0 af af 70 97 | ...e......r.Q..Z..i.....l.....p. | 
| 05c0 | ac 84 9d ab 4a 8e b1 bb d6 e3 80 a7 bc 27 7d a9    4e 95 b8 7b b0 ca db e9 f1 c6 dd e8 6f a9 c5 74 | ....J........'}.N..{........o..t | 
| 05e0 | 9c b0 ac b6 bd 42 83 a4 99 ab b4 34 80 a7 ad b1    b4 aa ae b1 94 a9 b3 cc d8 df 7c 9e b0 54 8c a9 | .....B.....4..............|..T.. | 
| 0600 | ac be c8 c9 df e9 2d 80 aa 8f a8 b5 f0 f6 f9 bc    c5 cb 4c 88 a6 59 95 b4 a5 b7 c1 71 99 ad 43 8e | ......-...........L..Y.....q..C. | 
| 0620 | b4 3b 80 a3 91 b9 ce 75 ac c8 c8 d1 d8 a2 c7 da    7c a4 b9 ae c0 ca 60 8f a7 16 70 9c 82 aa bf 64 | .;.....u........|.....`...p....d | 
| 0640 | 92 aa 8d a4 b0 93 a6 b0 9e b0 bb 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0660 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0680 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 06e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 0720 | 00 00 00 00 00 00 00 00 00 38 7a 78 34 00 00 00    09 70 48 59 73 00 00 0e c3 00 00 0e c3 01 c7 6f | .........8zx4....pHYs..........o | 
| 0740 | a8 64 00 00 1c 6b 49 44 41 54 78 da e4 9a 21 8f    24 37 10 85 57 39 52 f2 e3 29 50 92 99 49 4b 25 | .d...kIDATx...!.$7..W9R..)P..IK% | 
| 0760 | 59 8a 54 d2 80 69 10 14 34 e0 1a 44 21 56 a3 25    66 5d ec 34 7f 63 c0 80 05 01 a1 61 fb ff 02 ba | Y.T..i..4..D!V.%f].4.c.....a.... | 
| 0780 | 7b 66 f7 12 70 89 4e 1e af e2 5f 50 fa fc de ab    72 75 3f 51 5f 67 a1 8e cf d3 3f d4 9b 62 4c cb | {f..p.N..._P....ru?Q_g....?..bL. | 
| 07a0 | c3 48 15 11 ce 39 7e 08 58 8b 40 4d bd e6 d4 ba    94 b8 5e 10 c3 85 b9 86 e9 03 c0 12 0c 40 89 81 | .H...9~.X.@M......^..........@.. | 
| 07c0 | dd e3 43 2c 08 85 48 15 91 f0 11 60 a1 16 9a 58    dc fd d8 b2 92 92 c6 91 88 22 14 2e e2 ee 92 3a | ..C,..H....`...X.........".....: | 
| 07e0 | 87 15 05 5e 27 5a b2 00 f0 da 14 d6 38 8e 44 54    a1 70 07 00 e1 a5 6f 58 01 ce 44 f4 59 80 41 d1 | ...^'Z......8.DT.p....oX..D.Y.A. | 
| 0800 | 52 5a d3 3c a7 48 29 ba 1a 00 a8 02 b5 f4 0d 4b    24 8f 44 94 a1 66 a6 68 59 ed 1c 63 19 89 55 cd | RZ.<.H)........K$.D..f.hY..c..U. | 
| 0820 | 14 50 b3 c1 39 76 0d 8b 69 24 5a 58 d4 cc cc 90    9b 76 c3 18 16 12 98 99 01 50 1b ba 33 e2 7b 58 | .P..9v..i$ZX.....v.......P..3.{X | 
| 0840 | f3 48 23 51 10 6c b0 b8 65 29 73 29 0b 31 56 65    c1 4c 15 5c 3a 86 15 88 8e 14 e5 06 ab 69 c2 53 | .H#Q.l..e)s).1Ve.L.\:........i.S | 
| 0860 | 29 31 09 6c b5 a1 42 4d 85 3b 86 15 69 24 62 71    98 99 99 79 db 5a 53 a0 88 3b 2c 33 43 9d fa 85 | )1.l..BM.;..i$bq...y.ZS..;,3C... | 
| 0880 | 95 68 a4 f0 b3 00 6b cd ad 2f b6 d0 b8 6a 5a 37    69 ab e7 7e 61 d1 42 bf c5 2a 00 a0 66 90 b6 36 | .h....k../...jZ7i..~a.B..*..f..6 | 
| 08a0 | a4 99 02 a0 a6 66 1b 2c f3 ae 22 fe 3d ac 29 05    ae 22 8e 6d 74 90 c6 d5 fc 12 d7 6e a8 ba c1 b2 | .....f.,..".=.)..".mt......n.... | 
| 08c0 | ae c6 f8 a7 f7 fb 86 a9 70 95 dd 86 d6 1c 16 11    8b aa 99 0e bb b4 70 ea 77 74 88 bb b2 1e 05 ab | ........p.............p.wt...... | 
| 08e0 | b0 9a 19 b0 4b ab 71 43 fe 57 01 bf c2 92 35 b3    1e 01 6b ca aa 6a b8 29 cb 7c e9 1c 96 af b0 14 | ....K.qC.W....5...k..j.).|...... | 
| 0900 | 32 b6 ae 67 ce 03 06 b3 4d da 66 8a d8 2b ac e9    6b 1b 36 af f4 c8 18 74 d8 94 dd 9b 0f bf 0a f8 | 2..g....M.f..+..k.6....t........ | 
| 0920 | 77 ca 32 3c 60 01 97 d6 6b 1a 36 56 a6 de 29 ac    e3 14 03 cb 1b 65 1d da 3f 37 8e 02 35 db 5d 68 | w.2<`...k.6V..)......e..?7..5.]h | 
| 0940 | 66 e8 14 56 9c ee 01 bf da b0 bd 07 46 56 dd 76    34 1b ac a5 4f 58 21 96 cc 7c b7 e1 e0 ed db 21 | f..V........FV.v4...OX!..|.....! | 
| 0960 | 85 75 e1 70 83 a5 bd c2 5a 95 e5 fb 50 aa 38 34    6f 87 c7 e8 fa 41 60 dd 95 b5 c2 6a 9f f0 73 14 | .u.p....Z...P.84o....A`....j..s. | 
| 0980 | 33 60 4d 78 b8 f6 6b c3 a9 84 cc 22 87 7d cc 81    37 4f f8 29 0a 0c f0 b5 1b 57 74 0b 2b c7 18 de | 3`Mx..k....".}..7O.).....Wt.+... | 
| 09a0 | 66 96 69 fb 29 27 c5 aa 06 88 aa a9 30 43 87 3e    61 cd 1c 63 e1 5a c5 6f 6f b3 c1 5b fb 70 4a 02 | f.i.)'......0C.>a..c.Z.oo..[.pJ. | 
| 09c0 | 33 38 00 e7 9c bb 55 56 e1 10 43 de b6 0e fb 43    56 96 d6 b0 5c 15 07 87 c2 39 67 d5 4e e7 2c a9 | 38....UV..C....CV...\....9g.N.,. | 
| 09e0 | 5c 42 d8 32 6b 5b 55 a2 f1 47 fc 65 0a a2 06 30    4c 25 9f b2 f6 3a 94 ba d7 50 c2 b6 d0 da 95 d5 | \B.2k[U..G.e...0L%...:...P...... | 
| 0a00 | 58 5a 73 5c 04 06 88 1a 6a 0e 8c 5e 95 05 97 1c    02 f3 7d fb 67 a6 8d 1b 62 4a f3 1a 59 a6 c2 a1 | XZs\....j..^......}.g...bJ..Y... | 
| 0a20 | 67 58 10 de 61 ed 33 a1 02 9e 9a 46 56 80 02 02    03 87 90 45 d1 6b 66 c1 f9 14 4e 5c df 26 bc 36 | gX..a.3....FV......E.kf...N\.&.6 | 
| 0a40 | 35 e2 98 e6 cf 30 83 00 ce 9c 19 8f 58 40 7e 13    ac e5 80 ca 21 e4 95 d6 70 4b 2d 97 d2 cc 84 69 | 5....0......X@~.....!...pK-....i | 
| 0a60 | 64 00 02 a8 40 2b 6b b7 b0 88 21 9c c3 1e f1 db    5c 3a 00 22 3c b7 d1 d5 b4 44 60 fb e5 08 60 51 | d...@+k...!.....\:."<....D`...`Q | 
| 0a80 | ed 77 f9 27 ce 21 84 cc ef 47 2d 40 84 a7 16 ba    3a 8e 73 05 e0 50 35 05 33 00 74 f4 05 ff e9 f7 | .w.'.!...G-@....:.s..P5.3.t..... | 
| 0aa0 | 4f 6f ce cb eb f3 cb cb 9f 2f 7f 3c bf 5e 2e d7    eb f5 7c 3e 9f cf e7 eb f5 72 b9 bc 3e ff fa e9 | Oo......./.<.^....|>.....r..>... | 
| 0ac0 | 6f e7 c7 ef 5a 4a 49 cb 94 a2 e8 f6 39 5c 9d d7    5f 36 3b 82 f5 e5 87 ff 7e 7e fa 9e d3 68 5a e8 | o...ZJI.....9\.._6;.....~~...hZ. | 
| 0ae0 | 44 54 01 11 a8 c1 01 81 2a 10 e6 ff 0f ac 6f eb    a4 71 9a c7 48 44 59 5c 2a fe e2 de ec 55 2c 39 | DT......*.....o..q..HDY\*....U,9 | 
| 0b00 | 62 28 1c 8e 90 62 a3 e0 80 02 43 25 03 05 8a 1a    26 a8 82 9d 9b 38 99 1b 4c 45 4e 44 c7 56 56 f5 | b(...b....C%....&....8..LEND.VV. | 
| 0b20 | 2e fb 0e 0e 1c f8 0d 1d 74 df bb eb bf 68 58 18    ae 82 7e 80 8f d3 55 47 a5 23 d9 2a a4 8a 88 3c | ........t....hX...~...UG.#.*...< | 
| 0b40 | 8b e0 f3 1c f1 3f 18 d6 30 53 75 67 8d d2 fe 17    5b 1f a5 11 11 13 61 41 01 d9 aa ac 5a 37 a9 b5 | .....?..0Sug....[.....aA....Z7.. | 
| 0b60 | 8a c8 e7 71 5a 3f 0c 56 1b 83 23 82 83 99 fd 56    d7 ab bb aa ba ba 47 30 87 71 70 98 f5 d1 fa 3e | ...qZ?.V..#....V......G0.qp....> | 
| 0b80 | 13 d0 60 5d 22 15 ab 1e b2 92 5a a5 da 43 c0 fa    a9 44 44 b8 bb bb be ff 43 2d 7b 6f 7d 8c 61 ce | ..`]".....Z..C...DD.....C-{o}.a. | 
| 0ba0 | ec 7a 2b 57 57 77 f7 2b 33 07 9b 31 47 c4 7b 29    b4 93 69 66 f4 c2 90 2a 70 95 23 a3 25 5b fd 44 | .z+WWw.+3..1G.{)..if...*p.#.%[.D | 
| 0bc0 | 0d cf 87 60 7d 31 0b 76 77 66 bf 3a c7 77 ff 59    eb 6d 36 6a d4 87 31 bb de 71 e5 a9 2b 67 0e 66 | ...`}1.vwf.:.w.Y.m6j..1..q..+g.f | 
| 0be0 | 36 b6 18 16 fb 9c fc f2 c2 9d ba 29 6a 15 36 96    b3 6a dd 1e 05 d6 b0 08 66 77 57 55 75 bf ab 6b | 6..........)j.6..j......fwWUu..k | 
| 0c00 | b6 46 d4 a9 11 05 bb ab ea ab 26 52 35 d5 0f 69    79 58 8c 88 08 0b b3 d9 79 09 f4 17 ea 85 b1 a4 | .F........&R5..iyX......y....... | 
| 0c20 | 22 c2 51 bf b1 7a 0c 58 bf f7 61 c6 ee aa a9 99    a9 7e 5b f8 e9 7d 4e da e7 6c e5 98 80 bc 00 58 | ".Q..z.X..a......~[..}N..l.....X | 
| 0c40 | 79 10 75 f7 ab 33 6b 09 e6 60 77 f7 eb 92 34 eb    44 85 13 22 e2 a1 f8 5e 58 eb 41 0e f8 32 c6 55 | y.u..3k..`w...4.D.."...^X.A..2.U | 
| 0c60 | 55 33 33 33 91 aa 3e 89 a8 f7 46 44 b3 f7 11 ae    c7 64 0d 90 85 cc 11 11 16 c1 0a 40 44 0f 8f 2e | U333..>...FD.....d.........@D... | 
| 0c80 | 41 dc 89 fa af ef fa 22 22 b2 52 ea b3 c8 d1 9f    7e a6 ee f0 63 b0 7a 29 c6 9a 09 00 48 64 a6 3b | A......"".R.....~...c.z)....Hd.; | 
| 0ca0 | b7 d9 db 24 a2 b9 5b f8 39 85 4c 4f 68 58 29 76    4c db e4 34 51 22 75 31 95 ae 9d 0a bf 26 ce dd | ...$..[.9.LOhX)vL..4Q"u1.....&.. | 
| 0cc0 | 8a c3 64 9d 81 8b cf d3 f0 7c ec 36 a4 52 4c 33    13 0b 40 76 a4 3a 9b cd 39 8f 56 cf 4e 2a 60 b2 | ..d......|.6.RL3..@v.:..9.V.N*`. | 
| 0ce0 | d7 d4 b6 9b e7 b1 14 74 1b cd c3 d5 9a 8d c1 a3    f0 c2 92 6f b5 d6 92 4d b6 ad 6e f2 18 d6 e1 cb | .......t...........o...M..n..... | 
| 0d00 | 1c 66 ac c0 02 80 54 a4 3a b3 51 27 22 2a ad 1c    ac 36 dd f7 dd 38 38 6f 01 fb 7b 9c 68 a1 37 a2 | .f....T.:.Q'"*...6...88o..{.h.7. | 
| 0d20 | 08 56 ce 25 7f 63 05 c8 73 ad 75 ab 55 c6 43 c0    fa b3 84 19 ab 26 16 32 01 78 b0 fb ec 73 12 51 | .V.%.c..s.u.U.C......&.2.x...s.Q | 
| 0d40 | bf eb aa 0f a2 38 48 dc b3 31 5b 15 91 a5 d4 fa    2c ac 8a bc 51 c2 29 ab 25 52 6b dd b6 5a 6b 7f | .....8H..1[.....,...Q.).%Rk..Zk. | 
| 0d60 | 0c 58 66 c1 9a aa 40 2a d6 7a b5 62 a3 74 da b9    d0 e4 93 95 66 a3 82 73 1b a7 6e 5b dd 6a dd 44 | .Xf...@*.z.b.t......f..s..n[.j.D | 
| 0d80 | 54 33 75 70 b4 11 e7 58 57 a4 8a 00 22 b2 e4 64    75 64 a6 e7 43 c0 fa 83 99 35 55 15 9a 09 59 d9 | T3up...XW..."..dud..C....5U...Y. | 
| 0da0 | 7b e9 7b 9b 44 b4 b3 62 89 ac 05 a1 a1 0a a9 b5    42 21 99 00 32 01 56 40 d5 79 e7 5c 77 9f 70 bc | {.{.D..b........B!..2.V@.y.\w.p. | 
| 0dc0 | fb ad b5 d6 92 7b 38 e4 f3 3c c2 ff 37 ac 9f df    de 2e ff ae a7 e3 fb f4 f5 ed 72 79 7b ba 5c 2e | .....{8..<..7.............ry{.\. | 
| 0de0 | bf 29 fb 6b 9e de 1c 58 ba ef 8d 26 d1 ec e5 5d    f5 b0 0c 8b 08 c7 59 85 70 28 44 e4 e5 b8 3b b1 | .).k...X...&...]......Y.p(D...;. | 
| 0e00 | f0 17 35 e7 ca 23 3b 12 43 61 6a b9 7e 80 81 a5    c3 42 46 8a 54 a8 a5 01 1d d0 e8 a2 80 18 0d b1 | ..5..#;.Caj.~....BF.T........... | 
| 0e20 | b2 d8 ac ad fd ff 0b 5c e9 c9 dc d5 d5 b6 b4 a4    bb 40 50 d0 27 3f 8e 4f 3d 54 64 38 fe e5 8f 66 | .......\.........@P.'?.O=Td8...f | 
| 0e40 | 6b 2d 35 b3 55 5c 15 2c 79 71 58 7f 13 dd f9 26    cc 0e 67 76 77 77 07 e0 80 bb 03 ce 98 3a 33 0b | k-5.U\.,yqX....&..gvww.......:3. | 
| 0e60 | 8b 68 dc 0a 56 68 ca 86 61 79 da d0 95 1a 4c e5    7d b6 8c ae 19 1a d9 52 b5 a5 a6 36 d5 08 39 7a | .h..Vh..ay....L.}......R...6..9z | 
| 0e80 | 60 f6 52 20 9a 05 eb 68 03 af 33 47 ff 19 16 d1    95 a5 33 97 8a 74 77 2b 52 ec 70 de b0 76 77 96 | `.R....h..3G......3..tw+R.p..vw. | 
| 0ea0 | b8 45 68 45 d6 2d 54 83 41 44 0b 0c 9b eb a7 aa    ea 8d 77 8d d6 72 08 31 ad 63 85 a9 a9 11 d9 5a | .EhE.-T.AD........w..r.1.c.....Z | 
| 0ec0 | 66 9d 16 d0 cc 0c 88 0e 5a 95 93 03 d6 2b 1d 0c    f9 33 2c a2 45 44 3a 3b 36 60 db 60 06 c0 b9 d8 | f.......Z....+...3,.ED:;6`.`.... | 
| 0ee0 | 6d 80 f7 5b 88 68 c4 98 90 43 05 4c 44 04 00 3d    33 53 a3 2f 3d 2b b3 52 73 48 8c fa 8a 68 16 d0 | m..[.h...C.LD..=3S./=+.RsH...h.. | 
| 0f00 | 63 95 eb d0 6f 9a 65 36 1c 17 52 e8 3d 60 d1 5d    4a 66 02 ee 30 83 bb b3 03 ee 66 80 77 11 09 0d | c...o.e6..R.=`.]Jf..0.....f.w... | 
| 0f20 | a9 39 5a 42 44 bc c4 28 bc eb 67 a6 76 d6 9c 3f    aa 62 9f b9 94 d4 48 55 8d 08 1d e9 17 be ef 66 | .9ZBD..(..g.v..?.b....HU.......f | 
| 0f40 | eb e7 b8 45 77 c0 c2 bb c0 2a 5a ee 27 58 d8 18    ee 3b 00 77 ee 22 21 0f 03 a6 77 01 2d 77 32 b8 | ...Ew....*Z.'X...;.w."!...w.-w2. | 
| 0f60 | 77 cd 96 da 3d 3f 6a 72 d1 54 cd cf 1c 09 a9 0f    78 63 52 8a 50 15 df 44 22 46 5b 9c 5f ef 64 f7 | w...=?jr.T......xcR.P..D"F[._.d. | 
| 0f80 | 7f c1 22 82 44 67 18 00 33 8c b8 c2 06 0c 5a 7d    98 7a c3 51 b8 11 d1 d7 97 1f b0 18 6d be cc 73 | ..".Dg..3.....Z}.z.Q........m..s | 
| 0fa0 | cb 96 2d 33 5b b6 d4 76 54 a5 12 9f a7 2c 14 51    3d b6 0c 0f f9 da ec 9d 60 d1 95 6f dd 1d 00 cc | ..-3[..vT....,.Q=.......`..o.... | 
| 0fc0 | 36 87 c3 1d 28 5c db 56 66 d6 ca 6b 67 66 e6 e8    84 3b c1 b9 8b b6 d4 60 0c 1b fd 3c c9 1c ab 62 | 6...(\.Vf..kgf...;.....`...<...b | 
| 0fe0 | ee 94 9e 8f 36 78 82 f5 42 15 eb 19 58 44 72 5b    dd 2b b4 6a 39 7c 73 54 b9 77 5e d7 be 31 33 33 | ....6x..B...XDr[.+.j9|sT.w^..133 | 
| 1000 | 7b 77 22 72 70 97 50 d5 10 8f 7a a5 61 38 53 97    cb fc f1 71 76 15 da a1 ba 1e d1 36 0e c1 1f ac | {w"rp.P...z.a8S....qv......6.... | 
| 1020 | 5e 67 d4 79 16 d6 bd 57 dd 32 00 06 03 b0 6d df    b8 98 7b 67 66 76 66 38 13 5d c1 bd f7 50 8d 60 | ^g.y...W.2....m...{gfvf8.]...P.` | 
| 1040 | cb b9 8c 98 63 80 9e 2f 23 70 5a 9b e7 8f 33 b3    f3 75 9d 6f 56 af f5 1e cd 33 b0 88 20 9d 2b 13 | ....c../#pZ...3..u.oV....3....+. | 
| 1060 | a7 12 10 8e a1 4f 81 b1 4d c3 d3 04 d8 fd 17 19    0f 41 2f 0c b4 da fe ff 3e d5 7e 99 8f fd ad f6 | .....O..M........A/.....>.~..... | 
| 1080 | 9d 9e f9 f3 d4 ce e3 1a eb fc 5a 97 ef 9f 84 45    c6 9d dd 1d 56 eb 28 f7 b0 51 e9 1d 13 d8 be 96 | ..........Z....E....V.(..Q...... | 
| 10a0 | 2b dd f7 2d 44 6f 2c c2 58 06 ac 6f 54 0f c3 a1    cd f3 6f 25 ec f2 78 fd e2 11 57 7a 7f 4b 58 64 | +..-Do,.X..oT.....o%..x...Wz.KXd | 
| 10c0 | 6b 67 66 37 1c b4 0a 19 cc 0c 0e 00 10 c0 96 2b    5d 77 88 c8 ea 2a 8c 65 6d 97 cb 7c 32 66 2a 66 | kgf7...........+]w...*.em..|2f*f | 
| 10e0 | 4e 35 fe f2 1b 33 6d ed f1 ff 47 7b b9 87 7b 9e    84 45 53 67 3e 72 d1 cc 6c 9a 0c f0 62 56 91 b6 | N5...3m...G{..{..ESg>r..l...bV.. | 
| 1100 | f0 b2 ef 74 9f 26 5f d7 55 82 37 bb 4a fb 71 67    a9 b2 f0 1c 4c 3f 58 0d dd 30 1f 31 76 a5 77 85 | ...t.&_.U.7.J.qg....L?X..0.1v.w. | 
| 1120 | 45 e0 dd 3b 8f b6 68 36 4d d3 54 01 56 35 1f 13    f6 6a 07 fb e4 2c bd b3 ed d4 2e b3 8a 9e 3d bf | E..;..h6M.T.V5...j...,........=. | 
| 1140 | 47 1a 1e 8d ef 1b d5 21 b2 0e 56 0b bd 07 ac 67    d6 5f fb 3e 8d 12 36 4d 30 40 88 a8 0c 1a b7 0d | G......!..V....g._.>..6M0@...... | 
| 1160 | cc 0b a1 5d 12 6b fc 0b d6 dc 7e af 5a 99 aa 63    6f 63 1e 89 fa 82 4f 25 fe 0f 58 d3 b4 ef fb d7 | ...].k....~.Z..coc....O%..X..... | 
| 1180 | d7 be 9b ed cb b4 10 11 2d 44 b4 2f d7 e5 ba 18    78 a1 f9 1f 5e ce a0 b5 71 23 0a c0 44 3a f8 21 | ........-D./....x...^...q#..D:.! | 
| 11a0 | 81 30 ed da 3e 68 77 42 44 b4 0b 01 15 19 c3 e4    62 a9 87 c2 52 c3 6a 2f 22 81 80 31 8a 0f 1b d3 | .0..>hwBD.......b...R.j/"..1.... | 
| 11c0 | b4 85 55 aa 1c bc 60 6d dc 4d 48 dd 60 7b dd 6e    43 9b 96 d4 a5 e0 6c 7a e8 76 97 fe bf 1e 64 3b | ..U...`m.MH.`{.nC.....lz.v....d; | 
| 11e0 | f6 68 24 8d 6a 27 73 f0 c1 7e cf 6f f4 e9 cd 9b    37 4f 33 c2 e2 a3 8f be 1f 0c 4e 9f 60 8c f1 c9 | .h$.j's..~.o....7O3.......N.`... | 
| 1200 | fc 58 1c 0f c8 37 f7 07 83 c1 ef cf e4 e0 94 e3    24 57 d5 c8 73 e4 79 9e 5f f5 c7 2d ed c6 30 9e | .X...7..........$W..s.y._..-..0. | 
| 1220 | 9f e8 31 08 bb 3c 2f f9 be ef fb 52 58 7c 01 58    3b b6 6a 18 3b a6 e3 38 b6 e3 18 00 00 06 00 98 | ..1..</....RX|.X;.j.;..8........ | 
| 1240 | 60 18 00 aa 8d 54 f8 e3 5e 66 22 5c cc 7c fc 60    d6 b5 f0 86 86 b1 f6 e0 fd 54 40 b9 1a 3c 9c 94 | `....T..^f"\.|.`.........T@..<.. | 
| 1260 | 96 45 71 66 1e ec ad e6 5a 23 2b 64 fd ec a8 db    4c f6 bd 61 b3 5b f1 e6 e2 4b a5 de 89 94 ce 37 | .Eqf....Z#+d....L..a.[...K.....7 | 
| 1280 | ae 37 cb 73 56 5e 5a 2d 9f 5f 0a 2c db de 71 1c    e3 73 e7 2d f9 80 cc 04 40 b6 fd c9 57 44 f5 75 | .7.sV^Z-._.,..q..s.-....@...WD.u | 
| 12a0 | eb f1 ab 93 c0 c1 34 51 13 37 b4 0f 57 84 c0 3d    3c ce 4d c7 f9 55 4f da de 54 e2 ba 30 2a c5 b9 | ......4Q.7..W..=<.M..UO..T..0*.. | 
| 12c0 | 58 be 34 a2 6a bd 3c 6a 0c 29 d2 87 9b 11 56 94    4a ae b7 04 58 b6 03 86 09 cf 43 4f 13 c1 44 7f | X.4.j.<j.)....V.J...X.....CO..D. | 
| 12e0 | 7d 47 b1 7a 31 71 2d 19 e3 37 19 8a c0 cf 41 80    0f f2 f6 2a 43 27 94 56 2f 02 55 bf 5d 8c 53 23 | }G.z1q-..7....A....*C'.V/.U.].S# | 
| 1300 | 86 58 b6 1d 7b 57 38 af 5b 5d 10 16 42 b6 0b ae    41 7a d6 5b c3 55 bf a6 db fe 7b 42 eb 7c 8b 7a | .X..{W8.[]..B...Az.[.U....{B.|.z | 
| 1320 | 29 c5 0b 51 d4 26 15 ac 2a 53 37 94 2e 0d 55 6f    37 49 cf ca ce 8c d6 16 83 a1 e1 62 01 de 56 55 | )..Q.&..*S7...Uo7I.........b..VU | 
| 1340 | 07 1c 20 61 7d ea 7c f3 59 94 d2 0b 8c 31 3e 39    39 7d 17 f1 7b f1 be 36 7d f1 46 95 b1 23 9b e1 | ...a}.|.Y....1>99}..{..6}.F..#.. | 
| 1360 | b1 d8 2d 26 ab 35 a7 d2 cd 32 77 db b0 da e0 9a    b6 0a 86 43 0e c3 7f 72 31 2e 7d 71 82 f1 ab ad | ..-&.5...2w........C...r1.}q.... | 
| 1380 | 18 47 f9 65 7a 0d ac b0 b8 33 82 56 d5 62 d1 9a    c2 aa b3 59 59 10 16 00 80 61 18 24 ac d8 fb a4 | .G.ez....3.V.b.....YY....a.$.... | 
| 13a0 | 3c c6 4f d6 e2 04 2a e9 61 71 d6 7c fc 61 72 94    29 ac 6d ee ae 60 19 8e 01 a5 54 6a eb a7 f1 a1 | <.O...*.aq.|.ar.).m..`....Tj.... | 
| 13c0 | 94 eb a7 87 c5 cd c6 ad be c2 a5 81 55 e7 ee 0c    96 6b 42 4a 58 c5 a4 70 52 f9 1f b0 94 9b 81 d8 | ............U....kBJX..pR....... | 
| 13e0 | 2b 73 69 60 b1 5f fe a2 b0 82 17 a1 97 b8 a5 b6    62 3e 3d 2c ee 7a 9a 80 9f 71 69 60 b9 e5 3b 83 | +si`._..........b>=,.z...qi`..;. | 
| 1400 | 65 dc 06 2c ce a7 c0 f2 2a ad 92 ef fb 87 ad b6    45 1d 65 e5 09 ac d7 91 ce 47 85 75 48 c9 74 bb | e..,....*.......E.e......G.uH.t. | 
| 1420 | 3e cf f3 3c 2f 95 5a 97 4b 1d 86 e6 6d c0 6a 13    b0 bc d7 cd b9 8c 3b 5b bf 8c 8c 74 7d 6a a2 7f | >..</.Z.K...m.j.......;[...t}j.. | 
| 1440 | 18 fc 9a 6f ce 6a 36 01 00 bc 50 d6 36 37 b3 0e    1b 2b ca b2 60 05 8b 33 2a 2c e5 ea d7 9c 9f fb | ...o.j6...P.67...+..`..3*,...... | 
| 1460 | 33 32 e1 e2 d6 d6 8f 8f 8f b7 be 54 a2 eb 43 55    8e e3 b8 cb 7a 96 92 73 4a e5 f0 26 44 00 00 a0 | 32.........T..CU....z..sJ..&D... | 
| 1480 | 24 0d 95 b9 3f c8 b6 94 19 58 24 5b a5 1f 5e 58    4b 9b 4b 4b 1d 00 1c 0a ac cc 05 16 65 15 0c d3 | $...?....X$[..^XK.KK........e... | 
| 14a0 | f8 2d 43 45 f9 62 ba ac 3e 0e e1 2a ba 13 58 5e    3d 6a 31 93 55 a8 bd 69 84 23 60 e8 14 48 b5 7d | .-CE.b..>..*..X^=j1.U..i.#`..H.} | 
| 14c0 | 03 8b 1c 85 2d fa ca 69 14 0b cb 63 a9 65 8c 3f    8c 10 ac 51 47 d4 c4 03 21 d8 55 5a f8 29 8c ea | ....-..i...c.e.?...QG...!.UZ.).. | 
| 14e0 | fd f9 4c 75 eb 43 68 7a cc 32 58 cf 91 36 01 00    20 b4 16 2e 36 28 ba 9d f2 04 d6 0a 21 5e 8f b0 | ..Lu.Chz.2X..6......6(......!^.. | 
| 1500 | d6 39 5b 10 d6 b4 3d 0f 25 3d b2 a6 89 fb 36 b8    3b b6 20 08 8f 42 ac ce e7 6b 81 3f 92 02 1d 06 | .9[...=.%=....6.;....B...k.?.... | 
| 1520 | a3 79 02 f1 25 00 40 36 74 21 f4 ab 1f 8e c6 b0    76 23 33 e2 d0 cd 69 b9 0b c0 72 a7 a7 e3 4a a1 | .y..%.@6t!......v#3...i...r...J. | 
| 1540 | 0d df 1a d6 e4 a7 2a b8 36 aa 21 a1 40 0e c4 77    73 55 53 8c 3f 90 d6 57 59 6e 91 47 e9 f1 5e 7c | ......*.6.!.@..wsUS.?..WYn.G..^| | 
| 1560 | 6a 3f d3 b6 03 58 15 52 a1 b1 a4 1a 7c 64 0b c1    92 b1 26 ee 23 47 75 ed 1a 42 7a e1 db 38 58 18 | j?...X.R....|d....&.#Gu..Bz..8X. | 
| 1580 | 63 4c c6 1f 89 c5 aa 45 e9 b1 95 d6 47 57 c2 91    b8 73 5b b0 1c 30 68 b0 44 8c 45 dd 31 65 84 40 | cL.....E....GW...s[..0h.D.E.1e.@ | 
| 15a0 | 40 ba fe 45 12 ac 35 56 58 2e df f1 bb ad b6 65    95 a9 3d 1e 16 59 1d 6b d2 ae a9 b5 c1 c3 fe 92 | @..E..5VX......e..=..Y.k........ | 
| 15c0 | 61 05 bb b7 a9 49 69 49 c3 da 81 ee 02 a0 1d 54    43 7a e1 df 24 58 99 64 58 55 69 ef 28 b6 96 e0 | a....IiI.......TCz..$X.dXUi.(... | 
| 15e0 | 01 40 87 fc 32 f1 f0 a8 14 59 c8 68 d7 1b f9 a5    c1 72 6e 66 44 12 d6 00 63 ed 40 00 00 54 40 36 | .@..2....Y.h.....rnfD...c.@..T@6 | 
| 1600 | d2 0b cf 48 58 37 ef d5 a4 47 78 02 56 5e da 4d    5e 94 78 b4 84 af 97 38 4d c4 fe 67 b9 52 9f af | ...HX7...Gx.V^.M^.x....8M..g.R.. | 
| 1620 | f3 2f 02 cb 70 a8 31 eb 18 63 51 76 55 15 3d d5    55 5b d7 f7 7f 20 61 69 1b f3 21 3e 16 56 a3 c2 | ./..p.1..cQvU.=.U[....ai..!>.V.. | 
| 1640 | 94 f5 79 94 62 4b 39 75 e4 a3 15 e0 7d 77 61 58    c1 b2 d0 89 82 25 20 dd b4 91 ad d6 0a 05 f9 61 | ..y.bK9u....}waX.....%.........a | 
| 1660 | c8 b3 66 9e e7 63 0d e3 f5 68 58 be c7 98 22 7b    94 b9 6d 94 0c 4b 62 29 69 ec e5 17 85 65 80 0b | ..f..c...hX..."{..m..Kb)i....e.. | 
| 1680 | 8e 49 87 25 ca 85 9a 03 08 21 41 97 65 19 87 3c    8b d8 29 12 09 2b 6b 71 5c 0a 58 64 4a ba c2 30 | .I.%.....!A.e..<..)..+kq\.XdJ..0 | 
| 16a0 | 47 31 15 29 14 7f 41 58 00 26 04 c7 bf 28 b0 f6    05 64 0b 35 41 10 0a b2 2c 9e 27 c5 ac 28 58 92 | G1.)..AX.&...(...d.5A...,.'..(X. | 
| 16c0 | c2 a5 82 65 45 d5 6d 62 5a 96 cd c6 7f ec 9d c1    6b e3 56 10 87 77 e5 cb e0 47 45 42 b1 75 10 d8 | ...eE.mbZ.......k.V..w...GEB.u.. | 
| 16e0 | 20 50 0f 82 57 6c 0c 5a 16 2c 41 0f 25 eb 83 4b    db 94 d0 83 bb 28 b9 24 e0 93 9f f0 1e 7c 90 42 | .P..Wl.Z.,A.%..K.....(.$.....|.B | 
| 1700 | 40 18 4c 71 b2 86 d2 43 0f 21 a4 60 d6 50 e8 d2    3f 30 3d 48 b6 65 bd 79 d6 b3 e5 42 28 d1 31 10 | @.Lq...C.!.`.P..?0=H.e.y...B(.1. | 
| 1720 | c7 f9 98 99 37 33 6f 7e a3 0e 2b 02 cb 65 8e e3    38 26 d4 f8 0c 7e 46 89 56 7e ff be 51 6e 68 9a | ....73o~..+..e..8&...~F.V~..Qnh. | 
| 1740 | 4e 7c ca b9 a1 bd d2 86 d1 6d b0 76 ea 66 0c 11    2b b9 94 49 7f 42 c9 5b 11 56 24 75 00 e6 bc 73 | N|.......m.v.f..+..I.B.[.V$u...s | 
| 1760 | 1d 40 3a a5 11 f1 fb 9a a6 95 35 4d eb fb 84 f8    3a 67 59 94 6c dc 4e e3 b0 ae 94 5d 61 dd ef 03 | .@:.......5M....:gY.l.N....]a... | 
| 1780 | 0b d4 a6 d4 1f 38 2f 96 94 be 03 d7 05 93 87 f5    25 d1 35 2d 9e 3d d6 7d 5f 47 02 fc 5a 71 28 b6 | .....8/.........%.5-.=.}_G..Zq(. | 
| 17a0 | ac 5b 91 7f fc da 0d 16 a1 5a 1a e6 bb e1 47 b9    d4 7a 22 77 88 84 05 33 78 d7 05 00 97 b3 ac 44 | .[.......Z....G..z"w...3x......D | 
| 17c0 | 7c 98 3c 7c cc b2 a8 95 0f ab 83 1d e3 17 f5 55    47 e2 9e ff c6 73 41 13 29 d7 4b 16 32 81 ab 5d | |.<|...........UG....sA.).K.2..] | 
| 17e0 | 08 96 09 ae 73 8a 05 f8 fe db b7 ba ee fb 7e 2c    69 a2 36 9f 3a a4 67 4c 71 58 25 de a2 c2 8d 04 | ....s.........~,i.6.:.gLqX%..... | 
| 1800 | 11 81 75 93 8d 33 d2 e5 6d 75 7a 9d 4f 4b 2d 58    1b 32 0f 89 59 33 3d 91 81 e9 be ae fb 3e f9 8a | ..u..3..muz.OK-X.2..Y3=......>.. | 
| 1820 | 4f 1d 48 ae 65 71 bd f4 20 33 33 83 c0 9a 66 2d    71 97 76 c0 e8 2c af 4c e8 14 83 c5 98 63 22 a7 | O.H.eq...33...f-q.v..,.L.....c". | 
| 1840 | 61 32 37 94 08 07 7d 1e 16 a5 76 9e 65 0d f3 5c    0a 81 15 0a af 20 e5 9e 5b 35 d8 36 b5 73 5d 10 | a27...}...v.e..\........[5.6.s]. | 
| 1860 | 96 c3 90 00 bf 84 45 e2 b7 1d f9 48 06 4f 56 a0    a8 8d 9e 86 d9 a2 ad d9 93 80 c5 b9 ee 25 ec fe | ......E....H.OV..............%.. | 
| 1880 | f4 26 1f 6e 04 99 6a af 58 3f 8b 39 c0 10 58 94    5a b1 d0 c4 27 84 20 49 69 5a 83 8f a7 0e 93 dc | .&.n..j.X?.9..X.Z...'..IiZ...... | 
| 18a0 | 66 0b 02 0b 8c dd 8b 43 d1 10 dc 02 71 ca 3b 81    ec 37 90 79 fe ac 83 87 58 56 14 1b cc 6a 5e 54 | f......C....q.;..7.y....XV...j^T | 
| 18c0 | 04 2b 16 10 e0 31 4b 45 b2 9c 7c 58 1d e9 1e cd    5d 10 1c 01 40 69 4b 5f e2 8a c3 35 2a b8 5e 05 | .+...1KE..|X....]...@iK_...5*.^. | 
| 18e0 | bb be 8f 96 ee 45 e3 b9 51 1c 16 b5 6d 4a 28 25    94 10 04 56 6b 2f 58 5c d0 32 7a 82 68 6e c4 6d | .....E..Q...mJ(%...Vk/X\.2z.hn.m | 
| 1900 | 65 43 59 88 67 2d 39 32 93 42 b0 06 00 2e 1f e0    a3 e4 cd 68 b1 d9 10 ca e7 59 89 e2 24 19 c1 a5 | eCY.g-92.B.........h.....Y..$... | 
| 1920 | 12 b0 e6 52 b0 18 17 9e ef 1f d0 46 b8 a1 2c 61    29 c3 91 90 56 f6 d3 8e 8a 6e 66 63 66 ad 82 c0 | ...R.......F..,a)...V....nfcf... | 
| 1940 | b2 57 6f 29 24 c4 16 16 d2 f1 74 b7 f5 c8 c3 ca    da 88 91 35 80 5e 1b 8b b2 fc f8 50 97 ef 77 56 | .Wo)$.....t........5.^.....P..wV | 
| 1960 | cf 57 f7 86 86 a2 28 ca fc 4e 0e 56 93 15 5c dc    c3 98 5b 6b 61 96 95 c0 b0 6d 8a b8 e1 5a 9a 42 | .W....(..N.V..\...[ka....m...Z.B | 
| 1980 | 08 b1 08 02 6b 94 73 b0 5d 19 e8 91 d4 e3 4f fe    76 98 89 dd 53 43 d9 84 a5 28 5d 95 49 b8 61 b7 | ....k.s.].....O.v...SC...(].I.a. | 
| 19a0 | d8 12 8c 41 19 80 99 2d 91 65 25 12 30 1e 56 1c    d8 a9 6d 53 6a 11 4a 11 58 fc 04 4d ba d0 1b bd | ...A...-.e%.0.V...mSj.J.X..M.... | 
| 19c0 | 11 9d df d8 64 5a ea 5e fb 56 ed 34 d3 b3 0e 2b    b6 c6 4d 9d a1 57 b1 1b 77 90 c5 2c ab 71 0a c0 | ....dZ.^.V.4...+..M..W..w..,.q.. | 
| 19e0 | 06 62 58 b6 4d 29 41 9a 7f d6 72 b7 2e a5 92 49    a9 a2 b4 2f 26 3d 00 28 8d 16 43 71 b2 c3 f0 a2 | .bX.M)A...r....I.../&=.(..Cq.... | 
| 1a00 | d8 e8 de 04 c1 9b cd 01 9c 51 d6 d1 e6 53 75 35    c3 5c e2 c7 c2 9b bd 82 b0 9c be c7 df a4 47 19 | .........Q...Su5.\............G. | 
| 1a20 | ed 89 8d 58 d6 5a c3 63 51 1b b1 2c e9 e1 c5 6c    66 38 91 fe 8d 11 12 c2 15 45 31 ba 5d 7c aa e9 | ...X.Z.cQ..,...lf8.......E1.]|.. | 
| 1a40 | 75 d1 65 63 ac d6 af b1 d6 56 58 b6 fd 3b 5f ee    24 ed 77 42 08 a1 16 0a ab b4 27 2c f9 b1 47 01 | u.ec.....VX..;_.$.wB......',..G. | 
| 1a60 | 2c 61 b1 53 2d 0a cb 03 00 67 96 ed 67 e5 c1 8a    83 fb 7a 5f e4 a3 64 8b 46 0a 16 d7 7b 38 0c ac | ,a.S-....g..g.....z_..d.F...{8.. | 
| 1a80 | 66 1d 8a c2 32 01 40 9f ed 68 59 5f c4 d2 5e 6b    29 3a a4 bb 35 ff f2 60 c9 7a f0 6e b0 5a 50 14 | f...2.@..hY_..^k):..5..`.z.n.ZP. | 
| 1aa0 | d6 c0 74 e0 3b 12 ed ec 86 1b f2 7b dc 0d f3 9a    e3 af 87 e2 6a b6 d2 3c 34 ac 66 08 85 61 55 cc | ..t.;......{........j..<4.f..aU. | 
| 1ac0 | 9a 43 f6 82 45 d3 9a 7b c1 85 c5 74 cb dd 94 8a    66 f0 ab ca 6f 78 58 58 ed 09 1c 00 96 6b 6a fa | .C..E..{...t....f...oxXX.....kj. | 
| 1ae0 | ce 6e f8 f7 26 2b 4a 1e 05 57 61 c2 58 dd bd 85    ad b0 80 4d f3 31 4c d0 04 05 7b 82 07 38 04 2c | .n..&+J..Wa.X......M.1L...{..8., | 
| 1b00 | d3 d7 cb 66 65 67 58 19 e1 bd 08 16 d4 d1 e6 a5    f1 41 54 1b a6 6b 9a 8f 5b 71 19 67 a5 78 60 34 | ...fegX..........AT..k..[q.g.x`4 | 
| 1b20 | ff 1c 39 2f 1d 40 6f a8 28 ca c0 24 65 26 4c 1d    68 b2 2f 0c b1 2c 5f 0e 16 54 83 26 ff 6f 56 41 | ..9/.@o.(..$e&L.h./..,_..T.&.oVA | 
| 1b40 | 02 16 c0 83 40 6e a8 28 cd 4e 6b 5d 5f 57 c3 f3    2d 58 db 8b f4 cc e6 ab 5e b8 e7 33 f8 54 f9 da | ....@n.(.Nk]_W..-X......^..3.T.. | 
| 1b60 | d5 3d 80 a3 4f 9f 3f ff 35 9b 8d a3 68 1c 45 d1    38 fa 6d 2d 1b 4f 66 6c a3 28 8a c6 e3 d9 6c 3c | .=..O.?.5...h.E.8.m-.Ofl.(....l< | 
| 1b80 | 1e cf c6 e3 3f b2 3b 69 fe 19 7f b3 f1 c9 e9 26    53 ef 32 ed 2a d7 e7 ab 2a ee 6a f3 db a0 33 5d | ....?.;i.......&S.2.*...*.j...3] | 
| 1ba0 | 55 f5 8c 9b 02 1f de f0 d2 cc bb 0a d6 1c 35 e6    17 99 12 fb d5 de ea 6a d7 31 bd 5a d9 05 80 d3 | U.............5........j.1.Z.... | 
| 1bc0 | 72 59 4b 1a 7a d6 ba bd be 7e 71 36 5d ae 09 49    eb ed 57 eb 8c 08 b5 69 63 7b 6b 7c 1a 04 41 10 | rYK.z....~q6]..I..W....ic{k|..A. | 
| 1be0 | 5c a8 47 fb 7c cf 23 35 9c 26 dd ca 4a 78 27 96    be 96 ea e1 34 08 82 4e 77 1e 04 c1 45 38 41 5a | \.G.|.#5.&..Jx'.....4..Nw...E8AZ | 
| 1c00 | 61 fb c3 f2 3c cf f1 3c 06 50 fb 51 6b e8 a9 25    7d 29 85 7d f2 32 1a 6a 51 4a e3 ed 90 94 df 76 | a...<..<.P.Qk..%}).}.2.jQJ.....v | 
| 1c20 | 44 6d eb 59 ed 32 da 32 26 b9 f7 6f 9a a6 e7 79    35 00 28 6b 5a 23 de 3c 97 dd dd 60 a5 cb 9a f5 | Dm.Y.2.2&..o...y5.(kZ#.<...`.... | 
| 1c40 | b6 a7 ec f3 9c 56 91 fe 57 b0 3c cf f1 dc 78 1b    59 7f 73 78 c1 b6 6d 2b f5 d6 bf 8d 45 f8 99 9d | .....V..W.<...x.Y.sx..m+....E... | 
| 1c60 | 3d f1 de 90 67 b8 f0 02 85 e5 3e bd 3c 92 8f fb    02 eb 05 d6 0b ac 17 58 ff 07 58 df ff 7c 72 72 | =...g.....>.<..........X..X..|rr | 
| 1c80 | f2 cb 0f 4f 3f a5 7e 76 7c 7c 7c fc ed d3 bf ec    9d 41 8b ab 3c 14 86 37 52 de aa 9b ac 02 06 a4 | ...O?.~v|||......A..<..7R....... | 
| 1ca0 | 20 01 19 5a d2 95 30 8b db c5 40 f1 42 e1 52 a9    0b 37 b6 ee b3 4b fe 42 ff f7 b9 0b ed 34 91 a9 | ...Z..0...@.B.R..7...K.B.....4.. | 
| 1cc0 | d3 ce dc ef c2 9d 6f 66 31 03 ea e4 c4 c7 93 37    a7 35 fa 12 a9 e1 6f ff 93 31 c6 18 63 19 31 c6 | ......of1......7.5....o..1..c.1. | 
| 1ce0 | d8 fe 56 a0 2a 67 7f f9 d4 12 c6 18 63 01 cd 19    63 cd e4 91 41 b9 fd 14 ac 66 23 9b fd bc 09 e5 | ..V.*g......c...c...A....f#..... | 
| 1d00 | cc dd 5a 02 b2 22 a2 c4 28 77 b3 00 16 44 44 b9    c8 6e 06 ca 81 ec 8f f3 c8 96 53 7b e7 80 d9 12 | ..Z.."..(w...DD..n........S{.... | 
| 1d20 | 51 96 9e a6 9b 11 28 3e 03 ab 85 49 88 88 f6 a1    07 2b 01 c0 33 22 2a c6 20 6a 22 a2 20 be 1d a8 | Q.....(>...I.....+..3"*..j"..... | 
| 1d40 | 36 c5 9f 4f 9e b2 9d da 5b 01 39 11 11 45 ef 34    b3 e3 cd 27 60 6d 81 01 52 e2 c3 ca 65 bf 67 f6 | 6..O....[.9..E.4...'`m..R...e.g. | 
| 1d60 | 26 2c d5 fe dd 81 b6 c0 64 c0 1d a0 7a 05 f8 4f    35 ab 00 2e ac 03 0f 56 ab 0c b0 fb 00 ac ea 54 | &,......d...z..O5......V.......T | 
| 1d80 | 7a 5d 6e 45 31 91 16 ac 2c d5 49 0a e5 2b 43 14    15 cd 28 ac 28 eb db e7 56 c0 f4 d0 9c 63 f6 c1 | z]nE1...,.I..+C...(.(...V....c.. | 
| 1da0 | ae cc b2 36 76 24 61 5e 2f 9c 11 91 2c db 9a 68    9b 6f ef 86 65 80 37 25 2f 69 89 01 26 f8 40 66 | ...6v$a^/...,..h.o..e.7%/i..&.@f | 
| 1dc0 | e5 70 03 d5 a8 a9 2d 6f 6b 33 10 2e 05 b8 07 10    27 6a 7b 6d bc e6 7f be 9d df 16 34 33 48 d1 cc | .p....-ok3......'j{m.......43H.. | 
| 1de0 | 25 53 20 9c 73 c0 c9 81 2a 84 73 3a 49 89 94 94    c1 e9 5e 58 19 80 ea 06 2c ca 01 39 7f 1c 56 ec | %S..s...*.s:I.....^X....,..9..V. | 
| 1e00 | c1 8a 11 26 b4 9b 52 1b 46 2d e0 f6 49 a2 a1 00    c6 9d 25 30 39 0c 03 a0 8f 30 f3 d3 ed 94 2b 20 | ...&..R.F-..I.....%09....0....+. | 
| 1e20 | 71 36 85 70 13 76 6f b0 2c b7 6a 7f 77 66 a1 6f    4d b1 d1 ac 9b b4 44 14 01 e2 fc 49 58 4b c0 b0 | q6.p.vo.,.j.wf.oM.....D....IXK.. | 
| 1e40 | 49 69 6e 46 b0 02 20 20 35 04 ba 0b 56 3c 5c 71    b5 f3 d3 6d 36 6f 90 fa c1 2a 1f 67 ba 7f 44 b3 | IinF....5...V<\q...m6o...*.g..D. | 
| 1e60 | 2e 79 da 00 61 36 86 35 4f e1 05 bb c2 aa 17 f7    c2 a2 12 53 67 fa 06 ac 25 a0 48 01 ec 6e 58 21 | .y..a6.5O..........Sg...%.H..nX! | 
| 1e80 | c2 be 77 95 cf 7c 49 33 e4 de 3c 10 8e e6 85 f4    21 81 67 43 37 ae b3 a2 03 8b 12 33 6a 2e 06 96 | ..w..|I3..<.....!.gC7......3j... | 
| 1ea0 | 44 44 53 b5 9f 0f 6b 4f cc f8 43 ea 3d 58 ea e1    cc 1a fa 9e 9d fd 6e 08 a2 8d d7 4a 01 bf e2 69 | DDS...kO..C.=X........n....J...i | 
| 1ec0 | fc 41 fa 7e 9d 55 40 66 bd d0 7a b0 b6 ed 70 95    7d 58 f5 d0 eb a2 ba 17 d6 2e a1 c4 e0 11 58 99 | .A.~.U@f..z...p.}X............X. | 
| 1ee0 | c4 92 6a 1f b0 41 4b b7 2b 5d 89 33 11 51 1b d0    48 9f 14 4c 92 b8 03 53 5d 0f 49 28 69 05 72 52 | ..j..AK.+].3.Q..H..L...S].I(i.rR | 
| 1f00 | 0f c0 ca 4a 44 15 51 00 78 53 d6 6e 28 ef e2 51    a2 9e b1 69 f6 db 72 47 74 67 05 cf c2 2a 4b cf | ...JD.Q.xS.n(..Q...i..rGtg...*K. | 
| 1f20 | 53 b3 e1 82 62 60 ee 5d 91 9c 62 4f 8a 49 40 c4    c9 ed fa 03 58 6c d5 a9 a5 b1 3e ed b0 89 bd 94 | S...b`.]..bO.I@.....Xl....>..... | 
| 1f40 | 3d 25 d7 20 72 46 0c e6 ed 8a e4 e6 67 c3 ed 49    9c cf 45 1c 8c ca 9f b6 4f 9e 71 a9 ce 0a ce 4b | =%..rF......g..I..E.....O.q....K | 
| 1f60 | 35 c1 4a e5 65 e9 28 5a b0 3b 17 f9 ed a4 88 cb    f2 94 f8 ff 41 14 9c 67 45 e0 7f 9e 39 4d c6 0c | 5.J.e.(Z.;..........A..gE...9M.. | 
| 1f80 | 66 9c cf fc 03 54 19 13 55 f9 c2 09 9d 15 c5 b5    4c 4a 44 9c 11 e5 a2 fe fe d6 e1 fb 2b 9a 6f 58 | f....T..U.......LJD.........+.oX | 
| 1fa0 | df b0 be 61 fd bf 60 7d ec 6e 34 8c 91 52 1e 52    19 72 21 84 78 1e 5e b8 3d 36 ab e8 cd 1c 23 2b | ...a..`}.n4..R.R.r!.x.^.=6....#+ | 
| 1fc0 | 7a 4b 31 ad b5 e6 5c 58 21 fa bb 85 ce 2b e1 85    10 fc 8b de 64 95 d8 74 47 d9 c9 75 77 d4 5a 8b | zK1...\X!....+......d..tG..uw.Z. | 
| 1fe0 | 57 db bd d5 78 55 77 ff 5c 80 e5 42 08 3d d8 af    69 61 85 bd 18 cc 38 16 ac 3c fc a2 b0 36 3f 7e | W...xUw.\..B.=..ia....8..<...6?~ | 
| 2000 | ca 63 da c9 a3 4c 39 d7 7a f0 09 5d 8d d2 ea 69    75 f1 5e 1d fc c0 b4 d6 fc e2 27 b0 7a 7a 7d 7f | .c...L9.z..]...iu.^.......'.zz}. | 
| 2020 | 7e 14 59 a1 39 97 5f 15 56 67 7e 70 d9 75 a9 4c    f9 ba b7 6f 8a a2 95 b7 d8 a1 18 6c 42 57 bd e9 | ~.Y.9._.Vg~p.u.L...o.......lBW.. | 
| 2040 | 82 ee 9d 32 85 7e 19 60 3d bd 3a 33 d8 28 12 fc    57 fa 0f dc c1 ff 18 ac 14 dd 71 2d 3b 99 1e 0f | ...2.~.`=.:3.(..W.........q-;... | 
| 2060 | 3c 5c f3 97 17 11 45 4f 2b f7 71 de d5 6a 15 45    4f d7 c4 d2 dc 5a db 53 7b 8e a2 c8 b1 45 b1 36 | <\....EO+.q..j.EO....Z.S{....E.6 | 
| 2080 | b2 fa d8 7d dd 85 21 9d 49 8f fc 20 d3 f0 20 75    1a be 68 f1 1c 5d dc 79 87 e5 45 fd f3 5e 3d 12 | ...}..!.I......u..h..].y..E..^=. | 
| 20a0 | a1 39 e7 d6 5a 61 a3 c1 31 d3 59 a0 65 85 b5 e2    28 f1 75 61 21 0d c3 75 2a e5 3a 3d 70 b9 e6 17 | .9..Za..1.Y.e...(.ua!..u*.:=p... | 
| 20c0 | af 0e 2b ae 2b 66 9c df 82 73 ae ed e0 14 f3 7a    ac 7d 95 76 ad ff 89 bc fa 38 ac f5 7a 7d 3c 74 | ..+.+f...s.....z.}.v.....8..z}<t | 
| 20e0 | e1 f1 b0 96 bf 06 58 f6 77 7b 67 a8 e3 48 0c 83    e1 83 96 f3 00 06 96 7e 16 b2 52 25 a3 91 16 b4 | ......X.w{g..H.........~..R%.... | 
| 2100 | 60 1e a0 60 8d 4a ac e1 66 e3 f7 97 0e 64 a6 db    5d 70 a7 d3 96 b4 3d a3 41 03 3e 39 ce 9f c4 c9 | `..`.J..f....d..]p....=.A.>9.... | 
| 2120 | af 96 35 e2 c6 eb b8 b5 4a 91 f1 28 c6 cd c5 e9    6b cb 91 a6 24 e8 b9 61 b1 19 c3 0d 70 e7 f3 ac | ..5.....J..(....k...$..a....p... | 
| 2140 | aa 35 9b d9 18 62 55 ed ed d0 da a1 1d da a1 b5    2a 11 49 7d 7f af 6a 87 a9 f6 e7 31 aa b4 aa de | .5...bU.........*.I}..j....1.... | 
| 2160 | 2b 45 62 a5 a7 cf 2c 0b 37 0f 47 b0 a9 a6 05 20    da 3e 0d 88 76 5d 50 6a 26 a9 7b 4a d5 15 56 6d | +Eb...,.7.G......>..v]Pj&.{J..Vm | 
| 2180 | 46 b6 d6 e9 b9 61 91 99 19 c3 9c e1 c1 9c 06 07    42 af 8d 90 d3 e1 2a 38 35 8d 07 2c dd b5 ba 56 | F....a..........B.....*85..,...V | 
| 21a0 | bd 6f b4 52 2c e8 d9 61 b1 45 30 32 e0 1d 81 e5    b8 00 bc 37 4b 7e 5b c7 58 f0 56 b3 f4 c6 87 75 | .o.R,..a.E02.......7K~[.X.V....u | 
| 21c0 | b3 17 15 06 3d 3d 2c 07 47 c0 c2 bb 03 4e b4 7c    70 ee 4d a4 5f 61 55 84 c9 66 e8 5b 7b 6a ed 76 | ....==,.G....N.|p.M._aU..f.[{j.v | 
| 21e0 | c8 12 17 7a 7e 58 14 88 e0 40 bf b8 a3 d3 b1 43    6a bb cd db a6 1b 58 55 1a e0 01 6b a3 55 aa b3 | ...z~X...@.....Cj.....XU...k.U.. | 
| 2200 | 0e cf d6 c7 29 57 3f ec 56 66 80 c3 2f ee ee cb    b1 f7 d0 da 9d 09 bf 7a 16 8a 77 96 d4 79 e8 87 | ....)W?.Vf../..........z..w..y.. | 
| 2220 | 6a ad 69 a6 ce 73 a6 d8 4a 2f 02 8b d8 01 74 b8    7b a7 a3 e7 6e 63 f8 76 68 fa a9 d2 b5 78 f1 90 | j.i..s..J/....t.{...nc.vh....x.. | 
| 2240 | cd f3 5d 55 5b 2b cd cc 39 53 6c a1 97 81 45 2b    80 0e b8 af b4 62 db a3 9a a6 d6 34 39 37 75 a0 | ..]U[+..9Sl...E+.....b.....497u. | 
| 2260 | aa e4 fd 43 86 e7 fb e6 dc 2e 26 39 8b 88 d1 0b    c1 22 ea de f1 e1 4e b4 b2 56 9b a6 43 9b a6 d6 | ...C......&9....."....N..V..C... | 
| 2280 | 12 ac 55 a5 4d 35 35 a9 77 88 d9 80 25 a9 9a c6    26 22 66 fc 5a b0 c8 4f 34 03 7e 74 49 dd d5 68 | ..U.M55.w...%...&"f.Z..O4.~tI..h | 
| 22a0 | 05 ec f3 c9 3f 22 5a 10 6c 03 97 48 aa 8c 8f 88    f5 c5 60 11 93 87 bb 83 45 75 5b 24 57 84 5c fd | ....?"Z.l..H......`.....Eu[$W.\. | 
| 22c0 | ec 87 de 8f 60 8e 91 4e 92 c6 6c 62 47 7a bc f8    29 ac 15 64 ee dd c1 26 22 5a 9a 9a bc d5 72 4d | ....`..N..lbGz..)..d...&"Z....rM | 
| 22e0 | 19 c9 b3 00 61 01 13 11 36 63 33 7e bc ac ba 07    2c 3a 85 47 ef dd 11 c1 a9 aa 22 f3 3e f1 a9 ed | ....a...6c3~....,:.G......".>... | 
| 2300 | bb 9f 23 b5 58 c4 98 8d 79 79 c4 b4 ba 07 2c 02    ba 2f fd e2 61 9b 40 18 13 df 9c 2a d7 95 cc 02 | ..#.X...yy....,../..a.@....*.... | 
| 2320 | 30 b3 49 ca 99 39 3a d1 ab c2 22 8e 93 bb 3b 82    cd c4 98 b7 42 9e b7 db 54 dd 11 61 22 12 1f 38 | 0.I..9:..."...;.....B...T..a"..8 | 
| 2340 | d2 0b c3 a2 0c bf f4 7e 41 98 f1 99 ed 2c b3 a4    64 7e 91 51 ce 00 8b f1 42 0f 1c f7 80 45 7c ea | .......~A....,..d~.Q....B....E|. | 
| 2360 | dd 81 6d ac c9 38 20 fc 76 66 ba 76 f8 a5 9f e8    e5 61 d1 f1 b4 74 00 88 d8 47 a1 24 3d 5f fc ba | ..m..8..vf.v.....a...t...G.$=_.. | 
| 2380 | d3 7f 7a 5f 00 60 14 2e b1 33 d3 7f 58 7f 90 10    70 47 44 04 33 b3 3c 25 ab fb c1 22 ea cc 11 1c | ..z_.`...3..X...pGD.3.<%...".... | 
| 23a0 | 11 58 56 fa 0f eb af 72 de d9 1e 6a 9f f8 1f e3    37 97 2c c5 bb 11 c7 3f f5 00 00 00 00 49 45 4e | .XV....r...j....7.,....?.....IEN | 
| 23c0 | 44 ae 42 60 82 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | D.B`............................ | 
| 23e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2400 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 64 65 66 61 75 6c 74 2d 77 65 62 | elnode-20190702.1509/default-web | 
| 2420 | 73 65 72 76 65 72 2d 74 65 73 74 2e 68 74 6d 6c    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | server-test.html................ | 
| 2440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2460 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 2480 | 30 30 30 30 37 31 35 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 37 35 35 36 00 20 30 00 00 00 | 0000715.00000000000.017556..0... | 
| 24a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 24c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 24e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2500 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 2520 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 2540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 25a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 25c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 25e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2600 | 3c 68 74 6d 6c 3e 0a 3c 62 6f 64 79 3e 0a 3c 68    31 3e 54 68 69 73 20 69 73 20 45 6c 6e 6f 64 65 | <html>.<body>.<h1>This.is.Elnode | 
| 2620 | 27 73 20 54 65 73 74 20 48 54 4d 4c 20 66 69 6c    65 3c 2f 68 31 3e 0a 3c 70 3e 49 66 20 79 6f 75 | 's.Test.HTML.file</h1>.<p>If.you | 
| 2640 | 20 61 72 65 20 72 65 61 64 69 6e 67 20 74 68 69    73 20 74 68 65 6e 20 6d 6f 73 74 20 6c 69 6b 65 | .are.reading.this.then.most.like | 
| 2660 | 6c 79 20 45 6c 6e 6f 64 65 20 69 73 20 77 6f 72    6b 69 6e 67 20 6f 6b 2e 3c 2f 70 3e 0a 0a 3c 70 | ly.Elnode.is.working.ok.</p>..<p | 
| 2680 | 3e 54 68 69 73 20 66 69 6c 65 20 69 73 20 6e 6f    72 6d 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e | >This.file.is.normally.stored.in | 
| 26a0 | 20 74 68 65 20 75 73 65 72 27 73 20 64 69 72 65    63 74 6f 72 79 2e 20 49 74 20 63 61 6e 0a 6e 6f | .the.user's.directory..It.can.no | 
| 26c0 | 72 6d 61 6c 6c 79 20 62 65 20 66 6f 75 6e 64 20    69 6e 3a 3c 2f 70 3e 0a 0a 3c 70 72 65 3e 0a 7e | rmally.be.found.in:</p>..<pre>.~ | 
| 26e0 | 2f 2e 65 6d 61 63 73 2e 64 2f 65 6c 6e 6f 64 65    0a 3c 2f 70 72 65 3e 0a 0a 3c 70 3e 54 6f 20 6c | /.emacs.d/elnode.</pre>..<p>To.l | 
| 2700 | 65 61 72 6e 20 6d 6f 72 65 20 61 62 6f 75 74 20    45 6c 6e 6f 64 65 20 76 69 73 69 74 20 3c 61 20 | earn.more.about.Elnode.visit.<a. | 
| 2720 | 68 72 65 66 3d 22 68 74 74 70 3a 2f 2f 65 6c 6e    6f 64 65 2e 6f 72 67 22 3e 74 68 65 20 77 65 62 | href="http://elnode.org">the.web | 
| 2740 | 73 69 74 65 3c 2f 61 3e 2e 3c 2f 70 3e 0a 0a 3c    70 3e 4a 75 73 74 20 74 6f 20 73 68 6f 77 20 74 | site</a>.</p>..<p>Just.to.show.t | 
| 2760 | 68 61 74 20 45 6c 6e 6f 64 65 20 77 69 6c 6c 20    73 65 72 76 65 20 61 6e 79 74 68 69 6e 67 2c 20 | hat.Elnode.will.serve.anything,. | 
| 2780 | 68 65 72 65 27 73 20 61 20 70 6e 67 3a 3c 2f 70    3e 0a 0a 3c 69 6d 67 20 73 72 63 3d 22 64 65 66 | here's.a.png:</p>..<img.src="def | 
| 27a0 | 61 75 6c 74 2d 77 65 62 73 65 72 76 65 72 2d 69    6d 61 67 65 2e 70 6e 67 22 2f 3e 0a 0a 3c 2f 62 | ault-webserver-image.png"/>..</b | 
| 27c0 | 6f 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 0a 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ody>.</html>.................... | 
| 27e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2800 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 64 65 66 61 75 6c 74 2d 77 69 6b | elnode-20190702.1509/default-wik | 
| 2820 | 69 2d 69 6e 64 65 78 2e 63 72 65 6f 6c 65 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | i-index.creole.................. | 
| 2840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2860 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 2880 | 30 30 30 36 34 31 30 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 37 31 35 30 00 20 30 00 00 00 | 0006410.00000000000.017150..0... | 
| 28a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 28c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 28e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2900 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 2920 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 2940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 29a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 29c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 29e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 2a00 | 3d 20 45 6c 6e 6f 64 65 20 57 69 6b 69 20 3d 0a    0a 54 68 69 73 20 69 73 20 45 6c 6e 6f 64 65 27 | =.Elnode.Wiki.=..This.is.Elnode' | 
| 2a20 | 73 20 57 69 6b 69 2e 20 20 49 74 20 69 73 20 62    61 73 65 64 20 6f 6e 20 74 68 65 20 7b 7b 7b 63 | s.Wiki...It.is.based.on.the.{{{c | 
| 2a40 | 72 65 6f 6c 65 7d 7d 7d 20 77 69 6b 69 20 6c 61    6e 67 75 61 67 65 0a 61 6e 64 20 69 73 20 77 72 | reole}}}.wiki.language.and.is.wr | 
| 2a60 | 69 74 74 65 6e 20 63 6f 6d 70 6c 65 74 65 6c 79    20 69 6e 20 45 6d 61 63 73 4c 69 73 70 2e 0a 0a | itten.completely.in.EmacsLisp... | 
| 2a80 | 7b 7b 64 65 66 61 75 6c 74 2d 77 69 6b 69 2d 6c    6f 67 6f 2e 67 69 66 7c 47 4e 55 73 20 73 69 74 | {{default-wiki-logo.gif|GNUs.sit | 
| 2aa0 | 74 69 6e 67 20 6f 6e 20 63 6c 6f 75 64 73 7d 7d    0a 0a 3d 3d 20 57 68 61 74 20 64 6f 65 73 20 69 | ting.on.clouds}}..==.What.does.i | 
| 2ac0 | 74 20 64 6f 3f 20 3d 3d 0a 0a 49 74 20 64 6f 65    73 20 73 79 6e 74 61 78 20 63 6f 6c 6f 72 69 6e | t.do?.==..It.does.syntax.colorin | 
| 2ae0 | 67 3a 0a 0a 7b 7b 7b 0a 23 23 21 20 65 6d 61 63    73 2d 6c 69 73 70 0a 28 64 65 66 75 6e 20 65 6c | g:..{{{.##!.emacs-lisp.(defun.el | 
| 2b00 | 6e 6f 64 65 2d 77 69 6b 69 2d 68 61 6e 64 6c 65    72 20 28 68 74 74 70 63 6f 6e 20 77 69 6b 69 72 | node-wiki-handler.(httpcon.wikir | 
| 2b20 | 6f 6f 74 29 0a 20 20 22 41 20 6c 6f 77 20 6c 65    76 65 6c 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 | oot)..."A.low.level.handler.for. | 
| 2b40 | 57 69 6b 69 20 6f 70 65 72 61 74 69 6f 6e 73 2e    0a 0a 53 65 6e 64 20 74 68 65 20 57 69 6b 69 20 | Wiki.operations...Send.the.Wiki. | 
| 2b60 | 70 61 67 65 20 72 65 71 75 65 73 74 65 64 2c 20    77 68 69 63 68 20 6d 75 73 74 20 62 65 20 61 20 | page.requested,.which.must.be.a. | 
| 2b80 | 66 69 6c 65 20 65 78 69 73 74 69 6e 67 20 75 6e    64 65 72 0a 74 68 65 20 57 49 4b 49 52 4f 4f 54 | file.existing.under.the.WIKIROOT | 
| 2ba0 | 2c 20 62 61 63 6b 20 74 6f 20 74 68 65 20 48 54    54 50 43 4f 4e 2e 0a 0a 55 70 64 61 74 65 20 6f | ,.back.to.the.HTTPCON...Update.o | 
| 2bc0 | 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72    6f 74 65 63 74 65 64 20 62 79 20 61 75 74 68 65 | perations.are.protected.by.authe | 
| 2be0 | 6e 74 69 63 61 74 69 6f 6e 2e 22 0a 20 20 28 65    6c 6e 6f 64 65 2d 6d 65 74 68 6f 64 20 68 74 74 | ntication."...(elnode-method.htt | 
| 2c00 | 70 63 6f 6e 0a 20 20 20 20 28 47 45 54 0a 20 20    20 20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f | pcon.....(GET......(elnode-docro | 
| 2c20 | 6f 74 2d 66 6f 72 20 77 69 6b 69 72 6f 6f 74 0a    20 20 20 20 20 20 20 77 69 74 68 20 74 61 72 67 | ot-for.wikiroot........with.targ | 
| 2c40 | 65 74 2d 70 61 74 68 0a 20 20 20 20 20 20 20 6f    6e 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 | et-path........on.httpcon....... | 
| 2c60 | 20 64 6f 0a 20 20 20 20 20 20 20 28 69 66 20 28    65 71 75 61 6c 20 74 61 72 67 65 74 2d 70 61 74 | .do........(if.(equal.target-pat | 
| 2c80 | 68 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e    61 6d 65 20 28 63 6f 6e 63 61 74 20 77 69 6b 69 | h.(expand-file-name.(concat.wiki | 
| 2ca0 | 72 6f 6f 74 20 22 2f 22 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 | root."/")))............(elnode-w | 
| 2cc0 | 69 6b 69 2d 70 61 67 65 20 68 74 74 70 63 6f 6e    20 28 63 6f 6e 63 61 74 20 77 69 6b 69 72 6f 6f | iki-page.httpcon.(concat.wikiroo | 
| 2ce0 | 74 20 22 2f 69 6e 64 65 78 2e 63 72 65 6f 6c 65    22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 | t."/index.creole"))............( | 
| 2d00 | 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65    20 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d | elnode-wiki-page.httpcon.target- | 
| 2d20 | 70 61 74 68 29 29 29 29 0a 20 20 20 20 28 50 4f    53 54 0a 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d | path)))).....(POST......(elnode- | 
| 2d40 | 77 69 74 68 2d 61 75 74 68 20 68 74 74 70 63 6f    6e 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 | with-auth.httpcon.'elnode-wiki-a | 
| 2d60 | 75 74 68 0a 20 20 20 20 20 20 20 28 6c 65 74 2a    20 28 28 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d | uth........(let*.((path.(elnode- | 
| 2d80 | 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74    74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 | http-pathinfo.httpcon))......... | 
| 2da0 | 20 20 20 20 20 20 28 74 65 78 74 20 28 65 6c 6e    6f 64 65 2d 77 69 6b 69 2d 2d 74 65 78 74 2d 70 | ......(text.(elnode-wiki--text-p | 
| 2dc0 | 61 72 61 6d 20 68 74 74 70 63 6f 6e 29 29 29 0a    20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f | aram.httpcon)))..........(if.(no | 
| 2de0 | 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70    61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 70 72 | t.(elnode-http-param.httpcon."pr | 
| 2e00 | 65 76 69 65 77 22 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 3b 3b 20 41 20 73 61 76 65 20 | eview"))..............;;.A.save. | 
| 2e20 | 72 65 71 75 65 73 74 20 69 6e 20 77 68 69 63 68    20 63 61 73 65 20 73 61 76 65 20 74 68 65 20 6e | request.in.which.case.save.the.n | 
| 2e40 | 65 77 20 74 65 78 74 20 61 6e 64 20 74 68 65 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b | ew.text.and.then..............;; | 
| 2e60 | 20 73 65 6e 64 20 74 68 65 20 77 69 6b 69 20 74    65 78 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 | .send.the.wiki.text............. | 
| 2e80 | 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d    73 61 76 65 2d 72 65 71 75 65 73 74 20 68 74 74 | ..(elnode-wiki--save-request.htt | 
| 2ea0 | 70 63 6f 6e 20 77 69 6b 69 72 6f 6f 74 20 70 61    74 68 20 74 65 78 74 29 0a 20 20 20 20 20 20 20 | pcon.wikiroot.path.text)........ | 
| 2ec0 | 20 20 20 20 20 20 3b 3b 20 4d 69 67 68 74 20 62    65 20 61 20 70 72 65 76 69 65 77 20 72 65 71 75 | ......;;.Might.be.a.preview.requ | 
| 2ee0 | 65 73 74 20 69 6e 20 77 68 69 63 68 20 63 61 73    65 20 73 65 6e 64 20 62 61 63 6b 20 74 68 65 20 | est.in.which.case.send.back.the. | 
| 2f00 | 57 49 4b 49 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 3b 3b 20 74 65 78 74 20 74 68 61 74 27 73 | WIKI..............;;.text.that's | 
| 2f20 | 20 62 65 65 6e 20 73 65 6e 74 2e 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 | .been.sent...............(with-t | 
| 2f40 | 65 6d 70 2d 66 69 6c 65 20 22 2f 74 6d 70 2f 70    72 65 76 69 65 77 22 0a 20 20 20 20 20 20 20 20 | emp-file."/tmp/preview"......... | 
| 2f60 | 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 74    65 78 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 | .......(insert.text))........... | 
| 2f80 | 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d    73 65 6e 64 20 68 74 74 70 63 6f 6e 20 22 2f 74 | ...(elnode-wiki-send.httpcon."/t | 
| 2fa0 | 6d 70 2f 70 72 65 76 69 65 77 22 20 70 61 74 68    29 29 29 29 29 29 29 0a 7d 7d 7d 0a 0a 49 74 20 | mp/preview".path))))))).}}}..It. | 
| 2fc0 | 64 6f 65 73 20 6c 69 6e 6b 73 2c 20 66 6f 72 20    65 78 61 6d 70 6c 65 20 74 6f 0a 5b 5b 68 74 74 | does.links,.for.example.to.[[htt | 
| 2fe0 | 70 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6e    69 63 66 65 72 72 69 65 72 2f 65 6c 77 69 6b 69 | p://github.com/nicferrier/elwiki | 
| 3000 | 63 72 65 6f 6c 65 7c 45 6d 61 63 73 20 43 72 65    6f 6c 65 5d 5d 20 77 68 69 63 68 20 69 73 0a 74 | creole|Emacs.Creole]].which.is.t | 
| 3020 | 68 65 20 57 69 6b 69 20 72 65 6e 64 65 72 20 65    6e 67 69 6e 65 20 75 73 65 64 20 74 6f 20 64 69 | he.Wiki.render.engine.used.to.di | 
| 3040 | 73 70 6c 61 79 20 70 61 67 65 73 2e 0a 0a 49 74    20 64 6f 65 73 20 61 6c 6c 20 74 68 65 20 6e 6f | splay.pages...It.does.all.the.no | 
| 3060 | 72 6d 61 6c 20 57 69 6b 69 20 74 68 69 6e 67 73    20 6c 69 6b 65 20 68 65 61 64 69 6e 67 73 20 61 | rmal.Wiki.things.like.headings.a | 
| 3080 | 6e 64 20 6c 69 73 74 73 2e 0a 0a 59 6f 75 20 63    61 6e 20 61 6c 73 6f 20 64 6f 20 73 6f 6d 65 20 | nd.lists...You.can.also.do.some. | 
| 30a0 | 73 70 65 63 69 61 6c 20 45 6d 61 63 73 20 74 68    69 6e 67 73 2c 20 6c 69 6b 65 20 6f 72 67 2d 6d | special.Emacs.things,.like.org-m | 
| 30c0 | 6f 64 65 20 74 61 62 6c 65 73 3a 0a 0a 7c 20 20    20 20 20 20 20 44 61 74 65 20 7c 20 41 6d 6f 75 | ode.tables:..|.......Date.|.Amou | 
| 30e0 | 6e 74 20 7c 20 44 65 73 63 72 69 70 74 69 6f 6e    20 20 20 20 20 20 20 20 20 7c 0a 7c 2d 2d 2d 2d | nt.|.Description.........|.|---- | 
| 3100 | 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d 2d    2d 2b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | --------+--------+-------------- | 
| 3120 | 2d 2d 2d 2d 2d 2d 2d 7c 0a 7c 20 32 30 31 31 2d    31 31 2d 31 35 20 7c 20 31 30 30 2e 31 35 20 7c | -------|.|.2011-11-15.|.100.15.| | 
| 3140 | 20 45 78 70 65 6e 73 69 76 65 20 6c 75 6e 63 68    20 6f 75 74 20 7c 0a 7c 20 32 30 31 31 2d 31 31 | .Expensive.lunch.out.|.|.2011-11 | 
| 3160 | 2d 31 38 20 7c 20 20 20 37 2e 33 30 20 7c 20 44    72 79 20 63 6c 65 61 6e 69 6e 67 20 20 20 20 20 | -18.|...7.30.|.Dry.cleaning..... | 
| 3180 | 20 20 20 7c 0a 7c 20 32 30 31 31 2d 31 31 2d 32    31 20 7c 20 20 32 32 2e 35 30 20 7c 20 54 61 6b | ...|.|.2011-11-21.|..22.50.|.Tak | 
| 31a0 | 65 61 77 61 79 20 63 75 72 72 79 20 20 20 20 20    20 7c 0a 7c 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d | eaway.curry......|.|------------ | 
| 31c0 | 2b 2d 2d 2d 2d 2d 2d 2d 2d 2b 2d 2d 2d 2d 2d 2d    2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 7c | +--------+---------------------| | 
| 31e0 | 0a 7c 20 20 20 20 20 20 20 20 20 20 20 20 7c 20    31 32 39 2e 39 35 20 7c 20 20 20 20 20 20 20 20 | .|............|.129.95.|........ | 
| 3200 | 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 23    2b 54 42 4c 46 4d 3a 20 40 35 24 32 3d 76 73 75 | .............|.#+TBLFM:.@5$2=vsu | 
| 3220 | 6d 28 40 49 2e 2e 40 49 49 29 0a 0a 61 6e 64 20    6c 69 73 70 20 63 61 6c 6c 6f 75 74 73 3a 0a 0a | m(@I..@II)..and.lisp.callouts:.. | 
| 3240 | 3c 3c 28 0a 20 28 6d 61 70 63 6f 6e 63 61 74 0a    20 20 20 28 6c 61 6d 62 64 61 20 28 73 29 0a 20 | <<(..(mapconcat....(lambda.(s).. | 
| 3260 | 20 20 20 20 28 66 6f 72 6d 61 74 20 22 2a 20 25    73 22 20 73 29 29 0a 20 20 20 27 28 22 77 68 69 | ....(format."*.%s".s))....'("whi | 
| 3280 | 63 68 22 20 22 65 76 61 6c 22 20 22 6c 69 73 70    22 20 22 61 6e 64 22 20 22 72 65 6e 64 65 72 22 | ch"."eval"."lisp"."and"."render" | 
| 32a0 | 20 22 74 68 65 22 20 22 72 65 73 75 6c 74 73 22    29 0a 20 20 20 22 5c 6e 22 29 0a 29 3e 3e 0a 0a | ."the"."results")...."\n").)>>.. | 
| 32c0 | 0a 3d 3d 20 41 75 74 68 65 6e 74 69 63 61 74 69    6f 6e 20 3d 3d 0a 0a 42 79 20 64 65 66 61 75 6c | .==.Authentication.==..By.defaul | 
| 32e0 | 74 2c 20 74 68 65 20 57 69 6b 69 20 75 73 65 73    20 61 6e 20 61 75 74 68 65 6e 74 69 63 61 74 69 | t,.the.Wiki.uses.an.authenticati | 
| 3300 | 6f 6e 20 64 61 74 61 62 61 73 65 20 69 6e 20 74    68 65 20 45 6d 61 63 73 0a 69 6e 73 74 61 6e 63 | on.database.in.the.Emacs.instanc | 
| 3320 | 65 20 72 75 6e 6e 69 6e 67 20 45 6c 6e 6f 64 65    20 61 6e 64 20 74 68 65 20 57 69 6b 69 20 73 65 | e.running.Elnode.and.the.Wiki.se | 
| 3340 | 72 76 65 72 2e 0a 0a 49 66 20 79 6f 75 20 77 61    6e 74 20 74 6f 20 61 64 64 20 61 20 75 73 65 72 | rver...If.you.want.to.add.a.user | 
| 3360 | 20 74 6f 20 74 68 65 20 57 69 6b 69 20 73 6f 20    79 6f 75 20 63 61 6e 20 65 64 69 74 20 70 61 67 | .to.the.Wiki.so.you.can.edit.pag | 
| 3380 | 65 73 20 79 6f 75 20 63 61 6e 20 64 6f 20 74 68    69 73 20 69 6e 20 45 6d 61 63 73 3a 0a 0a 7b 7b | es.you.can.do.this.in.Emacs:..{{ | 
| 33a0 | 7b 0a 4d 2d 78 20 65 6c 6e 6f 64 65 2d 61 75 74    68 2d 75 73 65 72 2d 61 64 64 0a 7d 7d 7d 0a 0a | {.M-x.elnode-auth-user-add.}}}.. | 
| 33c0 | 61 6e 64 20 69 74 20 77 69 6c 6c 20 61 73 6b 20    79 6f 75 20 66 6f 72 20 61 20 75 73 65 72 6e 61 | and.it.will.ask.you.for.a.userna | 
| 33e0 | 6d 65 20 61 6e 64 20 61 20 70 61 73 73 77 6f 72    64 2e 20 20 54 68 65 20 75 73 65 72 20 77 69 6c | me.and.a.password...The.user.wil | 
| 3400 | 6c 20 62 65 0a 73 74 6f 72 65 64 20 69 6e 20 61    20 70 65 72 73 69 73 74 65 6e 74 20 64 61 74 61 | l.be.stored.in.a.persistent.data | 
| 3420 | 62 61 73 65 2e 0a 0a 0a 3d 3d 20 57 68 65 72 65    20 74 68 65 20 57 69 6b 69 20 70 61 67 65 73 20 | base....==.Where.the.Wiki.pages. | 
| 3440 | 61 72 65 20 3d 3d 0a 0a 42 79 20 64 65 66 61 75    6c 74 20 74 68 65 20 45 6c 6e 6f 64 65 20 57 69 | are.==..By.default.the.Elnode.Wi | 
| 3460 | 6b 69 20 73 74 6f 72 65 73 20 66 69 6c 65 73 20    69 6e 20 79 6f 75 72 20 7b 7b 7b 7e 2f 2e 65 6d | ki.stores.files.in.your.{{{~/.em | 
| 3480 | 61 63 73 2e 64 7d 7d 7d 0a 64 69 72 65 63 74 6f    72 79 20 77 68 69 63 68 20 69 73 20 61 63 74 75 | acs.d}}}.directory.which.is.actu | 
| 34a0 | 61 6c 6c 79 20 64 65 66 69 6e 65 64 20 62 79 20    74 68 65 20 76 61 72 69 61 62 6c 65 0a 7b 7b 7b | ally.defined.by.the.variable.{{{ | 
| 34c0 | 75 73 65 72 2d 65 6d 61 63 73 2d 64 69 72 65 63    74 6f 72 79 7d 7d 7d 20 69 6e 20 45 6d 61 63 73 | user-emacs-directory}}}.in.Emacs | 
| 34e0 | 2e 0a 0a 54 68 65 72 65 20 69 73 20 6e 6f 72 6d    61 6c 6c 79 20 61 20 64 69 72 65 63 74 6f 72 79 | ...There.is.normally.a.directory | 
| 3500 | 20 7b 7b 7b 65 6c 6e 6f 64 65 7d 7d 7d 20 69 6e    20 74 68 61 74 20 64 69 72 65 63 74 6f 72 79 20 | .{{{elnode}}}.in.that.directory. | 
| 3520 | 77 68 69 63 68 0a 63 6f 6e 74 61 69 6e 73 20 64    69 72 65 63 74 6f 72 69 65 73 20 66 6f 72 20 74 | which.contains.directories.for.t | 
| 3540 | 68 65 20 57 65 62 20 73 65 72 76 65 72 20 64 6f    63 75 6d 65 6e 74 20 72 6f 6f 74 20 61 6e 64 20 | he.Web.server.document.root.and. | 
| 3560 | 74 68 65 20 57 69 6b 69 2e 0a 0a 54 68 65 20 6c    6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 57 | the.Wiki...The.location.of.the.W | 
| 3580 | 69 6b 69 20 66 69 6c 65 73 20 63 61 6e 20 62 65    20 63 6f 6e 66 69 67 75 72 65 64 20 74 68 6f 75 | iki.files.can.be.configured.thou | 
| 35a0 | 67 68 2c 20 74 72 79 3a 0a 0a 7b 7b 7b 0a 4d 2d    78 20 63 75 73 74 6f 6d 69 7a 65 2d 76 61 72 69 | gh,.try:..{{{.M-x.customize-vari | 
| 35c0 | 61 62 6c 65 20 5b 52 45 54 5d 20 65 6c 6e 6f 64    65 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b | able.[RET].elnode-wikiserver-wik | 
| 35e0 | 69 72 6f 6f 74 0a 7d 7d 7d 0a 0a 3d 3d 20 4d 6f    72 65 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f 6e | iroot.}}}..==.More.customization | 
| 3600 | 20 3d 3d 0a 0a 54 68 65 72 65 20 61 72 65 20 6d    61 6e 79 20 6f 74 68 65 72 20 74 68 69 6e 67 73 | .==..There.are.many.other.things | 
| 3620 | 20 69 6e 20 45 6c 6e 6f 64 65 27 73 20 57 69 6b    69 20 74 68 61 74 20 63 61 6e 20 62 65 20 63 75 | .in.Elnode's.Wiki.that.can.be.cu | 
| 3640 | 73 74 6f 6d 69 7a 65 64 2c 0a 69 6e 63 6c 75 64    69 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 61 | stomized,.including.the.header.a | 
| 3660 | 6e 64 20 66 6f 6f 74 65 72 2e 20 55 73 65 3a 0a    0a 7b 7b 7b 0a 4d 2d 78 20 63 75 73 74 6f 6d 69 | nd.footer..Use:..{{{.M-x.customi | 
| 3680 | 7a 65 2d 67 72 6f 75 70 20 5b 52 45 54 5d 20 65    6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 | ze-group.[RET].elnode-wikiserver | 
| 36a0 | 20 5b 52 45 54 5d 0a 7d 7d 7d 0a 0a 54 68 65 72    65 20 69 73 20 6d 6f 72 65 20 74 6f 20 64 6f 20 | .[RET].}}}..There.is.more.to.do. | 
| 36c0 | 77 69 74 68 20 74 68 65 20 45 6c 6e 6f 64 65 20    57 69 6b 69 20 73 65 72 76 65 72 20 62 65 63 61 | with.the.Elnode.Wiki.server.beca | 
| 36e0 | 75 73 65 20 74 68 65 72 65 20 69 73 20 73 6f 0a    6d 75 63 68 20 74 68 61 74 20 45 6d 61 63 73 20 | use.there.is.so.much.that.Emacs. | 
| 3700 | 63 61 6e 20 64 6f 2e 0a 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | can.do.......................... | 
| 3720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3740 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 37a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 37c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 37e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3800 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 6c 69 73 74 | elnode-20190702.1509/elnode-list | 
| 3820 | 73 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | s.el............................ | 
| 3840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3860 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 3880 | 30 30 31 31 34 34 34 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 32 31 32 00 20 30 00 00 00 | 0011444.00000000000.015212..0... | 
| 38a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 38c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 38e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3900 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 3920 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 3940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 39a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 39c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 39e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 3a00 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 6c 69 73 74 73    2e 65 6c 20 2d 20 6d 61 6e 61 67 65 6d 65 6e 74 | ;;;.elnode-lists.el.-.management | 
| 3a20 | 20 74 6f 6f 6c 73 20 66 6f 72 20 65 6c 6e 6f 64    65 0a 0a 28 72 65 71 75 69 72 65 20 27 65 6c 6e | .tools.for.elnode..(require.'eln | 
| 3a40 | 6f 64 65 29 0a 28 72 65 71 75 69 72 65 20 27 74    61 62 75 6c 61 74 65 64 2d 6c 69 73 74 29 0a 28 | ode).(require.'tabulated-list).( | 
| 3a60 | 72 65 71 75 69 72 65 20 27 6e 6f 66 6c 65 74 29    0a 0a 3b 3b 3b 20 44 65 66 65 72 72 65 64 20 71 | require.'noflet)..;;;.Deferred.q | 
| 3a80 | 75 65 75 65 20 6c 69 73 74 0a 0a 3b 3b 3b 23 23    23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e | ueue.list..;;;###autoload.(defun | 
| 3aa0 | 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64    2d 71 75 65 75 65 20 28 61 72 67 29 0a 20 20 22 | .elnode-deferred-queue.(arg)..." | 
| 3ac0 | 4d 65 73 73 61 67 65 20 74 68 65 20 6c 65 6e 67    74 68 20 6f 66 20 74 68 65 20 64 65 66 65 72 72 | Message.the.length.of.the.deferr | 
| 3ae0 | 65 64 20 71 75 65 75 65 2e 22 0a 20 20 28 69 6e    74 65 72 61 63 74 69 76 65 20 22 50 22 29 0a 20 | ed.queue."...(interactive."P").. | 
| 3b00 | 20 28 69 66 20 28 6e 6f 74 20 61 72 67 29 0a 20    20 20 20 20 20 28 6d 65 73 73 61 67 65 0a 20 20 | .(if.(not.arg).......(message... | 
| 3b20 | 20 20 20 20 20 22 65 6c 6e 6f 64 65 20 64 65 66    65 72 72 65 64 20 71 75 65 75 65 3a 20 25 64 20 | ....."elnode.deferred.queue:.%d. | 
| 3b40 | 25 73 22 0a 20 20 20 20 20 20 20 28 6c 65 6e 67    74 68 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 | %s"........(length.elnode--defer | 
| 3b60 | 72 65 64 29 0a 20 20 20 20 20 20 20 65 6c 6e 6f    64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 29 | red)........elnode--defer-timer) | 
| 3b80 | 0a 20 20 20 20 28 73 65 74 71 20 65 6c 6e 6f 64    65 2d 2d 64 65 66 65 72 72 65 64 20 28 6c 69 73 | .....(setq.elnode--deferred.(lis | 
| 3ba0 | 74 29 29 0a 20 20 20 20 28 6d 65 73 73 61 67 65    20 22 65 6c 6e 6f 64 65 20 64 65 66 65 72 72 65 | t)).....(message."elnode.deferre | 
| 3bc0 | 64 20 71 75 65 75 65 20 72 65 73 65 74 21 22 29    29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 | d.queue.reset!")))..(defun.elnod | 
| 3be0 | 65 2d 2d 6c 69 73 74 2d 64 65 66 65 72 72 65 64    73 20 28 29 0a 20 20 22 4c 69 73 74 20 74 68 65 | e--list-deferreds.()..."List.the | 
| 3c00 | 20 64 65 66 65 72 72 65 64 20 73 65 72 76 65 72    73 2e 22 0a 20 20 3b 3b 20 54 4f 44 4f 20 68 61 | .deferred.servers."...;;.TODO.ha | 
| 3c20 | 76 65 20 74 68 65 20 64 65 66 65 72 20 73 74 75    66 66 20 70 75 74 20 61 20 62 65 74 74 65 72 20 | ve.the.defer.stuff.put.a.better. | 
| 3c40 | 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65    20 61 63 74 75 61 6c 0a 20 20 3b 3b 20 68 61 6e | reference.to.the.actual...;;.han | 
| 3c60 | 64 6c 65 72 20 6f 6e 74 6f 20 74 68 65 20 70 72    6f 63 65 73 73 3f 0a 20 20 3b 3b 0a 20 20 3b 3b | dler.onto.the.process?...;;...;; | 
| 3c80 | 20 77 65 20 63 6f 75 6c 64 20 68 61 76 65 20 74    68 65 20 6d 61 70 70 65 72 20 61 64 64 20 74 68 | .we.could.have.the.mapper.add.th | 
| 3ca0 | 65 20 6d 61 70 70 65 64 20 66 75 6e 63 74 69 6f    6e 20 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 | e.mapped.function.to.the.process | 
| 3cc0 | 20 61 73 20 77 65 6c 6c 3f 0a 20 20 3b 3b 0a 20    20 3b 3b 20 69 6e 74 6f 20 61 20 6c 69 73 74 20 | .as.well?...;;...;;.into.a.list. | 
| 3ce0 | 6f 66 20 6d 61 70 70 65 64 20 66 75 6e 63 74 69    6f 6e 73 20 6f 6e 20 74 68 69 73 20 70 72 6f 63 | of.mapped.functions.on.this.proc | 
| 3d00 | 65 73 73 3f 0a 20 20 28 6c 6f 6f 70 20 66 6f 72    20 28 70 72 6f 63 20 2e 20 64 65 66 65 72 72 65 | ess?...(loop.for.(proc...deferre | 
| 3d20 | 64 2d 63 6c 6f 73 75 72 65 29 20 69 6e 20 65 6c    6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 0a 20 | d-closure).in.elnode--deferred.. | 
| 3d40 | 20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20    20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 | ....collect........(list........ | 
| 3d60 | 20 70 72 6f 63 0a 20 20 20 20 20 20 20 20 28 6c    65 74 20 28 28 70 6c 20 28 70 72 6f 63 65 73 73 | .proc.........(let.((pl.(process | 
| 3d80 | 2d 70 6c 69 73 74 20 70 72 6f 63 29 29 29 0a 20    20 20 20 20 20 20 20 20 20 28 76 65 63 74 6f 72 | -plist.proc)))...........(vector | 
| 3da0 | 20 28 61 70 70 6c 79 20 27 66 6f 72 6d 61 74 20    22 25 73 3a 25 53 22 20 28 70 72 6f 63 65 73 73 | .(apply.'format."%s:%S".(process | 
| 3dc0 | 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | -contact.proc))................. | 
| 3de0 | 20 20 28 61 70 70 6c 79 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 27 66 6f 72 | ..(apply....................'for | 
| 3e00 | 6d 61 74 20 22 25 73 2e 25 73 2e 25 73 2e 25 73    2e 3a 25 73 22 0a 20 20 20 20 20 20 20 20 20 20 | mat."%s.%s.%s.%s.:%s"........... | 
| 3e20 | 20 20 20 20 20 20 20 20 20 28 6d 61 70 63 61 72    20 27 69 64 65 6e 74 69 74 79 20 28 70 72 6f 63 | .........(mapcar.'identity.(proc | 
| 3e40 | 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f 63    20 3a 6c 6f 63 61 6c 29 29 29 0a 20 20 20 20 20 | ess-contact.proc.:local)))...... | 
| 3e60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79    6d 62 6f 6c 2d 6e 61 6d 65 20 28 70 6c 69 73 74 | .............(symbol-name.(plist | 
| 3e80 | 2d 67 65 74 20 70 6c 20 3a 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 68 61 6e 64 6c 65 72 29 29 0a 20 | -get.pl.:elnode-http-handler)).. | 
| 3ea0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 70 6c 69 73 74 2d 67 65 74 20 70 6c 20 3a | .................(plist-get.pl.: | 
| 3ec0 | 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 73 6f    75 72 63 65 29 29 29 29 29 29 0a 0a 28 64 65 66 | elnode-http-resource))))))..(def | 
| 3ee0 | 69 6e 65 2d 64 65 72 69 76 65 64 2d 6d 6f 64 65    0a 20 20 20 20 65 6c 6e 6f 64 65 2d 64 65 66 65 | ine-derived-mode.....elnode-defe | 
| 3f00 | 72 72 65 64 2d 6c 69 73 74 2d 6d 6f 64 65 20 74    61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 6d 6f | rred-list-mode.tabulated-list-mo | 
| 3f20 | 64 65 20 22 45 6c 6e 6f 64 65 20 64 65 66 65 72    65 64 20 71 75 65 75 65 20 6c 69 73 74 22 0a 20 | de."Elnode.defered.queue.list".. | 
| 3f40 | 20 20 20 22 4d 61 6a 6f 72 20 6d 6f 64 65 20 66    6f 72 20 6c 69 73 74 69 6e 67 20 74 68 65 20 63 | ..."Major.mode.for.listing.the.c | 
| 3f60 | 75 72 72 65 6e 74 6c 79 20 64 65 66 65 72 72 65    64 20 45 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 | urrently.deferred.Elnode.handler | 
| 3f80 | 73 2e 22 0a 20 20 20 20 28 73 65 74 71 20 74 61    62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 65 6e 74 | s.".....(setq.tabulated-list-ent | 
| 3fa0 | 72 69 65 73 20 27 65 6c 6e 6f 64 65 2d 2d 6c 69    73 74 2d 64 65 66 65 72 72 65 64 73 29 0a 20 20 | ries.'elnode--list-deferreds)... | 
| 3fc0 | 20 20 28 73 65 74 71 20 74 61 62 75 6c 61 74 65    64 2d 6c 69 73 74 2d 66 6f 72 6d 61 74 0a 20 20 | ..(setq.tabulated-list-format... | 
| 3fe0 | 20 20 20 20 20 20 20 20 5b 28 22 41 64 64 72 65    73 73 22 20 31 35 20 6e 69 6c 29 0a 20 20 20 20 | ........[("Address".15.nil)..... | 
| 4000 | 20 20 20 20 20 20 20 28 22 4c 6f 63 61 6c 20 73    65 72 76 65 72 22 20 31 35 20 6e 69 6c 29 0a 20 | .......("Local.server".15.nil).. | 
| 4020 | 20 20 20 20 20 20 20 20 20 20 28 22 48 61 6e 64    6c 65 72 20 66 75 6e 63 74 69 6f 6e 22 20 32 30 | ..........("Handler.function".20 | 
| 4040 | 20 6e 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20    20 28 22 52 65 73 6f 75 72 63 65 22 20 33 30 20 | .nil)............("Resource".30. | 
| 4060 | 6e 69 6c 29 5d 29 0a 20 20 20 20 28 74 61 62 75    6c 61 74 65 64 2d 6c 69 73 74 2d 69 6e 69 74 2d | nil)]).....(tabulated-list-init- | 
| 4080 | 68 65 61 64 65 72 29 29 0a 0a 3b 3b 3b 23 23 23    61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 | header))..;;;###autoload.(defun. | 
| 40a0 | 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 2d    6c 69 73 74 20 28 26 6f 70 74 69 6f 6e 61 6c 20 | elnode-deferred-list.(&optional. | 
| 40c0 | 70 72 65 66 69 78 29 0a 20 20 22 4c 69 73 74 20    74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 64 65 | prefix)..."List.the.currently.de | 
| 40e0 | 66 65 72 72 65 64 20 45 6c 6e 6f 64 65 20 68 61    6e 64 6c 65 72 73 2e 22 0a 20 20 28 69 6e 74 65 | ferred.Elnode.handlers."...(inte | 
| 4100 | 72 61 63 74 69 76 65 20 22 50 22 29 0a 20 20 28    77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 | ractive."P")...(with-current-buf | 
| 4120 | 66 65 72 20 28 67 65 74 2d 62 75 66 66 65 72 2d    63 72 65 61 74 65 20 22 2a 65 6c 6e 6f 64 65 20 | fer.(get-buffer-create."*elnode. | 
| 4140 | 64 65 66 65 72 72 65 64 73 2a 22 29 0a 20 20 20    20 28 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 | deferreds*").....(elnode-deferre | 
| 4160 | 64 2d 6c 69 73 74 2d 6d 6f 64 65 29 0a 20 20 20    20 28 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 | d-list-mode).....(tabulated-list | 
| 4180 | 2d 70 72 69 6e 74 29 0a 20 20 20 20 28 69 66 20    70 72 65 66 69 78 0a 20 20 20 20 20 20 20 20 28 | -print).....(if.prefix.........( | 
| 41a0 | 73 77 69 74 63 68 2d 74 6f 2d 62 75 66 66 65 72    2d 6f 74 68 65 72 2d 77 69 6e 64 6f 77 20 28 63 | switch-to-buffer-other-window.(c | 
| 41c0 | 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 0a    20 20 20 20 20 20 20 20 28 73 77 69 74 63 68 2d | urrent-buffer)).........(switch- | 
| 41e0 | 74 6f 2d 62 75 66 66 65 72 20 28 63 75 72 72 65    6e 74 2d 62 75 66 66 65 72 29 29 29 29 29 0a 0a | to-buffer.(current-buffer))))).. | 
| 4200 | 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28    64 65 66 61 6c 69 61 73 20 27 6c 69 73 74 2d 65 | ;;;###autoload.(defalias.'list-e | 
| 4220 | 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 73 20    27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 | lnode-deferreds.'elnode-deferred | 
| 4240 | 2d 6c 69 73 74 29 0a 0a 3b 3b 3b 20 53 65 72 76    65 72 20 6c 69 73 74 0a 0a 28 64 65 66 75 6e 20 | -list)..;;;.Server.list..(defun. | 
| 4260 | 65 6c 6e 6f 64 65 2d 2d 6c 69 73 74 2d 73 65 72    76 65 72 73 20 28 29 0a 20 20 22 4c 69 73 74 20 | elnode--list-servers.()..."List. | 
| 4280 | 74 68 65 20 63 75 72 72 65 6e 74 20 45 6c 6e 6f    64 65 20 73 65 72 76 65 72 73 20 66 6f 72 20 60 | the.current.Elnode.servers.for.` | 
| 42a0 | 65 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65    27 2e 22 0a 20 20 28 6e 6f 66 6c 65 74 20 28 28 | elnode-list-mode'."...(noflet.(( | 
| 42c0 | 63 6c 6f 73 75 72 65 70 20 28 76 29 0a 20 20 20    20 20 20 20 20 20 20 20 28 61 6e 64 20 28 66 75 | closurep.(v)............(and.(fu | 
| 42e0 | 6e 63 74 69 6f 6e 70 20 76 29 20 28 6c 69 73 74    70 20 76 29 20 28 65 71 20 28 63 61 72 20 76 29 | nctionp.v).(listp.v).(eq.(car.v) | 
| 4300 | 20 27 63 6c 6f 73 75 72 65 29 29 29 29 0a 20 20    20 20 28 6c 6f 6f 70 20 66 6f 72 20 28 70 6f 72 | .'closure)))).....(loop.for.(por | 
| 4320 | 74 20 2e 20 73 6f 63 6b 65 74 2d 70 72 6f 63 29    20 69 6e 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 | t...socket-proc).in.elnode-serve | 
| 4340 | 72 2d 73 6f 63 6b 65 74 0a 20 20 20 20 20 20 20    63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 | r-socket........collect......... | 
| 4360 | 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20    20 70 6f 72 74 0a 20 20 20 20 20 20 20 20 20 20 | .(list...........port........... | 
| 4380 | 28 6c 65 74 2a 20 28 28 66 6e 20 28 70 72 6f 63    65 73 73 2d 67 65 74 20 73 6f 63 6b 65 74 2d 70 | (let*.((fn.(process-get.socket-p | 
| 43a0 | 72 6f 63 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 68 61 6e 64 6c 65 72 29 29 0a 20 20 20 20 20 | roc.:elnode-http-handler))...... | 
| 43c0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 64 6f 63    20 28 77 68 65 6e 20 28 66 75 6e 63 74 69 6f 6e | ............(doc.(when.(function | 
| 43e0 | 70 20 66 6e 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 | p.fn).........................(d | 
| 4400 | 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6e 29    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ocumentation.fn))))............. | 
| 4420 | 28 76 65 63 74 6f 72 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 | (vector..............(format."%s | 
| 4440 | 22 20 70 6f 72 74 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 | ".port)..............(cond...... | 
| 4460 | 20 20 20 20 20 20 20 20 20 20 28 28 63 6c 6f 73    75 72 65 70 20 66 6e 29 20 28 66 6f 72 6d 61 74 | ..........((closurep.fn).(format | 
| 4480 | 20 22 25 53 22 20 66 6e 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 28 62 79 74 65 | ."%S".fn))................((byte | 
| 44a0 | 2d 63 6f 64 65 2d 66 75 6e 63 74 69 6f 6e 2d 70    20 66 6e 29 20 28 66 6f 72 6d 61 74 20 22 62 79 | -code-function-p.fn).(format."by | 
| 44c0 | 74 65 2d 63 6f 64 65 22 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 28 61 6e 64 20 | te-code"))................((and. | 
| 44e0 | 28 6c 69 73 74 70 20 66 6e 29 28 65 71 20 28 63    61 72 20 66 6e 29 20 27 6c 61 6d 62 64 61 29 29 | (listp.fn)(eq.(car.fn).'lambda)) | 
| 4500 | 20 28 66 6f 72 6d 61 74 20 22 6c 61 6d 62 64 61    22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | .(format."lambda"))............. | 
| 4520 | 20 20 20 28 74 20 28 73 79 6d 62 6f 6c 2d 6e 61    6d 65 20 66 6e 29 29 29 0a 20 20 20 20 20 20 20 | ...(t.(symbol-name.fn)))........ | 
| 4540 | 20 20 20 20 20 20 28 6f 72 20 28 69 66 20 28 61    6e 64 20 64 6f 63 20 28 73 74 72 69 6e 67 2d 6d | ......(or.(if.(and.doc.(string-m | 
| 4560 | 61 74 63 68 20 22 5e 5c 5c 28 5b 5e 5c 6e 5d 2b    5c 5c 29 22 20 64 6f 63 29 29 0a 20 20 20 20 20 | atch."^\\([^\n]+\\)".doc))...... | 
| 4580 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 | ................(match-string.1. | 
| 45a0 | 64 6f 63 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 64 6f | doc)......................"no.do | 
| 45c0 | 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 22 29 29 29    29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c | cumentation."))))))))..(defun.el | 
| 45e0 | 6e 6f 64 65 2d 6c 69 73 74 73 2d 73 65 72 76 65    72 2d 66 69 6e 64 2d 68 61 6e 64 6c 65 72 20 28 | node-lists-server-find-handler.( | 
| 4600 | 29 0a 20 20 22 46 69 6e 64 20 74 68 65 20 68 61    6e 64 6c 65 72 20 6d 65 6e 74 69 6f 6e 65 64 20 | )..."Find.the.handler.mentioned. | 
| 4620 | 69 6e 20 74 68 65 20 68 61 6e 64 6c 65 72 20 6c    69 73 74 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 | in.the.handler.list."...(interac | 
| 4640 | 74 69 76 65 29 0a 20 20 28 6c 65 74 20 28 28 6c    69 6e 65 0a 20 20 20 20 20 20 20 20 20 28 62 75 | tive)...(let.((line..........(bu | 
| 4660 | 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 2d 6e    6f 2d 70 72 6f 70 65 72 74 69 65 73 0a 20 20 20 | ffer-substring-no-properties.... | 
| 4680 | 20 20 20 20 20 20 20 28 6c 69 6e 65 2d 62 65 67    69 6e 6e 69 6e 67 2d 70 6f 73 69 74 69 6f 6e 29 | .......(line-beginning-position) | 
| 46a0 | 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 6e 65    2d 65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29 29 29 | ...........(line-end-position))) | 
| 46c0 | 29 0a 20 20 20 20 28 77 68 65 6e 20 28 73 74 72    69 6e 67 2d 6d 61 74 63 68 20 22 5e 5b 30 2d 39 | ).....(when.(string-match."^[0-9 | 
| 46e0 | 5d 2b 20 2b 5c 5c 28 5b 5e 20 5d 2b 5c 5c 29 20    2e 2a 22 20 6c 69 6e 65 29 0a 20 20 20 20 20 20 | ]+.+\\([^.]+\\)..*".line)....... | 
| 4700 | 28 6c 65 74 20 28 28 68 61 6e 64 6c 65 72 2d 6e    61 6d 65 20 28 69 6e 74 65 72 6e 20 28 6d 61 74 | (let.((handler-name.(intern.(mat | 
| 4720 | 63 68 2d 73 74 72 69 6e 67 20 31 20 6c 69 6e 65    29 29 29 29 0a 20 20 20 20 20 20 20 20 28 77 69 | ch-string.1.line)))).........(wi | 
| 4740 | 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65    72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 | th-current-buffer.............(f | 
| 4760 | 69 6e 64 2d 66 69 6c 65 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6f 72 20 28 73 79 6d 62 6f | ind-file..............(or.(symbo | 
| 4780 | 6c 2d 66 69 6c 65 20 68 61 6e 64 6c 65 72 2d 6e    61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 | l-file.handler-name)............ | 
| 47a0 | 20 20 20 20 20 20 28 65 72 72 6f 72 20 22 6e 6f    20 73 75 63 68 20 66 69 6c 65 22 29 29 29 0a 20 | ......(error."no.such.file"))).. | 
| 47c0 | 20 20 20 20 20 20 20 20 20 28 66 69 6e 64 2d 66    75 6e 63 74 69 6f 6e 20 68 61 6e 64 6c 65 72 2d | .........(find-function.handler- | 
| 47e0 | 6e 61 6d 65 29 29 29 29 29 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 6c 69 73 74 73 2d | name))))))..(defun.elnode-lists- | 
| 4800 | 6b 69 6c 6c 2d 73 65 72 76 65 72 20 28 29 0a 20    20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a 20 | kill-server.()...(interactive).. | 
| 4820 | 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6c 69 6e    65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f 73 69 | .(goto-char.(line-beginning-posi | 
| 4840 | 74 69 6f 6e 29 29 0a 20 20 28 72 65 2d 73 65 61    72 63 68 2d 66 6f 72 77 61 72 64 20 22 5e 5c 5c | tion))...(re-search-forward."^\\ | 
| 4860 | 28 5b 30 2d 39 5d 2b 5c 5c 29 22 20 28 6c 69 6e    65 2d 65 6e 64 2d 70 6f 73 69 74 69 6f 6e 29 20 | ([0-9]+\\)".(line-end-position). | 
| 4880 | 74 29 0a 20 20 28 6c 65 74 20 28 28 70 6f 72 74    20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 | t)...(let.((port.(string-to-numb | 
| 48a0 | 65 72 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67    20 31 29 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f | er.(match-string.1)))).....(elno | 
| 48c0 | 64 65 2d 73 74 6f 70 20 70 6f 72 74 29 0a 20 20    20 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 2d | de-stop.port).....(let.((buffer- | 
| 48e0 | 72 65 61 64 2d 6f 6e 6c 79 20 6e 69 6c 29 29 0a    20 20 20 20 20 20 28 65 72 61 73 65 2d 62 75 66 | read-only.nil)).......(erase-buf | 
| 4900 | 66 65 72 29 0a 20 20 20 20 20 20 28 74 61 62 75    6c 61 74 65 64 2d 6c 69 73 74 2d 70 72 69 6e 74 | fer).......(tabulated-list-print | 
| 4920 | 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 2d 64 65    72 69 76 65 64 2d 6d 6f 64 65 0a 20 20 20 20 65 | ))))..(define-derived-mode.....e | 
| 4940 | 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65 20    74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74 2d 6d | lnode-list-mode.tabulated-list-m | 
| 4960 | 6f 64 65 20 22 45 6c 6e 6f 64 65 20 73 65 72 76    65 72 20 6c 69 73 74 22 0a 20 20 20 20 22 4d 61 | ode."Elnode.server.list"....."Ma | 
| 4980 | 6a 6f 72 20 6d 6f 64 65 20 66 6f 72 20 6c 69 73    74 69 6e 67 20 45 6c 6e 6f 64 65 20 73 65 72 76 | jor.mode.for.listing.Elnode.serv | 
| 49a0 | 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75    6e 6e 69 6e 67 2e 22 0a 20 20 20 20 28 73 65 74 | ers.currently.running.".....(set | 
| 49c0 | 71 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73 74    2d 65 6e 74 72 69 65 73 20 27 65 6c 6e 6f 64 65 | q.tabulated-list-entries.'elnode | 
| 49e0 | 2d 2d 6c 69 73 74 2d 73 65 72 76 65 72 73 29 0a    20 20 20 20 28 64 65 66 69 6e 65 2d 6b 65 79 20 | --list-servers).....(define-key. | 
| 4a00 | 65 6c 6e 6f 64 65 2d 6c 69 73 74 2d 6d 6f 64 65    2d 6d 61 70 20 28 6b 62 64 20 22 5c 72 22 29 0a | elnode-list-mode-map.(kbd."\r"). | 
| 4a20 | 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 6c 69    73 74 73 2d 73 65 72 76 65 72 2d 66 69 6e 64 2d | ......'elnode-lists-server-find- | 
| 4a40 | 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 28 64 65    66 69 6e 65 2d 6b 65 79 20 65 6c 6e 6f 64 65 2d | handler).....(define-key.elnode- | 
| 4a60 | 6c 69 73 74 2d 6d 6f 64 65 2d 6d 61 70 20 28 6b    62 64 20 22 6b 22 29 0a 20 20 20 20 20 20 27 65 | list-mode-map.(kbd."k").......'e | 
| 4a80 | 6c 6e 6f 64 65 2d 6c 69 73 74 73 2d 6b 69 6c 6c    2d 73 65 72 76 65 72 29 0a 20 20 20 20 28 73 65 | lnode-lists-kill-server).....(se | 
| 4aa0 | 74 71 20 74 61 62 75 6c 61 74 65 64 2d 6c 69 73    74 2d 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 | tq.tabulated-list-format........ | 
| 4ac0 | 20 20 20 5b 28 22 50 6f 72 74 22 20 31 30 20 6e    69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 | ...[("Port".10.nil)............( | 
| 4ae0 | 22 48 61 6e 64 6c 65 72 20 66 75 6e 63 74 69 6f    6e 22 20 34 30 20 6e 69 6c 29 0a 20 20 20 20 20 | "Handler.function".40.nil)...... | 
| 4b00 | 20 20 20 20 20 20 28 22 44 6f 63 75 6d 65 6e 74    61 74 69 6f 6e 22 20 38 30 20 6e 69 6c 29 5d 29 | ......("Documentation".80.nil)]) | 
| 4b20 | 0a 20 20 20 20 28 74 61 62 75 6c 61 74 65 64 2d    6c 69 73 74 2d 69 6e 69 74 2d 68 65 61 64 65 72 | .....(tabulated-list-init-header | 
| 4b40 | 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f    61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | ))..;;;###autoload.(defun.elnode | 
| 4b60 | 2d 73 65 72 76 65 72 2d 6c 69 73 74 20 28 26 6f    70 74 69 6f 6e 61 6c 20 70 72 65 66 69 78 29 0a | -server-list.(&optional.prefix). | 
| 4b80 | 20 20 22 4c 69 73 74 20 74 68 65 20 63 75 72 72    65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 45 6c | .."List.the.currently.running.El | 
| 4ba0 | 6e 6f 64 65 20 73 65 72 76 65 72 73 2e 22 0a 20    20 28 69 6e 74 65 72 61 63 74 69 76 65 20 22 50 | node.servers."...(interactive."P | 
| 4bc0 | 22 29 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65    6e 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 | ")...(with-current-buffer.(get-b | 
| 4be0 | 75 66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 65    6c 6e 6f 64 65 20 73 65 72 76 65 72 73 2a 22 29 | uffer-create."*elnode.servers*") | 
| 4c00 | 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 6c 69 73    74 2d 6d 6f 64 65 29 0a 20 20 20 20 28 74 61 62 | .....(elnode-list-mode).....(tab | 
| 4c20 | 75 6c 61 74 65 64 2d 6c 69 73 74 2d 70 72 69 6e    74 29 0a 20 20 20 20 28 69 66 20 70 72 65 66 69 | ulated-list-print).....(if.prefi | 
| 4c40 | 78 0a 20 20 20 20 20 20 20 20 28 73 77 69 74 63    68 2d 74 6f 2d 62 75 66 66 65 72 2d 6f 74 68 65 | x.........(switch-to-buffer-othe | 
| 4c60 | 72 2d 77 69 6e 64 6f 77 20 28 63 75 72 72 65 6e    74 2d 62 75 66 66 65 72 29 29 0a 20 20 20 20 20 | r-window.(current-buffer))...... | 
| 4c80 | 20 20 20 28 73 77 69 74 63 68 2d 74 6f 2d 62 75    66 66 65 72 20 28 63 75 72 72 65 6e 74 2d 62 75 | ...(switch-to-buffer.(current-bu | 
| 4ca0 | 66 66 65 72 29 29 29 29 29 0a 0a 3b 3b 3b 23 23    23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 61 6c | ffer)))))..;;;###autoload.(defal | 
| 4cc0 | 69 61 73 20 27 6c 69 73 74 2d 65 6c 6e 6f 64 65    2d 73 65 72 76 65 72 73 20 27 65 6c 6e 6f 64 65 | ias.'list-elnode-servers.'elnode | 
| 4ce0 | 2d 73 65 72 76 65 72 2d 6c 69 73 74 29 0a 0a 28    70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d | -server-list)..(provide.'elnode- | 
| 4d00 | 6c 69 73 74 29 0a 0a 3b 3b 3b 20 65 6e 6c 6f 64    65 2d 6c 69 73 74 2e 65 6c 20 65 6e 64 73 20 68 | list)..;;;.enlode-list.el.ends.h | 
| 4d20 | 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ere............................. | 
| 4d40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4d60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4d80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4da0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4dc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4de0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4e00 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 6c 6f 67 2d | elnode-20190702.1509/elnode-log- | 
| 4e20 | 6d 6f 64 65 2e 65 6c 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | mode.el......................... | 
| 4e40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4e60 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 4e80 | 30 30 30 31 34 33 31 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 35 35 32 00 20 30 00 00 00 | 0001431.00000000000.015552..0... | 
| 4ea0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4ec0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4ee0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4f00 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 4f20 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 4f40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4f60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4f80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4fa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4fc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 4fe0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5000 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 6d    6f 64 65 2e 65 6c 20 2d 20 76 69 65 77 20 65 6c | ;;;.elnode-log-mode.el.-.view.el | 
| 5020 | 6e 6f 64 65 20 6c 6f 67 20 66 69 6c 65 73 20 6e    69 63 65 6c 79 0a 0a 3b 3b 3b 23 23 23 61 75 74 | node.log.files.nicely..;;;###aut | 
| 5040 | 6f 6c 6f 61 64 0a 28 64 65 66 69 6e 65 2d 67 65    6e 65 72 69 63 2d 6d 6f 64 65 20 27 65 6c 6e 6f | oload.(define-generic-mode.'elno | 
| 5060 | 64 65 2d 6c 6f 67 2d 6d 6f 64 65 0a 20 20 6e 69    6c 20 3b 20 63 6f 6d 6d 65 6e 74 73 0a 20 20 6e | de-log-mode...nil.;.comments...n | 
| 5080 | 69 6c 3b 20 6b 65 79 77 6f 72 64 73 0a 20 20 60    28 28 22 5e 5c 5c 28 5b 30 2d 39 3a 2d 5d 2b 5c | il;.keywords...`(("^\\([0-9:-]+\ | 
| 50a0 | 5c 29 20 2e 2a 22 20 31 20 27 28 66 61 63 65 20    27 28 69 74 61 6c 69 63 20 28 3a 66 6f 72 65 67 | \)..*".1.'(face.'(italic.(:foreg | 
| 50c0 | 72 6f 75 6e 64 20 22 62 6c 75 65 22 29 29 29 29    0a 20 20 20 20 28 22 5e 5b 30 2d 39 3a 2d 5d 2b | round."blue")))).....("^[0-9:-]+ | 
| 50e0 | 20 5c 5c 28 5b 33 32 5d 5b 30 2d 39 5d 5c 5c 7b    32 5c 5c 7d 5c 5c 29 20 2e 2a 22 20 31 20 27 28 | .\\([32][0-9]\\{2\\}\\)..*".1.'( | 
| 5100 | 66 61 63 65 20 27 28 3a 66 6f 72 65 67 72 6f 75    6e 64 20 22 67 72 65 65 6e 22 29 29 29 0a 20 20 | face.'(:foreground."green")))... | 
| 5120 | 20 20 28 22 5e 5b 30 2d 39 3a 2d 5d 2b 20 5c 5c    28 34 5b 30 2d 39 5d 5c 5c 7b 32 5c 5c 7d 5c 5c | ..("^[0-9:-]+.\\(4[0-9]\\{2\\}\\ | 
| 5140 | 29 20 2e 2a 22 20 31 20 27 28 66 61 63 65 20 27    28 3a 66 6f 72 65 67 72 6f 75 6e 64 20 22 79 65 | )..*".1.'(face.'(:foreground."ye | 
| 5160 | 6c 6c 6f 77 22 29 29 29 0a 20 20 20 20 28 22 5e    5b 30 2d 39 3a 2d 5d 2b 20 5c 5c 28 35 5b 30 2d | llow"))).....("^[0-9:-]+.\\(5[0- | 
| 5180 | 39 5d 5c 5c 7b 32 5c 5c 7d 5c 5c 29 20 2e 2a 22    20 31 20 27 28 66 61 63 65 20 27 28 3a 66 6f 72 | 9]\\{2\\}\\)..*".1.'(face.'(:for | 
| 51a0 | 65 67 72 6f 75 6e 64 20 22 72 65 64 22 29 29 29    0a 20 20 20 20 28 22 5e 2e 2a 20 5c 5c 28 47 45 | eground."red"))).....("^.*.\\(GE | 
| 51c0 | 54 5c 5c 7c 50 4f 53 54 5c 5c 7c 48 45 41 44 5c    5c 7c 44 45 4c 45 54 45 5c 5c 7c 54 52 41 43 45 | T\\|POST\\|HEAD\\|DELETE\\|TRACE | 
| 51e0 | 5c 5c 29 22 20 31 20 27 28 66 61 63 65 20 27 28    62 6f 6c 64 20 28 3a 66 6f 72 65 67 72 6f 75 6e | \\)".1.'(face.'(bold.(:foregroun | 
| 5200 | 64 20 22 70 75 72 70 6c 65 22 29 29 29 29 29 20    3b 20 66 6f 6e 74 2d 6c 6f 63 6b 20 6c 69 73 74 | d."purple"))))).;.font-lock.list | 
| 5220 | 0a 20 20 6e 69 6c 0a 20 20 27 28 28 6c 61 6d 62    64 61 20 28 29 0a 20 20 20 20 20 20 3b 3b 28 75 | ...nil...'((lambda.().......;;(u | 
| 5240 | 73 65 2d 6c 6f 63 61 6c 2d 6d 61 70 20 65 6c 6e    6f 64 65 2d 6c 6f 67 2d 6d 6f 64 65 2d 6d 61 70 | se-local-map.elnode-log-mode-map | 
| 5260 | 29 0a 20 20 20 20 20 20 28 73 65 74 71 20 62 75    66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 27 | ).......(setq.buffer-read-only.' | 
| 5280 | 74 29 0a 20 20 20 20 20 20 28 73 65 74 2d 62 75    66 66 65 72 2d 6d 6f 64 69 66 69 65 64 2d 70 20 | t).......(set-buffer-modified-p. | 
| 52a0 | 6e 69 6c 29 0a 20 20 20 20 20 20 29 29 0a 20 20    22 45 6c 6e 6f 64 65 20 6c 6f 67 20 76 69 65 77 | nil).......))..."Elnode.log.view | 
| 52c0 | 69 6e 67 20 6d 6f 64 65 2e 0a 0a 46 6f 72 20 76    69 65 77 69 6e 67 20 61 63 63 65 73 73 20 6c 6f | ing.mode...For.viewing.access.lo | 
| 52e0 | 67 20 66 69 6c 65 73 20 66 72 6f 6d 20 45 6c 6e    6f 64 65 2e 22 29 0a 0a 3b 3b 3b 20 65 6c 6e 6f | g.files.from.Elnode.")..;;;.elno | 
| 5300 | 64 65 2d 6c 6f 67 2d 6d 6f 64 65 2e 65 6c 20 65    6e 64 73 20 68 65 72 65 0a 00 00 00 00 00 00 00 | de-log-mode.el.ends.here........ | 
| 5320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 53a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 53c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 53e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5400 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 70 6b 67 2e | elnode-20190702.1509/elnode-pkg. | 
| 5420 | 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | el.............................. | 
| 5440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5460 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 5480 | 30 30 30 30 37 37 34 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 36 34 31 00 20 30 00 00 00 | 0000774.00000000000.014641..0... | 
| 54a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 54c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 54e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5500 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 5520 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 5540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 55a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 55c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 55e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5600 | 3b 3b 20 2d 2a 2d 20 6e 6f 2d 62 79 74 65 2d 63    6f 6d 70 69 6c 65 3a 20 74 3b 20 6c 65 78 69 63 | ;;.-*-.no-byte-compile:.t;.lexic | 
| 5620 | 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 6e 69 6c 20    2d 2a 2d 0a 28 64 65 66 69 6e 65 2d 70 61 63 6b | al-binding:.nil.-*-.(define-pack | 
| 5640 | 61 67 65 20 22 65 6c 6e 6f 64 65 22 20 22 32 30    31 39 30 37 30 32 2e 31 35 30 39 22 0a 20 20 22 | age."elnode"."20190702.1509"..." | 
| 5660 | 54 68 65 20 45 6d 61 63 73 20 77 65 62 73 65 72    76 65 72 2e 22 0a 20 20 27 28 28 77 65 62 20 20 | The.Emacs.webserver."...'((web.. | 
| 5680 | 20 20 22 30 2e 31 2e 34 22 29 0a 20 20 20 20 28    64 61 73 68 20 20 20 22 31 2e 31 2e 30 22 29 0a | .."0.1.4").....(dash..."1.1.0"). | 
| 56a0 | 20 20 20 20 28 6e 6f 66 6c 65 74 20 22 30 2e 30    2e 37 22 29 0a 20 20 20 20 28 73 20 20 20 20 20 | ....(noflet."0.0.7").....(s..... | 
| 56c0 | 20 22 31 2e 35 2e 30 22 29 0a 20 20 20 20 28 63    72 65 6f 6c 65 20 22 30 2e 38 2e 31 34 22 29 0a | ."1.5.0").....(creole."0.8.14"). | 
| 56e0 | 20 20 20 20 28 66 61 6b 69 72 20 20 22 30 2e 31    2e 36 22 29 0a 20 20 20 20 28 64 62 20 20 20 20 | ....(fakir.."0.1.6").....(db.... | 
| 5700 | 20 22 30 2e 30 2e 35 22 29 0a 20 20 20 20 28 6b    76 20 20 20 20 20 22 30 2e 30 2e 31 37 22 29 29 | ."0.0.5").....(kv....."0.0.17")) | 
| 5720 | 0a 20 20 3a 75 72 6c 20 22 68 74 74 70 73 3a 2f    2f 67 69 74 68 75 62 2e 63 6f 6d 2f 6a 63 61 77 | ...:url."https://github.com/jcaw | 
| 5740 | 2f 65 6c 6e 6f 64 65 22 0a 20 20 3a 63 6f 6d 6d    69 74 20 22 32 39 65 66 30 66 35 31 61 36 35 61 | /elnode"...:commit."29ef0f51a65a | 
| 5760 | 32 34 66 63 61 37 66 64 63 64 62 34 31 34 30 64    32 65 34 35 35 36 65 34 62 62 32 39 22 0a 20 20 | 24fca7fdcdb4140d2e4556e4bb29"... | 
| 5780 | 3a 72 65 76 64 65 73 63 20 22 32 39 65 66 30 66    35 31 61 36 35 61 22 0a 20 20 3a 6b 65 79 77 6f | :revdesc."29ef0f51a65a"...:keywo | 
| 57a0 | 72 64 73 20 27 28 22 6c 69 73 70 22 20 22 68 74    74 70 22 20 22 68 79 70 65 72 6d 65 64 69 61 22 | rds.'("lisp"."http"."hypermedia" | 
| 57c0 | 29 0a 20 20 3a 61 75 74 68 6f 72 73 20 27 28 28    22 4e 69 63 20 46 65 72 72 69 65 72 22 20 2e 20 | )...:authors.'(("Nic.Ferrier"... | 
| 57e0 | 22 6e 66 65 72 72 69 65 72 40 66 65 72 72 69 65    72 2e 6d 65 2e 75 6b 22 29 29 29 0a 00 00 00 00 | "nferrier@ferrier.me.uk")))..... | 
| 5800 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 70 72 6f 78 | elnode-20190702.1509/elnode-prox | 
| 5820 | 79 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | y.el............................ | 
| 5840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5860 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 5880 | 30 30 32 32 31 33 36 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 32 33 35 00 20 30 00 00 00 | 0022136.00000000000.015235..0... | 
| 58a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 58c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 58e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5900 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 5920 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 5940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 59a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 59c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 59e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 5a00 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79    2e 65 6c 20 2d 2d 20 70 72 6f 78 79 69 6e 67 20 | ;;;.elnode-proxy.el.--.proxying. | 
| 5a20 | 77 69 74 68 20 65 6c 6e 6f 64 65 20 2d 2a 2d 20    6c 65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a | with.elnode.-*-.lexical-binding: | 
| 5a40 | 20 74 20 2d 2a 2d 0a 0a 3b 3b 3b 20 43 6f 6d 6d    65 6e 74 61 72 79 3a 0a 0a 3b 3b 20 54 68 69 73 | .t.-*-..;;;.Commentary:..;;.This | 
| 5a60 | 20 69 73 20 73 74 75 66 66 20 74 6f 20 6c 65 74    20 79 6f 75 20 6d 61 6b 65 20 70 72 6f 78 79 20 | .is.stuff.to.let.you.make.proxy. | 
| 5a80 | 73 65 72 76 65 72 73 20 77 69 74 68 20 45 6c 6e    6f 64 65 2e 0a 0a 0a 3b 3b 3b 20 43 6f 64 65 3a | servers.with.Elnode....;;;.Code: | 
| 5aa0 | 0a 0a 28 72 65 71 75 69 72 65 20 27 73 29 0a 28    72 65 71 75 69 72 65 20 27 64 61 73 68 29 0a 28 | ..(require.'s).(require.'dash).( | 
| 5ac0 | 72 65 71 75 69 72 65 20 27 77 65 62 29 0a 28 72    65 71 75 69 72 65 20 27 65 6c 6e 6f 64 65 29 0a | require.'web).(require.'elnode). | 
| 5ae0 | 28 72 65 71 75 69 72 65 20 27 6b 76 29 0a 28 72    65 71 75 69 72 65 20 27 63 6c 29 20 3b 20 66 6f | (require.'kv).(require.'cl).;.fo | 
| 5b00 | 72 20 64 65 73 74 72 75 63 74 75 72 69 6e 67 2d    62 69 6e 64 0a 0a 28 64 65 66 75 6e 20 65 6c 6e | r.destructuring-bind..(defun.eln | 
| 5b20 | 6f 64 65 2d 2d 77 65 62 2d 3e 65 6c 6e 6f 64 65    2d 68 64 72 20 28 68 64 72 20 68 74 74 70 63 6f | ode--web->elnode-hdr.(hdr.httpco | 
| 5b40 | 6e 29 0a 20 20 22 53 65 6e 64 20 74 68 65 20 48    44 52 20 66 72 6f 6d 20 74 68 65 20 77 65 62 20 | n)..."Send.the.HDR.from.the.web. | 
| 5b60 | 48 54 54 50 20 72 65 71 75 65 73 74 20 74 6f 20    45 6c 6e 6f 64 65 27 73 20 48 54 54 50 43 4f 4e | HTTP.request.to.Elnode's.HTTPCON | 
| 5b80 | 2e 22 0a 20 20 28 6c 65 74 20 28 28 68 65 61 64    65 72 73 0a 20 20 20 20 20 20 20 20 20 28 2d 66 | ."...(let.((headers..........(-f | 
| 5ba0 | 69 6c 74 65 72 0a 20 20 20 20 20 20 20 20 20 20    28 6c 61 6d 62 64 61 20 28 68 64 72 2d 70 61 69 | ilter...........(lambda.(hdr-pai | 
| 5bc0 | 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    75 6e 6c 65 73 73 20 28 6d 65 6d 62 65 72 0a 20 | r).............(unless.(member.. | 
| 5be0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 64 6f 77 6e 63 61 73 65 20 28 73 | ....................(downcase.(s | 
| 5c00 | 79 6d 62 6f 6c 2d 6e 61 6d 65 20 28 63 61 72 20    68 64 72 2d 70 61 69 72 29 29 29 0a 20 20 20 20 | ymbol-name.(car.hdr-pair)))..... | 
| 5c20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 27 28 22 73 74 61 74 75 73 2d 63 6f 64 65 22 | .................'("status-code" | 
| 5c40 | 20 22 73 74 61 74 75 73 2d 73 74 72 69 6e 67 22    20 22 73 74 61 74 75 73 2d 76 65 72 73 69 6f 6e | ."status-string"."status-version | 
| 5c60 | 22 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 63 6f 6e 73 20 28 73 79 6d 62 6f 6c 2d | "))...............(cons.(symbol- | 
| 5c80 | 6e 61 6d 65 20 28 63 61 72 20 68 64 72 2d 70 61    69 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | name.(car.hdr-pair))............ | 
| 5ca0 | 20 20 20 20 20 20 20 20 20 28 63 64 72 20 68 64    72 2d 70 61 69 72 29 29 29 29 0a 20 20 20 20 20 | .........(cdr.hdr-pair))))...... | 
| 5cc0 | 20 20 20 20 20 28 6b 76 68 61 73 68 2d 3e 61 6c    69 73 74 20 68 64 72 29 29 29 29 0a 20 20 20 20 | .....(kvhash->alist.hdr))))..... | 
| 5ce0 | 28 61 70 70 6c 79 20 27 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 73 74 61 72 74 20 20 68 74 74 70 63 | (apply.'elnode-http-start..httpc | 
| 5d00 | 6f 6e 20 32 30 30 20 68 65 61 64 65 72 73 29 29    29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | on.200.headers)))..(defun.elnode | 
| 5d20 | 2d 2d 70 72 6f 78 79 2d 78 2d 66 6f 72 77 61 72    64 65 64 2d 66 6f 72 20 28 68 74 74 70 63 6f 6e | --proxy-x-forwarded-for.(httpcon | 
| 5d40 | 29 0a 20 20 22 52 65 74 75 72 6e 20 61 6e 20 58    2d 46 6f 72 77 61 64 65 64 2d 46 6f 72 20 68 65 | )..."Return.an.X-Forwaded-For.he | 
| 5d60 | 61 64 65 72 2e 22 0a 20 20 28 6c 65 74 20 28 28    69 70 61 64 64 72 20 28 65 6c 6e 6f 64 65 2d 67 | ader."...(let.((ipaddr.(elnode-g | 
| 5d80 | 65 74 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72    20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 | et-remote-ipaddr.httpcon))...... | 
| 5da0 | 20 20 20 28 68 64 72 20 28 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 70 | ...(hdr.(elnode-http-header.http | 
| 5dc0 | 63 6f 6e 20 22 58 2d 46 6f 72 77 61 72 64 65 64    2d 46 6f 72 22 29 29 29 0a 20 20 20 20 28 69 66 | con."X-Forwarded-For"))).....(if | 
| 5de0 | 20 68 64 72 0a 20 20 20 20 20 20 20 20 28 63 6f    6e 63 61 74 20 68 64 72 20 28 66 6f 72 6d 61 74 | .hdr.........(concat.hdr.(format | 
| 5e00 | 20 22 2c 20 25 73 22 20 69 70 61 64 64 72 29 29    0a 20 20 20 20 20 20 20 20 69 70 61 64 64 72 29 | .",.%s".ipaddr)).........ipaddr) | 
| 5e20 | 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64    65 2d 70 72 6f 78 79 2d 64 6f 20 28 68 74 74 70 | ))..(defun.elnode-proxy-do.(http | 
| 5e40 | 63 6f 6e 20 75 72 6c 29 0a 20 20 22 44 6f 20 70    72 6f 78 79 69 6e 67 20 74 6f 20 55 52 4c 20 6f | con.url)..."Do.proxying.to.URL.o | 
| 5e60 | 6e 20 48 54 54 50 43 4f 4e 2e 0a 0a 41 20 72 65    71 75 65 73 74 20 69 73 20 6d 61 64 65 20 74 6f | n.HTTPCON...A.request.is.made.to | 
| 5e80 | 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 55    52 4c 2e 20 20 54 68 65 20 55 52 4c 20 6d 61 79 | .the.specified.URL...The.URL.may | 
| 5ea0 | 20 69 6e 63 6c 75 64 65 0a 60 73 2d 66 6f 72 6d    61 74 27 20 70 61 74 74 65 72 6e 73 20 66 6f 72 | .include.`s-format'.patterns.for | 
| 5ec0 | 20 69 6e 74 65 72 70 6f 6c 61 74 69 6f 6e 20 77    69 74 68 20 61 6e 79 20 6f 66 20 74 68 65 73 65 | .interpolation.with.any.of.these | 
| 5ee0 | 0a 76 61 72 69 61 62 6c 65 73 3a 0a 0a 20 70 61    74 68 20 2d 20 74 68 65 20 70 61 74 68 20 66 72 | .variables:...path.-.the.path.fr | 
| 5f00 | 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 0a 20    70 61 72 61 6d 73 20 2d 20 74 68 65 20 70 61 72 | om.the.HTTPCON..params.-.the.par | 
| 5f20 | 61 6d 73 20 66 72 6f 6d 20 74 68 65 20 48 54 54    50 43 4f 4e 0a 20 71 75 65 72 79 20 2d 20 74 68 | ams.from.the.HTTPCON..query.-.th | 
| 5f40 | 65 20 70 61 72 61 6d 73 20 66 72 6f 6d 20 74 68    65 20 48 54 54 50 43 4f 4e 20 61 73 20 61 20 71 | e.params.from.the.HTTPCON.as.a.q | 
| 5f60 | 75 65 72 79 0a 0a 46 6f 72 20 65 78 61 6d 70 6c    65 2c 20 5c 22 68 74 74 70 3a 2f 2f 6d 79 73 65 | uery..For.example,.\"http://myse | 
| 5f80 | 72 76 65 72 3a 38 30 30 30 24 7b 70 61 74 68 7d    24 7b 71 75 65 72 79 7d 5c 22 20 77 6f 75 6c 64 | rver:8000${path}${query}\".would | 
| 5fa0 | 20 63 61 75 73 65 0a 5c 22 6d 79 73 65 72 76 65    72 5c 22 20 6f 6e 20 70 6f 72 74 20 38 30 30 30 | .cause.\"myserver\".on.port.8000 | 
| 5fc0 | 20 74 6f 20 67 65 74 20 74 68 65 20 71 75 65 72    79 20 66 72 6f 6d 20 74 68 65 20 75 73 65 72 20 | .to.get.the.query.from.the.user. | 
| 5fe0 | 77 69 74 68 20 74 68 65 0a 73 70 65 63 69 66 69    65 64 20 70 61 74 68 20 61 6e 64 20 71 75 65 72 | with.the.specified.path.and.quer | 
| 6000 | 79 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 6d 65    74 68 6f 64 20 28 65 6c 6e 6f 64 65 2d 68 74 74 | y."...(let*.((method.(elnode-htt | 
| 6020 | 70 2d 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e    29 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 74 | p-method.httpcon))..........(pat | 
| 6040 | 68 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70    61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 | h.(elnode-http-pathinfo.httpcon) | 
| 6060 | 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 72 61    6d 73 20 28 77 65 62 2d 74 6f 2d 71 75 65 72 79 | )..........(params.(web-to-query | 
| 6080 | 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 | -string...................(elnod | 
| 60a0 | 65 2d 68 74 74 70 2d 70 61 72 61 6d 73 20 68 74    74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 20 | e-http-params.httpcon)))........ | 
| 60c0 | 20 20 28 70 61 72 61 6d 73 2d 61 6c 69 73 74 0a    20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 0a | ..(params-alist...........(list. | 
| 60e0 | 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73    20 22 70 61 74 68 22 20 70 61 74 68 29 0a 20 20 | ...........(cons."path".path)... | 
| 6100 | 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 22    71 75 65 72 79 22 20 28 69 66 20 28 73 2d 62 6c | .........(cons."query".(if.(s-bl | 
| 6120 | 61 6e 6b 3f 20 70 61 72 61 6d 73 29 20 22 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ank?.params).""................. | 
| 6140 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f    6e 63 61 74 20 22 3f 22 20 70 61 72 61 6d 73 29 | .............(concat."?".params) | 
| 6160 | 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 63    6f 6e 73 20 22 70 61 72 61 6d 73 22 20 70 61 72 | ))............(cons."params".par | 
| 6180 | 61 6d 73 29 29 29 0a 20 20 20 20 20 20 20 20 20    3b 3b 20 60 61 67 65 74 27 20 68 65 72 65 20 69 | ams)))..........;;.`aget'.here.i | 
| 61a0 | 73 20 6a 75 73 74 20 61 20 73 79 6d 62 6f 6c 2c    20 6e 6f 74 20 61 20 66 75 6e 63 74 69 6f 6e 2e | s.just.a.symbol,.not.a.function. | 
| 61c0 | 20 49 74 20 72 65 66 65 72 73 20 74 6f 20 61 6e    0a 20 20 20 20 20 20 20 20 20 3b 3b 20 69 6e 74 | .It.refers.to.an..........;;.int | 
| 61e0 | 65 72 6e 61 6c 20 73 2d 2d 61 67 65 74 20 66 75    6e 63 74 69 6f 6e 2e 0a 20 20 20 20 20 20 20 20 | ernal.s--aget.function.......... | 
| 6200 | 20 28 77 65 62 2d 75 72 6c 20 28 73 2d 66 6f 72    6d 61 74 20 75 72 6c 20 27 61 67 65 74 20 70 61 | .(web-url.(s-format.url.'aget.pa | 
| 6220 | 72 61 6d 73 2d 61 6c 69 73 74 29 29 0a 20 20 20    20 20 20 20 20 20 68 64 72 2d 73 65 6e 74 29 0a | rams-alist))..........hdr-sent). | 
| 6240 | 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70    75 74 0a 20 20 20 20 20 20 20 68 74 74 70 63 6f | ......(process-put........httpco | 
| 6260 | 6e 0a 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65    2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 0a 20 | n........:elnode-child-process.. | 
| 6280 | 20 20 20 20 20 20 28 77 65 62 2d 68 74 74 70 2d    63 61 6c 6c 0a 20 20 20 20 20 20 20 20 6d 65 74 | ......(web-http-call.........met | 
| 62a0 | 68 6f 64 0a 20 20 20 20 20 20 20 20 28 6c 61 6d    62 64 61 20 28 68 74 74 70 63 20 68 64 72 20 64 | hod.........(lambda.(httpc.hdr.d | 
| 62c0 | 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 28    75 6e 6c 65 73 73 20 68 64 72 2d 73 65 6e 74 0a | ata)...........(unless.hdr-sent. | 
| 62e0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e    6f 64 65 2d 2d 77 65 62 2d 3e 65 6c 6e 6f 64 65 | ............(elnode--web->elnode | 
| 6300 | 2d 68 64 72 20 68 64 72 20 68 74 74 70 63 6f 6e    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 | -hdr.hdr.httpcon).............(s | 
| 6320 | 65 74 71 20 68 64 72 2d 73 65 6e 74 20 74 29 29    0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 | etq.hdr-sent.t))...........(if.( | 
| 6340 | 65 71 20 64 61 74 61 20 3a 64 6f 6e 65 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c | eq.data.:done)...............(el | 
| 6360 | 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e    20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 | node-http-return.httpcon)....... | 
| 6380 | 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 | ........(elnode-http-send-string | 
| 63a0 | 20 68 74 74 70 63 6f 6e 20 64 61 74 61 29 29 29    0a 20 20 20 20 20 20 20 20 3a 6d 6f 64 65 20 27 | .httpcon.data))).........:mode.' | 
| 63c0 | 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 3a    75 72 6c 20 77 65 62 2d 75 72 6c 0a 20 20 20 20 | stream.........:url.web-url..... | 
| 63e0 | 20 20 20 20 3a 65 78 74 72 61 2d 68 65 61 64 65    72 73 0a 20 20 20 20 20 20 20 20 60 28 28 22 58 | ....:extra-headers.........`(("X | 
| 6400 | 2d 46 6f 72 77 61 72 64 65 64 2d 46 6f 72 22 0a    20 20 20 20 20 20 20 20 20 20 20 2e 20 2c 28 65 | -Forwarded-For"..............,(e | 
| 6420 | 6c 6e 6f 64 65 2d 2d 70 72 6f 78 79 2d 78 2d 66    6f 72 77 61 72 64 65 64 2d 66 6f 72 20 68 74 74 | lnode--proxy-x-forwarded-for.htt | 
| 6440 | 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20    20 28 22 58 2d 50 72 6f 78 79 2d 43 6c 69 65 6e | pcon))...........("X-Proxy-Clien | 
| 6460 | 74 22 20 2e 20 22 65 6c 6e 6f 64 65 2f 77 65 62    22 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 | t"..."elnode/web"))))))..(defun. | 
| 6480 | 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 62 6f 75    6e 63 65 20 28 68 74 74 70 63 6f 6e 20 68 61 6e | elnode-proxy-bounce.(httpcon.han | 
| 64a0 | 64 6c 65 72 20 68 6f 73 74 2d 70 6f 72 74 29 0a    20 20 22 42 6f 75 6e 63 65 20 74 68 69 73 20 72 | dler.host-port)..."Bounce.this.r | 
| 64c0 | 65 71 75 65 73 74 2e 0a 0a 49 66 20 48 54 54 50    43 4f 4e 20 69 73 20 6e 6f 74 20 61 20 72 65 71 | equest...If.HTTPCON.is.not.a.req | 
| 64e0 | 75 65 73 74 20 66 6f 72 20 70 6f 72 74 20 48 4f    53 54 2d 50 4f 52 54 20 74 68 65 6e 20 62 6f 75 | uest.for.port.HOST-PORT.then.bou | 
| 6500 | 6e 63 65 20 74 6f 0a 48 4f 53 54 2d 50 4f 52 54    2c 20 65 6c 73 65 20 69 74 20 69 73 20 61 20 72 | nce.to.HOST-PORT,.else.it.is.a.r | 
| 6520 | 65 71 75 65 73 74 20 6f 6e 20 48 4f 53 54 2d 50    4f 52 54 20 73 6f 20 70 61 73 73 20 74 6f 20 48 | equest.on.HOST-PORT.so.pass.to.H | 
| 6540 | 41 4e 44 4c 45 52 2e 22 0a 20 20 28 64 65 73 74    72 75 63 74 75 72 69 6e 67 2d 62 69 6e 64 20 28 | ANDLER."...(destructuring-bind.( | 
| 6560 | 68 6f 73 74 6e 61 6d 65 20 74 68 69 73 2d 70 6f    72 74 29 0a 20 20 20 20 20 20 28 73 70 6c 69 74 | hostname.this-port).......(split | 
| 6580 | 2d 73 74 72 69 6e 67 20 28 65 6c 6e 6f 64 65 2d    73 65 72 76 65 72 2d 69 6e 66 6f 20 68 74 74 70 | -string.(elnode-server-info.http | 
| 65a0 | 63 6f 6e 29 20 22 3a 22 29 0a 20 20 20 20 28 69    66 20 28 65 71 75 61 6c 20 28 66 6f 72 6d 61 74 | con).":").....(if.(equal.(format | 
| 65c0 | 20 22 25 73 22 20 74 68 69 73 2d 70 6f 72 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ."%s".this-port)................ | 
| 65e0 | 28 66 6f 72 6d 61 74 20 22 25 73 22 20 68 6f 73    74 2d 70 6f 72 74 29 29 0a 20 20 20 20 20 20 20 | (format."%s".host-port))........ | 
| 6600 | 20 28 66 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65    72 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 | .(funcall.handler.httpcon)...... | 
| 6620 | 20 20 20 28 65 6c 6e 6f 64 65 2d 70 72 6f 78 79    2d 64 6f 0a 20 20 20 20 20 20 20 20 20 68 74 74 | ...(elnode-proxy-do..........htt | 
| 6640 | 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 28 66    6f 72 6d 61 74 20 22 68 74 74 70 3a 2f 2f 25 73 | pcon..........(format."http://%s | 
| 6660 | 3a 25 73 24 7b 70 61 74 68 7d 24 7b 71 75 65 72    79 7d 22 20 68 6f 73 74 6e 61 6d 65 20 68 6f 73 | :%s${path}${query}".hostname.hos | 
| 6680 | 74 2d 70 6f 72 74 29 29 29 29 29 0a 0a 28 64 65    66 75 6e 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 | t-port)))))..(defun.elnode-proxy | 
| 66a0 | 2d 6d 61 6b 65 2d 62 6f 75 6e 63 65 72 20 28 68    61 6e 64 6c 65 72 20 68 6f 73 74 2d 70 6f 72 74 | -make-bouncer.(handler.host-port | 
| 66c0 | 29 0a 20 20 22 4d 61 6b 65 20 61 20 70 72 6f 78    79 20 62 6f 75 6e 63 65 72 20 68 61 6e 64 6c 65 | )..."Make.a.proxy.bouncer.handle | 
| 66e0 | 72 20 66 6f 72 20 48 41 4e 44 4c 45 52 20 70 72    6f 63 20 6f 6e 20 4f 54 48 45 52 2d 50 4f 52 54 | r.for.HANDLER.proc.on.OTHER-PORT | 
| 6700 | 2e 0a 0a 54 68 69 73 20 69 73 20 66 6f 72 20 6d    61 6e 61 67 69 6e 67 20 70 72 6f 78 79 20 63 61 | ...This.is.for.managing.proxy.ca | 
| 6720 | 6c 6c 73 2e 20 20 49 66 20 74 68 65 20 72 65 73    75 6c 74 69 6e 67 20 68 61 6e 64 6c 65 72 0a 72 | lls...If.the.resulting.handler.r | 
| 6740 | 65 63 65 69 76 65 73 20 61 20 63 61 6c 6c 20 6f    6e 20 61 6e 79 74 68 69 6e 67 20 74 68 61 6e 20 | eceives.a.call.on.anything.than. | 
| 6760 | 48 4f 53 54 2d 50 4f 52 54 20 74 68 65 6e 20 69    74 20 70 72 6f 78 69 65 73 20 74 68 65 0a 72 65 | HOST-PORT.then.it.proxies.the.re | 
| 6780 | 71 75 65 73 74 20 74 6f 20 74 68 65 20 48 4f 53    54 2d 50 4f 52 54 2e 20 20 4f 74 68 65 72 77 69 | quest.to.the.HOST-PORT...Otherwi | 
| 67a0 | 73 65 20 69 74 20 6a 75 73 74 20 68 61 6e 64 6c    65 73 20 74 68 65 0a 72 65 71 75 65 73 74 2e 22 | se.it.just.handles.the.request." | 
| 67c0 | 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70    63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 | ...(lambda.(httpcon).....(elnode | 
| 67e0 | 2d 70 72 6f 78 79 2d 62 6f 75 6e 63 65 20 68 74    74 70 63 6f 6e 20 68 61 6e 64 6c 65 72 20 68 6f | -proxy-bounce.httpcon.handler.ho | 
| 6800 | 73 74 2d 70 6f 72 74 29 29 29 0a 0a 3b 3b 3b 23    23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 | st-port)))..;;;###autoload.(defu | 
| 6820 | 6e 20 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72    6f 78 79 20 28 75 72 6c 29 0a 20 20 22 4d 61 6b | n.elnode-make-proxy.(url)..."Mak | 
| 6840 | 65 20 61 20 70 72 6f 78 79 20 68 61 6e 64 6c 65    72 20 73 65 6e 64 69 6e 67 20 72 65 71 75 65 73 | e.a.proxy.handler.sending.reques | 
| 6860 | 74 73 20 74 6f 20 55 52 4c 2e 0a 0a 53 65 65 20    60 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 64 6f | ts.to.URL...See.`elnode-proxy-do | 
| 6880 | 27 20 66 6f 72 20 68 6f 77 20 55 52 4c 20 69 73    20 68 61 6e 64 6c 65 64 2e 0a 0a 41 6e 20 48 54 | '.for.how.URL.is.handled...An.HT | 
| 68a0 | 54 50 20 75 73 65 72 2d 61 67 65 6e 74 20 77 69    74 68 20 61 20 73 70 65 63 69 66 69 65 64 20 48 | TP.user-agent.with.a.specified.H | 
| 68c0 | 54 54 50 20 70 72 6f 78 79 20 73 65 6e 64 73 20    74 68 65 20 66 75 6c 6c 0a 72 65 71 75 65 73 74 | TTP.proxy.sends.the.full.request | 
| 68e0 | 20 61 73 20 74 68 65 20 70 61 74 68 2c 20 65 67    3a 0a 0a 20 20 47 45 54 20 68 74 74 70 3a 2f 2f | .as.the.path,.eg:....GET.http:// | 
| 6900 | 73 6f 6d 65 68 6f 73 74 3a 70 6f 72 74 2f 70 61    74 68 3f 71 75 65 72 79 20 48 54 54 50 2f 31 2e | somehost:port/path?query.HTTP/1. | 
| 6920 | 31 0a 0a 53 6f 20 60 65 6c 6e 6f 64 65 2d 6d 61    6b 65 2d 70 72 6f 78 79 27 20 63 61 6e 20 6d 61 | 1..So.`elnode-make-proxy'.can.ma | 
| 6940 | 6b 65 20 28 73 6f 6d 65 74 68 69 6e 67 20 6c 69    6b 65 29 20 61 20 66 75 6c 6c 20 70 72 6f 78 79 | ke.(something.like).a.full.proxy | 
| 6960 | 0a 73 65 72 76 65 72 20 77 69 74 68 3a 0a 0a 20    20 28 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 | .server.with:....(elnode-make-pr | 
| 6980 | 6f 78 79 20 5c 22 24 7b 70 61 74 68 7d 24 7b 71    75 65 72 79 7d 5c 22 29 0a 0a 54 68 65 72 65 20 | oxy.\"${path}${query}\")..There. | 
| 69a0 | 6d 61 79 20 62 65 20 6d 61 6e 79 20 74 68 69 6e    67 73 20 74 68 61 74 20 61 20 66 75 6c 6c 20 70 | may.be.many.things.that.a.full.p | 
| 69c0 | 72 6f 78 79 20 64 6f 65 73 20 74 68 61 74 20 74    68 69 73 20 64 6f 65 73 0a 6e 6f 74 20 64 6f 20 | roxy.does.that.this.does.not.do. | 
| 69e0 | 68 6f 77 65 76 65 72 2e 0a 0a 52 65 76 65 72 73    65 20 70 72 6f 78 79 69 6e 67 20 69 73 20 61 20 | however...Reverse.proxying.is.a. | 
| 6a00 | 73 69 6d 70 6c 65 72 20 61 6e 64 20 70 65 72 68    61 70 73 20 6d 6f 72 65 20 75 73 65 66 75 6c 2e | simpler.and.perhaps.more.useful. | 
| 6a20 | 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74    70 63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f 64 | "...(lambda.(httpcon).....(elnod | 
| 6a40 | 65 2d 70 72 6f 78 79 2d 64 6f 20 68 74 74 70 63    6f 6e 20 75 72 6c 29 29 29 0a 0a 28 64 65 66 76 | e-proxy-do.httpcon.url)))..(defv | 
| 6a60 | 61 72 20 65 6c 6e 6f 64 65 2d 2d 70 72 6f 78 79    2d 73 65 72 76 65 72 2d 70 6f 72 74 2d 68 69 73 | ar.elnode--proxy-server-port-his | 
| 6a80 | 74 6f 72 79 20 6e 69 6c 0a 20 20 22 48 69 73 74    6f 72 79 20 76 61 72 69 61 62 6c 65 20 75 73 65 | tory.nil..."History.variable.use | 
| 6aa0 | 64 20 66 6f 72 20 70 72 6f 78 79 20 73 65 72 76    65 72 20 70 6f 72 74 20 72 65 61 64 69 6e 67 2e | d.for.proxy.server.port.reading. | 
| 6ac0 | 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f    64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76 65 72 | ")..(defvar.elnode--proxy-server | 
| 6ae0 | 2d 67 6f 74 6f 2d 75 72 6c 2d 68 69 73 74 6f 72    79 20 6e 69 6c 0a 20 20 22 48 69 73 74 6f 72 79 | -goto-url-history.nil..."History | 
| 6b00 | 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66    6f 72 20 70 72 6f 78 79 20 67 6f 74 6f 20 75 72 | .variable.used.for.proxy.goto.ur | 
| 6b20 | 6c 73 2e 22 29 0a 0a 3b 3b 3b 23 23 23 61 75 74    6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e | ls.")..;;;###autoload.(defun.eln | 
| 6b40 | 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 2d 73    65 72 76 65 72 20 28 70 6f 72 74 20 26 6f 70 74 | ode-make-proxy-server.(port.&opt | 
| 6b60 | 69 6f 6e 61 6c 20 75 72 6c 29 0a 20 20 22 4d 61    6b 65 20 61 20 70 72 6f 78 79 20 73 65 72 76 65 | ional.url)..."Make.a.proxy.serve | 
| 6b80 | 72 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69    65 64 20 50 4f 52 54 2e 0a 0a 4f 70 74 69 6f 6e | r.on.the.specified.PORT...Option | 
| 6ba0 | 61 6c 6c 79 20 68 61 76 65 20 72 65 71 75 65 73    74 73 20 67 6f 20 74 6f 20 55 52 4c 2e 20 20 49 | ally.have.requests.go.to.URL...I | 
| 6bc0 | 66 20 55 52 4c 20 69 73 20 6e 6f 74 20 73 70 65    63 69 66 69 65 64 20 69 74 0a 69 73 20 5c 22 24 | f.URL.is.not.specified.it.is.\"$ | 
| 6be0 | 7b 70 61 74 68 7d 24 7b 71 75 65 72 79 7d 5c 22    2e 0a 0a 49 6e 74 65 72 61 63 74 69 76 65 6c 79 | {path}${query}\"...Interactively | 
| 6c00 | 20 75 73 65 20 43 2d 75 20 74 6f 20 73 70 65 63    69 66 79 20 74 68 65 20 55 52 4c 2e 22 0a 20 20 | .use.C-u.to.specify.the.URL."... | 
| 6c20 | 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20 20    28 6c 69 73 74 0a 20 20 20 20 28 72 65 61 64 2d | (interactive....(list.....(read- | 
| 6c40 | 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66 65 72 0a    20 20 20 20 20 22 70 72 6f 78 79 20 73 65 72 76 | from-minibuffer......"proxy.serv | 
| 6c60 | 65 72 20 70 6f 72 74 3a 22 20 6e 69 6c 20 6e 69    6c 20 6e 69 6c 0a 20 20 20 20 20 27 65 6c 6e 6f | er.port:".nil.nil.nil......'elno | 
| 6c80 | 64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76 65 72    2d 70 6f 72 74 2d 68 69 73 74 6f 72 79 29 0a 20 | de--proxy-server-port-history).. | 
| 6ca0 | 20 20 20 28 69 66 20 63 75 72 72 65 6e 74 2d 70    72 65 66 69 78 2d 61 72 67 0a 20 20 20 20 20 20 | ...(if.current-prefix-arg....... | 
| 6cc0 | 20 20 28 72 65 61 64 2d 66 72 6f 6d 2d 6d 69 6e    69 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 | ..(read-from-minibuffer......... | 
| 6ce0 | 20 22 70 72 6f 78 79 20 73 65 72 76 65 72 20 67    6f 74 6f 20 75 72 6c 3a 22 20 22 24 7b 70 61 74 | ."proxy.server.goto.url:"."${pat | 
| 6d00 | 68 7d 24 7b 71 75 65 72 79 7d 22 20 6e 69 6c 20    6e 69 6c 0a 20 20 20 20 20 20 20 20 20 27 65 6c | h}${query}".nil.nil..........'el | 
| 6d20 | 6e 6f 64 65 2d 2d 70 72 6f 78 79 2d 73 65 72 76    65 72 2d 67 6f 74 6f 2d 75 72 6c 2d 68 69 73 74 | node--proxy-server-goto-url-hist | 
| 6d40 | 6f 72 79 0a 20 20 20 20 20 20 20 20 20 22 24 7b    70 61 74 68 7d 24 7b 71 75 65 72 79 7d 22 29 0a | ory.........."${path}${query}"). | 
| 6d60 | 20 20 20 20 20 20 20 20 22 24 7b 70 61 74 68 7d    24 7b 71 75 65 72 79 7d 22 29 29 29 0a 20 20 28 | ........"${path}${query}")))...( | 
| 6d80 | 6c 65 74 20 28 28 70 72 6f 78 79 2d 68 61 6e 64    6c 65 72 0a 20 20 20 20 20 20 20 20 20 28 65 6c | let.((proxy-handler..........(el | 
| 6da0 | 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78 79 20    28 6f 72 20 75 72 6c 20 22 24 7b 70 61 74 68 7d | node-make-proxy.(or.url."${path} | 
| 6dc0 | 24 7b 71 75 65 72 79 7d 22 29 29 29 29 0a 20 20    20 20 28 65 6c 6e 6f 64 65 2d 73 74 61 72 74 20 | ${query}")))).....(elnode-start. | 
| 6de0 | 70 72 6f 78 79 2d 68 61 6e 64 6c 65 72 20 3a 70    6f 72 74 20 70 6f 72 74 29 29 29 0a 0a 0a 28 64 | proxy-handler.:port.port)))...(d | 
| 6e00 | 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64    2d 70 72 6f 78 79 2d 72 65 64 69 72 65 63 74 20 | efun.elnode-send-proxy-redirect. | 
| 6e20 | 28 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f    6e 29 0a 20 20 22 53 65 6e 64 20 62 61 63 6b 20 | (httpcon.location)..."Send.back. | 
| 6e40 | 61 20 70 72 6f 78 79 20 72 65 64 69 72 65 63 74    20 74 6f 20 4c 4f 43 41 54 49 4f 4e 2e 0a 0a 41 | a.proxy.redirect.to.LOCATION...A | 
| 6e60 | 20 70 72 6f 78 79 20 72 65 64 69 72 65 63 74 20    69 73 20 73 65 74 74 69 6e 67 20 5c 22 58 2d 41 | .proxy.redirect.is.setting.\"X-A | 
| 6e80 | 63 63 65 6c 2d 52 65 64 69 72 65 63 74 5c 22 20    74 6f 20 61 20 6c 6f 63 61 74 69 6f 6e 2c 0a 70 | ccel-Redirect\".to.a.location,.p | 
| 6ea0 | 72 6f 78 69 65 73 20 63 61 6e 20 69 6e 74 65 72    70 72 65 74 20 74 68 65 20 68 65 61 64 65 72 20 | roxies.can.interpret.the.header. | 
| 6ec0 | 77 69 74 68 20 73 6f 6d 65 20 6b 69 6e 64 20 6f    66 20 69 6e 74 65 72 6e 61 6c 20 6f 6e 6c 79 0a | with.some.kind.of.internal.only. | 
| 6ee0 | 55 52 4c 20 72 65 73 6f 6c 75 74 69 6f 6e 20 6d    65 63 68 61 6e 69 73 6d 20 61 6e 64 20 64 6f 20 | URL.resolution.mechanism.and.do. | 
| 6f00 | 64 69 73 70 61 74 63 68 20 74 6f 20 61 6e 6f 74    68 65 72 20 62 61 63 6b 65 6e 64 0a 77 69 74 68 | dispatch.to.another.backend.with | 
| 6f20 | 6f 75 74 20 73 65 6e 64 69 6e 67 20 74 68 65 20    72 65 64 69 72 65 63 74 20 62 61 63 6b 20 74 6f | out.sending.the.redirect.back.to | 
| 6f40 | 20 74 68 65 20 6f 72 69 67 69 6e 20 55 41 2e 22    0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | .the.origin.UA."...(elnode-http- | 
| 6f60 | 68 65 61 64 65 72 2d 73 65 74 0a 20 20 20 68 74    74 70 63 6f 6e 20 22 58 2d 41 63 63 65 6c 2d 52 | header-set....httpcon."X-Accel-R | 
| 6f80 | 65 64 69 72 65 63 74 22 20 6c 6f 63 61 74 69 6f    6e 29 0a 20 20 3b 3b 20 54 68 69 73 20 69 73 20 | edirect".location)...;;.This.is. | 
| 6fa0 | 61 6e 20 6e 67 69 6e 78 20 73 70 65 63 69 66 69    63 20 68 61 63 6b 20 62 65 63 61 75 73 65 20 69 | an.nginx.specific.hack.because.i | 
| 6fc0 | 74 20 73 65 65 6d 73 20 6e 67 69 6e 78 20 6b 69    6c 6c 73 20 74 68 65 0a 20 20 3b 3b 20 73 6f 63 | t.seems.nginx.kills.the...;;.soc | 
| 6fe0 | 6b 65 74 20 6f 6e 63 65 20 74 68 65 20 61 63 63    65 6c 20 68 65 61 64 65 72 20 61 72 72 69 76 65 | ket.once.the.accel.header.arrive | 
| 7000 | 73 0a 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63    61 73 65 20 65 72 72 0a 20 20 20 20 20 20 28 65 | s...(condition-case.err.......(e | 
| 7020 | 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72    65 63 74 20 68 74 74 70 63 6f 6e 20 6c 6f 63 61 | lnode-send-redirect.httpcon.loca | 
| 7040 | 74 69 6f 6e 29 0a 20 20 20 20 28 65 72 72 6f 72    20 28 75 6e 6c 65 73 73 20 28 73 74 72 69 6e 67 | tion).....(error.(unless.(string | 
| 7060 | 2d 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 22 5c 5c 28 53 | -match....................."\\(S | 
| 7080 | 49 47 50 49 50 45 5c 5c 7c 6e 6f 20 6c 6f 6e 67    65 72 20 63 6f 6e 6e 65 63 74 65 64 5c 5c 29 22 | IGPIPE\\|no.longer.connected\\)" | 
| 70a0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 25 73 | .....................(format."%s | 
| 70c0 | 22 20 28 63 64 72 20 65 72 72 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 28 73 69 67 6e | ".(cdr.err)))..............(sign | 
| 70e0 | 61 6c 20 28 63 61 72 20 65 72 72 29 20 28 63 64    72 20 65 72 72 29 29 29 29 29 29 0a 0a 28 64 65 | al.(car.err).(cdr.err))))))..(de | 
| 7100 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d    70 72 6f 78 79 2d 6c 6f 63 61 74 69 6f 6e 20 28 | fun.elnode-send-proxy-location.( | 
| 7120 | 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f 6e    29 0a 20 20 22 53 65 6e 64 20 4c 4f 43 41 54 49 | httpcon.location)..."Send.LOCATI | 
| 7140 | 4f 4e 20 77 69 74 68 20 70 72 6f 78 79 69 6e 67    20 74 65 63 68 6e 69 71 75 65 73 2e 0a 0a 49 66 | ON.with.proxying.techniques...If | 
| 7160 | 20 74 68 65 20 48 54 54 50 43 4f 4e 20 63 6f 6d    65 73 20 66 72 6f 6d 20 61 20 70 72 6f 78 79 20 | .the.HTTPCON.comes.from.a.proxy. | 
| 7180 | 28 64 65 74 65 63 74 65 64 20 62 79 20 63 68 65    63 6b 69 6e 67 20 74 68 65 0a 5c 22 58 2d 46 6f | (detected.by.checking.the.\"X-Fo | 
| 71a0 | 72 77 61 72 64 65 64 2d 46 6f 72 5c 22 29 20 74    68 65 6e 20 61 6e 20 60 65 6c 6e 6f 64 65 2d 73 | rwarded-For\").then.an.`elnode-s | 
| 71c0 | 65 6e 64 2d 70 72 6f 78 79 2d 72 65 64 69 72 65    63 74 27 20 74 6f 0a 6c 6f 63 61 74 69 6f 6e 20 | end-proxy-redirect'.to.location. | 
| 71e0 | 69 73 20 73 65 6e 74 2e 0a 0a 41 6c 74 65 72 6e    61 74 65 6c 79 20 69 74 20 73 65 74 73 20 75 70 | is.sent...Alternately.it.sets.up | 
| 7200 | 20 61 20 64 69 72 65 63 74 20 70 72 6f 78 79 20    63 61 6c 6c 20 74 6f 20 74 68 65 20 63 75 72 72 | .a.direct.proxy.call.to.the.curr | 
| 7220 | 65 6e 74 20 73 65 72 76 65 72 0a 66 6f 72 20 74    68 65 20 6c 6f 63 61 74 69 6f 6e 2e 22 0a 20 20 | ent.server.for.the.location."... | 
| 7240 | 28 69 66 20 28 61 6e 64 20 28 65 6c 6e 6f 64 65    2d 68 74 74 70 2d 68 65 61 64 65 72 20 68 74 74 | (if.(and.(elnode-http-header.htt | 
| 7260 | 70 63 6f 6e 20 22 58 2d 46 6f 72 77 61 72 64 65    64 2d 46 6f 72 22 29 0a 20 20 20 20 20 20 20 20 | pcon."X-Forwarded-For")......... | 
| 7280 | 20 20 20 28 6e 6f 74 20 28 65 71 75 61 6c 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...(not.(equal.................. | 
| 72a0 | 22 65 6c 6e 6f 64 65 2f 77 65 62 22 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | "elnode/web"..................(e | 
| 72c0 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65    72 20 68 74 74 70 63 6f 6e 20 22 58 2d 50 72 6f | lnode-http-header.httpcon."X-Pro | 
| 72e0 | 78 79 2d 43 6c 69 65 6e 74 22 29 29 29 29 0a 20    20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e | xy-Client")))).......(elnode-sen | 
| 7300 | 64 2d 70 72 6f 78 79 2d 72 65 64 69 72 65 63 74    20 68 74 74 70 63 6f 6e 20 6c 6f 63 61 74 69 6f | d-proxy-redirect.httpcon.locatio | 
| 7320 | 6e 29 0a 20 20 20 20 20 20 3b 3b 20 45 6c 73 65    20 77 65 27 72 65 20 6e 6f 74 20 62 65 68 69 6e | n).......;;.Else.we're.not.behin | 
| 7340 | 64 20 61 20 70 72 6f 78 79 2c 20 73 65 6e 64 20    61 20 70 72 6f 78 79 20 76 65 72 73 69 6f 6e 0a | d.a.proxy,.send.a.proxy.version. | 
| 7360 | 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 73 65    72 76 65 72 20 28 65 6c 6e 6f 64 65 2d 73 65 72 | ......(let*.((server.(elnode-ser | 
| 7380 | 76 65 72 2d 69 6e 66 6f 20 68 74 74 70 63 6f 6e    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ver-info.httpcon)).............. | 
| 73a0 | 28 75 72 6c 20 28 66 6f 72 6d 61 74 20 22 68 74    74 70 3a 2f 2f 25 73 25 73 22 20 73 65 72 76 65 | (url.(format."http://%s%s".serve | 
| 73c0 | 72 20 6c 6f 63 61 74 69 6f 6e 29 29 29 0a 20 20    20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 28 | r.location))).........(funcall.( | 
| 73e0 | 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 70 72 6f 78    79 20 75 72 6c 29 20 68 74 74 70 63 6f 6e 29 29 | elnode-make-proxy.url).httpcon)) | 
| 7400 | 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f    64 65 2d 70 72 6f 78 79 2d 70 6f 73 74 20 28 68 | ))..(defun*.elnode-proxy-post.(h | 
| 7420 | 74 74 70 63 6f 6e 20 70 61 74 68 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ttpcon.path..................... | 
| 7440 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26    6b 65 79 20 28 6d 6f 64 65 20 27 62 61 74 63 68 | ...............&key.(mode.'batch | 
| 7460 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | )............................... | 
| 7480 | 20 20 20 20 20 63 61 6c 6c 62 61 63 6b 20 64 61    74 61 20 65 78 74 72 61 2d 68 65 61 64 65 72 73 | .....callback.data.extra-headers | 
| 74a0 | 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20 48 54 54    50 20 63 61 6c 6c 20 74 6f 20 6c 6f 63 61 6c 68 | )..."Make.an.HTTP.call.to.localh | 
| 74c0 | 6f 73 74 20 6f 72 20 74 68 65 20 66 69 72 73 74    20 75 70 73 74 72 65 61 6d 20 70 72 6f 78 79 2e | ost.or.the.first.upstream.proxy. | 
| 74e0 | 22 0a 20 20 28 6c 65 74 2a 20 28 28 68 70 2d 70    61 69 72 0a 20 20 20 20 20 20 20 20 20 20 28 69 | "...(let*.((hp-pair...........(i | 
| 7500 | 66 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68    65 61 64 65 72 20 68 74 74 70 63 6f 6e 20 22 58 | f.(elnode-http-header.httpcon."X | 
| 7520 | 2d 46 6f 72 77 61 72 64 65 64 2d 46 6f 72 22 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | -Forwarded-For")...............( | 
| 7540 | 65 6c 6e 6f 64 65 2d 67 65 74 2d 72 65 6d 6f 74    65 2d 69 70 61 64 64 72 20 68 74 74 70 63 6f 6e | elnode-get-remote-ipaddr.httpcon | 
| 7560 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 69 | )...............(elnode-server-i | 
| 7580 | 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 29 0a 20    20 20 20 20 20 20 20 20 28 75 72 6c 20 28 66 6f | nfo.httpcon)))..........(url.(fo | 
| 75a0 | 72 6d 61 74 20 22 68 74 74 70 3a 2f 2f 25 73 25    73 22 20 68 70 2d 70 61 69 72 20 70 61 74 68 29 | rmat."http://%s%s".hp-pair.path) | 
| 75c0 | 29 29 0a 20 20 20 20 28 77 65 62 2d 68 74 74 70    2d 70 6f 73 74 0a 20 20 20 20 20 28 6f 72 20 63 | )).....(web-http-post......(or.c | 
| 75e0 | 61 6c 6c 62 61 63 6b 0a 20 20 20 20 20 20 20 20    20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 20 | allback..........(lambda.(httpc. | 
| 7600 | 68 64 72 20 64 61 74 61 29 0a 20 20 20 20 20 20    20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 | hdr.data)............(elnode-err | 
| 7620 | 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 22    25 73 20 70 6f 73 74 20 72 65 73 70 6f 6e 73 65 | or............."%s.post.response | 
| 7640 | 20 25 53 20 25 73 22 0a 20 20 20 20 20 20 20 20    20 20 20 20 68 74 74 70 63 6f 6e 20 68 64 72 20 | .%S.%s".............httpcon.hdr. | 
| 7660 | 64 61 74 61 29 29 29 0a 20 20 20 20 20 3a 75 72    6c 20 75 72 6c 20 3a 6d 6f 64 65 20 6d 6f 64 65 | data)))......:url.url.:mode.mode | 
| 7680 | 20 3a 64 61 74 61 20 64 61 74 61 0a 20 20 20 20    20 3a 65 78 74 72 61 2d 68 65 61 64 65 72 73 20 | .:data.data......:extra-headers. | 
| 76a0 | 65 78 74 72 61 2d 68 65 61 64 65 72 73 29 29 29    0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2f | extra-headers)))..(defun.elnode/ | 
| 76c0 | 70 72 6f 78 79 2d 72 6f 75 74 65 20 28 68 74 74    70 63 6f 6e 20 73 65 72 76 69 63 65 20 68 61 6e | proxy-route.(httpcon.service.han | 
| 76e0 | 64 6c 65 72 20 70 61 74 68 29 0a 20 20 22 50 72    6f 78 69 65 73 20 61 20 70 61 72 74 69 63 75 6c | dler.path)..."Proxies.a.particul | 
| 7700 | 61 72 20 72 6f 75 74 65 20 66 72 6f 6d 20 60 65    6c 6e 6f 64 65 2d 72 6f 75 74 65 27 2e 22 0a 20 | ar.route.from.`elnode-route'.".. | 
| 7720 | 20 28 6c 65 74 2a 20 28 28 73 65 72 76 65 72 20    28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 | .(let*.((server.(process-get.htt | 
| 7740 | 70 63 6f 6e 20 3a 73 65 72 76 65 72 29 29 0a 20    20 20 20 20 20 20 20 20 28 70 32 20 70 61 74 68 | pcon.:server))..........(p2.path | 
| 7760 | 29 0a 20 20 20 20 20 20 20 20 20 28 6d 61 70 73    20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 73 65 | )..........(maps.(process-get.se | 
| 7780 | 72 76 65 72 20 3a 65 6c 6e 6f 64 65 2d 73 65 72    76 69 63 65 2d 6d 61 70 29 29 0a 20 20 20 20 20 | rver.:elnode-service-map))...... | 
| 77a0 | 20 20 20 20 28 70 6f 72 74 0a 20 20 20 20 20 20    20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 | ....(port...........(or......... | 
| 77c0 | 20 20 20 28 6b 76 61 20 73 65 72 76 69 63 65 20    6d 61 70 73 29 0a 20 20 20 20 20 20 20 20 20 20 | ...(kva.service.maps)........... | 
| 77e0 | 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62    65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 | .(string-to-number.............( | 
| 7800 | 63 61 64 72 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 28 73 70 6c 69 74 2d 73 74 72 69 6e 67 0a | cadr..............(split-string. | 
| 7820 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65    6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 69 6e 66 | ..............(elnode-server-inf | 
| 7840 | 6f 20 68 74 74 70 63 6f 6e 29 20 22 3a 22 29 29    29 29 29 29 0a 20 20 20 20 3b 3b 20 57 72 61 70 | o.httpcon).":")))))).....;;.Wrap | 
| 7860 | 20 74 68 65 20 68 61 6e 64 6c 65 72 20 69 6e 20    61 20 62 6f 75 6e 63 65 72 0a 20 20 20 20 28 65 | .the.handler.in.a.bouncer.....(e | 
| 7880 | 6c 6e 6f 64 65 2d 70 72 6f 78 79 2d 62 6f 75 6e    63 65 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c | lnode-proxy-bounce.httpcon.handl | 
| 78a0 | 65 72 20 70 6f 72 74 29 29 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 72 6f 75 74 65 20 | er.port)))..(defun.elnode-route. | 
| 78c0 | 28 68 74 74 70 63 6f 6e 20 72 6f 75 74 65 73 29    0a 20 20 22 50 61 73 73 20 48 54 54 50 43 4f 4e | (httpcon.routes)..."Pass.HTTPCON | 
| 78e0 | 20 74 6f 20 74 68 65 20 68 61 6e 64 6c 65 72 20    64 65 63 69 64 65 64 20 62 79 20 52 4f 55 54 45 | .to.the.handler.decided.by.ROUTE | 
| 7900 | 53 2e 0a 0a 52 4f 55 54 45 53 20 69 73 20 61 20    72 6f 75 74 69 6e 67 20 74 61 62 6c 65 20 6d 61 | S...ROUTES.is.a.routing.table.ma | 
| 7920 | 74 63 68 69 6e 67 20 72 65 67 65 78 73 20 74 6f    20 68 61 6e 64 6c 65 72 73 20 77 69 74 68 20 65 | tching.regexs.to.handlers.with.e | 
| 7940 | 78 74 72 61 0a 6d 65 74 61 20 69 6e 66 6f 72 6d    61 74 69 6f 6e 2e 20 20 52 6f 75 74 65 73 20 6d | xtra.meta.information...Routes.m | 
| 7960 | 61 79 20 64 6f 20 61 64 64 69 74 69 6f 6e 61 6c    20 74 68 69 6e 67 73 20 6c 69 6b 65 20 63 61 75 | ay.do.additional.things.like.cau | 
| 7980 | 73 65 20 61 0a 72 6f 75 74 65 20 74 6f 20 62 65    20 70 72 6f 78 79 65 64 20 74 6f 20 61 6e 6f 74 | se.a.route.to.be.proxyed.to.anot | 
| 79a0 | 68 65 72 20 73 65 72 76 65 72 2e 0a 0a 55 73 69    6e 67 20 52 4f 55 54 45 53 20 79 6f 75 20 63 61 | her.server...Using.ROUTES.you.ca | 
| 79c0 | 6e 20 64 65 73 63 72 69 62 65 20 63 6f 6d 70 6c    65 78 20 6d 75 6c 74 69 2d 70 72 6f 63 65 73 73 | n.describe.complex.multi-process | 
| 79e0 | 2c 20 6d 75 6c 74 69 2d 70 6f 72 74 0a 65 6c 6e    6f 64 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f | ,.multi-port.elnode.configuratio | 
| 7a00 | 6e 73 2e 0a 0a 52 4f 55 54 45 53 20 69 73 20 61    6e 20 61 6c 69 73 74 20 77 68 65 72 65 20 65 61 | ns...ROUTES.is.an.alist.where.ea | 
| 7a20 | 63 68 20 65 6c 65 6d 65 6e 74 20 6c 6f 6f 6b 73    20 6c 69 6b 65 20 28 52 45 47 45 58 50 0a 2e 20 | ch.element.looks.like.(REGEXP... | 
| 7a40 | 46 55 4e 43 54 49 4f 4e 29 20 6f 72 20 28 52 45    47 45 58 50 20 46 55 4e 43 54 49 4f 4e 20 60 3a | FUNCTION).or.(REGEXP.FUNCTION.`: | 
| 7a60 | 73 65 72 76 69 63 65 27 20 53 45 52 56 49 43 45    2d 4e 41 4d 45 29 2e 0a 53 45 52 56 49 43 45 2d | service'.SERVICE-NAME)..SERVICE- | 
| 7a80 | 4e 41 4d 45 20 69 73 20 61 20 6e 61 6d 65 20 74    68 61 74 20 6d 61 79 20 62 65 20 61 74 74 61 63 | NAME.is.a.name.that.may.be.attac | 
| 7aa0 | 68 65 64 20 74 6f 20 74 68 65 20 72 6f 75 74 65    20 73 6f 20 74 68 61 74 0a 69 74 20 63 61 6e 20 | hed.to.the.route.so.that.it.can. | 
| 7ac0 | 62 65 20 6d 61 70 70 65 64 20 74 6f 20 61 20 54    43 50 20 70 6f 72 74 2c 20 6f 72 20 65 76 65 6e | be.mapped.to.a.TCP.port,.or.even | 
| 7ae0 | 20 61 6e 6f 74 68 65 72 20 45 6d 61 63 73 20 70    72 6f 63 65 73 73 2e 0a 4d 61 70 70 69 6e 67 20 | .another.Emacs.process..Mapping. | 
| 7b00 | 73 65 72 76 69 63 65 20 6e 61 6d 65 73 20 69 73    20 64 6f 6e 65 20 62 79 20 60 65 6c 6e 6f 64 65 | service.names.is.done.by.`elnode | 
| 7b20 | 2d 73 74 61 72 74 27 2e 22 0a 20 20 28 6c 65 74    2a 0a 20 20 20 20 20 20 28 73 65 72 76 69 63 65 | -start'."...(let*.......(service | 
| 7b40 | 73 0a 20 20 20 20 20 20 20 28 72 74 61 62 6c 65    0a 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 | s........(rtable.........(loop.f | 
| 7b60 | 6f 72 20 28 70 61 74 68 20 2e 20 72 65 73 6f 75    72 63 65 29 20 69 6e 20 74 61 62 6c 65 0a 20 20 | or.(path...resource).in.table... | 
| 7b80 | 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 | .........collect..............(i | 
| 7ba0 | 66 20 28 61 74 6f 6d 20 72 65 73 6f 75 72 63 65    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | f.(atom.resource)............... | 
| 7bc0 | 20 20 20 28 6c 69 73 74 20 70 61 74 68 20 72 65    73 6f 75 72 63 65 29 0a 20 20 20 20 20 20 20 20 | ...(list.path.resource)......... | 
| 7be0 | 20 20 20 20 20 20 20 20 20 3b 3b 20 45 6c 73 65    20 69 74 27 73 20 61 20 6d 6f 72 65 20 63 6f 6d | .........;;.Else.it's.a.more.com | 
| 7c00 | 70 6c 65 78 20 72 65 73 6f 75 72 63 65 20 64 65    73 63 72 69 70 74 69 6f 6e 0a 20 20 20 20 20 20 | plex.resource.description....... | 
| 7c20 | 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a    20 28 28 68 61 6e 64 6c 65 72 20 28 63 61 72 20 | ...........(let*.((handler.(car. | 
| 7c40 | 72 65 73 6f 75 72 63 65 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | resource))...................... | 
| 7c60 | 20 20 20 28 73 65 72 76 69 63 65 20 28 70 6c 69    73 74 2d 67 65 74 20 28 63 64 72 20 72 65 73 6f | ...(service.(plist-get.(cdr.reso | 
| 7c80 | 75 72 63 65 29 20 3a 73 65 72 76 69 63 65 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | urce).:service))................ | 
| 7ca0 | 20 20 20 20 20 20 20 20 20 3b 3b 20 4d 61 6b 65    20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 66 72 | .........;;.Make.the.function.fr | 
| 7cc0 | 6f 6d 20 74 68 65 20 72 65 73 6f 75 72 63 65 20    64 65 73 63 72 69 70 74 69 6f 6e 0a 20 20 20 20 | om.the.resource.description..... | 
| 7ce0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 66 75 6e 63 0a 20 20 20 20 20 20 | ....................(func....... | 
| 7d00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 | ...................(lambda.(http | 
| 7d20 | 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | con)............................ | 
| 7d40 | 28 65 6c 6e 6f 64 65 2f 70 72 6f 78 79 2d 72 6f    75 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 | (elnode/proxy-route............. | 
| 7d60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    68 74 74 70 63 6f 6e 20 73 65 72 76 69 63 65 20 | ................httpcon.service. | 
| 7d80 | 68 61 6e 64 6c 65 72 20 70 61 74 68 29 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | handler.path))))................ | 
| 7da0 | 20 20 20 20 28 77 68 65 6e 20 73 65 72 76 69 63    65 20 28 70 75 73 68 20 73 65 72 76 69 63 65 20 | ....(when.service.(push.service. | 
| 7dc0 | 73 65 72 76 69 63 65 73 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c | services))....................(l | 
| 7de0 | 69 73 74 20 70 61 74 68 20 66 75 6e 63 29 29 29    29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d | ist.path.func)))))).....(elnode- | 
| 7e00 | 68 6f 73 74 70 61 74 68 2d 64 69 73 70 61 74 63    68 65 72 20 68 74 74 70 63 6f 6e 20 72 74 61 62 | hostpath-dispatcher.httpcon.rtab | 
| 7e20 | 6c 65 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20    27 65 6c 6e 6f 64 65 2d 70 72 6f 78 79 29 0a 0a | le)))..(provide.'elnode-proxy).. | 
| 7e40 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 70 72 6f 78 79    2e 65 6c 20 65 6e 64 73 20 68 65 72 65 0a 00 00 | ;;;.elnode-proxy.el.ends.here... | 
| 7e60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7e80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7ea0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7ec0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7ee0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7f00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7f20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7f40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7f60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7f80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7fa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7fc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 7fe0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 8000 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 72 6c 65 2e | elnode-20190702.1509/elnode-rle. | 
| 8020 | 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | el.............................. | 
| 8040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 8060 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| 8080 | 30 30 33 32 32 37 36 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 36 34 34 00 20 30 00 00 00 | 0032276.00000000000.014644..0... | 
| 80a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 80c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 80e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 8100 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| 8120 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| 8140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 8160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 8180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 81a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 81c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 81e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 8200 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 72 6c 65 2e 65    6c 20 2d 2d 2d 20 52 65 6d 6f 74 65 20 4c 69 73 | ;;;.elnode-rle.el.---.Remote.Lis | 
| 8220 | 70 20 45 78 65 63 75 74 69 69 6f 6e 20 77 69 74    68 20 45 6c 6e 6f 64 65 20 20 2d 2a 2d 20 6c 65 | p.Executiion.with.Elnode..-*-.le | 
| 8240 | 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 74    20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70 79 72 69 67 | xical-binding:.t.-*-..;;.Copyrig | 
| 8260 | 68 74 20 28 43 29 20 32 30 31 32 20 20 4e 69 63    20 46 65 72 72 69 65 72 0a 0a 3b 3b 20 41 75 74 | ht.(C).2012..Nic.Ferrier..;;.Aut | 
| 8280 | 68 6f 72 3a 20 4e 69 63 20 46 65 72 72 69 65 72    0a 3b 3b 20 4b 65 79 77 6f 72 64 73 3a 20 6c 69 | hor:.Nic.Ferrier.;;.Keywords:.li | 
| 82a0 | 73 70 2c 20 68 79 70 65 72 6d 65 64 69 61 2c 20    70 72 6f 63 65 73 73 65 73 0a 0a 3b 3b 20 54 68 | sp,.hypermedia,.processes..;;.Th | 
| 82c0 | 69 73 20 70 72 6f 67 72 61 6d 20 69 73 20 66 72    65 65 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 | is.program.is.free.software;.you | 
| 82e0 | 20 63 61 6e 20 72 65 64 69 73 74 72 69 62 75 74    65 20 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 | .can.redistribute.it.and/or.modi | 
| 8300 | 66 79 0a 3b 3b 20 69 74 20 75 6e 64 65 72 20 74    68 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 | fy.;;.it.under.the.terms.of.the. | 
| 8320 | 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c    69 63 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75 | GNU.General.Public.License.as.pu | 
| 8340 | 62 6c 69 73 68 65 64 20 62 79 0a 3b 3b 20 74 68    65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 | blished.by.;;.the.Free.Software. | 
| 8360 | 46 6f 75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68    65 72 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20 | Foundation,.either.version.3.of. | 
| 8380 | 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a    3b 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74 69 | the.License,.or.;;.(at.your.opti | 
| 83a0 | 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76 65    72 73 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73 20 | on).any.later.version...;;.This. | 
| 83c0 | 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74 72    69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f | program.is.distributed.in.the.ho | 
| 83e0 | 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20    62 65 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62 75 | pe.that.it.will.be.useful,.;;.bu | 
| 8400 | 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41    52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 | t.WITHOUT.ANY.WARRANTY;.without. | 
| 8420 | 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64    20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 | even.the.implied.warranty.of.;;. | 
| 8440 | 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20    6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 | MERCHANTABILITY.or.FITNESS.FOR.A | 
| 8460 | 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50    4f 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b | .PARTICULAR.PURPOSE...See.the.;; | 
| 8480 | 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62    6c 69 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 | .GNU.General.Public.License.for. | 
| 84a0 | 6d 6f 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b    3b 20 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 | more.details...;;.You.should.hav | 
| 84c0 | 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6f 70    79 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e | e.received.a.copy.of.the.GNU.Gen | 
| 84e0 | 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65    6e 73 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69 74 | eral.Public.License.;;.along.wit | 
| 8500 | 68 20 74 68 69 73 20 70 72 6f 67 72 61 6d 2e 20    20 49 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 74 | h.this.program...If.not,.see.<ht | 
| 8520 | 74 70 3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67    2f 6c 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b | tp://www.gnu.org/licenses/>...;; | 
| 8540 | 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a 0a 3b 3b    0a 3b 3b 20 54 68 69 73 20 69 73 20 61 6e 20 65 | ;.Commentary:.;;.;;.This.is.an.e | 
| 8560 | 6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 20 61 6e    64 20 74 6f 6f 6c 73 20 66 6f 72 20 64 6f 69 6e | lnode.handler.and.tools.for.doin | 
| 8580 | 67 20 61 73 79 6e 63 68 72 6f 75 73 0a 3b 3b 20    70 72 6f 67 72 61 6d 6d 69 6e 67 2e 0a 3b 3b 0a | g.asynchrous.;;.programming..;;. | 
| 85a0 | 3b 3b 20 54 68 65 20 69 64 65 61 20 69 73 20 74    68 61 74 20 79 6f 75 20 63 61 6e 20 73 65 74 75 | ;;.The.idea.is.that.you.can.setu | 
| 85c0 | 70 20 61 73 73 6f 63 69 61 74 65 64 20 63 68 69    6c 64 20 70 72 6f 63 65 73 73 65 73 20 61 6e 64 | p.associated.child.processes.and | 
| 85e0 | 20 70 61 73 73 0a 3b 3b 20 74 68 65 6d 20 77 6f    72 6b 20 74 6f 20 64 6f 20 61 6e 64 20 72 65 63 | .pass.;;.them.work.to.do.and.rec | 
| 8600 | 65 69 76 65 20 74 68 65 69 72 20 6f 75 74 70 75    74 20 6f 76 65 72 20 48 54 54 50 2e 0a 0a 3b 3b | eive.their.output.over.HTTP...;; | 
| 8620 | 3b 20 43 6f 64 65 3a 0a 0a 28 72 65 71 75 69 72    65 20 27 65 6c 6e 6f 64 65 29 0a 28 72 65 71 75 | ;.Code:..(require.'elnode).(requ | 
| 8640 | 69 72 65 20 27 77 65 62 29 0a 28 72 65 71 75 69    72 65 20 27 6c 6f 61 64 68 69 73 74 29 0a 28 72 | ire.'web).(require.'loadhist).(r | 
| 8660 | 65 71 75 69 72 65 20 27 73 65 72 76 65 72 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 | equire.'server)..(defun.elnode-r | 
| 8680 | 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 28 68 74 74    70 63 6f 6e 29 0a 20 20 22 52 65 6d 6f 74 65 20 | le--handler.(httpcon)..."Remote. | 
| 86a0 | 4c 69 73 70 20 45 76 61 6c 75 61 74 6f 72 20 68    61 6e 64 6c 65 72 2e 0a 0a 54 68 69 73 20 63 61 | Lisp.Evaluator.handler...This.ca | 
| 86c0 | 6e 20 62 65 20 73 70 61 77 6e 65 64 20 69 6e 20    61 20 63 6c 69 65 6e 74 20 74 6f 20 61 6c 6c 6f | n.be.spawned.in.a.client.to.allo | 
| 86e0 | 77 20 61 6e 79 20 6c 69 73 70 20 63 6f 64 65 20    74 6f 20 62 65 0a 70 61 73 73 65 64 20 6f 76 65 | w.any.lisp.code.to.be.passed.ove | 
| 8700 | 72 20 74 68 65 20 63 6c 69 65 6e 74 2d 73 65 72    76 65 72 20 6c 69 6e 6b 2e 22 0a 20 20 28 6c 65 | r.the.client-server.link."...(le | 
| 8720 | 74 2a 20 28 28 6c 69 73 70 2d 74 6f 2d 72 75 6e    20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 | t*.((lisp-to-run.(elnode-http-pa | 
| 8740 | 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 6c 69 73    70 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 6c | ram.httpcon."lisp"))..........(l | 
| 8760 | 69 73 70 0a 20 20 20 20 20 20 20 20 20 20 28 69    66 20 6c 69 73 70 2d 74 6f 2d 72 75 6e 0a 20 20 | isp...........(if.lisp-to-run... | 
| 8780 | 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72    20 28 72 65 61 64 2d 66 72 6f 6d 2d 73 74 72 69 | ............(car.(read-from-stri | 
| 87a0 | 6e 67 20 6c 69 73 70 2d 74 6f 2d 72 75 6e 29 29    29 29 0a 20 20 20 20 20 20 20 20 20 28 62 69 6e | ng.lisp-to-run))))..........(bin | 
| 87c0 | 64 69 6e 67 73 2d 74 6f 2d 75 73 65 20 28 65 6c    6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 | dings-to-use.(elnode-http-param. | 
| 87e0 | 68 74 74 70 63 6f 6e 20 22 62 69 6e 64 69 6e 67    73 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 62 | httpcon."bindings"))..........(b | 
| 8800 | 69 6e 64 69 6e 67 73 0a 20 20 20 20 20 20 20 20    20 20 28 69 66 20 62 69 6e 64 69 6e 67 73 2d 74 | indings...........(if.bindings-t | 
| 8820 | 6f 2d 75 73 65 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 61 72 20 28 72 65 61 64 2d 66 | o-use...............(car.(read-f | 
| 8840 | 72 6f 6d 2d 73 74 72 69 6e 67 20 62 69 6e 64 69    6e 67 73 2d 74 6f 2d 75 73 65 29 29 29 29 0a 20 | rom-string.bindings-to-use)))).. | 
| 8860 | 20 20 20 20 20 20 20 20 28 74 6f 2d 65 76 61 6c    20 28 6c 69 73 74 20 27 6c 65 74 20 62 69 6e 64 | ........(to-eval.(list.'let.bind | 
| 8880 | 69 6e 67 73 20 6c 69 73 70 29 29 29 0a 20 20 20    20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 | ings.lisp))).....(elnode-http-st | 
| 88a0 | 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 20    27 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 22 | art.httpcon.200.'("Content-type" | 
| 88c0 | 20 2e 20 22 74 65 78 74 2f 70 6c 61 69 6e 22 29    29 0a 20 20 20 20 28 6c 65 74 20 28 28 6e 6f 6d | ..."text/plain")).....(let.((nom | 
| 88e0 | 65 73 73 61 67 65 20 74 29 29 0a 20 20 20 20 20    20 28 77 69 74 68 2d 73 74 64 6f 75 74 2d 74 6f | essage.t)).......(with-stdout-to | 
| 8900 | 2d 65 6c 6e 6f 64 65 20 68 74 74 70 63 6f 6e 0a    20 20 20 20 20 20 20 20 20 20 28 65 76 61 6c 20 | -elnode.httpcon...........(eval. | 
| 8920 | 74 6f 2d 65 76 61 6c 29 29 29 29 29 0a 0a 28 65    72 74 2d 64 65 66 74 65 73 74 20 65 6c 6e 6f 64 | to-eval)))))..(ert-deftest.elnod | 
| 8940 | 65 2d 72 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 28    29 0a 20 20 22 54 65 73 74 20 74 68 65 20 52 65 | e-rle--handler.()..."Test.the.Re | 
| 8960 | 6d 6f 74 65 20 4c 69 73 70 20 45 76 61 6c 75 61    74 6f 72 20 68 61 6e 64 6c 65 72 2e 22 0a 20 20 | mote.Lisp.Evaluator.handler."... | 
| 8980 | 3a 65 78 70 65 63 74 65 64 2d 72 65 73 75 6c 74    20 3a 66 61 69 6c 65 64 0a 20 20 28 66 6c 65 74 | :expected-result.:failed...(flet | 
| 89a0 | 20 28 28 6c 69 73 70 2d 65 6e 63 6f 64 65 20 28    70 61 72 61 6d 20 6c 69 73 70 29 0a 20 20 20 20 | .((lisp-encode.(param.lisp)..... | 
| 89c0 | 20 20 20 20 20 20 20 28 63 6f 6e 73 20 70 61 72    61 6d 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 | .......(cons.param.(format."%S". | 
| 89e0 | 6c 69 73 70 29 29 29 0a 20 20 20 20 20 20 20 20    20 28 64 6f 2d 74 65 73 74 20 28 6c 69 73 70 20 | lisp)))..........(do-test.(lisp. | 
| 8a00 | 62 69 6e 64 69 6e 67 73 29 0a 20 20 20 20 20 20    20 20 20 20 20 28 66 61 6b 69 72 2d 6d 6f 63 6b | bindings)............(fakir-mock | 
| 8a20 | 2d 70 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 68 74 74 70 63 6f 6e | -process................:httpcon | 
| 8a40 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 28 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 | ................((:elnode-http-p | 
| 8a60 | 61 72 61 6d 73 20 28 6c 69 73 74 20 6c 69 73 70    20 62 69 6e 64 69 6e 67 73 29 29 29 0a 20 20 20 | arams.(list.lisp.bindings))).... | 
| 8a80 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 72 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 3a | ..........(elnode-rle--handler.: | 
| 8aa0 | 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 | httpcon)..............(with-curr | 
| 8ac0 | 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63    65 73 73 2d 62 75 66 66 65 72 20 3a 68 74 74 70 | ent-buffer.(process-buffer.:http | 
| 8ae0 | 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 | con)................(goto-char.( | 
| 8b00 | 70 6f 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 46 69 | point-min))................;;.Fi | 
| 8b20 | 6e 64 20 74 68 65 20 68 65 61 64 65 72 20 65 6e    64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | nd.the.header.end............... | 
| 8b40 | 20 20 28 72 65 2d 73 65 61 72 63 68 2d 66 6f 72    77 61 72 64 20 22 5c 72 5c 6e 5c 72 5c 6e 22 20 | ..(re-search-forward."\r\n\r\n". | 
| 8b60 | 6e 69 6c 20 27 74 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 | nil.'t)................(buffer-s | 
| 8b80 | 75 62 73 74 72 69 6e 67 20 28 70 6f 69 6e 74 29    20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 29 | ubstring.(point).(point-max))))) | 
| 8ba0 | 29 0a 20 20 20 20 20 20 28 73 68 6f 75 6c 64 0a    20 20 20 20 20 20 20 28 65 71 75 61 6c 0a 20 20 | ).......(should........(equal... | 
| 8bc0 | 20 20 20 20 20 20 3b 3b 20 4d 61 74 63 68 20 74    68 65 20 63 6f 6e 74 65 6e 74 20 74 72 61 6e 73 | ......;;.Match.the.content.trans | 
| 8be0 | 66 65 72 20 65 6e 63 6f 64 65 64 0a 20 20 20 20    20 20 20 20 22 63 5c 72 5c 6e 68 65 6c 6c 6f 20 | fer.encoded........."c\r\nhello. | 
| 8c00 | 77 6f 72 6c 64 21 5c 72 5c 6e 30 5c 72 5c 6e 5c    72 5c 6e 22 0a 20 20 20 20 20 20 20 20 28 6c 65 | world!\r\n0\r\n\r\n".........(le | 
| 8c20 | 74 2a 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    28 6c 69 73 70 20 28 6c 69 73 70 2d 65 6e 63 6f | t*.............((lisp.(lisp-enco | 
| 8c40 | 64 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 22 6c 69 73 70 22 20 27 28 | de....................."lisp".'( | 
| 8c60 | 6c 65 74 20 28 28 61 20 22 68 65 6c 6c 6f 20 77    6f 72 6c 64 21 22 29 29 20 28 70 72 69 6e 63 20 | let.((a."hello.world!")).(princ. | 
| 8c80 | 61 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 28 62 69 6e 64 69 6e 67 73 20 28 6c 69 | a))))..............(bindings.(li | 
| 8ca0 | 73 70 2d 65 6e 63 6f 64 65 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | sp-encode....................... | 
| 8cc0 | 20 20 22 62 69 6e 64 69 6e 67 73 22 20 27 28 28    61 20 31 30 29 28 62 20 32 30 29 29 29 29 29 0a | .."bindings".'((a.10)(b.20))))). | 
| 8ce0 | 20 20 20 20 20 20 20 20 20 20 28 64 6f 2d 74 65    73 74 20 6c 69 73 70 20 62 69 6e 64 69 6e 67 73 | ..........(do-test.lisp.bindings | 
| 8d00 | 29 29 29 29 0a 20 20 20 20 20 20 28 73 68 6f 75    6c 64 0a 20 20 20 20 20 20 20 28 65 71 75 61 6c | )))).......(should........(equal | 
| 8d20 | 0a 20 20 20 20 20 20 20 20 22 32 5c 72 5c 6e 33    30 5c 72 5c 6e 30 5c 72 5c 6e 5c 72 5c 6e 22 0a | ........."2\r\n30\r\n0\r\n\r\n". | 
| 8d40 | 20 20 20 20 20 20 20 20 28 6c 65 74 2a 0a 20 20    20 20 20 20 20 20 20 20 20 20 28 28 6c 69 73 70 | ........(let*.............((lisp | 
| 8d60 | 20 28 6c 69 73 70 2d 65 6e 63 6f 64 65 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(lisp-encode................... | 
| 8d80 | 20 20 22 6c 69 73 70 22 20 27 28 6c 65 74 20 28    28 61 20 28 2b 20 62 20 31 30 29 29 29 20 28 70 | .."lisp".'(let.((a.(+.b.10))).(p | 
| 8da0 | 72 69 6e 63 20 61 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 28 62 69 6e 64 69 6e 67 | rinc.a))))..............(binding | 
| 8dc0 | 73 20 28 6c 69 73 70 2d 65 6e 63 6f 64 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | s.(lisp-encode.................. | 
| 8de0 | 20 20 20 20 20 20 20 22 62 69 6e 64 69 6e 67 73    22 20 27 28 28 61 20 31 30 29 28 62 20 32 30 29 | ......."bindings".'((a.10)(b.20) | 
| 8e00 | 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    64 6f 2d 74 65 73 74 20 6c 69 73 70 20 62 69 6e | ))))...........(do-test.lisp.bin | 
| 8e20 | 64 69 6e 67 73 29 29 29 29 29 29 0a 0a 28 64 65    66 76 61 72 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d | dings))))))..(defvar.elnode-rle- | 
| 8e40 | 2d 73 65 72 76 65 72 73 20 28 6d 61 6b 65 2d 68    61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 | -servers.(make-hash-table.:test. | 
| 8e60 | 27 65 71 75 61 6c 29 0a 20 20 22 54 68 65 20 68    61 73 68 20 6f 66 20 52 4c 45 20 73 65 72 76 65 | 'equal)..."The.hash.of.RLE.serve | 
| 8e80 | 72 73 20 61 76 61 69 6c 61 62 6c 65 2e 22 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 72 | rs.available.")..(defun.elnode-r | 
| 8ea0 | 6c 65 2d 2d 6c 6f 61 64 2d 70 61 74 68 2d 69 7a    65 20 28 6c 69 73 70 29 0a 20 20 22 57 72 61 70 | le--load-path-ize.(lisp)..."Wrap | 
| 8ec0 | 20 4c 49 53 50 20 69 6e 20 74 68 65 20 63 75 72    72 65 6e 74 20 6c 6f 61 64 2d 70 61 74 68 2e 22 | .LISP.in.the.current.load-path." | 
| 8ee0 | 0a 20 20 28 63 6f 6e 63 61 74 0a 20 20 20 3b 3b    20 54 68 65 72 65 20 69 73 20 61 20 76 65 72 79 | ...(concat....;;.There.is.a.very | 
| 8f00 | 20 73 74 72 61 6e 67 65 20 74 68 69 6e 67 20 77    69 74 68 20 73 65 6e 64 69 6e 67 20 6c 69 73 70 | .strange.thing.with.sending.lisp | 
| 8f20 | 20 74 6f 0a 20 20 20 3b 3b 20 28 72 65 61 64 29    20 6f 76 65 72 20 61 20 70 69 70 65 64 20 73 74 | .to....;;.(read).over.a.piped.st | 
| 8f40 | 72 65 61 6d 2e 2e 2e 20 28 72 65 61 64 29 20 63    61 6e 27 74 20 63 6f 70 65 20 77 69 74 68 0a 20 | ream....(read).can't.cope.with.. | 
| 8f60 | 20 20 3b 3b 20 6d 75 6c 74 69 70 6c 65 20 6c 69    6e 65 73 3b 20 73 6f 20 77 65 20 65 6e 63 6f 64 | ..;;.multiple.lines;.so.we.encod | 
| 8f80 | 65 20 6e 65 77 6c 69 6e 65 20 68 65 72 65 2e 0a    20 20 20 3b 3b 28 72 65 70 6c 61 63 65 2d 72 65 | e.newline.here.....;;(replace-re | 
| 8fa0 | 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20    20 20 3b 3b 20 22 5c 6e 22 0a 20 20 20 3b 3b 20 | gexp-in-string....;;."\n"....;;. | 
| 8fc0 | 22 5c 5c 5c 5c 6e 22 0a 20 20 20 28 66 6f 72 6d    61 74 20 22 28 70 72 6f 67 6e 20 28 73 65 74 71 | "\\\\n"....(format."(progn.(setq | 
| 8fe0 | 20 6c 6f 61 64 2d 70 61 74 68 20 28 71 75 6f 74    65 20 25 53 29 29 20 25 73 29 22 0a 20 20 20 20 | .load-path.(quote.%S)).%s)"..... | 
| 9000 | 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 20 28    6c 69 73 74 20 64 65 66 61 75 6c 74 2d 64 69 72 | .......(append.(list.default-dir | 
| 9020 | 65 63 74 6f 72 79 29 20 6c 6f 61 64 2d 70 61 74    68 29 0a 20 20 20 20 20 20 20 20 20 20 20 6c 69 | ectory).load-path)............li | 
| 9040 | 73 70 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c    6e 6f 64 65 2d 72 6c 65 2d 2d 68 61 6e 64 6c 65 | sp)))..(defun.elnode-rle--handle | 
| 9060 | 72 2d 6c 69 73 70 20 28 74 6f 2d 72 65 71 75 69    72 65 29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 | r-lisp.(to-require)..."Return.a. | 
| 9080 | 66 69 6c 65 20 77 69 74 68 20 4c 69 73 70 20 74    6f 20 73 74 61 72 74 20 45 6c 6e 6f 64 65 20 77 | file.with.Lisp.to.start.Elnode.w | 
| 90a0 | 69 74 68 20 54 4f 2d 52 45 51 55 49 52 45 2e 0a    0a 55 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 | ith.TO-REQUIRE...Used.to.constru | 
| 90c0 | 63 74 20 74 68 65 20 6c 69 73 70 20 74 6f 20 73    65 6e 64 2e 20 20 59 6f 75 27 72 65 20 75 6e 6c | ct.the.lisp.to.send...You're.unl | 
| 90e0 | 69 6b 65 6c 79 20 74 6f 20 6e 65 65 64 20 74 6f    0a 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 61 | ikely.to.need.to.override.this.a | 
| 9100 | 74 20 61 6c 6c 2c 20 74 68 65 20 66 75 6e 63 74    69 6f 6e 20 69 73 20 6a 75 73 74 20 68 65 72 65 | t.all,.the.function.is.just.here | 
| 9120 | 20 74 6f 20 6d 61 6b 65 20 74 68 65 0a 69 6d 70    6c 65 6d 65 6e 74 61 74 69 6f 6e 20 65 61 73 69 | .to.make.the.implementation.easi | 
| 9140 | 65 72 20 74 6f 20 64 65 62 75 67 2e 0a 0a 54 4f    2d 52 45 51 55 49 52 45 20 69 73 20 61 20 6c 69 | er.to.debug...TO-REQUIRE.is.a.li | 
| 9160 | 73 74 20 6f 66 20 74 68 69 6e 67 73 20 74 6f 20    72 65 71 75 69 72 65 2c 20 63 75 72 72 65 6e 74 | st.of.things.to.require,.current | 
| 9180 | 6c 79 20 6f 6e 6c 79 20 31 20 69 73 0a 61 6c 6c    6f 77 65 64 2e 22 0a 20 20 28 6c 65 74 20 28 28 | ly.only.1.is.allowed."...(let.(( | 
| 91a0 | 74 65 6d 70 2d 66 69 6c 65 0a 20 20 20 20 20 20    20 20 20 28 6d 61 6b 65 2d 74 65 6d 70 2d 66 69 | temp-file..........(make-temp-fi | 
| 91c0 | 6c 65 0a 20 20 20 20 20 20 20 20 20 20 28 66 6f    72 6d 61 74 20 22 65 6c 6e 6f 64 65 2d 72 6c 65 | le...........(format."elnode-rle | 
| 91e0 | 2d 25 73 22 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d    65 20 74 6f 2d 72 65 71 75 69 72 65 29 29 29 29 | -%s".(symbol-name.to-require)))) | 
| 9200 | 29 0a 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70    2d 66 69 6c 65 20 74 65 6d 70 2d 66 69 6c 65 0a | ).....(with-temp-file.temp-file. | 
| 9220 | 20 20 20 20 20 20 28 69 6e 73 65 72 74 0a 20 20    20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 | ......(insert........(elnode-rle | 
| 9240 | 2d 2d 6c 6f 61 64 2d 70 61 74 68 2d 69 7a 65 0a    20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 | --load-path-ize.........(format. | 
| 9260 | 22 28 70 72 6f 67 6e 0a 20 28 73 65 74 71 20 65    6c 6e 6f 64 65 2d 64 6f 2d 69 6e 69 74 20 6e 69 | "(progn..(setq.elnode-do-init.ni | 
| 9280 | 6c 29 0a 20 28 73 65 74 71 20 65 6c 6e 6f 64 65    2d 2d 64 6f 2d 65 72 72 6f 72 2d 6c 6f 67 67 69 | l)..(setq.elnode--do-error-loggi | 
| 92a0 | 6e 67 20 6e 69 6c 29 0a 20 28 72 65 71 75 69 72    65 20 28 71 75 6f 74 65 20 25 73 29 29 0a 20 28 | ng.nil)..(require.(quote.%s))..( | 
| 92c0 | 72 65 71 75 69 72 65 20 28 71 75 6f 74 65 20 65    6c 6e 6f 64 65 2d 72 6c 65 29 29 0a 20 28 74 6f | require.(quote.elnode-rle))..(to | 
| 92e0 | 67 67 6c 65 2d 64 65 62 75 67 2d 6f 6e 2d 65 72    72 6f 72 29 0a 20 28 73 65 74 71 20 65 6c 6e 6f | ggle-debug-on-error)..(setq.elno | 
| 9300 | 64 65 2d 72 6c 65 2d 70 6f 72 74 20 28 65 6c 6e    6f 64 65 2d 66 69 6e 64 2d 66 72 65 65 2d 73 65 | de-rle-port.(elnode-find-free-se | 
| 9320 | 72 76 69 63 65 29 29 0a 20 28 65 6c 6e 6f 64 65    2d 73 74 61 72 74 20 27 65 6c 6e 6f 64 65 2d 72 | rvice))..(elnode-start.'elnode-r | 
| 9340 | 6c 65 2d 2d 68 61 6e 64 6c 65 72 20 3a 70 6f 72    74 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 70 6f 72 | le--handler.:port.elnode-rle-por | 
| 9360 | 74 29 0a 20 28 70 72 69 6e 74 20 28 66 6f 72 6d    61 74 20 5c 22 5c 5c 6e 65 6c 6e 6f 64 65 2d 70 | t)..(print.(format.\"\\nelnode-p | 
| 9380 | 6f 72 74 3d 25 25 64 5c 5c 6e 5c 22 20 70 6f 72    74 29 29 29 22 0a 20 20 20 20 20 20 20 20 20 20 | ort=%%d\\n\".port)))"........... | 
| 93a0 | 20 20 20 20 20 20 74 6f 2d 72 65 71 75 69 72 65    29 29 29 29 0a 20 20 20 20 74 65 6d 70 2d 66 69 | ......to-require)))).....temp-fi | 
| 93c0 | 6c 65 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e    6f 64 65 2d 72 6c 65 2d 2d 68 74 74 70 63 6f 6e | le))..(defun.elnode-rle--httpcon | 
| 93e0 | 2d 6d 61 70 70 65 72 20 28 63 6c 69 65 6e 74 2d    68 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 20 | -mapper.(client-header.......... | 
| 9400 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e 74 | ..........................client | 
| 9420 | 2d 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | -data........................... | 
| 9440 | 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d    68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 | .........elnode-httpcon......... | 
| 9460 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 26 6f 70 74 69 | ...........................&opti | 
| 9480 | 6f 6e 61 6c 20 65 6e 64 2d 63 61 6c 6c 62 61 63    6b 29 0a 20 20 22 45 6c 6e 6f 64 65 20 73 70 65 | onal.end-callback)..."Elnode.spe | 
| 94a0 | 63 69 66 69 63 20 63 6c 69 65 6e 74 20 63 6f 6e    6e 65 63 74 69 6f 6e 20 74 6f 20 48 54 54 50 20 | cific.client.connection.to.HTTP. | 
| 94c0 | 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 70 70 65    72 2e 0a 0a 4d 61 70 73 20 63 6c 69 65 6e 74 20 | connection.mapper...Maps.client. | 
| 94e0 | 61 73 79 6e 63 20 64 61 74 61 20 72 65 73 70 6f    6e 73 65 73 20 74 6f 20 61 6e 20 65 6c 6e 6f 64 | async.data.responses.to.an.elnod | 
| 9500 | 65 20 73 65 72 76 65 72 20 72 65 73 70 6f 6e 73    65 2e 22 0a 20 20 28 75 6e 6c 65 73 73 20 28 70 | e.server.response."...(unless.(p | 
| 9520 | 72 6f 63 65 73 73 2d 67 65 74 20 65 6c 6e 6f 64    65 2d 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 | rocess-get.elnode-httpcon.:elnod | 
| 9540 | 65 2d 72 6c 65 2d 68 65 61 64 65 72 2d 73 65 6e    74 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 | e-rle-header-sent).....(elnode-h | 
| 9560 | 74 74 70 2d 73 74 61 72 74 0a 20 20 20 20 20 65    6c 6e 6f 64 65 2d 68 74 74 70 63 6f 6e 0a 20 20 | ttp-start......elnode-httpcon... | 
| 9580 | 20 20 20 28 67 65 74 68 61 73 68 20 27 73 74 61    74 75 73 2d 63 6f 64 65 20 63 6c 69 65 6e 74 2d | ...(gethash.'status-code.client- | 
| 95a0 | 68 65 61 64 65 72 29 29 0a 20 20 20 20 28 70 72    6f 63 65 73 73 2d 70 75 74 20 65 6c 6e 6f 64 65 | header)).....(process-put.elnode | 
| 95c0 | 2d 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65    2d 72 6c 65 2d 68 65 61 64 65 72 2d 73 65 6e 74 | -httpcon.:elnode-rle-header-sent | 
| 95e0 | 20 74 29 29 0a 20 20 28 69 66 20 28 65 71 20 63    6c 69 65 6e 74 2d 64 61 74 61 20 3a 64 6f 6e 65 | .t))...(if.(eq.client-data.:done | 
| 9600 | 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 72 65 74 75 72 6e 20 65 6c 6e 6f | ).......(elnode-http-return.elno | 
| 9620 | 64 65 2d 68 74 74 70 63 6f 6e 29 20 3b 20 72 65    74 75 72 6e 20 69 66 20 77 65 27 72 65 20 64 6f | de-httpcon).;.return.if.we're.do | 
| 9640 | 6e 65 0a 20 20 20 20 20 20 3b 3b 20 45 6c 73 65    20 6a 75 73 74 20 73 65 6e 64 20 74 68 65 20 64 | ne.......;;.Else.just.send.the.d | 
| 9660 | 61 74 61 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 | ata.......(elnode-http-send-stri | 
| 9680 | 6e 67 20 65 6c 6e 6f 64 65 2d 68 74 74 70 63 6f    6e 20 63 6c 69 65 6e 74 2d 64 61 74 61 29 29 29 | ng.elnode-httpcon.client-data))) | 
| 96a0 | 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d    72 6c 65 2d 2d 63 6c 69 65 6e 74 2d 64 61 74 61 | ..(defun.elnode-rle--client-data | 
| 96c0 | 2d 6d 61 70 70 65 72 20 28 63 6f 6e 20 68 65 61    64 65 72 20 64 61 74 61 20 73 74 72 65 61 6d 20 | -mapper.(con.header.data.stream. | 
| 96e0 | 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 0a 20 20    22 52 65 63 65 76 69 65 73 20 64 61 74 61 20 66 | end-callback)..."Recevies.data.f | 
| 9700 | 72 6f 6d 20 74 68 65 20 52 4c 45 20 73 65 72 76    65 72 20 61 6e 64 20 73 65 6e 64 73 20 69 74 20 | rom.the.RLE.server.and.sends.it. | 
| 9720 | 74 6f 20 74 68 65 20 53 54 52 45 41 4d 2e 0a 0a    45 4e 44 2d 43 41 4c 4c 42 41 43 4b 20 69 73 20 | to.the.STREAM...END-CALLBACK.is. | 
| 9740 | 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 77 68 65    6e 20 74 68 65 20 63 6c 69 65 6e 74 20 73 65 65 | to.be.called.when.the.client.see | 
| 9760 | 73 20 45 4f 46 2e 22 0a 20 20 28 63 6f 6e 64 0a    20 20 20 20 28 28 70 72 6f 63 65 73 73 70 20 73 | s.EOF."...(cond.....((processp.s | 
| 9780 | 74 72 65 61 6d 29 20 3b 20 74 68 69 73 20 73 68    6f 75 6c 64 20 72 65 61 6c 6c 79 20 65 6c 6e 6f | tream).;.this.should.really.elno | 
| 97a0 | 64 65 2d 68 74 74 70 2d 70 0a 20 20 20 20 20 28    65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 74 74 70 | de-http-p......(elnode-rle--http | 
| 97c0 | 63 6f 6e 2d 6d 61 70 70 65 72 20 68 65 61 64 65    72 20 64 61 74 61 20 73 74 72 65 61 6d 20 65 6e | con-mapper.header.data.stream.en | 
| 97e0 | 64 2d 63 61 6c 6c 62 61 63 6b 29 29 0a 20 20 20    20 28 28 62 75 66 66 65 72 70 20 73 74 72 65 61 | d-callback)).....((bufferp.strea | 
| 9800 | 6d 29 0a 20 20 20 20 20 28 69 66 20 28 6e 6f 74    20 28 65 71 20 64 61 74 61 20 3a 64 6f 6e 65 29 | m)......(if.(not.(eq.data.:done) | 
| 9820 | 29 0a 20 20 20 20 20 20 20 20 20 28 77 69 74 68    2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 | )..........(with-current-buffer. | 
| 9840 | 73 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 20    20 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f | stream............(save-excursio | 
| 9860 | 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28    67 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 | n..............(goto-char.(point | 
| 9880 | 2d 6d 61 78 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 28 69 6e 73 65 72 74 20 64 61 74 61 | -max))..............(insert.data | 
| 98a0 | 29 29 29 0a 20 20 20 20 20 20 20 20 20 3b 3b 20    50 72 6f 63 65 73 73 20 69 73 20 64 6f 6e 65 2e | )))..........;;.Process.is.done. | 
| 98c0 | 0a 20 20 20 20 20 20 20 20 20 28 61 6e 64 20 28    66 75 6e 63 74 69 6f 6e 70 20 65 6e 64 2d 63 61 | ..........(and.(functionp.end-ca | 
| 98e0 | 6c 6c 62 61 63 6b 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 65 | llback)...............(funcall.e | 
| 9900 | 6e 64 2d 63 61 6c 6c 62 61 63 6b 20 68 65 61 64    65 72 29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e | nd-callback.header))))))..(defun | 
| 9920 | 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 63 61 6c    6c 2d 6d 61 70 70 65 72 20 28 64 61 74 61 2d 74 | .elnode-rle--call-mapper.(data-t | 
| 9940 | 6f 2d 73 65 6e 64 20 73 74 72 65 61 6d 20 70 6f    72 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | o-send.stream.port.............. | 
| 9960 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 26 6f 70 74 69 6f 6e 61 6c 20 65 6e 64 | ...................&optional.end | 
| 9980 | 2d 63 61 6c 6c 62 61 63 6b 29 0a 20 20 22 4d 61    6b 65 20 61 20 63 6c 69 65 6e 74 20 63 61 6c 6c | -callback)..."Make.a.client.call | 
| 99a0 | 20 74 6f 20 50 4f 52 54 20 6d 61 70 70 69 6e 67    20 72 65 73 70 6f 6e 73 65 20 74 6f 20 53 54 52 | .to.PORT.mapping.response.to.STR | 
| 99c0 | 45 41 4d 2e 0a 0a 57 68 65 6e 20 69 74 20 66 69    6e 69 73 68 65 73 2c 20 63 61 6c 6c 20 45 4e 44 | EAM...When.it.finishes,.call.END | 
| 99e0 | 2d 43 41 4c 4c 42 41 43 4b 2c 20 69 66 20 70 72    65 73 65 6e 74 2c 20 77 69 74 68 20 74 68 65 20 | -CALLBACK,.if.present,.with.the. | 
| 9a00 | 68 65 61 64 65 72 2e 22 0a 20 20 28 77 65 62 2d    68 74 74 70 2d 70 6f 73 74 0a 20 20 20 28 6c 61 | header."...(web-http-post....(la | 
| 9a20 | 6d 62 64 61 20 28 63 6f 6e 20 68 65 61 64 65 72    20 64 61 74 61 29 0a 20 20 20 20 20 28 65 6c 6e | mbda.(con.header.data)......(eln | 
| 9a40 | 6f 64 65 2d 72 6c 65 2d 2d 63 6c 69 65 6e 74 2d    64 61 74 61 2d 6d 61 70 70 65 72 0a 20 20 20 20 | ode-rle--client-data-mapper..... | 
| 9a60 | 20 20 63 6f 6e 0a 20 20 20 20 20 20 68 65 61 64    65 72 0a 20 20 20 20 20 20 64 61 74 61 0a 20 20 | ..con.......header.......data... | 
| 9a80 | 20 20 20 20 73 74 72 65 61 6d 0a 20 20 20 20 20    20 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 29 0a | ....stream.......end-callback)). | 
| 9aa0 | 20 20 20 22 2f 22 0a 20 20 20 3a 68 6f 73 74 20    22 6c 6f 63 61 6c 68 6f 73 74 22 0a 20 20 20 3a | ..."/"....:host."localhost"....: | 
| 9ac0 | 70 6f 72 74 20 70 6f 72 74 0a 20 20 20 3a 64 61    74 61 20 64 61 74 61 2d 74 6f 2d 73 65 6e 64 0a | port.port....:data.data-to-send. | 
| 9ae0 | 20 20 20 3a 6d 69 6d 65 2d 74 79 70 65 20 22 61    70 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 65 6c 6e | ...:mime-type."application/x-eln | 
| 9b00 | 6f 64 65 22 0a 20 20 20 3a 6d 6f 64 65 20 27 73    74 72 65 61 6d 29 29 0a 0a 28 64 65 66 75 6e 20 | ode"....:mode.'stream))..(defun. | 
| 9b20 | 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 6d 61 6b 65    2d 73 65 72 76 65 72 20 28 74 6f 2d 72 65 71 75 | elnode-rle--make-server.(to-requ | 
| 9b40 | 69 72 65 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20    52 4c 45 20 73 65 72 76 65 72 2c 20 61 20 63 68 | ire)..."Make.an.RLE.server,.a.ch | 
| 9b60 | 69 6c 64 20 45 6d 61 63 73 20 72 75 6e 6e 69 6e    67 20 74 68 65 20 52 4c 45 20 68 61 6e 64 6c 65 | ild.Emacs.running.the.RLE.handle | 
| 9b80 | 72 2e 0a 0a 52 65 74 75 72 6e 20 61 20 70 72 6f    63 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 | r...Return.a.proc.that.represent | 
| 9ba0 | 73 20 74 68 65 20 63 68 69 6c 64 20 70 72 6f 63    65 73 73 2e 20 20 54 68 65 20 63 68 69 6c 64 0a | s.the.child.process...The.child. | 
| 9bc0 | 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 70 72    6f 70 65 72 74 79 20 60 3a 65 78 65 63 27 20 77 | process.has.a.property.`:exec'.w | 
| 9be0 | 68 69 63 68 20 69 73 20 61 20 66 75 6e 63 74 69    6f 6e 20 74 68 61 74 20 63 61 6c 6c 73 20 74 68 | hich.is.a.function.that.calls.th | 
| 9c00 | 65 0a 52 4c 45 20 68 61 6e 64 6c 65 72 20 69 6e    20 74 68 65 20 63 68 69 6c 64 27 73 20 45 6c 6e | e.RLE.handler.in.the.child's.Eln | 
| 9c20 | 6f 64 65 20 73 65 72 76 65 72 20 28 77 61 69 74    69 6e 67 20 66 6f 72 20 74 68 65 20 73 65 72 76 | ode.server.(waiting.for.the.serv | 
| 9c40 | 65 72 0a 74 6f 20 73 74 61 72 74 20 66 69 72 73    74 20 61 6e 64 20 70 72 6f 76 69 64 65 20 74 68 | er.to.start.first.and.provide.th | 
| 9c60 | 65 20 72 65 6c 65 76 61 6e 74 20 70 6f 72 74 29    20 62 79 20 63 61 6c 6c 69 6e 67 0a 60 65 6c 6e | e.relevant.port).by.calling.`eln | 
| 9c80 | 6f 64 65 2d 72 6c 65 2d 63 61 6c 6c 2d 6d 61 70    70 65 72 27 20 77 69 74 68 20 74 68 65 20 73 74 | ode-rle-call-mapper'.with.the.st | 
| 9ca0 | 72 65 61 6d 20 66 72 6f 6d 20 74 68 65 20 60 3a    65 78 65 63 27 20 63 61 6c 6c 0a 61 6e 64 20 74 | ream.from.the.`:exec'.call.and.t | 
| 9cc0 | 68 65 20 63 68 69 6c 64 27 73 20 72 65 6d 6f 74    65 20 48 54 54 50 20 70 6f 72 74 2e 0a 0a 54 68 | he.child's.remote.HTTP.port...Th | 
| 9ce0 | 65 20 60 3a 65 78 65 63 27 20 70 72 6f 63 20 77    69 6c 6c 20 73 69 67 6e 61 6c 20 60 65 6c 6e 6f | e.`:exec'.proc.will.signal.`elno | 
| 9d00 | 64 65 2d 72 6c 65 2d 63 68 69 6c 64 2d 70 6f 72    74 27 20 69 66 20 74 68 65 20 63 68 69 6c 64 0a | de-rle-child-port'.if.the.child. | 
| 9d20 | 73 65 72 76 65 72 20 64 6f 65 73 20 6e 6f 74 20    73 74 61 72 74 20 70 72 6f 70 65 72 6c 79 2e 22 | server.does.not.start.properly." | 
| 9d40 | 20 20 3b 20 79 65 73 2e 20 49 20 6b 6e 6f 77 20    69 74 27 73 20 62 6c 6f 6f 64 79 20 63 6f 6d 70 | ..;.yes..I.know.it's.bloody.comp | 
| 9d60 | 6c 69 63 61 74 65 64 2e 0a 20 20 28 6c 65 74 2a    20 28 28 70 72 6f 63 2d 62 75 66 66 65 72 0a 20 | licated....(let*.((proc-buffer.. | 
| 9d80 | 20 20 20 20 20 20 20 20 20 28 67 65 74 2d 62 75    66 66 65 72 2d 63 72 65 61 74 65 0a 20 20 20 20 | .........(get-buffer-create..... | 
| 9da0 | 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22    2a 20 25 73 20 2a 22 20 22 74 68 69 6e 67 79 22 | .......(format."*.%s.*"."thingy" | 
| 9dc0 | 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 65 6d    61 63 73 72 75 6e 0a 20 20 20 20 20 20 20 20 20 | )))..........(emacsrun.......... | 
| 9de0 | 20 22 2f 75 73 72 2f 62 69 6e 2f 65 6d 61 63 73    20 2d 51 20 2d 2d 64 61 65 6d 6f 6e 3d 65 6c 6e | ."/usr/bin/emacs.-Q.--daemon=eln | 
| 9e00 | 6f 64 65 2d 64 65 62 75 67 69 74 22 29 0a 20 20    20 20 20 20 20 20 20 28 70 72 6f 63 0a 20 20 20 | ode-debugit")..........(proc.... | 
| 9e20 | 20 20 20 20 20 20 20 28 73 74 61 72 74 2d 70 72    6f 63 65 73 73 2d 73 68 65 6c 6c 2d 63 6f 6d 6d | .......(start-process-shell-comm | 
| 9e40 | 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 22    65 6c 6e 6f 64 65 2d 72 6c 65 2d 73 65 72 76 65 | and............"elnode-rle-serve | 
| 9e60 | 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 70 72    6f 63 2d 62 75 66 66 65 72 0a 20 20 20 20 20 20 | r"............proc-buffer....... | 
| 9e80 | 20 20 20 20 20 65 6d 61 63 73 72 75 6e 29 29 0a    20 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6f | .....emacsrun))..........(file-o | 
| 9ea0 | 66 2d 6c 69 73 70 0a 20 20 20 20 20 20 20 20 20    20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 68 61 | f-lisp...........(elnode-rle--ha | 
| 9ec0 | 6e 64 6c 65 72 2d 6c 69 73 70 0a 20 20 20 20 20    20 20 20 20 20 20 74 6f 2d 72 65 71 75 69 72 65 | ndler-lisp............to-require | 
| 9ee0 | 29 29 29 0a 20 20 20 20 3b 3b 20 53 74 61 72 74    20 65 6c 6e 6f 64 65 20 69 6e 20 69 74 0a 20 20 | ))).....;;.Start.elnode.in.it... | 
| 9f00 | 20 20 28 73 65 72 76 65 72 2d 65 76 61 6c 2d 61    74 20 22 65 6c 6e 6f 64 65 2d 64 65 62 75 67 69 | ..(server-eval-at."elnode-debugi | 
| 9f20 | 74 22 20 60 28 6c 6f 61 64 2d 66 69 6c 65 20 2c    66 69 6c 65 2d 6f 66 2d 6c 69 73 70 29 29 0a 20 | t".`(load-file.,file-of-lisp)).. | 
| 9f40 | 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20    70 72 6f 63 20 3a 64 61 65 6d 6f 6e 68 61 6e 64 | ...(process-put.proc.:daemonhand | 
| 9f60 | 6c 65 20 22 65 6c 6e 6f 64 65 2d 64 65 62 75 67    69 74 22 29 0a 20 20 20 20 28 70 72 6f 63 65 73 | le."elnode-debugit").....(proces | 
| 9f80 | 73 2d 70 75 74 0a 20 20 20 20 20 70 72 6f 63 0a    20 20 20 20 20 3a 70 6f 72 74 0a 20 20 20 20 20 | s-put......proc......:port...... | 
| 9fa0 | 28 73 65 72 76 65 72 2d 65 76 61 6c 2d 61 74 0a    20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 | (server-eval-at.......(process-g | 
| 9fc0 | 65 74 20 70 72 6f 63 20 3a 64 61 65 6d 6f 6e 68    61 6e 64 6c 65 29 0a 20 20 20 20 20 20 27 65 6c | et.proc.:daemonhandle).......'el | 
| 9fe0 | 6e 6f 64 65 2d 72 6c 65 2d 70 6f 72 74 29 29 0a    20 20 20 20 3b 3b 20 43 6f 6c 6c 65 63 74 20 74 | node-rle-port)).....;;.Collect.t | 
| a000 | 68 65 20 70 6f 72 74 20 66 72 6f 6d 20 74 68 65    20 72 65 6d 6f 74 65 20 45 6d 61 63 73 0a 20 20 | he.port.from.the.remote.Emacs... | 
| a020 | 20 20 3b 3b 20 2d 20 46 49 58 4d 45 20 74 68 69    73 20 73 68 6f 75 6c 64 20 61 6c 73 6f 20 63 6f | ..;;.-.FIXME.this.should.also.co | 
| a040 | 6c 6c 65 63 74 20 74 68 65 20 73 65 63 75 72 65    20 74 6f 6b 65 6e 0a 20 20 20 20 28 73 65 74 2d | llect.the.secure.token.....(set- | 
| a060 | 70 72 6f 63 65 73 73 2d 66 69 6c 74 65 72 0a 20    20 20 20 20 70 72 6f 63 0a 20 20 20 20 20 28 6c | process-filter......proc......(l | 
| a080 | 61 6d 62 64 61 20 28 70 72 6f 63 20 64 61 74 61    29 0a 20 20 20 20 20 20 20 3b 3b 20 4f 70 74 69 | ambda.(proc.data)........;;.Opti | 
| a0a0 | 6f 6e 61 6c 20 64 65 6c 61 79 20 66 6f 72 20 74    65 73 74 20 72 65 61 73 6f 6e 73 0a 20 20 20 20 | onal.delay.for.test.reasons..... | 
| a0c0 | 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74    2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 | ...(with-current-buffer.(process | 
| a0e0 | 2d 62 75 66 66 65 72 20 70 72 6f 63 29 0a 20 20    20 20 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 | -buffer.proc)..........(save-exc | 
| a100 | 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20    20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 70 6f | ursion............(goto-char.(po | 
| a120 | 69 6e 74 2d 6d 61 78 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 28 69 6e 73 65 72 74 20 64 61 74 | int-max))............(insert.dat | 
| a140 | 61 29 29 29 29 29 0a 20 20 20 20 3b 3b 20 4d 61    6b 65 20 61 20 68 61 6e 64 6c 65 72 20 74 6f 20 | a))))).....;;.Make.a.handler.to. | 
| a160 | 63 61 6c 6c 20 74 68 65 20 73 65 72 76 65 72 0a    20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 | call.the.server.....(process-put | 
| a180 | 0a 20 20 20 20 20 70 72 6f 63 20 3a 65 78 65 63    0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 64 | ......proc.:exec......(lambda.(d | 
| a1a0 | 61 74 61 20 73 74 72 65 61 6d 20 26 6f 70 74 69    6f 6e 61 6c 20 65 6e 64 2d 63 61 6c 6c 62 61 63 | ata.stream.&optional.end-callbac | 
| a1c0 | 6b 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28    28 65 70 68 65 6d 65 72 61 6c 2d 70 6f 72 74 20 | k)........(let.((ephemeral-port. | 
| a1e0 | 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f    63 20 3a 70 6f 72 74 29 29 29 0a 20 20 20 20 20 | (process-get.proc.:port)))...... | 
| a200 | 20 20 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d    2d 63 61 6c 6c 2d 6d 61 70 70 65 72 20 64 61 74 | ....(elnode-rle--call-mapper.dat | 
| a220 | 61 20 73 74 72 65 61 6d 20 65 70 68 65 6d 65 72    61 6c 2d 70 6f 72 74 20 65 6e 64 2d 63 61 6c 6c | a.stream.ephemeral-port.end-call | 
| a240 | 62 61 63 6b 29 29 29 29 0a 20 20 20 20 70 72 6f    63 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f | back)))).....proc))..(defun.elno | 
| a260 | 64 65 2d 72 6c 65 2d 2d 73 65 6e 64 65 72 20 28    73 74 72 65 61 6d 20 74 6f 2d 72 65 71 75 69 72 | de-rle--sender.(stream.to-requir | 
| a280 | 65 20 62 69 6e 64 69 6e 67 73 20 62 6f 64 79 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e.bindings.body................. | 
| a2a0 | 20 20 20 20 20 20 20 20 20 20 20 26 6f 70 74 69    6f 6e 61 6c 20 65 6e 64 2d 63 61 6c 6c 62 61 63 | ...........&optional.end-callbac | 
| a2c0 | 6b 29 0a 20 20 22 4d 61 6b 65 20 61 20 63 61 6c    6c 20 75 73 69 6e 67 20 61 20 63 6c 69 65 6e 74 | k)..."Make.a.call.using.a.client | 
| a2e0 | 20 74 6f 20 74 68 65 20 52 4c 45 20 73 65 72 76    65 72 20 65 6c 73 65 77 68 65 72 65 2e 0a 0a 54 | .to.the.RLE.server.elsewhere...T | 
| a300 | 68 65 20 52 4c 45 20 73 65 72 76 65 72 20 69 73    20 72 65 75 73 65 64 20 6f 76 65 72 20 54 4f 2d | he.RLE.server.is.reused.over.TO- | 
| a320 | 52 45 51 55 49 52 45 2c 20 69 66 20 69 74 27 73    20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 65 78 69 | REQUIRE,.if.it's.not.already.exi | 
| a340 | 73 74 69 6e 67 2c 20 69 74 20 69 73 20 63 72 65    61 74 65 64 2e 22 0a 20 20 28 6c 65 74 20 28 28 | sting,.it.is.created."...(let.(( | 
| a360 | 73 65 72 76 65 72 20 28 67 65 74 68 61 73 68 20    74 6f 2d 72 65 71 75 69 72 65 20 65 6c 6e 6f 64 | server.(gethash.to-require.elnod | 
| a380 | 65 2d 72 6c 65 2d 2d 73 65 72 76 65 72 73 29 29    29 0a 20 20 20 20 3b 3b 20 4d 61 6b 65 20 74 68 | e-rle--servers))).....;;.Make.th | 
| a3a0 | 65 20 73 65 72 76 65 72 20 69 66 20 77 65 20 64    6f 6e 27 74 20 68 61 76 65 20 69 74 0a 20 20 20 | e.server.if.we.don't.have.it.... | 
| a3c0 | 20 28 75 6e 6c 65 73 73 20 73 65 72 76 65 72 0a    20 20 20 20 20 20 28 73 65 74 71 20 73 65 72 76 | .(unless.server.......(setq.serv | 
| a3e0 | 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    70 75 74 68 61 73 68 20 74 6f 2d 72 65 71 75 69 | er.............(puthash.to-requi | 
| a400 | 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d | re......................(elnode- | 
| a420 | 72 6c 65 2d 2d 6d 61 6b 65 2d 73 65 72 76 65 72    20 28 63 61 72 20 74 6f 2d 72 65 71 75 69 72 65 | rle--make-server.(car.to-require | 
| a440 | 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 72 | ))......................elnode-r | 
| a460 | 6c 65 2d 2d 73 65 72 76 65 72 73 29 29 29 0a 20    20 20 20 3b 3b 20 4e 6f 77 20 6d 61 6b 65 20 74 | le--servers))).....;;.Now.make.t | 
| a480 | 68 65 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73    65 72 76 65 72 0a 20 20 20 20 28 6c 65 74 20 28 | he.call.to.the.server.....(let.( | 
| a4a0 | 28 64 61 74 61 20 28 6d 61 6b 65 2d 68 61 73 68    2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65 71 | (data.(make-hash-table.:test.'eq | 
| a4c0 | 75 61 6c 29 29 29 0a 20 20 20 20 20 20 28 70 75    74 68 61 73 68 20 22 62 69 6e 64 69 6e 67 73 22 | ual))).......(puthash."bindings" | 
| a4e0 | 20 28 66 6f 72 6d 61 74 20 22 25 53 22 20 62 69    6e 64 69 6e 67 73 29 20 64 61 74 61 29 0a 20 20 | .(format."%S".bindings).data)... | 
| a500 | 20 20 20 20 28 70 75 74 68 61 73 68 20 22 6c 69    73 70 22 20 28 66 6f 72 6d 61 74 20 22 25 53 22 | ....(puthash."lisp".(format."%S" | 
| a520 | 20 62 6f 64 79 29 20 64 61 74 61 29 0a 20 20 20    20 20 20 28 6c 65 74 20 28 28 63 6c 69 65 6e 74 | .body).data).......(let.((client | 
| a540 | 2d 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c | -connection..............(funcal | 
| a560 | 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 70 72 6f 63 65 73 73 2d 67 65 74 20 73 65 72 | l...............(process-get.ser | 
| a580 | 76 65 72 20 3a 65 78 65 63 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 | ver.:exec)...............data... | 
| a5a0 | 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 65    61 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ............stream.............. | 
| a5c0 | 20 65 6e 64 2d 63 61 6c 6c 62 61 63 6b 29 29 29    0a 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 77 | .end-callback))).........;;.If.w | 
| a5e0 | 65 27 72 65 20 73 74 72 65 61 6d 69 6e 67 20 74    6f 20 65 6c 6e 6f 64 65 20 74 68 65 6e 20 77 65 | e're.streaming.to.elnode.then.we | 
| a600 | 20 6e 65 65 64 20 74 6f 20 6d 61 72 6b 20 74 68    65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 | .need.to.mark.the.connection.... | 
| a620 | 20 20 20 20 20 28 77 68 65 6e 20 28 70 72 6f 63    65 73 73 70 20 73 74 72 65 61 6d 29 0a 20 20 20 | .....(when.(processp.stream).... | 
| a640 | 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d    70 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 73 | .......(process-put............s | 
| a660 | 74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 20 20    20 3a 65 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 | tream............:elnode-child-p | 
| a680 | 72 6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20    20 20 63 6c 69 65 6e 74 2d 63 6f 6e 6e 65 63 74 | rocess............client-connect | 
| a6a0 | 69 6f 6e 29 29 29 29 29 29 0a 0a 28 64 65 66 76    61 72 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 61 | ion))))))..(defvar.elnode-rle--a | 
| a6c0 | 73 79 6e 63 2d 64 6f 2d 65 6e 64 2d 63 61 6c 6c    62 61 63 6b 20 6e 69 6c 0a 20 20 22 55 73 65 64 | sync-do-end-callback.nil..."Used | 
| a6e0 | 20 62 79 20 60 65 6c 6e 6f 64 65 2d 61 73 79 6e    63 2d 64 6f 27 20 61 73 20 74 68 65 20 73 6f 75 | .by.`elnode-async-do'.as.the.sou | 
| a700 | 72 63 65 20 6f 66 20 61 6e 20 65 6e 64 2d 63 61    6c 6c 62 61 63 6b 2e 0a 0a 54 68 69 73 20 69 73 | rce.of.an.end-callback...This.is | 
| a720 | 20 6a 75 73 74 20 75 73 65 64 20 62 79 20 74 65    73 74 73 20 66 6f 72 20 65 6e 64 20 73 69 67 6e | .just.used.by.tests.for.end.sign | 
| a740 | 61 6c 6c 69 6e 67 2e 22 29 0a 0a 28 64 65 66 6d    61 63 72 6f 20 65 6c 6e 6f 64 65 2d 61 73 79 6e | alling.")..(defmacro.elnode-asyn | 
| a760 | 63 2d 64 6f 20 28 73 74 72 65 61 6d 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | c-do.(stream.................... | 
| a780 | 20 20 20 20 20 20 20 20 72 65 71 75 69 72 65 73    20 72 65 71 75 69 72 65 6d 65 6e 74 73 0a 20 20 | ........requires.requirements... | 
| a7a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 77 69 74 68 2d 65 6e | .........................with-en | 
| a7c0 | 76 69 72 6f 6e 6d 65 6e 74 20 62 69 6e 64 69 6e    67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | vironment.bindings.............. | 
| a7e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f    20 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 | ..............do.&rest.body)..." | 
| a800 | 45 78 65 63 75 74 65 20 74 68 65 20 42 4f 44 59    20 69 6e 20 61 20 72 65 6d 6f 74 65 20 45 6d 61 | Execute.the.BODY.in.a.remote.Ema | 
| a820 | 63 73 2e 0a 0a 54 68 65 20 53 54 52 45 41 4d 20    69 73 20 75 73 65 64 20 74 6f 20 68 61 6e 64 6c | cs...The.STREAM.is.used.to.handl | 
| a840 | 65 20 61 6e 79 20 6f 75 74 70 75 74 2e 0a 0a 54    68 65 20 52 45 51 55 49 52 45 4d 45 4e 54 53 20 | e.any.output...The.REQUIREMENTS. | 
| a860 | 69 73 20 61 20 6c 69 73 74 20 6f 66 20 70 72 6f    76 69 64 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 | is.a.list.of.provide.symbol.name | 
| a880 | 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0a 75    73 65 64 20 74 6f 20 65 73 74 61 62 6c 69 73 68 | s.that.will.be.used.to.establish | 
| a8a0 | 20 74 68 65 20 72 69 67 68 74 20 65 6e 76 69 72    6f 6e 6d 65 6e 74 20 69 6e 20 74 68 65 20 72 65 | .the.right.environment.in.the.re | 
| a8c0 | 6d 6f 74 65 2e 0a 0a 54 68 65 20 42 49 4e 44 49    4e 47 53 20 61 72 65 20 61 6c 73 6f 20 73 65 6e | mote...The.BINDINGS.are.also.sen | 
| a8e0 | 74 20 74 6f 20 74 68 65 20 72 65 6d 6f 74 65 2e    0a 0a 54 4f 44 4f 0a 0a 73 65 63 75 72 69 74 79 | t.to.the.remote...TODO..security | 
| a900 | 20 66 6f 72 20 74 68 65 20 72 65 6d 6f 74 65 20    75 73 69 6e 67 20 74 68 65 20 73 74 6f 72 65 64 | .for.the.remote.using.the.stored | 
| a920 | 20 6b 65 79 2e 22 0a 20 20 28 61 73 73 65 72 74    20 28 65 71 20 77 69 74 68 2d 65 6e 76 69 72 6f | .key."...(assert.(eq.with-enviro | 
| a940 | 6e 6d 65 6e 74 20 27 77 69 74 68 2d 65 6e 76 69    72 6f 6e 6d 65 6e 74 29 29 0a 20 20 28 61 73 73 | nment.'with-environment))...(ass | 
| a960 | 65 72 74 20 28 65 71 20 72 65 71 75 69 72 65 73    20 27 72 65 71 75 69 72 65 73 29 29 0a 20 20 28 | ert.(eq.requires.'requires))...( | 
| a980 | 61 73 73 65 72 74 20 28 65 71 20 64 6f 20 27 64    6f 29 29 0a 20 20 28 6c 65 74 20 28 28 62 6f 64 | assert.(eq.do.'do))...(let.((bod | 
| a9a0 | 79 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20    22 62 6f 64 79 22 29 29 0a 20 20 20 20 20 20 20 | yv.(make-symbol."body"))........ | 
| a9c0 | 20 28 62 69 6e 64 73 76 20 28 6d 61 6b 65 2d 73    79 6d 62 6f 6c 20 22 62 69 6e 64 73 22 29 29 0a | .(bindsv.(make-symbol."binds")). | 
| a9e0 | 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d 76    20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 73 | ........(streamv.(make-symbol."s | 
| aa00 | 74 72 65 61 6d 76 22 29 29 0a 20 20 20 20 20 20    20 20 28 72 65 71 75 69 72 65 76 20 28 6d 61 6b | treamv")).........(requirev.(mak | 
| aa20 | 65 2d 73 79 6d 62 6f 6c 20 22 70 72 6f 76 69 64    69 6e 67 22 29 29 29 0a 20 20 20 20 60 28 6c 65 | e-symbol."providing"))).....`(le | 
| aa40 | 74 2a 20 28 28 2c 73 74 72 65 61 6d 76 20 2c 73    74 72 65 61 6d 29 0a 20 20 20 20 20 20 20 20 20 | t*.((,streamv.,stream).......... | 
| aa60 | 20 20 20 28 2c 62 6f 64 79 76 20 28 71 75 6f 74    65 20 28 70 72 6f 67 6e 20 2c 40 62 6f 64 79 29 | ...(,bodyv.(quote.(progn.,@body) | 
| aa80 | 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    2c 62 69 6e 64 73 76 20 28 6c 69 73 74 0a 20 20 | )).............(,bindsv.(list... | 
| aaa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 2c 40 28 6c 6f 6f 70 20 66 6f 72 20 | ....................,@(loop.for. | 
| aac0 | 70 20 69 6e 20 62 69 6e 64 69 6e 67 73 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | p.in.bindings................... | 
| aae0 | 20 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .........collect................ | 
| ab00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69    66 20 28 61 6e 64 20 70 20 28 6c 69 73 74 70 20 | ..............(if.(and.p.(listp. | 
| ab20 | 70 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | p))............................. | 
| ab40 | 20 20 20 20 20 28 6c 69 73 74 20 27 6c 69 73 74    20 60 28 71 75 6f 74 65 20 2c 28 63 61 72 20 70 | .....(list.'list.`(quote.,(car.p | 
| ab60 | 29 29 20 28 63 61 64 72 20 70 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | )).(cadr.p)).................... | 
| ab80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    69 73 74 20 27 63 6f 6e 73 20 60 2c 70 20 6e 69 | ..............(list.'cons.`,p.ni | 
| aba0 | 6c 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 28 2c 72 65 71 75 69 72 65 76 20 28 71 | l))))).............(,requirev.(q | 
| abc0 | 75 6f 74 65 20 2c 72 65 71 75 69 72 65 6d 65 6e    74 73 29 29 29 0a 20 20 20 20 20 20 20 28 65 6c | uote.,requirements)))........(el | 
| abe0 | 6e 6f 64 65 2d 72 6c 65 2d 2d 73 65 6e 64 65 72    0a 20 20 20 20 20 20 20 20 2c 73 74 72 65 61 6d | node-rle--sender.........,stream | 
| ac00 | 76 20 2c 72 65 71 75 69 72 65 76 20 2c 62 69 6e    64 73 76 20 2c 62 6f 64 79 76 0a 20 20 20 20 20 | v.,requirev.,bindsv.,bodyv...... | 
| ac20 | 20 20 20 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 61    73 79 6e 63 2d 64 6f 2d 65 6e 64 2d 63 61 6c 6c | ...elnode-rle--async-do-end-call | 
| ac40 | 62 61 63 6b 29 29 29 29 0a 0a 28 64 65 66 6d 61    63 72 6f 20 77 69 74 68 2d 65 6c 6e 6f 64 65 2d | back))))..(defmacro.with-elnode- | 
| ac60 | 72 6c 65 2d 77 61 69 74 20 28 26 72 65 73 74 20    62 6f 64 79 29 0a 20 20 22 53 69 6d 70 6c 69 66 | rle-wait.(&rest.body)..."Simplif | 
| ac80 | 79 20 74 68 65 20 77 61 69 74 20 66 6f 72 20 52    4c 45 3b 20 66 6f 72 20 74 65 73 74 65 72 73 2e | y.the.wait.for.RLE;.for.testers. | 
| aca0 | 22 0a 20 20 60 28 75 6e 77 69 6e 64 2d 70 72 6f    74 65 63 74 0a 20 20 20 20 20 20 20 20 28 6c 65 | "...`(unwind-protect.........(le | 
| acc0 | 74 20 28 65 6e 64 65 64 29 0a 20 20 20 20 20 20    20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 | t.(ended)...........(progn...... | 
| ace0 | 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 0a 20    20 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 | .......,@body)...........(while. | 
| ad00 | 28 6e 6f 74 20 65 6e 64 65 64 29 20 28 73 69 74    2d 66 6f 72 20 31 29 29 29 0a 20 20 20 20 20 3b | (not.ended).(sit-for.1)))......; | 
| ad20 | 3b 20 46 49 58 4d 45 20 2d 20 63 61 6e 20 77 65    20 67 65 74 20 74 6f 20 74 68 65 20 6e 61 6d 65 | ;.FIXME.-.can.we.get.to.the.name | 
| ad40 | 20 6f 66 20 74 68 69 73 3f 0a 20 20 20 20 20 28    73 65 72 76 65 72 2d 65 76 61 6c 2d 61 74 20 22 | .of.this?......(server-eval-at." | 
| ad60 | 65 6c 6e 6f 64 65 2d 64 65 62 75 67 69 74 22 20    27 28 6b 69 6c 6c 2d 65 6d 61 63 73 29 29 29 29 | elnode-debugit".'(kill-emacs)))) | 
| ad80 | 0a 0a 28 65 72 74 2d 64 65 66 74 65 73 74 20 65    6c 6e 6f 64 65 2d 72 6c 65 2d 2d 6d 61 6b 65 2d | ..(ert-deftest.elnode-rle--make- | 
| ada0 | 73 65 72 76 65 72 20 28 29 0a 20 20 22 54 65 73    74 20 6d 61 6b 69 6e 67 20 61 6e 20 52 4c 45 20 | server.()..."Test.making.an.RLE. | 
| adc0 | 73 65 72 76 65 72 2e 0a 0a 44 6f 20 69 74 20 61    6c 6c 20 33 20 77 61 79 73 3a 20 64 69 72 65 63 | server...Do.it.all.3.ways:.direc | 
| ade0 | 74 6c 79 20 77 69 74 68 20 74 68 65 20 60 65 6c    6e 6f 64 65 2d 72 6c 65 2d 6d 61 6b 65 2d 73 65 | tly.with.the.`elnode-rle-make-se | 
| ae00 | 72 76 65 72 27 2c 0a 77 69 74 68 20 74 68 65 20    60 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 73 65 6e | rver',.with.the.`elnode-rle--sen | 
| ae20 | 64 65 72 27 20 66 75 6e 63 74 69 6f 6e 20 61 6e    64 20 66 69 6e 61 6c 6c 79 20 77 69 74 68 20 74 | der'.function.and.finally.with.t | 
| ae40 | 68 65 20 75 73 65 72 0a 66 61 63 69 6e 67 20 6d    61 63 72 6f 20 60 65 6c 6e 6f 64 65 2d 61 73 79 | he.user.facing.macro.`elnode-asy | 
| ae60 | 6e 63 2d 64 6f 27 2e 0a 0a 54 68 65 20 6f 75 74    70 75 74 20 66 72 6f 6d 20 74 68 65 20 52 4c 45 | nc-do'...The.output.from.the.RLE | 
| ae80 | 20 63 61 6c 6c 20 69 73 20 63 6f 6c 6c 65 63 74    65 64 20 69 6e 20 61 20 62 75 66 66 65 72 0a 61 | .call.is.collected.in.a.buffer.a | 
| aea0 | 6e 64 20 74 65 73 74 65 64 2e 22 0a 20 20 3a 65    78 70 65 63 74 65 64 2d 72 65 73 75 6c 74 20 3a | nd.tested."...:expected-result.: | 
| aec0 | 66 61 69 6c 65 64 0a 20 20 28 66 6c 65 74 20 28    28 6d 61 6b 65 2d 68 61 73 68 20 28 62 69 6e 64 | failed...(flet.((make-hash.(bind | 
| aee0 | 69 6e 67 73 29 0a 20 20 20 20 20 20 20 20 20 20    20 28 6c 65 74 20 28 28 68 20 28 6d 61 6b 65 2d | ings)............(let.((h.(make- | 
| af00 | 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73 74    20 27 65 71 75 61 6c 29 29 29 0a 20 20 20 20 20 | hash-table.:test.'equal)))...... | 
| af20 | 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f    72 20 62 20 69 6e 20 62 69 6e 64 69 6e 67 73 0a | ........(loop.for.b.in.bindings. | 
| af40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 64 6f 20 28 70 75 74 68 61 73 68 20 28 63 | ..................do.(puthash.(c | 
| af60 | 61 72 20 62 29 20 28 63 61 64 72 20 62 29 20 68    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ar.b).(cadr.b).h)).............. | 
| af80 | 68 29 29 29 0a 20 20 20 20 3b 3b 20 44 6f 20 69    74 20 52 41 57 0a 20 20 20 20 28 73 68 6f 75 6c | h))).....;;.Do.it.RAW.....(shoul | 
| afa0 | 64 0a 20 20 20 20 20 28 65 71 75 61 6c 0a 20 20    20 20 20 20 22 68 65 6c 6c 6f 22 0a 20 20 20 20 | d......(equal......."hello"..... | 
| afc0 | 20 20 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66    66 65 72 0a 20 20 20 20 20 20 20 20 28 6c 65 74 | ..(with-temp-buffer.........(let | 
| afe0 | 2a 20 28 28 63 68 69 6c 64 2d 70 72 6f 63 20 28    65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 6d 61 6b 65 | *.((child-proc.(elnode-rle--make | 
| b000 | 2d 73 65 72 76 65 72 20 27 65 6c 6e 6f 64 65 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | -server.'elnode))............... | 
| b020 | 20 28 64 61 65 6d 6f 6e 2d 68 61 6e 64 6c 65 72    20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 63 68 | .(daemon-handler.(process-get.ch | 
| b040 | 69 6c 64 2d 70 72 6f 63 20 3a 64 61 65 6d 6f 6e    68 61 6e 64 6c 65 29 29 0a 20 20 20 20 20 20 20 | ild-proc.:daemonhandle))........ | 
| b060 | 20 20 20 20 20 20 20 20 28 63 6f 6c 6c 65 63 74    2d 62 75 66 20 28 63 75 72 72 65 6e 74 2d 62 75 | ........(collect-buf.(current-bu | 
| b080 | 66 66 65 72 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 28 77 69 74 68 2d 65 6c 6e 6f 64 65 2d 72 | ffer)))...........(with-elnode-r | 
| b0a0 | 6c 65 2d 77 61 69 74 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 0a 20 | le-wait...............(funcall.. | 
| b0c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70    72 6f 63 65 73 73 2d 67 65 74 20 63 68 69 6c 64 | ..............(process-get.child | 
| b0e0 | 2d 70 72 6f 63 20 3a 65 78 65 63 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b | -proc.:exec)................(mak | 
| b100 | 65 2d 68 61 73 68 20 27 28 28 22 62 69 6e 64 69    6e 67 73 22 20 22 28 28 61 20 5c 22 68 65 6c 6c | e-hash.'(("bindings"."((a.\"hell | 
| b120 | 6f 5c 22 29 29 22 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | o\"))")......................... | 
| b140 | 20 20 20 20 28 22 6c 69 73 70 22 20 22 28 70 72    69 6e 63 20 5c 22 68 65 6c 6c 6f 5c 22 29 22 29 | ....("lisp"."(princ.\"hello\")") | 
| b160 | 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 | ))................(current-buffe | 
| b180 | 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6c 61 6d 62 64 61 20 28 68 64 72 29 20 | r)................(lambda.(hdr). | 
| b1a0 | 3b 20 74 68 65 20 65 6e 64 20 70 72 6f 63 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ;.the.end.proc.................. | 
| b1c0 | 28 73 65 74 71 20 65 6e 64 65 64 20 74 29 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 28 62 75 66 | (setq.ended.t))))...........(buf | 
| b1e0 | 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20 28 70    6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e 74 | fer-substring.(point-min).(point | 
| b200 | 2d 6d 61 78 29 29 29 29 29 29 0a 20 20 20 20 3b    3b 20 44 6f 20 69 74 20 76 69 61 20 74 68 65 20 | -max)))))).....;;.Do.it.via.the. | 
| b220 | 73 65 6e 64 65 72 20 66 75 6e 63 0a 20 20 20 20    28 73 68 6f 75 6c 64 0a 20 20 20 20 20 28 65 71 | sender.func.....(should......(eq | 
| b240 | 75 61 6c 0a 20 20 20 20 20 20 22 34 30 22 0a 20    20 20 20 20 20 28 77 69 74 68 2d 74 65 6d 70 2d | ual......."40".......(with-temp- | 
| b260 | 62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 28    77 69 74 68 2d 65 6c 6e 6f 64 65 2d 72 6c 65 2d | buffer.........(with-elnode-rle- | 
| b280 | 77 61 69 74 0a 20 20 20 20 20 20 20 20 20 20 20    20 28 6c 65 74 20 28 28 65 6c 6e 6f 64 65 2d 72 | wait.............(let.((elnode-r | 
| b2a0 | 6c 65 2d 2d 73 65 72 76 65 72 73 20 28 6d 61 6b    65 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 | le--servers.(make-hash-table.:te | 
| b2c0 | 73 74 20 27 65 71 75 61 6c 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f | st.'equal)))...............(elno | 
| b2e0 | 64 65 2d 72 6c 65 2d 2d 73 65 6e 64 65 72 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 | de-rle--sender................(c | 
| b300 | 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 | urrent-buffer)................'( | 
| b320 | 65 6c 6e 6f 64 65 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 27 28 28 61 20 31 30 29 20 | elnode)................'((a.10). | 
| b340 | 28 62 20 32 30 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 27 28 6c 65 74 20 28 28 63 | (b.20))................'(let.((c | 
| b360 | 20 33 30 29 29 28 70 72 69 6e 63 20 28 2b 20 63    20 61 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | .30))(princ.(+.c.a)))........... | 
| b380 | 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 65    61 64 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 | .....(lambda.(header)........... | 
| b3a0 | 20 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20    22 65 6c 6e 6f 64 65 2d 72 6c 65 3a 20 61 6c 6c | .......(message."elnode-rle:.all | 
| b3c0 | 20 64 6f 6e 65 21 22 29 28 73 65 74 71 20 65 6e    64 65 64 20 74 29 29 29 29 29 0a 20 20 20 20 20 | .done!")(setq.ended.t)))))...... | 
| b3e0 | 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 73 74    72 69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 | ...(buffer-substring.(point-min) | 
| b400 | 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 29 29    0a 20 20 20 20 3b 3b 20 44 6f 20 69 74 20 77 69 | .(point-max))))).....;;.Do.it.wi | 
| b420 | 74 68 20 74 68 65 20 6d 61 63 72 6f 0a 20 20 20    20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 28 65 | th.the.macro.....(should......(e | 
| b440 | 71 75 61 6c 0a 20 20 20 20 20 20 22 68 65 6c 6c    6f 22 0a 20 20 20 20 20 20 28 77 69 74 68 2d 74 | qual......."hello".......(with-t | 
| b460 | 65 6d 70 2d 62 75 66 66 65 72 0a 20 20 20 20 20    20 20 20 28 77 69 74 68 2d 65 6c 6e 6f 64 65 2d | emp-buffer.........(with-elnode- | 
| b480 | 72 6c 65 2d 77 61 69 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 6c 65 74 20 28 28 65 6c 6e 6f | rle-wait.............(let.((elno | 
| b4a0 | 64 65 2d 72 6c 65 2d 2d 73 65 72 76 65 72 73 20    28 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 | de-rle--servers.(make-hash-table | 
| b4c0 | 20 3a 74 65 73 74 20 27 65 71 75 61 6c 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .:test.'equal))................. | 
| b4e0 | 20 20 28 65 6c 6e 6f 64 65 2d 72 6c 65 2d 2d 61    73 79 6e 63 2d 64 6f 2d 65 6e 64 2d 63 61 6c 6c | ..(elnode-rle--async-do-end-call | 
| b500 | 62 61 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 | back....................(lambda. | 
| b520 | 28 68 65 61 64 65 72 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d | (header)......................(m | 
| b540 | 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 65 2d 72    6c 65 3a 20 69 6e 20 74 68 65 20 64 79 6e 20 62 | essage."elnode-rle:.in.the.dyn.b | 
| b560 | 6f 75 6e 64 20 63 61 6c 6c 62 61 63 6b 21 22 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ound.callback!")................ | 
| b580 | 20 20 20 20 20 20 28 73 65 74 71 20 65 6e 64 65    64 20 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 | ......(setq.ended.t))))......... | 
| b5a0 | 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 73    79 6e 63 2d 64 6f 0a 20 20 20 20 20 20 20 20 20 | ......(elnode-async-do.......... | 
| b5c0 | 20 20 20 20 20 20 28 63 75 72 72 65 6e 74 2d 62    75 66 66 65 72 29 0a 20 20 20 20 20 20 20 20 20 | ......(current-buffer).......... | 
| b5e0 | 20 20 20 20 20 20 72 65 71 75 69 72 65 73 20 28    65 6c 6e 6f 64 65 20 65 6e 6f 64 65 2d 72 6c 65 | ......requires.(elnode.enode-rle | 
| b600 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 77 69 74 68 2d 65 6e 76 69 72 6f 6e 6d 65 6e | )................with-environmen | 
| b620 | 74 20 28 28 61 20 31 30 29 28 62 20 32 30 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | t.((a.10)(b.20))................ | 
| b640 | 64 6f 20 28 70 72 69 6e 63 20 22 68 65 6c 6c 6f    22 29 29 29 29 0a 20 20 20 20 20 20 20 20 28 62 | do.(princ."hello")))).........(b | 
| b660 | 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20    28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 | uffer-substring.(point-min).(poi | 
| b680 | 6e 74 2d 6d 61 78 29 29 29 29 29 29 29 0a 0a 28    70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d | nt-max)))))))..(provide.'elnode- | 
| b6a0 | 72 6c 65 29 0a 0a 3b 3b 20 65 6c 6e 6f 64 65 2d    72 6c 65 20 65 6e 64 73 20 68 65 72 65 0a 00 00 | rle)..;;.elnode-rle.ends.here... | 
| b6c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b6e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b740 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b7a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b7c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b7e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b800 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 74 65 73 74 | elnode-20190702.1509/elnode-test | 
| b820 | 73 75 70 70 6f 72 74 2e 65 6c 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | support.el...................... | 
| b840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b860 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| b880 | 30 30 30 34 35 30 34 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 36 34 36 37 00 20 30 00 00 00 | 0004504.00000000000.016467..0... | 
| b8a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b8c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b8e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b900 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| b920 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| b940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b9a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b9c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| b9e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| ba00 | 3b 3b 3b 20 74 65 73 74 20 73 75 70 70 6f 72 74    20 66 75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 65 | ;;;.test.support.functions.for.e | 
| ba20 | 6c 6e 6f 64 65 0a 0a 28 72 65 71 75 69 72 65 20    27 6e 6f 66 6c 65 74 29 0a 0a 28 64 65 66 6d 61 | lnode..(require.'noflet)..(defma | 
| ba40 | 63 72 6f 20 65 6c 6e 6f 64 65 2d 73 69 6e 6b 20    28 68 74 74 70 63 6f 6e 20 26 72 65 73 74 20 62 | cro.elnode-sink.(httpcon.&rest.b | 
| ba60 | 6f 64 79 29 0a 20 20 22 53 69 6e 6b 20 74 68 65    20 48 54 54 50 20 72 65 73 70 6f 6e 73 65 20 66 | ody)..."Sink.the.HTTP.response.f | 
| ba80 | 72 6f 6d 20 42 4f 44 59 2e 0a 0a 4f 75 74 70 75    74 20 74 6f 20 60 65 6c 6e 6f 64 65 2d 68 74 74 | rom.BODY...Output.to.`elnode-htt | 
| baa0 | 70 2d 73 74 61 72 74 27 2c 20 60 65 6c 6e 6f 64    65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 | p-start',.`elnode-http-send-stri | 
| bac0 | 6e 67 27 20 61 6e 64 0a 60 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 72 65 74 75 72 6e 27 20 69 73 20 | ng'.and.`elnode-http-return'.is. | 
| bae0 | 63 6f 6c 6c 65 63 74 65 64 20 61 6e 64 20 73 74    6f 72 65 64 20 69 6e 74 65 72 6e 61 6c 6c 6c 79 | collected.and.stored.internallly | 
| bb00 | 2e 0a 0a 57 68 65 6e 20 60 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 72 65 74 75 72 6e 27 20 69 73 20 | ...When.`elnode-http-return'.is. | 
| bb20 | 63 61 6c 6c 65 64 20 74 68 65 20 66 6f 72 6d 20    65 6e 64 73 20 77 69 74 68 20 61 20 73 74 72 69 | called.the.form.ends.with.a.stri | 
| bb40 | 6e 67 0a 72 65 73 75 6c 74 20 6f 66 20 77 68 61    74 65 76 65 72 20 77 61 73 20 73 65 6e 74 20 61 | ng.result.of.whatever.was.sent.a | 
| bb60 | 73 20 74 68 65 20 72 65 73 70 6f 6e 73 65 2e 20    20 54 68 65 20 73 74 72 69 6e 67 20 69 73 0a 70 | s.the.response...The.string.is.p | 
| bb80 | 72 6f 70 65 72 74 69 7a 65 64 20 77 69 74 68 20    74 68 65 20 68 65 61 64 65 72 20 73 65 6e 74 20 | ropertized.with.the.header.sent. | 
| bba0 | 74 6f 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d    73 74 61 72 74 27 2e 22 0a 20 20 28 64 65 63 6c | to.`elnode-http-start'."...(decl | 
| bbc0 | 61 72 65 20 28 69 6e 64 65 6e 74 20 31 29 28 64    65 62 75 67 20 28 73 65 78 70 20 26 72 65 73 74 | are.(indent.1)(debug.(sexp.&rest | 
| bbe0 | 20 66 6f 72 6d 29 29 29 0a 20 20 60 28 6c 65 74    20 28 72 65 73 20 72 65 73 68 64 72 29 0a 20 20 | .form)))...`(let.(res.reshdr)... | 
| bc00 | 20 20 20 28 63 61 74 63 68 20 3a 65 6c 6e 6f 64    65 2d 73 69 6e 6b 2d 72 65 74 0a 20 20 20 20 20 | ...(catch.:elnode-sink-ret...... | 
| bc20 | 20 20 28 6e 6f 66 6c 65 74 20 28 28 65 6c 6e 6f    64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 28 68 | ..(noflet.((elnode-http-start.(h | 
| bc40 | 74 74 70 63 6f 6e 20 73 74 61 74 75 73 20 26 72    65 73 74 20 68 65 61 64 65 72 29 0a 20 20 20 20 | ttpcon.status.&rest.header)..... | 
| bc60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73    65 74 71 20 72 65 73 68 64 72 20 0a 20 20 20 20 | ..............(setq.reshdr...... | 
| bc80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 6b 76 61 6c 69 73 74 2d 3e 70 6c | ....................(kvalist->pl | 
| bca0 | 69 73 74 20 68 65 61 64 65 72 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | ist.header))).................(e | 
| bcc0 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65    72 2d 73 65 74 20 28 68 74 74 70 63 6f 6e 20 68 | lnode-http-header-set.(httpcon.h | 
| bce0 | 65 61 64 65 72 20 26 6f 70 74 69 6f 6e 61 6c 20    76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20 | eader.&optional.value).......... | 
| bd00 | 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 72    65 73 68 64 72 0a 20 20 20 20 20 20 20 20 20 20 | .........(setq.reshdr........... | 
| bd20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70    6c 69 73 74 2d 70 75 74 20 28 69 6e 74 65 72 6e | ..............(plist-put.(intern | 
| bd40 | 20 28 63 6f 6e 63 61 74 20 22 3a 22 20 72 65 73    68 64 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 | .(concat.":".reshdr))........... | 
| bd60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 68 65 61 64 65 72 20 | .........................header. | 
| bd80 | 76 61 6c 75 65 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | value))).................(elnode | 
| bda0 | 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e    67 20 28 68 74 74 70 63 6f 6e 20 64 61 74 61 29 | -http-send-string.(httpcon.data) | 
| bdc0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 73 65 74 71 20 72 65 73 20 28 61 70 | ...................(setq.res.(ap | 
| bde0 | 70 6c 79 20 27 70 72 6f 70 65 72 74 69 7a 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ply.'propertize................. | 
| be00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 63 6f 6e 63 61 74 20 72 65 73 20 64 | ...................(concat.res.d | 
| be20 | 61 74 61 29 20 72 65 73 68 64 72 29 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | ata).reshdr))).................( | 
| be40 | 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75    72 6e 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 | elnode-http-return.(httpcon.&opt | 
| be60 | 69 6f 6e 61 6c 20 64 61 74 61 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 | ional.data)...................(w | 
| be80 | 68 65 6e 20 64 61 74 61 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65 | hen.data.....................(se | 
| bea0 | 74 71 20 72 65 73 20 28 61 70 70 6c 79 20 27 70    72 6f 70 65 72 74 69 7a 65 0a 20 20 20 20 20 20 | tq.res.(apply.'propertize....... | 
| bec0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | ...............................( | 
| bee0 | 63 6f 6e 63 61 74 20 72 65 73 20 64 61 74 61 29    20 72 65 73 68 64 72 29 29 29 0a 20 20 20 20 20 | concat.res.data).reshdr)))...... | 
| bf00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 68    72 6f 77 20 3a 65 6c 6e 6f 64 65 2d 73 69 6e 6b | .............(throw.:elnode-sink | 
| bf20 | 2d 72 65 74 20 3a 65 6e 64 29 29 29 0a 20 20 20    20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 0a 20 | -ret.:end)))..........,@body)).. | 
| bf40 | 20 20 20 20 72 65 73 29 29 0a 0a 28 64 65 66 6d    61 63 72 6f 20 65 6c 6e 6f 64 65 2d 66 61 6b 65 | ....res))..(defmacro.elnode-fake | 
| bf60 | 2d 70 61 72 61 6d 73 20 28 68 74 74 70 63 6f 6e    20 70 61 72 61 6d 73 2d 6c 69 73 74 20 26 72 65 | -params.(httpcon.params-list.&re | 
| bf80 | 73 74 20 62 6f 64 79 29 0a 20 20 22 46 61 6b 65    20 74 68 65 20 50 41 52 41 4d 2d 42 49 4e 44 49 | st.body)..."Fake.the.PARAM-BINDI | 
| bfa0 | 4e 47 53 20 61 6e 64 20 65 76 61 6c 75 61 74 65    20 42 4f 44 59 2e 0a 0a 50 41 52 41 4d 2d 42 49 | NGS.and.evaluate.BODY...PARAM-BI | 
| bfc0 | 4e 44 49 4e 47 53 20 69 73 20 61 6e 20 41 4c 49    53 54 20 77 69 74 68 20 73 74 72 69 6e 67 20 63 | NDINGS.is.an.ALIST.with.string.c | 
| bfe0 | 61 72 73 20 66 6f 72 20 70 61 72 61 6d 65 74 65    72 20 6e 61 6d 65 73 0a 61 6e 64 20 73 74 72 69 | ars.for.parameter.names.and.stri | 
| c000 | 6e 67 20 63 64 72 73 20 66 6f 72 20 76 61 6c 75    65 73 2e 20 20 41 20 63 64 72 20 6f 66 20 61 20 | ng.cdrs.for.values...A.cdr.of.a. | 
| c020 | 6c 69 73 74 20 63 61 6e 20 62 65 20 75 73 65 64    20 74 6f 0a 70 72 6f 76 69 64 65 20 61 20 73 74 | list.can.be.used.to.provide.a.st | 
| c040 | 72 69 6e 67 20 76 61 6c 75 65 20 77 69 74 68 20    61 20 70 72 6f 70 65 72 74 79 20 6c 69 73 74 2c | ring.value.with.a.property.list, | 
| c060 | 20 66 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 20    20 27 28 28 5c 22 70 61 72 61 6d 31 5c 22 20 2e | .for.example:....'((\"param1\".. | 
| c080 | 20 5c 22 76 61 6c 75 65 5c 22 20 29 0a 20 20 20    20 28 5c 22 70 61 72 61 6d 32 5c 22 20 5c 22 76 | .\"value\".).....(\"param2\".\"v | 
| c0a0 | 61 6c 75 65 5c 22 20 3a 65 6c 6e 6f 64 65 2d 66    69 6c 65 6e 61 6d 65 20 5c 22 73 6f 6d 65 66 69 | alue\".:elnode-filename.\"somefi | 
| c0c0 | 6c 65 2e 74 78 74 5c 22 29 29 0a 0a 4e 6f 74 65    20 74 68 65 20 66 69 72 73 74 20 70 61 72 61 6d | le.txt\"))..Note.the.first.param | 
| c0e0 | 65 74 65 72 20 69 73 20 61 6e 20 69 6d 70 72 6f    70 65 72 20 6c 69 73 74 2e 0a 0a 50 41 52 41 4d | eter.is.an.improper.list...PARAM | 
| c100 | 2d 42 49 4e 44 49 4e 47 53 20 73 68 6f 75 6c 64    20 62 65 20 71 75 6f 74 65 64 2e 22 0a 20 20 28 | -BINDINGS.should.be.quoted."...( | 
| c120 | 64 65 63 6c 61 72 65 20 28 69 6e 64 65 6e 74 20    32 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 64 | declare.(indent.2)............(d | 
| c140 | 65 62 75 67 20 28 73 65 78 70 20 73 65 78 70 20    26 72 65 73 74 20 66 6f 72 6d 29 29 29 0a 20 20 | ebug.(sexp.sexp.&rest.form)))... | 
| c160 | 60 28 6c 65 74 20 28 28 2c 68 74 74 70 63 6f 6e    20 2c 70 61 72 61 6d 73 2d 6c 69 73 74 29 29 0a | `(let.((,httpcon.,params-list)). | 
| c180 | 20 20 20 20 20 28 6e 6f 66 6c 65 74 20 28 28 65    6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d | .....(noflet.((elnode-http-param | 
| c1a0 | 20 28 68 74 74 70 63 20 70 61 72 61 6d 2d 6e 61    6d 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | .(httpc.param-name)............. | 
| c1c0 | 20 20 20 20 28 69 66 20 28 65 71 20 68 74 74 70    63 20 2c 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 | ....(if.(eq.httpc.,httpcon)..... | 
| c1e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 6c 65 74 20 28 28 76 20 28 6b 76 61 20 70 61 | ................(let.((v.(kva.pa | 
| c200 | 72 61 6d 2d 6e 61 6d 65 20 2c 68 74 74 70 63 6f    6e 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | ram-name.,httpcon)))............ | 
| c220 | 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........(cond................ | 
| c240 | 20 20 20 20 20 20 20 20 20 28 28 6c 69 73 74 70    20 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | .........((listp.v)............. | 
| c260 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 70    70 6c 79 20 27 70 72 6f 70 65 72 74 69 7a 65 20 | .............(apply.'propertize. | 
| c280 | 28 63 61 72 20 76 29 20 28 63 64 72 20 76 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (car.v).(cdr.v)))............... | 
| c2a0 | 20 20 20 20 20 20 20 20 20 20 28 74 20 76 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..........(t.v)))............... | 
| c2c0 | 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 74    68 69 73 2d 66 6e 20 68 74 74 70 63 6f 6e 20 70 | ......(funcall.this-fn.httpcon.p | 
| c2e0 | 61 72 61 6d 2d 6e 61 6d 65 29 29 29 29 0a 20 20    20 20 20 20 20 2c 40 62 6f 64 79 29 29 29 0a 0a | aram-name))))........,@body))).. | 
| c300 | 0a 28 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64    65 2d 74 65 73 74 73 75 70 70 6f 72 74 29 0a 0a | .(provide.'elnode-testsupport).. | 
| c320 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 74 65 73 74 73    75 70 70 6f 72 74 2e 65 6c 20 65 6e 64 73 20 68 | ;;;.elnode-testsupport.el.ends.h | 
| c340 | 65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ere............................. | 
| c360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c3a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c3c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c3e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c400 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2d 77 69 6b 69 | elnode-20190702.1509/elnode-wiki | 
| c420 | 2e 65 6c 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .el............................. | 
| c440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c460 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| c480 | 30 30 31 36 35 36 34 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 35 30 32 37 00 20 30 00 00 00 | 0016564.00000000000.015027..0... | 
| c4a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c4c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c4e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c500 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| c520 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| c540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c5a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c5c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c5e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| c600 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 2e    65 6c 20 2d 2d 2d 20 61 20 77 69 6b 69 20 77 69 | ;;;.elnode-wiki.el.---.a.wiki.wi | 
| c620 | 74 68 20 45 6c 6e 6f 64 65 20 20 2d 2a 2d 20 6c    65 78 69 63 61 6c 2d 62 69 6e 64 69 6e 67 3a 20 | th.Elnode..-*-.lexical-binding:. | 
| c640 | 74 20 2d 2a 2d 0a 0a 3b 3b 20 43 6f 70 79 72 69    67 68 74 20 28 43 29 20 32 30 31 30 2c 20 32 30 | t.-*-..;;.Copyright.(C).2010,.20 | 
| c660 | 31 31 2c 20 32 30 31 32 20 20 4e 69 63 20 46 65    72 72 69 65 72 0a 0a 3b 3b 20 41 75 74 68 6f 72 | 11,.2012..Nic.Ferrier..;;.Author | 
| c680 | 3a 20 4e 69 63 20 46 65 72 72 69 65 72 20 3c 6e    66 65 72 72 69 65 72 40 66 65 72 72 69 65 72 2e | :.Nic.Ferrier.<nferrier@ferrier. | 
| c6a0 | 6d 65 2e 75 6b 3e 0a 3b 3b 20 4d 61 69 6e 74 61    69 6e 65 72 3a 20 4e 69 63 20 46 65 72 72 69 65 | me.uk>.;;.Maintainer:.Nic.Ferrie | 
| c6c0 | 72 20 3c 6e 66 65 72 72 69 65 72 40 66 65 72 72    69 65 72 2e 6d 65 2e 75 6b 3e 0a 3b 3b 20 43 72 | r.<nferrier@ferrier.me.uk>.;;.Cr | 
| c6e0 | 65 61 74 65 64 3a 20 35 74 68 20 4f 63 74 6f 62    65 72 20 32 30 31 30 0a 3b 3b 20 4b 65 79 77 6f | eated:.5th.October.2010.;;.Keywo | 
| c700 | 72 64 73 3a 20 6c 69 73 70 2c 20 68 74 74 70 2c    20 68 79 70 65 72 6d 65 64 69 61 0a 0a 3b 3b 20 | rds:.lisp,.http,.hypermedia..;;. | 
| c720 | 54 68 69 73 20 66 69 6c 65 20 69 73 20 4e 4f 54    20 70 61 72 74 20 6f 66 20 47 4e 55 20 45 6d 61 | This.file.is.NOT.part.of.GNU.Ema | 
| c740 | 63 73 2e 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f    67 72 61 6d 20 69 73 20 66 72 65 65 20 73 6f 66 | cs...;;.This.program.is.free.sof | 
| c760 | 74 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72    65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 | tware;.you.can.redistribute.it.a | 
| c780 | 6e 64 2f 6f 72 20 6d 6f 64 69 66 79 0a 3b 3b 20    69 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 | nd/or.modify.;;.it.under.the.ter | 
| c7a0 | 6d 73 20 6f 66 20 74 68 65 20 47 4e 55 20 47 65    6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 | ms.of.the.GNU.General.Public.Lic | 
| c7c0 | 65 6e 73 65 20 61 73 20 70 75 62 6c 69 73 68 65    64 20 62 79 0a 3b 3b 20 74 68 65 20 46 72 65 65 | ense.as.published.by.;;.the.Free | 
| c7e0 | 20 53 6f 66 74 77 61 72 65 20 46 6f 75 6e 64 61    74 69 6f 6e 2c 20 65 69 74 68 65 72 20 76 65 72 | .Software.Foundation,.either.ver | 
| c800 | 73 69 6f 6e 20 33 20 6f 66 20 74 68 65 20 4c 69    63 65 6e 73 65 2c 20 6f 72 0a 3b 3b 20 28 61 74 | sion.3.of.the.License,.or.;;.(at | 
| c820 | 20 79 6f 75 72 20 6f 70 74 69 6f 6e 29 20 61 6e    79 20 6c 61 74 65 72 20 76 65 72 73 69 6f 6e 2e | .your.option).any.later.version. | 
| c840 | 0a 0a 3b 3b 20 54 68 69 73 20 70 72 6f 67 72 61    6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 | ..;;.This.program.is.distributed | 
| c860 | 20 69 6e 20 74 68 65 20 68 6f 70 65 20 74 68 61    74 20 69 74 20 77 69 6c 6c 20 62 65 20 75 73 65 | .in.the.hope.that.it.will.be.use | 
| c880 | 66 75 6c 2c 0a 3b 3b 20 62 75 74 20 57 49 54 48    4f 55 54 20 41 4e 59 20 57 41 52 52 41 4e 54 59 | ful,.;;.but.WITHOUT.ANY.WARRANTY | 
| c8a0 | 3b 20 77 69 74 68 6f 75 74 20 65 76 65 6e 20 74    68 65 20 69 6d 70 6c 69 65 64 20 77 61 72 72 61 | ;.without.even.the.implied.warra | 
| c8c0 | 6e 74 79 20 6f 66 0a 3b 3b 20 4d 45 52 43 48 41    4e 54 41 42 49 4c 49 54 59 20 6f 72 20 46 49 54 | nty.of.;;.MERCHANTABILITY.or.FIT | 
| c8e0 | 4e 45 53 53 20 46 4f 52 20 41 20 50 41 52 54 49    43 55 4c 41 52 20 50 55 52 50 4f 53 45 2e 20 20 | NESS.FOR.A.PARTICULAR.PURPOSE... | 
| c900 | 53 65 65 20 74 68 65 0a 3b 3b 20 47 4e 55 20 47    65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 | See.the.;;.GNU.General.Public.Li | 
| c920 | 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65 20 64    65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 59 6f 75 20 | cense.for.more.details...;;.You. | 
| c940 | 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65    69 76 65 64 20 61 20 63 6f 70 79 20 6f 66 20 74 | should.have.received.a.copy.of.t | 
| c960 | 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50    75 62 6c 69 63 20 4c 69 63 65 6e 73 65 0a 3b 3b | he.GNU.General.Public.License.;; | 
| c980 | 20 61 6c 6f 6e 67 20 77 69 74 68 20 74 68 69 73    20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 6e 6f | .along.with.this.program...If.no | 
| c9a0 | 74 2c 20 73 65 65 20 3c 68 74 74 70 3a 2f 2f 77    77 77 2e 67 6e 75 2e 6f 72 67 2f 6c 69 63 65 6e | t,.see.<http://www.gnu.org/licen | 
| c9c0 | 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20 43 6f 6d 6d    65 6e 74 61 72 79 3a 0a 3b 3b 0a 3b 3b 20 54 68 | ses/>...;;;.Commentary:.;;.;;.Th | 
| c9e0 | 69 73 20 69 73 20 61 20 57 69 6b 69 20 45 6e 67    69 6e 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 77 | is.is.a.Wiki.Engine.completely.w | 
| ca00 | 72 69 74 74 65 6e 20 69 6e 20 45 6d 61 63 73 4c    69 73 70 2c 20 75 73 69 6e 67 20 45 6c 6e 6f 64 | ritten.in.EmacsLisp,.using.Elnod | 
| ca20 | 65 0a 3b 3b 20 61 73 20 61 20 73 65 72 76 65 72    2e 0a 3b 3b 0a 3b 3b 3b 20 53 6f 75 72 63 65 20 | e.;;.as.a.server..;;.;;;.Source. | 
| ca40 | 63 6f 64 65 0a 3b 3b 0a 3b 3b 20 65 6c 6e 6f 64    65 27 73 20 63 6f 64 65 20 63 61 6e 20 62 65 20 | code.;;.;;.elnode's.code.can.be. | 
| ca60 | 66 6f 75 6e 64 20 68 65 72 65 3a 0a 3b 3b 20 20    20 68 74 74 70 3a 2f 2f 67 69 74 68 75 62 2e 63 | found.here:.;;...http://github.c | 
| ca80 | 6f 6d 2f 6e 69 63 66 65 72 72 69 65 72 2f 65 6c    6e 6f 64 65 0a 0a 3b 3b 3b 20 53 74 79 6c 65 20 | om/nicferrier/elnode..;;;.Style. | 
| caa0 | 6e 6f 74 65 0a 3b 3b 0a 3b 3b 20 54 68 69 73 20    63 6f 64 65 73 20 75 73 65 73 20 74 68 65 20 45 | note.;;.;;.This.codes.uses.the.E | 
| cac0 | 6d 61 63 73 20 73 74 79 6c 65 20 6f 66 3a 0a 3b    3b 0a 3b 3b 20 20 20 20 65 6c 6e 6f 64 65 2d 77 | macs.style.of:.;;.;;....elnode-w | 
| cae0 | 69 6b 69 2d 2d 70 72 69 76 61 74 65 2d 66 75 6e    63 74 69 6f 6e 0a 3b 3b 0a 3b 3b 20 66 6f 72 20 | iki--private-function.;;.;;.for. | 
| cb00 | 70 72 69 76 61 74 65 20 66 75 6e 63 74 69 6f 6e    73 2e 0a 0a 0a 3b 3b 3b 20 43 6f 64 65 3a 0a 0a | private.functions....;;;.Code:.. | 
| cb20 | 28 72 65 71 75 69 72 65 20 27 65 6c 6e 6f 64 65    29 0a 28 72 65 71 75 69 72 65 20 27 64 62 29 0a | (require.'elnode).(require.'db). | 
| cb40 | 28 65 76 61 6c 2d 77 68 65 6e 2d 63 6f 6d 70 69    6c 65 20 27 66 61 6b 69 72 29 0a 28 72 65 71 75 | (eval-when-compile.'fakir).(requ | 
| cb60 | 69 72 65 20 27 63 72 65 6f 6c 65 20 6e 69 6c 20    27 74 29 0a 3b 3b 28 72 65 71 75 69 72 65 20 27 | ire.'creole.nil.'t).;;(require.' | 
| cb80 | 76 63 29 0a 0a 28 64 65 66 67 72 6f 75 70 20 65    6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 | vc)..(defgroup.elnode-wikiserver | 
| cba0 | 20 6e 69 6c 0a 20 20 22 41 20 57 69 6b 69 20 73    65 72 76 65 72 20 77 72 69 74 74 65 6e 20 77 69 | .nil..."A.Wiki.server.written.wi | 
| cbc0 | 74 68 20 45 6c 6e 6f 64 65 2e 22 0a 20 20 3a 67    72 6f 75 70 20 27 65 6c 6e 6f 64 65 29 0a 0a 3b | th.Elnode."...:group.'elnode)..; | 
| cbe0 | 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64    65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 77 | ;;###autoload.(defconst.elnode-w | 
| cc00 | 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f    6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 28 65 78 | ikiserver-wikiroot-default...(ex | 
| cc20 | 70 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 28    63 6f 6e 63 61 74 20 65 6c 6e 6f 64 65 2d 63 6f | pand-file-name.(concat.elnode-co | 
| cc40 | 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 20 22    77 69 6b 69 2f 22 29 29 0a 20 20 22 54 68 65 20 | nfig-directory."wiki/"))..."The. | 
| cc60 | 64 65 66 61 75 6c 74 20 6c 6f 63 61 74 69 6f 6e    20 6f 66 20 74 68 65 20 77 69 6b 69 20 72 6f 6f | default.location.of.the.wiki.roo | 
| cc80 | 74 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 64    20 74 6f 20 64 65 74 65 63 74 20 77 68 65 74 68 | t...This.is.used.to.detect.wheth | 
| cca0 | 65 72 20 65 6c 6e 6f 64 65 20 6e 65 65 64 73 20    74 6f 20 63 72 65 61 74 65 20 74 68 69 73 0a 64 | er.elnode.needs.to.create.this.d | 
| ccc0 | 69 72 65 63 74 6f 72 79 20 6f 72 20 6e 6f 74 2e    22 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f | irectory.or.not.")..;;;###autolo | 
| cce0 | 61 64 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c    6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d | ad.(defcustom.elnode-wikiserver- | 
| cd00 | 77 69 6b 69 72 6f 6f 74 0a 20 20 65 6c 6e 6f 64    65 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b | wikiroot...elnode-wikiserver-wik | 
| cd20 | 69 72 6f 6f 74 2d 64 65 66 61 75 6c 74 0a 20 20    22 54 68 65 20 72 6f 6f 74 20 66 6f 72 20 74 68 | iroot-default..."The.root.for.th | 
| cd40 | 65 20 45 6c 6e 6f 64 65 20 77 69 6b 69 20 66 69    6c 65 73 2e 0a 0a 54 68 69 73 20 69 73 20 77 68 | e.Elnode.wiki.files...This.is.wh | 
| cd60 | 65 72 65 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73    65 72 76 65 72 20 73 65 72 76 65 73 20 77 69 6b | ere.elnode-wikiserver.serves.wik | 
| cd80 | 69 20 66 69 6c 65 73 20 66 72 6f 6d 2e 22 0a 20    20 3a 74 79 70 65 20 27 28 64 69 72 65 63 74 6f | i.files.from."...:type.'(directo | 
| cda0 | 72 79 29 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c    6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 29 | ry)...:group.'elnode-wikiserver) | 
| cdc0 | 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e    6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d 62 | ..(defcustom.elnode-wikiserver-b | 
| cde0 | 6f 64 79 2d 68 65 61 64 65 72 0a 20 20 22 3c 64    69 76 20 69 64 3d 27 74 6f 70 27 3e 3c 2f 64 69 | ody-header..."<div.id='top'></di | 
| ce00 | 76 3e 22 0a 20 20 22 48 54 4d 4c 20 42 4f 44 59    20 70 72 65 61 6d 61 62 6c 65 20 6f 66 20 61 20 | v>"..."HTML.BODY.preamable.of.a. | 
| ce20 | 72 65 6e 64 65 72 65 64 20 57 69 6b 69 20 70 61    67 65 2e 22 0a 20 20 3a 74 79 70 65 20 27 28 73 | rendered.Wiki.page."...:type.'(s | 
| ce40 | 74 72 69 6e 67 29 0a 20 20 3a 67 72 6f 75 70 20    27 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 | tring)...:group.'elnode-wikiserv | 
| ce60 | 65 72 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20    65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 | er)..(defcustom.elnode-wikiserve | 
| ce80 | 72 2d 62 6f 64 79 2d 66 6f 6f 74 65 72 0a 20 20    22 3c 64 69 76 20 69 64 3d 27 66 6f 6f 74 65 72 | r-body-footer..."<div.id='footer | 
| cea0 | 27 3e 0a 3c 66 6f 72 6d 20 61 63 74 69 6f 6e 3d    27 7b 7b 70 61 67 65 7d 7d 27 20 6d 65 74 68 6f | '>.<form.action='{{page}}'.metho | 
| cec0 | 64 3d 27 50 4f 53 54 27 3e 0a 3c 66 69 65 6c 64    73 65 74 3e 0a 3c 6c 65 67 65 6e 64 3e 45 64 69 | d='POST'>.<fieldset>.<legend>Edi | 
| cee0 | 74 20 74 68 69 73 20 70 61 67 65 3c 2f 6c 65 67    65 6e 64 3e 0a 3c 74 65 78 74 61 72 65 61 20 20 | t.this.page</legend>.<textarea.. | 
| cf00 | 63 6f 6c 73 3d 27 38 30 27 20 72 6f 77 73 3d 27    32 30 27 20 6e 61 6d 65 3d 27 77 69 6b 69 74 65 | cols='80'.rows='20'.name='wikite | 
| cf20 | 78 74 27 3e 0a 7b 7b 74 65 78 74 7d 7d 0a 3c 2f    74 65 78 74 61 72 65 61 3e 3c 62 72 2f 3e 0a 3c | xt'>.{{text}}.</textarea><br/>.< | 
| cf40 | 69 6e 70 75 74 20 74 79 70 65 3d 27 74 65 78 74    27 20 6e 61 6d 65 3d 27 63 6f 6d 6d 65 6e 74 27 | input.type='text'.name='comment' | 
| cf60 | 20 76 61 6c 75 65 3d 27 27 2f 3e 0a 3c 69 6e 70    75 74 20 74 79 70 65 3d 27 73 75 62 6d 69 74 27 | .value=''/>.<input.type='submit' | 
| cf80 | 20 6e 61 6d 65 3d 27 73 61 76 65 27 20 76 61 6c    75 65 3d 27 73 61 76 65 27 2f 3e 0a 3c 69 6e 70 | .name='save'.value='save'/>.<inp | 
| cfa0 | 75 74 20 74 79 70 65 3d 27 73 75 62 6d 69 74 27    20 6e 61 6d 65 3d 27 70 72 65 76 69 65 77 27 20 | ut.type='submit'.name='preview'. | 
| cfc0 | 76 61 6c 75 65 3d 27 70 72 65 76 69 65 77 27 2f    3e 0a 3c 2f 66 69 65 6c 64 73 65 74 3e 0a 3c 2f | value='preview'/>.</fieldset>.</ | 
| cfe0 | 66 6f 72 6d 3e 0a 3c 2f 64 69 76 3e 22 0a 20 20    22 48 54 4d 4c 20 42 4f 44 59 20 66 6f 6f 74 74 | form>.</div>"..."HTML.BODY.foott | 
| d000 | 65 72 20 66 6f 72 20 61 20 72 65 6e 64 65 72 65    64 20 57 69 6b 69 20 70 61 67 65 2e 22 0a 20 20 | er.for.a.rendered.Wiki.page."... | 
| d020 | 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 29 0a    20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 | :type.'(string)...:group.'elnode | 
| d040 | 2d 77 69 6b 69 73 65 72 76 65 72 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d | -wikiserver)..(defcustom.elnode- | 
| d060 | 77 69 6b 69 73 65 72 76 65 72 2d 62 6f 64 79 2d    66 6f 6f 74 65 72 2d 6e 6f 74 2d 6c 6f 67 67 65 | wikiserver-body-footer-not-logge | 
| d080 | 64 69 6e 0a 20 20 22 3c 64 69 76 20 69 64 3d 27    66 6f 6f 74 65 72 27 3e 0a 20 20 20 20 3c 61 20 | din..."<div.id='footer'>.....<a. | 
| d0a0 | 68 72 65 66 3d 27 2f 77 69 6b 69 2f 6c 6f 67 69    6e 2f 3f 72 65 64 69 72 65 63 74 3d 7b 7b 70 61 | href='/wiki/login/?redirect={{pa | 
| d0c0 | 67 65 7d 7d 27 3e 6c 6f 67 69 6e 20 74 6f 20 65    64 69 74 3c 2f 61 3e 0a 20 20 3c 2f 64 69 76 3e | ge}}'>login.to.edit</a>...</div> | 
| d0e0 | 22 0a 20 20 22 48 54 4d 4c 20 42 4f 44 59 20 66    6f 6f 74 74 65 72 20 66 6f 72 20 61 20 72 65 6e | "..."HTML.BODY.footter.for.a.ren | 
| d100 | 64 65 72 65 64 20 57 69 6b 69 20 70 61 67 65 2e    22 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 | dered.Wiki.page."...:type.'(stri | 
| d120 | 6e 67 29 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c    6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 29 | ng)...:group.'elnode-wikiserver) | 
| d140 | 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d    77 69 6b 69 2d 2d 73 65 74 75 70 20 28 29 0a 20 | ..(defun.elnode-wiki--setup.().. | 
| d160 | 20 22 53 65 74 75 70 20 74 68 65 20 77 69 6b 69    2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 69 | ."Setup.the.wiki."...(elnode--di | 
| d180 | 72 2d 73 65 74 75 70 20 65 6c 6e 6f 64 65 2d 77    69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f | r-setup.elnode-wikiserver-wikiro | 
| d1a0 | 6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 | ot......................elnode-w | 
| d1c0 | 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69 72 6f    6f 74 2d 64 65 66 61 75 6c 74 0a 20 20 20 20 20 | ikiserver-wikiroot-default...... | 
| d1e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    22 64 65 66 61 75 6c 74 2d 77 69 6b 69 2d 69 6e | ................"default-wiki-in | 
| d200 | 64 65 78 2e 63 72 65 6f 6c 65 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | dex.creole"..................... | 
| d220 | 20 22 69 6e 64 65 78 2e 63 72 65 6f 6c 65 22 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ."index.creole"................. | 
| d240 | 20 20 20 20 20 22 64 65 66 61 75 6c 74 2d 77 69    6b 69 2d 6c 6f 67 6f 2e 67 69 66 22 29 29 0a 0a | ....."default-wiki-logo.gif")).. | 
| d260 | 3b 3b 20 49 6e 74 65 72 6e 61 6c 20 77 69 6b 69    20 73 74 75 66 66 0a 0a 28 64 65 66 76 61 72 20 | ;;.Internal.wiki.stuff..(defvar. | 
| d280 | 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 64 62 0a 20    20 28 64 62 2d 6d 61 6b 65 0a 20 20 20 60 28 64 | elnode-wiki-db...(db-make....`(d | 
| d2a0 | 62 2d 68 61 73 68 0a 20 20 20 20 20 3a 66 69 6c    65 6e 61 6d 65 0a 20 20 20 20 20 2c 28 65 78 70 | b-hash......:filename......,(exp | 
| d2c0 | 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20    20 20 20 20 20 28 63 6f 6e 63 61 74 20 65 6c 6e | and-file-name........(concat.eln | 
| d2e0 | 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 69 72 65 63    74 6f 72 79 20 22 65 6c 6e 6f 64 65 2d 77 69 6b | ode-config-directory."elnode-wik | 
| d300 | 69 2d 61 75 74 68 22 29 29 29 29 29 0a 0a 3b 3b    20 44 65 66 69 6e 65 20 74 68 65 20 61 75 74 68 | i-auth")))))..;;.Define.the.auth | 
| d320 | 65 6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d    65 20 66 6f 72 20 74 68 65 20 77 69 6b 69 0a 28 | entication.scheme.for.the.wiki.( | 
| d340 | 65 6c 6e 6f 64 65 2d 64 65 66 61 75 74 68 20 27    65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 75 74 68 | elnode-defauth.'elnode-wiki-auth | 
| d360 | 0a 20 20 3a 61 75 74 68 2d 64 62 20 65 6c 6e 6f    64 65 2d 77 69 6b 69 2d 64 62 0a 20 20 3a 72 65 | ...:auth-db.elnode-wiki-db...:re | 
| d380 | 64 69 72 65 63 74 20 22 2f 77 69 6b 69 2f 6c 6f    67 69 6e 2f 22 29 0a 0a 28 64 65 66 75 6e 20 65 | direct."/wiki/login/")..(defun.e | 
| d3a0 | 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20    28 68 74 74 70 63 6f 6e 20 77 69 6b 69 70 61 67 | lnode-wiki-page.(httpcon.wikipag | 
| d3c0 | 65 20 26 6f 70 74 69 6f 6e 61 6c 20 70 61 67 65    69 6e 66 6f 29 0a 20 20 22 43 72 65 6f 6c 65 20 | e.&optional.pageinfo)..."Creole. | 
| d3e0 | 72 65 6e 64 65 72 20 61 20 57 49 4b 49 50 41 47    45 20 62 61 63 6b 20 74 6f 20 74 68 65 20 48 54 | render.a.WIKIPAGE.back.to.the.HT | 
| d400 | 54 50 43 4f 4e 2e 22 0a 20 20 3b 3b 20 4f 74 68    65 72 77 69 73 65 20 6a 75 73 74 20 64 6f 20 69 | TPCON."...;;.Otherwise.just.do.i | 
| d420 | 74 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 | t...(elnode-http-start.httpcon.2 | 
| d440 | 30 30 20 60 28 22 43 6f 6e 74 65 6e 74 2d 74 79    70 65 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c | 00.`("Content-type"..."text/html | 
| d460 | 22 29 29 0a 20 20 28 77 69 74 68 2d 73 74 64 6f    75 74 2d 74 6f 2d 65 6c 6e 6f 64 65 20 68 74 74 | "))...(with-stdout-to-elnode.htt | 
| d480 | 70 63 6f 6e 0a 20 20 20 20 20 20 28 6c 65 74 20    28 28 70 61 67 65 2d 69 6e 66 6f 20 28 6f 72 20 | pcon.......(let.((page-info.(or. | 
| d4a0 | 70 61 67 65 69 6e 66 6f 20 28 65 6c 6e 6f 64 65    2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 | pageinfo.(elnode-http-pathinfo.h | 
| d4c0 | 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 68 65 61 64 65 72 20 65 6c | ttpcon))).............(header.el | 
| d4e0 | 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 2d    62 6f 64 79 2d 68 65 61 64 65 72 29 0a 20 20 20 | node-wikiserver-body-header).... | 
| d500 | 20 20 20 20 20 20 20 20 20 28 66 6f 6f 74 65 72    20 28 69 66 2d 65 6c 6e 6f 64 65 2d 61 75 74 68 | .........(footer.(if-elnode-auth | 
| d520 | 20 68 74 74 70 63 6f 6e 20 27 65 6c 6e 6f 64 65    2d 77 69 6b 69 2d 61 75 74 68 0a 20 20 20 20 20 | .httpcon.'elnode-wiki-auth...... | 
| d540 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 | .................elnode-wikiserv | 
| d560 | 65 72 2d 62 6f 64 79 2d 66 6f 6f 74 65 72 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | er-body-footer.................. | 
| d580 | 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 69 6b 69    73 65 72 76 65 72 2d 62 6f 64 79 2d 66 6f 6f 74 | .....elnode-wikiserver-body-foot | 
| d5a0 | 65 72 2d 6e 6f 74 2d 6c 6f 67 67 65 64 69 6e 29    29 29 0a 20 20 20 20 20 20 20 20 28 63 72 65 6f | er-not-loggedin))).........(creo | 
| d5c0 | 6c 65 2d 77 69 6b 69 0a 20 20 20 20 20 20 20 20    20 77 69 6b 69 70 61 67 65 0a 20 20 20 20 20 20 | le-wiki..........wikipage....... | 
| d5e0 | 20 20 20 3a 64 65 73 74 69 6e 61 74 69 6f 6e 20    74 0a 20 20 20 20 20 20 20 20 20 3a 76 61 72 69 | ...:destination.t..........:vari | 
| d600 | 61 62 6c 65 73 20 28 6c 69 73 74 20 28 63 6f 6e    73 20 27 70 61 67 65 20 70 61 67 65 2d 69 6e 66 | ables.(list.(cons.'page.page-inf | 
| d620 | 6f 29 29 0a 20 20 20 20 20 20 20 20 20 3a 62 6f    64 79 2d 68 65 61 64 65 72 20 68 65 61 64 65 72 | o))..........:body-header.header | 
| d640 | 0a 20 20 20 20 20 20 20 20 20 3a 62 6f 64 79 2d    66 6f 6f 74 65 72 20 66 6f 6f 74 65 72 29 29 29 | ..........:body-footer.footer))) | 
| d660 | 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 77 69 6b 69 2d 2d 74 65 78 74 2d 70 61 72 61 | )..(defun.elnode-wiki--text-para | 
| d680 | 6d 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47    65 74 20 74 68 65 20 74 65 78 74 20 70 61 72 61 | m.(httpcon)..."Get.the.text.para | 
| d6a0 | 6d 20 66 72 6f 6d 20 48 54 54 50 43 4f 4e 20 61    6e 64 20 63 6f 6e 76 65 72 74 20 69 74 2e 22 0a | m.from.HTTPCON.and.convert.it.". | 
| d6c0 | 20 20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 78    70 2d 69 6e 2d 73 74 72 69 6e 67 0a 20 20 20 22 | ..(replace-regexp-in-string...." | 
| d6e0 | 5c 72 22 20 22 22 20 3b 20 62 72 6f 77 73 65 72    73 20 73 65 6e 64 20 74 65 78 74 20 69 6e 20 44 | \r"."".;.browsers.send.text.in.D | 
| d700 | 4f 53 20 6c 69 6e 65 20 65 6e 64 69 6e 67 20 66    6f 72 6d 61 74 0a 20 20 20 28 65 6c 6e 6f 64 65 | OS.line.ending.format....(elnode | 
| d720 | 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70    63 6f 6e 20 22 77 69 6b 69 74 65 78 74 22 29 29 | -http-param.httpcon."wikitext")) | 
| d740 | 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 77 69 6b 69 2d 2d 73 61 76 65 2d 72 65 71 75 | )..(defun.elnode-wiki--save-requ | 
| d760 | 65 73 74 20 28 68 74 74 70 63 6f 6e 20 77 69 6b    69 72 6f 6f 74 20 70 61 74 68 20 74 65 78 74 29 | est.(httpcon.wikiroot.path.text) | 
| d780 | 0a 20 20 22 50 72 6f 63 65 73 73 20 61 6e 20 75    70 64 61 74 65 20 72 65 71 75 65 73 74 2e 22 0a | ..."Process.an.update.request.". | 
| d7a0 | 20 20 28 6c 65 74 2a 20 28 28 70 61 67 65 20 28    69 66 20 70 61 74 68 0a 20 20 20 20 20 20 20 20 | ..(let*.((page.(if.path......... | 
| d7c0 | 20 20 20 20 20 20 20 20 20 20 20 28 73 61 76 65    2d 6d 61 74 63 68 2d 64 61 74 61 0a 20 20 20 20 | ...........(save-match-data..... | 
| d7e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 | .................(string-match." | 
| d800 | 2f 77 69 6b 69 2f 5c 5c 28 2e 2a 5c 5c 29 24 22    20 70 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 | /wiki/\\(.*\\)$".path).......... | 
| d820 | 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74    63 68 2d 73 74 72 69 6e 67 20 31 20 70 61 74 68 | ............(match-string.1.path | 
| d840 | 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 63    6f 6d 6d 65 6e 74 20 28 65 6c 6e 6f 64 65 2d 68 | ))))..........(comment.(elnode-h | 
| d860 | 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f    6e 20 22 63 6f 6d 6d 65 6e 74 22 29 29 0a 20 20 | ttp-param.httpcon."comment"))... | 
| d880 | 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6e 61 6d    65 20 28 69 66 20 28 65 71 75 61 6c 20 70 61 67 | .......(file-name.(if.(equal.pag | 
| d8a0 | 65 20 22 22 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 | e."").........................(c | 
| d8c0 | 6f 6e 63 61 74 20 77 69 6b 69 72 6f 6f 74 20 22    69 6e 64 65 78 2e 63 72 65 6f 6c 65 22 29 0a 20 | oncat.wikiroot."index.creole").. | 
| d8e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 63 6f 6e 63 61 74 20 28 66 69 | .....................(concat.(fi | 
| d900 | 6c 65 2d 6e 61 6d 65 2d 61 73 2d 64 69 72 65 63    74 6f 72 79 20 77 69 6b 69 72 6f 6f 74 29 20 70 | le-name-as-directory.wikiroot).p | 
| d920 | 61 67 65 29 29 29 0a 20 20 20 20 20 20 20 20 20    28 62 75 66 66 65 72 20 28 66 69 6e 64 2d 66 69 | age)))..........(buffer.(find-fi | 
| d940 | 6c 65 2d 6e 6f 73 65 6c 65 63 74 20 66 69 6c 65    2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 77 69 | le-noselect.file-name))).....(wi | 
| d960 | 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 66 65    72 20 62 75 66 66 65 72 0a 20 20 20 20 20 20 28 | th-current-buffer.buffer.......( | 
| d980 | 65 72 61 73 65 2d 62 75 66 66 65 72 29 0a 20 20    20 20 20 20 28 69 6e 73 65 72 74 20 74 65 78 74 | erase-buffer).......(insert.text | 
| d9a0 | 29 0a 20 20 20 20 20 20 28 73 61 76 65 2d 62 75    66 66 65 72 29 0a 20 20 20 20 20 20 28 6c 65 74 | ).......(save-buffer).......(let | 
| d9c0 | 20 28 28 67 69 74 2d 62 75 66 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 28 67 65 74 2d 62 75 66 | .((git-buf..............(get-buf | 
| d9e0 | 66 65 72 2d 63 72 65 61 74 65 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 67 65 6e 65 72 61 | fer-create...............(genera | 
| da00 | 74 65 2d 6e 65 77 2d 62 75 66 66 65 72 2d 6e 61    6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | te-new-buffer-name.............. | 
| da20 | 20 20 22 2a 20 65 6c 6e 6f 64 65 20 77 69 6b 69    20 63 6f 6d 6d 69 74 20 62 75 66 20 2a 22 29 29 | .."*.elnode.wiki.commit.buf.*")) | 
| da40 | 29 29 0a 20 20 20 20 20 20 20 20 28 73 68 65 6c    6c 2d 63 6f 6d 6d 61 6e 64 0a 20 20 20 20 20 20 | )).........(shell-command....... | 
| da60 | 20 20 20 28 66 6f 72 6d 61 74 20 22 67 69 74 20    63 6f 6d 6d 69 74 20 2d 6d 20 27 25 73 27 20 25 | ...(format."git.commit.-m.'%s'.% | 
| da80 | 73 22 20 63 6f 6d 6d 65 6e 74 20 66 69 6c 65 2d    6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 67 | s".comment.file-name)..........g | 
| daa0 | 69 74 2d 62 75 66 29 0a 20 20 20 20 20 20 20 20    28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 67 69 74 | it-buf).........(kill-buffer.git | 
| dac0 | 2d 62 75 66 29 29 0a 20 20 20 20 20 20 28 65 6c    6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20 68 | -buf)).......(elnode-wiki-page.h | 
| dae0 | 74 74 70 63 6f 6e 20 66 69 6c 65 2d 6e 61 6d 65    29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e | ttpcon.file-name))))..(defun.eln | 
| db00 | 6f 64 65 2d 77 69 6b 69 2d 68 61 6e 64 6c 65 72    20 28 68 74 74 70 63 6f 6e 20 77 69 6b 69 72 6f | ode-wiki-handler.(httpcon.wikiro | 
| db20 | 6f 74 29 0a 20 20 22 41 20 6c 6f 77 20 6c 65 76    65 6c 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 57 | ot)..."A.low.level.handler.for.W | 
| db40 | 69 6b 69 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a    0a 53 65 6e 64 20 74 68 65 20 57 69 6b 69 20 70 | iki.operations...Send.the.Wiki.p | 
| db60 | 61 67 65 20 72 65 71 75 65 73 74 65 64 2c 20 77    68 69 63 68 20 6d 75 73 74 20 62 65 20 61 20 66 | age.requested,.which.must.be.a.f | 
| db80 | 69 6c 65 20 65 78 69 73 74 69 6e 67 20 75 6e 64    65 72 0a 74 68 65 20 57 49 4b 49 52 4f 4f 54 2c | ile.existing.under.the.WIKIROOT, | 
| dba0 | 20 62 61 63 6b 20 74 6f 20 74 68 65 20 48 54 54    50 43 4f 4e 2e 0a 0a 55 70 64 61 74 65 20 6f 70 | .back.to.the.HTTPCON...Update.op | 
| dbc0 | 65 72 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f    74 65 63 74 65 64 20 62 79 20 61 75 74 68 65 6e | erations.are.protected.by.authen | 
| dbe0 | 74 69 63 61 74 69 6f 6e 2e 22 0a 20 20 28 65 6c    6e 6f 64 65 2d 6d 65 74 68 6f 64 20 68 74 74 70 | tication."...(elnode-method.http | 
| dc00 | 63 6f 6e 0a 20 20 20 20 28 47 45 54 0a 20 20 20    20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f | con.....(GET......(elnode-docroo | 
| dc20 | 74 2d 66 6f 72 20 77 69 6b 69 72 6f 6f 74 0a 20    20 20 20 20 20 20 77 69 74 68 20 74 61 72 67 65 | t-for.wikiroot........with.targe | 
| dc40 | 74 2d 70 61 74 68 0a 20 20 20 20 20 20 20 6f 6e    20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 | t-path........on.httpcon........ | 
| dc60 | 64 6f 0a 20 20 20 20 20 20 20 3b 3b 20 44 6f 20    77 65 20 6e 65 65 64 20 74 6f 20 73 65 72 76 65 | do........;;.Do.we.need.to.serve | 
| dc80 | 20 61 6e 20 69 6e 64 65 78 3f 0a 20 20 20 20 20    20 20 28 69 66 20 28 65 71 75 61 6c 20 74 61 72 | .an.index?........(if.(equal.tar | 
| dca0 | 67 65 74 2d 70 61 74 68 20 28 65 78 70 61 6e 64    2d 66 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 | get-path.(expand-file-name.(conc | 
| dcc0 | 61 74 20 77 69 6b 69 72 6f 6f 74 20 22 2f 22 29    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 65 | at.wikiroot."/")))............(e | 
| dce0 | 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20    68 74 74 70 63 6f 6e 20 28 63 6f 6e 63 61 74 20 | lnode-wiki-page.httpcon.(concat. | 
| dd00 | 77 69 6b 69 72 6f 6f 74 20 22 2f 69 6e 64 65 78    2e 63 72 65 6f 6c 65 22 29 29 0a 20 20 20 20 20 | wikiroot."/index.creole"))...... | 
| dd20 | 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74    27 73 20 61 20 77 69 6b 69 20 70 61 67 65 20 6f | ......;;.Else.it's.a.wiki.page.o | 
| dd40 | 72 20 73 6f 6d 65 20 63 6f 6c 6c 61 74 65 72 61    6c 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 | r.some.collateral............(if | 
| dd60 | 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22    5c 5c 2e 63 72 65 6f 6c 65 24 22 20 74 61 72 67 | .(string-match."\\.creole$".targ | 
| dd80 | 65 74 2d 70 61 74 68 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 53 65 72 76 65 | et-path)................;;.Serve | 
| dda0 | 20 61 20 63 72 65 6f 6c 65 20 70 61 67 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | .a.creole.page................(e | 
| ddc0 | 6c 6e 6f 64 65 2d 77 69 6b 69 2d 70 61 67 65 20    68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d 70 | lnode-wiki-page.httpcon.target-p | 
| dde0 | 61 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 3b 3b 20 45 6c 73 65 20 73 65 72 76 | ath)................;;.Else.serv | 
| de00 | 65 20 6a 75 73 74 20 63 6f 6e 74 65 6e 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | e.just.content................(e | 
| de20 | 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 20    68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d 70 | lnode-send-file.httpcon.target-p | 
| de40 | 61 74 68 29 29 29 29 29 0a 20 20 20 20 28 50 4f    53 54 0a 20 20 20 20 20 28 77 69 74 68 2d 65 6c | ath))))).....(POST......(with-el | 
| de60 | 6e 6f 64 65 2d 61 75 74 68 20 68 74 74 70 63 6f    6e 20 27 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 61 | node-auth.httpcon.'elnode-wiki-a | 
| de80 | 75 74 68 0a 20 20 20 20 20 20 20 28 6c 65 74 2a    20 28 28 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d | uth........(let*.((path.(elnode- | 
| dea0 | 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74    74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 | http-pathinfo.httpcon))......... | 
| dec0 | 20 20 20 20 20 20 28 74 65 78 74 20 28 65 6c 6e    6f 64 65 2d 77 69 6b 69 2d 2d 74 65 78 74 2d 70 | ......(text.(elnode-wiki--text-p | 
| dee0 | 61 72 61 6d 20 68 74 74 70 63 6f 6e 29 29 29 0a    20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f | aram.httpcon)))..........(if.(no | 
| df00 | 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70    61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22 70 72 | t.(elnode-http-param.httpcon."pr | 
| df20 | 65 76 69 65 77 22 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 3b 3b 20 41 20 73 61 76 65 20 | eview"))..............;;.A.save. | 
| df40 | 72 65 71 75 65 73 74 20 69 6e 20 77 68 69 63 68    20 63 61 73 65 20 73 61 76 65 20 74 68 65 20 6e | request.in.which.case.save.the.n | 
| df60 | 65 77 20 74 65 78 74 20 61 6e 64 20 74 68 65 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b | ew.text.and.then..............;; | 
| df80 | 20 73 65 6e 64 20 74 68 65 20 77 69 6b 69 20 74    65 78 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 | .send.the.wiki.text............. | 
| dfa0 | 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 2d    73 61 76 65 2d 72 65 71 75 65 73 74 20 68 74 74 | ..(elnode-wiki--save-request.htt | 
| dfc0 | 70 63 6f 6e 20 77 69 6b 69 72 6f 6f 74 20 70 61    74 68 20 74 65 78 74 29 0a 20 20 20 20 20 20 20 | pcon.wikiroot.path.text)........ | 
| dfe0 | 20 20 20 20 20 20 3b 3b 20 4d 69 67 68 74 20 62    65 20 61 20 70 72 65 76 69 65 77 20 72 65 71 75 | ......;;.Might.be.a.preview.requ | 
| e000 | 65 73 74 20 69 6e 20 77 68 69 63 68 20 63 61 73    65 20 73 65 6e 64 20 62 61 63 6b 20 74 68 65 20 | est.in.which.case.send.back.the. | 
| e020 | 57 49 4b 49 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 3b 3b 20 74 65 78 74 20 74 68 61 74 27 73 | WIKI..............;;.text.that's | 
| e040 | 20 62 65 65 6e 20 73 65 6e 74 2e 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 74 | .been.sent...............(with-t | 
| e060 | 65 6d 70 2d 66 69 6c 65 20 22 2f 74 6d 70 2f 70    72 65 76 69 65 77 22 0a 20 20 20 20 20 20 20 20 | emp-file."/tmp/preview"......... | 
| e080 | 20 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 74    65 78 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 | .......(insert.text))........... | 
| e0a0 | 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d    70 61 67 65 20 68 74 74 70 63 6f 6e 20 22 2f 74 | ...(elnode-wiki-page.httpcon."/t | 
| e0c0 | 6d 70 2f 70 72 65 76 69 65 77 22 20 70 61 74 68    29 29 29 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 | mp/preview".path)))))))..;;;###a | 
| e0e0 | 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 65    6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72 | utoload.(defun.elnode-wikiserver | 
| e100 | 2d 74 65 73 74 20 28 29 0a 20 20 22 54 65 73 74    20 77 68 65 74 68 65 72 20 77 65 20 73 68 6f 75 | -test.()..."Test.whether.we.shou | 
| e120 | 6c 64 20 73 65 72 76 65 20 57 69 6b 69 20 6f 72    20 6e 6f 74 2e 22 0a 20 20 28 66 65 61 74 75 72 | ld.serve.Wiki.or.not."...(featur | 
| e140 | 65 70 20 27 63 72 65 6f 6c 65 29 29 0a 0a 3b 3b    3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 | ep.'creole))..;;;###autoload.(de | 
| e160 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73    65 72 76 65 72 20 28 68 74 74 70 63 6f 6e 29 0a | fun.elnode-wikiserver.(httpcon). | 
| e180 | 20 20 22 53 65 72 76 65 20 57 69 6b 69 20 70 61    67 65 73 20 66 72 6f 6d 20 60 65 6c 6e 6f 64 65 | .."Serve.Wiki.pages.from.`elnode | 
| e1a0 | 2d 77 69 6b 69 73 65 72 76 65 72 2d 77 69 6b 69    72 6f 6f 74 27 2e 0a 0a 48 54 54 50 43 4f 4e 20 | -wikiserver-wikiroot'...HTTPCON. | 
| e1c0 | 69 73 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a    0a 54 68 65 20 57 69 6b 69 20 73 65 72 76 65 72 | is.the.request...The.Wiki.server | 
| e1e0 | 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62    6c 65 20 69 66 20 74 68 65 20 60 63 72 65 6f 6c | .is.only.available.if.the.`creol | 
| e200 | 65 27 20 70 61 63 6b 61 67 65 20 69 73 0a 70 72    6f 76 69 64 65 64 2e 20 4f 74 68 65 72 77 69 73 | e'.package.is.provided..Otherwis | 
| e220 | 65 20 69 74 20 77 69 6c 6c 20 6a 75 73 74 20 65    72 72 6f 72 2e 22 0a 20 20 28 69 66 20 28 6e 6f | e.it.will.just.error."...(if.(no | 
| e240 | 74 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 65    72 76 65 72 2d 74 65 73 74 29 29 0a 20 20 20 20 | t.(elnode-wikiserver-test))..... | 
| e260 | 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 35    30 30 20 68 74 74 70 63 6f 6e 20 22 54 68 65 20 | ..(elnode-send-500.httpcon."The. | 
| e280 | 45 6d 61 63 73 20 66 65 61 74 75 72 65 20 27 63    72 65 6f 6c 65 20 69 73 20 72 65 71 75 69 72 65 | Emacs.feature.'creole.is.require | 
| e2a0 | 64 2e 22 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f    64 65 2d 61 75 74 68 2d 64 69 73 70 61 74 63 68 | d.").......(elnode-auth-dispatch | 
| e2c0 | 65 72 20 68 74 74 70 63 6f 6e 20 27 65 6c 6e 6f    64 65 2d 77 69 6b 69 2d 61 75 74 68 0a 20 20 20 | er.httpcon.'elnode-wiki-auth.... | 
| e2e0 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b    69 2d 2d 73 65 74 75 70 29 0a 20 20 20 20 20 20 | .....(elnode-wiki--setup)....... | 
| e300 | 20 20 28 65 6c 6e 6f 64 65 2d 77 69 6b 69 2d 68    61 6e 64 6c 65 72 20 68 74 74 70 63 6f 6e 20 65 | ..(elnode-wiki-handler.httpcon.e | 
| e320 | 6c 6e 6f 64 65 2d 77 69 6b 69 73 65 72 76 65 72    2d 77 69 6b 69 72 6f 6f 74 29 29 29 29 0a 0a 28 | lnode-wikiserver-wikiroot))))..( | 
| e340 | 70 72 6f 76 69 64 65 20 27 65 6c 6e 6f 64 65 2d    77 69 6b 69 29 0a 0a 3b 3b 3b 20 65 6c 6e 6f 64 | provide.'elnode-wiki)..;;;.elnod | 
| e360 | 65 2d 77 69 6b 69 2e 65 6c 20 65 6e 64 73 20 68    65 72 65 0a 00 00 00 00 00 00 00 00 00 00 00 00 | e-wiki.el.ends.here............. | 
| e380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e3a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e3c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e3e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e400 | 65 6c 6e 6f 64 65 2d 32 30 31 39 30 37 30 32 2e    31 35 30 39 2f 65 6c 6e 6f 64 65 2e 65 6c 00 00 | elnode-20190702.1509/elnode.el.. | 
| e420 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e460 | 00 00 00 00 30 30 30 30 36 34 34 00 30 30 30 30    30 30 30 00 30 30 30 30 30 30 30 00 30 30 30 30 | ....0000644.0000000.0000000.0000 | 
| e480 | 30 34 32 33 32 30 31 00 30 30 30 30 30 30 30 30    30 30 30 00 30 31 34 30 35 34 00 20 30 00 00 00 | 0423201.00000000000.014054..0... | 
| e4a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e4c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e4e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e500 | 00 75 73 74 61 72 20 20 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .ustar...root................... | 
| e520 | 00 00 00 00 00 00 00 00 00 72 6f 6f 74 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .........root................... | 
| e540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e5a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e5c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e5e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| e600 | 3b 3b 3b 20 65 6c 6e 6f 64 65 2e 65 6c 20 2d 2d    2d 20 61 20 73 69 6d 70 6c 65 20 65 6d 61 63 73 | ;;;.elnode.el.---.a.simple.emacs | 
| e620 | 20 61 73 79 6e 63 20 48 54 54 50 20 73 65 72 76    65 72 20 2d 2a 2d 20 6c 65 78 69 63 61 6c 2d 62 | .async.HTTP.server.-*-.lexical-b | 
| e640 | 69 6e 64 69 6e 67 3a 20 74 20 2d 2a 2d 0a 0a 3b    3b 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 | inding:.t.-*-..;;.Copyright.(C). | 
| e660 | 32 30 31 30 2c 20 32 30 31 31 2c 20 32 30 31 32    20 20 4e 69 63 20 46 65 72 72 69 65 72 0a 3b 3b | 2010,.2011,.2012..Nic.Ferrier.;; | 
| e680 | 20 43 6f 70 79 72 69 67 68 74 20 28 43 29 20 32    30 31 39 20 20 47 69 74 48 75 62 20 75 73 65 72 | .Copyright.(C).2019..GitHub.user | 
| e6a0 | 20 22 4a 63 61 77 22 0a 0a 3b 3b 20 41 75 74 68    6f 72 3a 20 4e 69 63 20 46 65 72 72 69 65 72 20 | ."Jcaw"..;;.Author:.Nic.Ferrier. | 
| e6c0 | 3c 6e 66 65 72 72 69 65 72 40 66 65 72 72 69 65    72 2e 6d 65 2e 75 6b 3e 0a 3b 3b 20 4d 61 69 6e | <nferrier@ferrier.me.uk>.;;.Main | 
| e6e0 | 74 61 69 6e 65 72 3a 20 47 69 74 48 75 62 20 75    73 65 72 20 22 4a 63 61 77 22 0a 3b 3b 20 43 72 | tainer:.GitHub.user."Jcaw".;;.Cr | 
| e700 | 65 61 74 65 64 3a 20 35 74 68 20 4f 63 74 6f 62    65 72 20 32 30 31 30 0a 3b 3b 20 50 61 63 6b 61 | eated:.5th.October.2010.;;.Packa | 
| e720 | 67 65 2d 56 65 72 73 69 6f 6e 3a 20 32 30 31 39    30 37 30 32 2e 31 35 30 39 0a 3b 3b 20 50 61 63 | ge-Version:.20190702.1509.;;.Pac | 
| e740 | 6b 61 67 65 2d 52 65 76 69 73 69 6f 6e 3a 20 32    39 65 66 30 66 35 31 61 36 35 61 0a 3b 3b 20 4b | kage-Revision:.29ef0f51a65a.;;.K | 
| e760 | 65 79 77 6f 72 64 73 3a 20 6c 69 73 70 2c 20 68    74 74 70 2c 20 68 79 70 65 72 6d 65 64 69 61 0a | eywords:.lisp,.http,.hypermedia. | 
| e780 | 0a 3b 3b 20 54 68 69 73 20 66 69 6c 65 20 69 73    20 4e 4f 54 20 70 61 72 74 20 6f 66 20 47 4e 55 | .;;.This.file.is.NOT.part.of.GNU | 
| e7a0 | 20 45 6d 61 63 73 2e 0a 0a 3b 3b 20 54 68 69 73    20 70 72 6f 67 72 61 6d 20 69 73 20 66 72 65 65 | .Emacs...;;.This.program.is.free | 
| e7c0 | 20 73 6f 66 74 77 61 72 65 3b 20 79 6f 75 20 63    61 6e 20 72 65 64 69 73 74 72 69 62 75 74 65 20 | .software;.you.can.redistribute. | 
| e7e0 | 69 74 20 61 6e 64 2f 6f 72 20 6d 6f 64 69 66 79    0a 3b 3b 20 69 74 20 75 6e 64 65 72 20 74 68 65 | it.and/or.modify.;;.it.under.the | 
| e800 | 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 47 4e    55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 | .terms.of.the.GNU.General.Public | 
| e820 | 20 4c 69 63 65 6e 73 65 20 61 73 20 70 75 62 6c    69 73 68 65 64 20 62 79 0a 3b 3b 20 74 68 65 20 | .License.as.published.by.;;.the. | 
| e840 | 46 72 65 65 20 53 6f 66 74 77 61 72 65 20 46 6f    75 6e 64 61 74 69 6f 6e 2c 20 65 69 74 68 65 72 | Free.Software.Foundation,.either | 
| e860 | 20 76 65 72 73 69 6f 6e 20 33 20 6f 66 20 74 68    65 20 4c 69 63 65 6e 73 65 2c 20 6f 72 0a 3b 3b | .version.3.of.the.License,.or.;; | 
| e880 | 20 28 61 74 20 79 6f 75 72 20 6f 70 74 69 6f 6e    29 20 61 6e 79 20 6c 61 74 65 72 20 76 65 72 73 | .(at.your.option).any.later.vers | 
| e8a0 | 69 6f 6e 2e 0a 0a 3b 3b 20 54 68 69 73 20 70 72    6f 67 72 61 6d 20 69 73 20 64 69 73 74 72 69 62 | ion...;;.This.program.is.distrib | 
| e8c0 | 75 74 65 64 20 69 6e 20 74 68 65 20 68 6f 70 65    20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 | uted.in.the.hope.that.it.will.be | 
| e8e0 | 20 75 73 65 66 75 6c 2c 0a 3b 3b 20 62 75 74 20    57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 52 52 | .useful,.;;.but.WITHOUT.ANY.WARR | 
| e900 | 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 65 76    65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64 20 77 | ANTY;.without.even.the.implied.w | 
| e920 | 61 72 72 61 6e 74 79 20 6f 66 0a 3b 3b 20 4d 45    52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f 72 | arranty.of.;;.MERCHANTABILITY.or | 
| e940 | 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20 50    41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f 53 | .FITNESS.FOR.A.PARTICULAR.PURPOS | 
| e960 | 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 3b 20 47    4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 | E...See.the.;;.GNU.General.Publi | 
| e980 | 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f    72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 3b 20 | c.License.for.more.details...;;. | 
| e9a0 | 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20    72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20 | You.should.have.received.a.copy. | 
| e9c0 | 6f 66 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72    61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 73 | of.the.GNU.General.Public.Licens | 
| e9e0 | 65 0a 3b 3b 20 61 6c 6f 6e 67 20 77 69 74 68 20    74 68 69 73 20 70 72 6f 67 72 61 6d 2e 20 20 49 | e.;;.along.with.this.program...I | 
| ea00 | 66 20 6e 6f 74 2c 20 73 65 65 20 3c 68 74 74 70    3a 2f 2f 77 77 77 2e 67 6e 75 2e 6f 72 67 2f 6c | f.not,.see.<http://www.gnu.org/l | 
| ea20 | 69 63 65 6e 73 65 73 2f 3e 2e 0a 0a 3b 3b 3b 20    53 6f 75 72 63 65 20 63 6f 64 65 0a 3b 3b 0a 3b | icenses/>...;;;.Source.code.;;.; | 
| ea40 | 3b 20 65 6c 6e 6f 64 65 27 73 20 63 6f 64 65 20    63 61 6e 20 62 65 20 66 6f 75 6e 64 20 68 65 72 | ;.elnode's.code.can.be.found.her | 
| ea60 | 65 3a 0a 3b 3b 20 20 20 68 74 74 70 3a 2f 2f 67    69 74 68 75 62 2e 63 6f 6d 2f 6a 63 61 77 2f 65 | e:.;;...http://github.com/jcaw/e | 
| ea80 | 6c 6e 6f 64 65 0a 0a 3b 3b 3b 20 53 74 79 6c 65    20 6e 6f 74 65 0a 3b 3b 0a 3b 3b 20 54 68 69 73 | lnode..;;;.Style.note.;;.;;.This | 
| eaa0 | 20 63 6f 64 65 73 20 75 73 65 73 20 74 68 65 20    45 6d 61 63 73 20 73 74 79 6c 65 20 6f 66 3a 0a | .codes.uses.the.Emacs.style.of:. | 
| eac0 | 3b 3b 0a 3b 3b 20 20 20 20 65 6c 6e 6f 64 65 2d    2d 70 72 69 76 61 74 65 2d 66 75 6e 63 74 69 6f | ;;.;;....elnode--private-functio | 
| eae0 | 6e 0a 3b 3b 0a 3b 3b 20 66 6f 72 20 70 72 69 76    61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 0a | n.;;.;;.for.private.functions... | 
| eb00 | 0a 3b 3b 3b 20 43 6f 6d 6d 65 6e 74 61 72 79 3a    0a 3b 3b 0a 3b 3b 20 54 68 69 73 20 69 73 20 61 | .;;;.Commentary:.;;.;;.This.is.a | 
| eb20 | 6e 20 65 6c 69 73 70 20 76 65 72 73 69 6f 6e 20    6f 66 20 74 68 65 20 70 6f 70 75 6c 61 72 20 6e | n.elisp.version.of.the.popular.n | 
| eb40 | 6f 64 65 2e 6a 73 20 61 73 79 6e 63 68 72 6f 6e    6f 75 73 0a 3b 3b 20 77 65 62 73 65 72 76 65 72 | ode.js.asynchronous.;;.webserver | 
| eb60 | 20 74 6f 6f 6c 6b 69 74 2e 0a 3b 3b 0a 3b 3b 20    59 6f 75 20 63 61 6e 20 64 65 66 69 6e 65 20 48 | .toolkit..;;.;;.You.can.define.H | 
| eb80 | 54 54 50 20 72 65 71 75 65 73 74 20 68 61 6e 64    6c 65 72 73 20 61 6e 64 20 73 74 61 72 74 20 61 | TTP.request.handlers.and.start.a | 
| eba0 | 6e 20 48 54 54 50 20 73 65 72 76 65 72 0a 3b 3b    20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 | n.HTTP.server.;;.attached.to.the | 
| ebc0 | 20 68 61 6e 64 6c 65 72 2e 20 20 4d 61 6e 79 20    48 54 54 50 20 73 65 72 76 65 72 73 20 63 61 6e | .handler...Many.HTTP.servers.can | 
| ebe0 | 20 62 65 20 73 74 61 72 74 65 64 2c 20 65 61 63    68 0a 3b 3b 20 6d 75 73 74 20 68 61 76 65 20 69 | .be.started,.each.;;.must.have.i | 
| ec00 | 74 73 20 6f 77 6e 20 54 43 50 20 70 6f 72 74 2e    20 20 48 61 6e 64 6c 65 72 73 20 63 61 6e 20 64 | ts.own.TCP.port...Handlers.can.d | 
| ec20 | 65 66 65 72 20 70 72 6f 63 65 73 73 69 6e 67 20    77 69 74 68 20 61 0a 3b 3b 20 73 69 67 6e 61 6c | efer.processing.with.a.;;.signal | 
| ec40 | 20 28 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 63    6f 6d 65 74 20 73 74 79 6c 65 20 72 65 73 6f 75 | .(which.allows.comet.style.resou | 
| ec60 | 72 63 65 20 6d 61 6e 61 67 65 6d 65 6e 74 29 0a    3b 3b 0a 3b 3b 20 53 65 65 20 65 6c 6e 6f 64 65 | rce.management).;;.;;.See.elnode | 
| ec80 | 2d 73 74 61 72 74 20 66 6f 72 20 68 6f 77 20 74    6f 20 73 74 61 72 74 20 61 6e 20 48 54 54 50 20 | -start.for.how.to.start.an.HTTP. | 
| eca0 | 73 65 72 76 65 72 2e 0a 0a 3b 3b 3b 20 43 6f 64    65 3a 0a 0a 28 72 65 71 75 69 72 65 20 27 66 61 | server...;;;.Code:..(require.'fa | 
| ecc0 | 6b 69 72 29 0a 28 72 65 71 75 69 72 65 20 27 6d    6d 2d 65 6e 63 6f 64 65 29 0a 28 72 65 71 75 69 | kir).(require.'mm-encode).(requi | 
| ece0 | 72 65 20 27 6d 61 69 6c 63 61 70 29 0a 28 72 65    71 75 69 72 65 20 27 6d 61 69 6c 2d 70 61 72 73 | re.'mailcap).(require.'mail-pars | 
| ed00 | 65 29 20 3b 20 66 6f 72 20 6d 61 69 6c 2d 68 65    61 64 65 72 2d 70 61 72 73 65 2d 63 6f 6e 74 65 | e).;.for.mail-header-parse-conte | 
| ed20 | 6e 74 2d 74 79 70 65 0a 28 72 65 71 75 69 72 65    20 27 75 72 6c 2d 75 74 69 6c 29 0a 28 72 65 71 | nt-type.(require.'url-util).(req | 
| ed40 | 75 69 72 65 20 27 6b 76 29 0a 28 72 65 71 75 69    72 65 20 27 73 29 0a 28 72 65 71 75 69 72 65 20 | uire.'kv).(require.'s).(require. | 
| ed60 | 27 64 61 73 68 29 0a 28 72 65 71 75 69 72 65 20    27 72 78 29 0a 28 72 65 71 75 69 72 65 20 27 77 | 'dash).(require.'rx).(require.'w | 
| ed80 | 65 62 29 0a 28 72 65 71 75 69 72 65 20 27 6a 73    6f 6e 29 0a 28 72 65 71 75 69 72 65 20 27 64 62 | eb).(require.'json).(require.'db | 
| eda0 | 29 0a 28 72 65 71 75 69 72 65 20 27 64 69 72 65    64 29 20 3b 20 6e 65 65 64 65 64 20 66 6f 72 20 | ).(require.'dired).;.needed.for. | 
| edc0 | 74 68 65 20 73 65 74 75 70 0a 28 72 65 71 75 69    72 65 20 27 74 61 62 75 6c 61 74 65 64 2d 6c 69 | the.setup.(require.'tabulated-li | 
| ede0 | 73 74 29 0a 28 72 65 71 75 69 72 65 20 27 6e 6f    66 6c 65 74 29 0a 28 72 65 71 75 69 72 65 20 27 | st).(require.'noflet).(require.' | 
| ee00 | 65 72 74 29 20 3b 20 77 65 20 70 72 6f 76 69 64    65 20 73 6f 6d 65 20 61 73 73 65 72 74 69 6f 6e | ert).;.we.provide.some.assertion | 
| ee20 | 73 20 61 6e 64 20 6e 65 65 64 20 27 73 68 6f 75    6c 64 27 0a 28 65 76 61 6c 2d 77 68 65 6e 2d 63 | s.and.need.'should'.(eval-when-c | 
| ee40 | 6f 6d 70 69 6c 65 20 28 72 65 71 75 69 72 65 20    27 63 6c 29 29 0a 0a 28 64 65 66 63 6f 6e 73 74 | ompile.(require.'cl))..(defconst | 
| ee60 | 20 45 4c 4e 4f 44 45 2d 46 4f 52 4d 2d 44 41 54    41 2d 54 59 50 45 20 22 61 70 70 6c 69 63 61 74 | .ELNODE-FORM-DATA-TYPE."applicat | 
| ee80 | 69 6f 6e 2f 78 2d 77 77 77 2d 66 6f 72 6d 2d 75    72 6c 65 6e 63 6f 64 65 64 22 0a 20 20 22 54 68 | ion/x-www-form-urlencoded"..."Th | 
| eea0 | 65 20 74 79 70 65 20 6f 66 20 48 54 54 50 20 46    6f 72 6d 20 50 4f 53 54 73 2e 22 29 0a 0a 28 64 | e.type.of.HTTP.Form.POSTs.")..(d | 
| eec0 | 65 66 63 6f 6e 73 74 20 68 74 74 70 2d 72 65 66    65 72 72 65 72 20 27 72 65 66 65 72 65 72 0a 20 | efconst.http-referrer.'referer.. | 
| eee0 | 20 22 48 65 6c 70 65 72 20 74 6f 20 62 79 70 61    73 73 20 69 64 69 6f 74 20 73 70 65 6c 6c 69 6e | ."Helper.to.bypass.idiot.spellin | 
| ef00 | 67 20 6f 66 20 74 68 65 20 77 6f 72 64 20 60 72    65 66 65 72 72 65 72 27 2e 22 29 0a 0a 0a 3b 3b | g.of.the.word.`referrer'.")...;; | 
| ef20 | 20 45 78 74 65 6e 73 69 6f 6e 73 20 74 6f 20 65    72 74 0a 0a 28 64 65 66 6d 61 63 72 6f 20 73 68 | .Extensions.to.ert..(defmacro.sh | 
| ef40 | 6f 75 6c 64 2d 65 71 75 61 6c 20 28 61 20 62 29    0a 20 20 22 53 69 6d 70 6c 65 20 73 68 6f 72 74 | ould-equal.(a.b)..."Simple.short | 
| ef60 | 63 75 74 20 66 6f 72 20 60 28 73 68 6f 75 6c 64    20 28 65 71 75 61 6c 20 61 20 62 29 29 27 2e 22 | cut.for.`(should.(equal.a.b))'." | 
| ef80 | 0a 20 20 60 28 73 68 6f 75 6c 64 0a 20 20 20 20    28 65 71 75 61 6c 20 2c 61 20 2c 62 29 29 29 0a | ...`(should.....(equal.,a.,b))). | 
| efa0 | 0a 28 64 65 66 6d 61 63 72 6f 20 73 68 6f 75 6c    64 2d 6d 61 74 63 68 20 28 72 65 67 65 78 20 61 | .(defmacro.should-match.(regex.a | 
| efc0 | 29 0a 20 20 22 53 69 6d 70 6c 65 20 73 68 6f 72    74 63 75 74 20 66 6f 72 20 61 20 60 73 74 72 69 | )..."Simple.shortcut.for.a.`stri | 
| efe0 | 6e 67 2d 6d 61 74 63 68 27 20 77 69 74 68 20 60    73 68 6f 75 6c 64 27 2e 22 0a 20 20 60 28 73 68 | ng-match'.with.`should'."...`(sh | 
| f000 | 6f 75 6c 64 0a 20 20 20 28 73 74 72 69 6e 67 2d    6d 61 74 63 68 0a 20 20 20 20 2c 72 65 67 65 78 | ould....(string-match.....,regex | 
| f020 | 0a 20 20 20 20 2c 61 29 29 29 0a 0a 3b 3b 20 43    75 73 74 6f 6d 69 7a 61 74 69 6f 6e 20 73 74 75 | .....,a)))..;;.Customization.stu | 
| f040 | 66 66 0a 0a 28 64 65 66 67 72 6f 75 70 20 65 6c    6e 6f 64 65 20 6e 69 6c 0a 20 20 22 41 6e 20 65 | ff..(defgroup.elnode.nil..."An.e | 
| f060 | 78 74 65 6e 73 69 62 6c 65 20 61 73 79 6e 63 68    72 6f 6e 6f 75 73 20 77 65 62 20 73 65 72 76 65 | xtensible.asynchronous.web.serve | 
| f080 | 72 20 66 6f 72 20 45 6d 61 63 73 2e 22 0a 20 20    3a 67 72 6f 75 70 20 27 61 70 70 6c 69 63 61 74 | r.for.Emacs."...:group.'applicat | 
| f0a0 | 69 6f 6e 73 29 0a 0a 28 64 65 66 76 61 72 20 65    6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 | ions)..(defvar.elnode-server-soc | 
| f0c0 | 6b 65 74 20 6e 69 6c 0a 20 20 22 57 68 65 72 65    20 77 65 20 73 74 6f 72 65 20 74 68 65 20 73 65 | ket.nil..."Where.we.store.the.se | 
| f0e0 | 72 76 65 72 20 73 6f 63 6b 65 74 73 2e 0a 0a 54    68 69 73 20 69 73 20 61 6e 20 61 6c 69 73 74 20 | rver.sockets...This.is.an.alist. | 
| f100 | 6f 66 20 70 72 6f 63 2d 3e 73 65 72 76 65 72 2d    70 72 6f 63 65 73 73 3a 0a 0a 20 20 28 70 6f 72 | of.proc->server-process:....(por | 
| f120 | 74 20 2e 20 70 72 6f 63 65 73 73 29 22 29 0a 0a    0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f | t...process)")...(defcustom.elno | 
| f140 | 64 65 2d 69 6e 69 74 2d 70 6f 72 74 20 38 30 30    30 0a 20 20 22 54 68 65 20 70 6f 72 74 20 74 68 | de-init-port.8000..."The.port.th | 
| f160 | 61 74 20 60 65 6c 6e 6f 64 65 2d 69 6e 69 74 27    20 73 74 61 72 74 73 20 74 68 65 20 64 65 66 61 | at.`elnode-init'.starts.the.defa | 
| f180 | 75 6c 74 20 73 65 72 76 65 72 20 6f 6e 2e 22 0a    20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 | ult.server.on."...:group.'elnode | 
| f1a0 | 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65 6c    6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73 74 20 22 | )..(defcustom.elnode-init-host." | 
| f1c0 | 6c 6f 63 61 6c 68 6f 73 74 22 0a 20 20 22 54 68    65 20 64 65 66 61 75 6c 74 20 68 6f 73 74 20 66 | localhost"..."The.default.host.f | 
| f1e0 | 6f 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 77    65 62 73 65 72 76 65 72 2e 0a 0a 41 6c 73 6f 20 | or.the.default.webserver...Also. | 
| f200 | 75 73 65 64 20 61 73 20 74 68 65 20 64 65 66 61    75 6c 74 20 68 6f 73 74 20 66 6f 72 20 60 65 6c | used.as.the.default.host.for.`el | 
| f220 | 6e 6f 64 65 2d 6d 61 6b 65 2d 77 65 62 73 65 72    76 65 72 27 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f | node-make-webserver'...See.`elno | 
| f240 | 64 65 2d 69 6e 69 74 27 20 66 6f 72 20 6d 6f 72    65 20 64 65 74 61 69 6c 73 2e 22 0a 20 20 3a 67 | de-init'.for.more.details."...:g | 
| f260 | 72 6f 75 70 20 27 65 6c 6e 6f 64 65 29 0a 0a 0a    3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 | roup.'elnode)...;;;###autoload.( | 
| f280 | 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d    63 6f 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 | defconst.elnode-config-directory | 
| f2a0 | 0a 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d    6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 75 73 65 | ...(expand-file-name.(concat.use | 
| f2c0 | 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72    79 20 22 65 6c 6e 6f 64 65 2f 22 29 29 0a 20 20 | r-emacs-directory."elnode/"))... | 
| f2e0 | 22 54 68 65 20 63 6f 6e 66 69 67 20 64 69 72 65    63 74 6f 72 79 20 66 6f 72 20 65 6c 6e 6f 64 65 | "The.config.directory.for.elnode | 
| f300 | 20 74 6f 20 73 74 6f 72 65 20 70 65 72 69 70 68    65 72 61 6c 20 66 69 6c 65 73 2e 0a 0a 54 68 69 | .to.store.peripheral.files...Thi | 
| f320 | 73 20 69 73 20 75 73 65 64 20 61 73 20 61 20 62    61 73 65 20 66 6f 72 20 6f 74 68 65 72 20 63 6f | s.is.used.as.a.base.for.other.co | 
| f340 | 6e 73 74 61 6e 74 20 64 69 72 65 63 74 6f 72 79    20 6f 72 20 66 69 6c 65 0a 6e 61 6d 65 73 20 28 | nstant.directory.or.file.names.( | 
| f360 | 74 68 65 20 65 6c 6e 6f 64 65 20 61 75 74 68 20    64 61 74 61 62 61 73 65 20 69 73 20 61 20 66 69 | the.elnode.auth.database.is.a.fi | 
| f380 | 6c 65 20 69 6e 20 74 68 69 73 20 64 69 72 65 63    74 6f 72 79 2c 20 74 68 65 0a 65 6c 6e 6f 64 65 | le.in.this.directory,.the.elnode | 
| f3a0 | 20 77 65 62 73 65 72 76 65 72 20 68 61 73 20 61    20 64 6f 63 72 6f 6f 74 20 64 69 72 65 63 74 6f | .webserver.has.a.docroot.directo | 
| f3c0 | 72 79 20 69 6e 20 74 68 69 73 20 64 69 72 65 63    74 6f 72 79 29 2e 0a 0a 49 74 20 69 73 20 62 61 | ry.in.this.directory)...It.is.ba | 
| f3e0 | 73 65 64 20 6f 6e 20 74 68 65 20 60 75 73 65 72    2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 | sed.on.the.`user-emacs-directory | 
| f400 | 27 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 73    65 65 6d 73 20 74 6f 0a 62 65 20 73 65 74 2c 20 | '.which.always.seems.to.be.set,. | 
| f420 | 65 76 65 6e 20 77 68 65 6e 20 65 6d 61 63 73 20    69 73 20 73 74 61 72 74 65 64 20 77 69 74 68 20 | even.when.emacs.is.started.with. | 
| f440 | 2d 51 2e 22 29 0a 0a 0a 3b 3b 20 45 72 72 6f 72    20 6c 6f 67 20 68 61 6e 64 6c 69 6e 67 0a 0a 28 | -Q.")...;;.Error.log.handling..( | 
| f460 | 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 74 72 75    6e 63 20 28 64 61 74 61 29 0a 20 20 22 54 72 75 | defun.elnode-trunc.(data)..."Tru | 
| f480 | 6e 63 61 74 65 20 61 6e 64 20 63 6c 65 61 6e 20    44 41 54 41 2e 22 0a 20 20 28 72 65 70 6c 61 63 | ncate.and.clean.DATA."...(replac | 
| f4a0 | 65 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69    6e 67 0a 20 20 20 22 5b 5c 72 5c 6e 5d 22 20 22 | e-regexp-in-string...."[\r\n]"." | 
| f4c0 | 2e 22 0a 20 20 20 28 73 75 62 73 74 72 69 6e 67    20 64 61 74 61 20 30 20 28 69 66 20 28 3e 20 32 | ."....(substring.data.0.(if.(>.2 | 
| f4e0 | 30 20 28 6c 65 6e 67 74 68 20 64 61 74 61 29 29    20 28 6c 65 6e 67 74 68 20 64 61 74 61 29 20 32 | 0.(length.data)).(length.data).2 | 
| f500 | 30 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c    6e 6f 64 65 2d 74 72 69 6d 20 28 73 74 72 29 0a | 0))))..(defun.elnode-trim.(str). | 
| f520 | 20 20 22 54 72 69 6d 20 6f 66 66 20 77 68 69 74    65 73 70 61 63 65 2e 22 0a 20 20 28 73 74 72 69 | .."Trim.off.whitespace."...(stri | 
| f540 | 6e 67 2d 6d 61 74 63 68 20 22 5b 20 5c 74 5c 6e    5c 72 5d 2a 24 22 20 73 74 72 29 0a 20 20 28 73 | ng-match."[.\t\n\r]*$".str)...(s | 
| f560 | 65 74 71 20 73 74 72 20 28 72 65 70 6c 61 63 65    2d 6d 61 74 63 68 20 22 22 20 6e 69 6c 20 6e 69 | etq.str.(replace-match."".nil.ni | 
| f580 | 6c 20 73 74 72 29 29 0a 20 20 28 73 74 72 69 6e    67 2d 6d 61 74 63 68 20 22 5e 5b 20 5c 74 5c 6e | l.str))...(string-match."^[.\t\n | 
| f5a0 | 5c 72 5d 2a 22 20 73 74 72 29 0a 20 20 28 72 65    70 6c 61 63 65 2d 6d 61 74 63 68 20 22 22 20 6e | \r]*".str)...(replace-match."".n | 
| f5c0 | 69 6c 20 6e 69 6c 20 73 74 72 29 29 0a 0a 28 64    65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6a 6f 69 6e | il.nil.str))..(defun.elnode-join | 
| f5e0 | 20 28 26 72 65 73 74 20 70 61 72 74 73 29 0a 20    20 22 50 61 74 68 20 6a 6f 69 6e 20 74 68 65 20 | .(&rest.parts)..."Path.join.the. | 
| f600 | 70 61 72 74 73 20 74 6f 67 65 74 68 65 72 2e 0a    0a 45 6d 61 63 73 4c 69 73 70 20 73 68 6f 75 6c | parts.together...EmacsLisp.shoul | 
| f620 | 64 20 72 65 61 6c 6c 79 20 70 72 6f 76 69 64 65    20 74 68 69 73 20 62 79 20 64 65 66 61 75 6c 74 | d.really.provide.this.by.default | 
| f640 | 2e 22 0a 20 20 28 6c 65 74 2a 20 28 73 61 76 65    64 70 61 72 74 0a 20 20 20 20 20 20 20 20 20 28 | ."...(let*.(savedpart..........( | 
| f660 | 70 61 74 68 0a 20 20 20 20 20 20 20 20 20 20 28    6c 6f 6f 70 20 66 6f 72 20 70 20 69 6e 20 70 61 | path...........(loop.for.p.in.pa | 
| f680 | 72 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 | rts..............concat......... | 
| f6a0 | 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 3e 20    28 6c 65 6e 67 74 68 20 70 29 20 30 29 0a 20 20 | .......(when.(>.(length.p).0)... | 
| f6c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    73 65 74 71 20 73 61 76 65 64 70 61 72 74 20 70 | ...............(setq.savedpart.p | 
| f6e0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 61 73 | )..................(file-name-as | 
| f700 | 2d 64 69 72 65 63 74 6f 72 79 20 70 29 29 29 29    29 0a 20 20 20 20 28 69 66 20 28 65 71 75 61 6c | -directory.p))))).....(if.(equal | 
| f720 | 20 28 65 6c 74 20 73 61 76 65 64 70 61 72 74 20    28 2d 20 28 6c 65 6e 67 74 68 20 73 61 76 65 64 | .(elt.savedpart.(-.(length.saved | 
| f740 | 70 61 72 74 29 20 31 29 29 20 3f 5c 2f 29 0a 20    20 20 20 20 20 20 20 70 61 74 68 0a 20 20 20 20 | part).1)).?\/).........path..... | 
| f760 | 20 20 20 20 28 73 75 62 73 74 72 69 6e 67 20 70    61 74 68 20 30 20 28 2d 20 28 6c 65 6e 67 74 68 | ....(substring.path.0.(-.(length | 
| f780 | 20 70 61 74 68 29 20 31 29 29 29 29 29 0a 0a 28    64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 64 69 | .path).1)))))..(defun.elnode--di | 
| f7a0 | 72 2d 73 65 74 75 70 20 28 64 69 72 20 64 65 66    61 75 6c 74 20 64 65 66 61 75 6c 74 2d 66 69 6c | r-setup.(dir.default.default-fil | 
| f7c0 | 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e-name.......................... | 
| f7e0 | 20 26 6f 70 74 69 6f 6e 61 6c 20 74 61 72 67 65    74 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 | .&optional.target-file-name..... | 
| f800 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 26 72 65 73 74 20 6f 74 68 65 | ......................&rest.othe | 
| f820 | 72 2d 66 69 6c 65 73 29 0a 20 20 22 49 6e 73 74    61 6c 6c 20 61 20 44 49 52 20 61 6e 64 20 44 45 | r-files)..."Install.a.DIR.and.DE | 
| f840 | 46 41 55 4c 54 2d 46 49 4c 45 2d 4e 41 4d 45 20    69 66 20 69 74 27 73 20 6e 6f 74 20 73 65 74 75 | FAULT-FILE-NAME.if.it's.not.setu | 
| f860 | 70 20 61 6c 72 65 61 64 79 2e 0a 0a 54 68 69 73    20 69 73 20 61 20 70 61 63 6b 61 67 69 6e 67 20 | p.already...This.is.a.packaging. | 
| f880 | 68 65 6c 70 65 72 2e 20 20 49 74 20 68 65 6c 70    73 20 61 6e 20 45 4c 50 41 20 70 61 63 6b 61 67 | helper...It.helps.an.ELPA.packag | 
| f8a0 | 65 20 69 6e 73 74 61 6c 6c 0a 66 69 6c 65 73 20    66 72 6f 6d 20 69 74 27 73 20 70 61 63 6b 61 67 | e.install.files.from.it's.packag | 
| f8c0 | 65 20 62 61 73 65 20 69 6e 74 6f 20 74 68 65 20    75 73 65 72 27 73 20 45 6d 61 63 73 2e 20 20 49 | e.base.into.the.user's.Emacs...I | 
| f8e0 | 66 20 74 68 65 20 44 49 52 0a 69 73 20 73 70 65    63 69 66 69 65 64 20 75 6e 64 65 72 20 60 75 73 | f.the.DIR.is.specified.under.`us | 
| f900 | 65 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f    72 79 27 2e 0a 0a 44 49 52 20 69 73 20 74 68 65 | er-emacs-directory'...DIR.is.the | 
| f920 | 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 69 6e    73 74 61 6c 6c 2c 20 44 45 46 41 55 4c 54 20 69 | .directory.to.install,.DEFAULT.i | 
| f940 | 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f    72 20 74 68 61 74 0a 64 69 72 65 63 74 6f 72 79 | s.the.default.for.that.directory | 
| f960 | 2c 20 75 6e 6c 65 73 73 20 44 49 52 20 65 71 75    61 6c 73 20 44 45 46 41 55 4c 54 20 6e 6f 74 68 | ,.unless.DIR.equals.DEFAULT.noth | 
| f980 | 69 6e 67 20 69 73 20 64 6f 6e 65 2e 0a 0a 44 45    46 41 55 4c 54 2d 46 49 4c 45 2d 4e 41 4d 45 20 | ing.is.done...DEFAULT-FILE-NAME. | 
| f9a0 | 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74    68 65 20 66 69 6c 65 20 74 68 61 74 20 77 69 6c | is.the.name.of.the.file.that.wil | 
| f9c0 | 6c 20 62 65 20 69 6e 73 74 61 6c 6c 65 64 0a 69    6e 20 44 49 52 2e 20 20 49 74 20 69 73 20 74 68 | l.be.installed.in.DIR...It.is.th | 
| f9e0 | 65 20 65 78 70 65 63 74 65 64 20 6e 61 6d 65 20    6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 66 69 | e.expected.name.of.the.source.fi | 
| fa00 | 6c 65 20 69 6e 73 69 64 65 20 74 68 65 0a 70 61    63 6b 61 67 65 2e 20 20 55 6e 6c 65 73 73 20 54 | le.inside.the.package...Unless.T | 
| fa20 | 41 52 47 45 54 2d 46 49 4c 45 2d 4e 41 4d 45 20    69 73 20 73 70 65 63 69 66 69 65 64 20 69 74 20 | ARGET-FILE-NAME.is.specified.it. | 
| fa40 | 69 73 20 61 6c 73 6f 20 74 68 65 0a 6e 61 6d 65    20 74 68 65 20 69 6e 73 74 61 6c 6c 65 64 20 66 | is.also.the.name.the.installed.f | 
| fa60 | 69 6c 65 20 77 69 6c 6c 20 62 65 20 67 69 76 65    6e 2e 20 20 49 66 20 74 68 65 20 54 41 52 47 45 | ile.will.be.given...If.the.TARGE | 
| fa80 | 54 2d 46 49 4c 45 2d 4e 41 4d 45 0a 69 73 20 73    70 65 63 69 66 69 65 64 20 74 68 65 6e 20 74 68 | T-FILE-NAME.is.specified.then.th | 
| faa0 | 61 74 20 69 73 20 74 68 65 20 74 68 65 20 6e 61    6d 65 20 74 68 65 20 66 69 6c 65 20 69 73 20 69 | at.is.the.the.name.the.file.is.i | 
| fac0 | 6e 73 74 61 6c 6c 65 64 20 61 73 2e 0a 0a 49 66    20 4f 54 48 45 52 2d 46 49 4c 45 53 20 69 73 20 | nstalled.as...If.OTHER-FILES.is. | 
| fae0 | 70 72 65 73 65 6e 74 20 69 74 20 69 73 20 74 72    65 61 74 65 64 20 61 73 20 61 20 6c 69 73 74 20 | present.it.is.treated.as.a.list. | 
| fb00 | 6f 66 20 6f 74 68 65 72 0a 66 69 6c 65 6e 61 6d    65 73 20 74 6f 20 63 6f 70 79 20 74 6f 20 74 68 | of.other.filenames.to.copy.to.th | 
| fb20 | 65 20 44 49 52 2e 22 0a 20 20 28 77 68 65 6e 20    20 28 61 6e 64 0a 20 20 20 20 20 20 20 20 20 20 | e.DIR."...(when..(and........... | 
| fb40 | 28 65 71 75 61 6c 0a 20 20 20 20 20 20 20 20 20    20 20 64 69 72 0a 20 20 20 20 20 20 20 20 20 20 | (equal............dir........... | 
| fb60 | 20 64 65 66 61 75 6c 74 29 0a 20 20 20 20 20 20    20 20 20 20 28 6e 6f 74 20 28 66 69 6c 65 2d 65 | .default)...........(not.(file-e | 
| fb80 | 78 69 73 74 73 2d 70 20 64 69 72 29 29 29 0a 20    20 20 20 3b 3b 20 44 6f 20 69 6e 73 74 61 6c 6c | xists-p.dir))).....;;.Do.install | 
| fba0 | 0a 20 20 20 20 28 6c 65 74 20 28 28 73 6f 75 72    63 65 2d 64 65 66 61 75 6c 74 2d 66 69 6c 65 0a | .....(let.((source-default-file. | 
| fbc0 | 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63    61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 | ...........(concat.............( | 
| fbe0 | 66 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74    6f 72 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 | file-name-directory............. | 
| fc00 | 20 28 6f 72 20 28 62 75 66 66 65 72 2d 66 69 6c    65 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 | .(or.(buffer-file-name)......... | 
| fc20 | 20 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c    2d 66 69 6c 65 20 27 65 6c 6e 6f 64 65 2d 2d 64 | .........(symbol-file.'elnode--d | 
| fc40 | 69 72 2d 73 65 74 75 70 29 29 29 20 3b 20 74 68    69 73 20 6e 6f 74 20 76 65 72 79 20 70 6f 72 74 | ir-setup))).;.this.not.very.port | 
| fc60 | 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20    20 3b 3b 20 54 68 69 73 20 73 68 6f 75 6c 64 20 | able.............;;.This.should. | 
| fc80 | 70 72 6f 62 61 62 6c 79 20 74 69 65 20 69 6e 20    77 69 74 68 20 74 68 65 20 6d 61 6b 65 66 69 6c | probably.tie.in.with.the.makefil | 
| fca0 | 65 20 73 6f 6d 65 68 6f 77 0a 20 20 20 20 20 20    20 20 20 20 20 20 64 65 66 61 75 6c 74 2d 66 69 | e.somehow.............default-fi | 
| fcc0 | 6c 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 20    20 28 77 68 65 6e 20 28 61 6e 64 20 73 6f 75 72 | le-name))).......(when.(and.sour | 
| fce0 | 63 65 2d 64 65 66 61 75 6c 74 2d 66 69 6c 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ce-default-file................. | 
| fd00 | 20 28 66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20    73 6f 75 72 63 65 2d 64 65 66 61 75 6c 74 2d 66 | .(file-exists-p.source-default-f | 
| fd20 | 69 6c 65 29 29 0a 20 20 20 20 20 20 20 20 28 6c    65 74 20 28 28 74 6f 20 28 63 6f 6e 63 61 74 0a | ile)).........(let.((to.(concat. | 
| fd40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 64 69 72 0a 20 20 20 20 20 20 20 20 20 | ...................dir.......... | 
| fd60 | 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 74 61    72 67 65 74 2d 66 69 6c 65 2d 6e 61 6d 65 20 64 | ..........(or.target-file-name.d | 
| fd80 | 65 66 61 75 6c 74 2d 66 69 6c 65 2d 6e 61 6d 65    29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 | efault-file-name))))...........( | 
| fda0 | 6d 61 6b 65 2d 64 69 72 65 63 74 6f 72 79 20 64    69 72 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 | make-directory.dir.t)........... | 
| fdc0 | 28 6d 65 73 73 61 67 65 20 22 63 6f 70 79 69 6e    67 20 25 73 20 65 6c 6e 6f 64 65 20 77 69 6b 69 | (message."copying.%s.elnode.wiki | 
| fde0 | 20 64 65 66 61 75 6c 74 20 70 61 67 65 20 74 6f    20 25 73 22 20 64 69 72 20 74 6f 29 0a 20 20 20 | .default.page.to.%s".dir.to).... | 
| fe00 | 20 20 20 20 20 20 20 28 64 69 72 65 64 2d 63 6f    70 79 2d 66 69 6c 65 20 73 6f 75 72 63 65 2d 64 | .......(dired-copy-file.source-d | 
| fe20 | 65 66 61 75 6c 74 2d 66 69 6c 65 20 74 6f 20 6e    69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 28 77 | efault-file.to.nil)...........(w | 
| fe40 | 68 65 6e 20 6f 74 68 65 72 2d 66 69 6c 65 73 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 66 | hen.other-files.............(nof | 
| fe60 | 6c 65 74 20 28 28 72 65 73 6f 6c 76 65 2d 66 69    6c 65 6e 61 6d 65 20 28 66 69 6c 65 29 0a 20 20 | let.((resolve-filename.(file)... | 
| fe80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 69 66 20 28 66 69 6c 65 2d 6e 61 6d | ...................(if.(file-nam | 
| fea0 | 65 2d 61 62 73 6f 6c 75 74 65 2d 70 20 66 69 6c    65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | e-absolute-p.file).............. | 
| fec0 | 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ............file................ | 
| fee0 | 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..........(concat............... | 
| ff00 | 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69 6c    65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 | ............(file-name-directory | 
| ff20 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 | ............................sour | 
| ff40 | 63 65 2d 64 65 66 61 75 6c 74 2d 66 69 6c 65 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ce-default-file)................ | 
| ff60 | 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 29    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ...........file))))............. | 
| ff80 | 20 20 28 6c 6f 6f 70 20 66 6f 72 20 66 69 6c 65    20 69 6e 20 6f 74 68 65 72 2d 66 69 6c 65 73 0a | ..(loop.for.file.in.other-files. | 
| ffa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3b 3b 20 64 6f 65 73 20 74 68 65 20 66 69 6c | .................;;.does.the.fil | 
| ffc0 | 65 20 65 78 69 73 74 3f 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6e | e.exist?..................if.(an | 
| ffe0 | 64 20 66 69 6c 65 20 28 66 69 6c 65 2d 65 78 69    73 74 73 2d 70 20 28 72 65 73 6f 6c 76 65 2d 66 | d.file.(file-exists-p.(resolve-f | 
| 10000 | 69 6c 65 6e 61 6d 65 20 66 69 6c 65 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ilename.file)))................. | 
| 10020 | 20 64 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 64 69 72 65 64 2d 63 6f | .do....................(dired-co | 
| 10040 | 70 79 2d 66 69 6c 65 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 66 | py-file.....................;;.f | 
| 10060 | 72 6f 6d 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 72 65 73 6f | rom........................(reso | 
| 10080 | 6c 76 65 2d 66 69 6c 65 6e 61 6d 65 20 66 69 6c    65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | lve-filename.file).............. | 
| 100a0 | 20 20 20 20 20 20 20 3b 3b 20 74 6f 2e 2e 2e 6e    64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .......;;.to...nd............... | 
| 100c0 | 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 64 69    72 20 28 66 69 6c 65 2d 6e 61 6d 65 2d 6e 6f 6e | ......(concat.dir.(file-name-non | 
| 100e0 | 64 69 72 65 63 74 6f 72 79 20 66 69 6c 65 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | directory.file))................ | 
| 10100 | 20 20 20 20 20 6e 69 6c 29 29 29 29 29 29 29 29    29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | .....nil)))))))))..(defun.elnode | 
| 10120 | 2d 2d 70 72 6f 74 65 63 74 65 64 2d 6c 6f 61 64    20 28 66 65 61 74 75 72 65 20 64 69 72 29 0a 20 | --protected-load.(feature.dir).. | 
| 10140 | 20 22 54 72 79 20 61 6e 64 20 72 65 71 75 69 72    65 20 46 45 41 54 55 52 45 2c 20 69 66 20 69 74 | ."Try.and.require.FEATURE,.if.it | 
| 10160 | 20 66 61 69 6c 73 20 74 72 79 20 61 6e 64 20 6c    6f 61 64 2e 22 0a 20 20 28 63 6f 6e 64 69 74 69 | .fails.try.and.load."...(conditi | 
| 10180 | 6f 6e 2d 63 61 73 65 20 65 72 72 0a 20 20 20 20    20 20 28 72 65 71 75 69 72 65 20 66 65 61 74 75 | on-case.err.......(require.featu | 
| 101a0 | 72 65 29 0a 20 20 20 20 28 66 69 6c 65 2d 65 72    72 6f 72 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 | re).....(file-error.(progn...... | 
| 101c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f    61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | .............(load.............. | 
| 101e0 | 20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 64 69    72 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 66 | ......(concat.dir.(symbol-name.f | 
| 10200 | 65 61 74 75 72 65 29 20 22 2e 65 6c 22 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | eature).".el"))................. | 
| 10220 | 20 20 28 72 65 71 75 69 72 65 20 66 65 61 74 75    72 65 29 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 | ..(require.feature)))))..;;;###a | 
| 10240 | 75 74 6f 6c 6f 61 64 0a 28 64 65 66 6d 61 63 72    6f 20 65 6c 6e 6f 64 65 2d 61 70 70 20 28 64 69 | utoload.(defmacro.elnode-app.(di | 
| 10260 | 72 2d 76 61 72 20 26 72 65 73 74 20 66 65 61 74    75 72 65 73 29 0a 20 20 22 41 20 6d 61 63 72 6f | r-var.&rest.features)..."A.macro | 
| 10280 | 20 74 68 61 74 20 73 65 74 73 20 75 70 20 74 68    65 20 62 6f 72 69 6e 67 20 62 6f 69 6c 65 72 70 | .that.sets.up.the.boring.boilerp | 
| 102a0 | 6c 61 74 65 20 66 6f 72 20 45 6c 6e 6f 64 65 20    61 70 70 73 2e 0a 0a 54 68 69 73 20 73 65 74 73 | late.for.Elnode.apps...This.sets | 
| 102c0 | 20 75 70 20 6c 65 78 69 63 61 6c 20 62 69 6e 64    69 6e 67 2c 20 63 61 70 74 75 72 65 73 20 74 68 | .up.lexical.binding,.captures.th | 
| 102e0 | 65 20 6d 6f 64 75 6c 65 27 73 20 70 61 72 65 6e    74 0a 64 69 72 65 63 74 6f 72 79 20 69 6e 20 44 | e.module's.parent.directory.in.D | 
| 10300 | 49 52 2d 56 41 52 2c 20 72 65 71 75 69 72 65 73    20 60 63 6c 27 20 61 6e 64 20 61 6e 79 20 6f 74 | IR-VAR,.requires.`cl'.and.any.ot | 
| 10320 | 68 65 72 20 66 65 61 74 75 72 65 73 20 79 6f 75    0a 6c 69 73 74 2e 20 20 55 73 65 20 69 74 20 6c | her.features.you.list...Use.it.l | 
| 10340 | 69 6b 65 20 74 68 69 73 3a 0a 0a 20 28 65 6c 6e    6f 64 65 2d 61 70 70 20 6d 79 2d 61 70 70 2d 64 | ike.this:...(elnode-app.my-app-d | 
| 10360 | 69 72 20 65 73 78 6d 6c 20 6d 6f 6e 67 6f 2d 65    6c 6e 6f 64 65 29 0a 0a 4f 6e 63 65 20 75 73 65 | ir.esxml.mongo-elnode)..Once.use | 
| 10380 | 64 20 79 6f 75 20 63 61 6e 20 61 63 63 65 73 73    20 74 68 65 20 76 61 72 69 61 62 6c 65 20 60 6d | d.you.can.access.the.variable.`m | 
| 103a0 | 79 2d 61 70 70 2d 64 69 72 27 20 61 73 20 74 68    65 20 64 69 72 6e 61 6d 65 0a 6f 66 20 79 6f 75 | y-app-dir'.as.the.dirname.of.you | 
| 103c0 | 72 20 6d 6f 64 75 6c 65 20 28 77 68 69 63 68 20    69 73 20 75 73 65 66 75 6c 20 66 6f 72 20 73 65 | r.module.(which.is.useful.for.se | 
| 103e0 | 72 76 69 6e 67 20 66 69 6c 65 73 20 61 6e 64 20    73 75 63 68 29 2e 22 0a 20 20 28 64 65 63 6c 61 | rving.files.and.such)."...(decla | 
| 10400 | 72 65 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20    20 28 6c 65 74 20 28 28 64 69 72 2d 76 61 72 2d | re.(indent.1))...(let.((dir-var- | 
| 10420 | 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22    64 76 22 29 29 29 0a 20 20 20 20 60 28 6c 65 74 | v.(make-symbol."dv"))).....`(let | 
| 10440 | 20 28 28 2c 64 69 72 2d 76 61 72 2d 76 20 28 66    69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f | .((,dir-var-v.(file-name-directo | 
| 10460 | 72 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 | ry.........................(or.( | 
| 10480 | 62 75 66 66 65 72 2d 66 69 6c 65 2d 6e 61 6d 65    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | buffer-file-name)............... | 
| 104a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f    61 64 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 | ..............load-file-name.... | 
| 104c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 | .........................default | 
| 104e0 | 2d 64 69 72 65 63 74 6f 72 79 29 29 29 29 0a 20    20 20 20 20 20 20 28 73 65 74 71 20 6c 65 78 69 | -directory))))........(setq.lexi | 
| 10500 | 63 61 6c 2d 62 69 6e 64 69 6e 67 20 74 29 0a 20    20 20 20 20 20 20 28 64 65 66 63 6f 6e 73 74 20 | cal-binding.t)........(defconst. | 
| 10520 | 2c 64 69 72 2d 76 61 72 20 2c 64 69 72 2d 76 61    72 2d 76 29 0a 20 20 20 20 20 20 20 28 72 65 71 | ,dir-var.,dir-var-v)........(req | 
| 10540 | 75 69 72 65 20 27 63 6c 29 0a 20 20 20 20 20 20    20 28 72 65 71 75 69 72 65 20 27 65 6c 6e 6f 64 | uire.'cl)........(require.'elnod | 
| 10560 | 65 29 0a 20 20 20 20 20 20 20 2c 40 28 6c 6f 6f    70 20 66 6f 72 20 66 20 69 6e 20 66 65 61 74 75 | e)........,@(loop.for.f.in.featu | 
| 10580 | 72 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    63 6f 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 | res.............collect......... | 
| 105a0 | 20 20 20 20 20 20 60 28 65 6c 6e 6f 64 65 2d 2d    70 72 6f 74 65 63 74 65 64 2d 6c 6f 61 64 0a 20 | ......`(elnode--protected-load.. | 
| 105c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    71 75 6f 74 65 20 2c 66 29 20 2c 64 69 72 2d 76 | ...............(quote.,f).,dir-v | 
| 105e0 | 61 72 2d 76 29 29 29 29 29 0a 0a 28 64 65 66 63    75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 | ar-v)))))..(defcustom.elnode-log | 
| 10600 | 2d 66 69 6c 65 73 2d 64 69 72 65 63 74 6f 72 79    20 6e 69 6c 0a 20 20 22 54 68 65 20 64 69 72 65 | -files-directory.nil..."The.dire | 
| 10620 | 63 74 6f 72 79 20 74 6f 20 73 74 6f 72 65 20 61    6e 79 20 45 6c 6e 6f 64 65 20 6c 6f 67 20 66 69 | ctory.to.store.any.Elnode.log.fi | 
| 10640 | 6c 65 73 2e 0a 0a 49 66 20 74 68 69 73 20 69 73    20 6e 6f 74 2d 6e 69 6c 20 28 69 6e 20 77 68 69 | les...If.this.is.not-nil.(in.whi | 
| 10660 | 63 68 20 63 61 73 65 20 6c 6f 67 73 20 61 72 65    20 6e 6f 74 20 73 61 76 65 64 20 61 74 20 61 6c | ch.case.logs.are.not.saved.at.al | 
| 10680 | 6c 29 20 69 74 0a 6d 75 73 74 20 62 65 20 74 68    65 20 6e 61 6d 65 20 6f 66 20 61 20 64 69 72 65 | l).it.must.be.the.name.of.a.dire | 
| 106a0 | 63 74 6f 72 79 20 45 6c 6e 6f 64 65 20 63 61 6e    20 75 73 65 20 66 6f 72 20 73 74 6f 72 69 6e 67 | ctory.Elnode.can.use.for.storing | 
| 106c0 | 20 6c 6f 67 73 2e 0a 49 66 20 61 20 64 69 72 65    63 74 6f 72 79 20 69 73 20 73 70 65 63 69 66 69 | .logs..If.a.directory.is.specifi | 
| 106e0 | 65 64 20 62 75 74 20 69 74 20 64 6f 65 73 20 6e    6f 74 20 65 78 69 73 74 20 69 74 20 69 73 20 63 | ed.but.it.does.not.exist.it.is.c | 
| 10700 | 72 65 61 74 65 64 2e 22 0a 20 20 3a 67 72 6f 75    70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 | reated."...:group.'elnode...:typ | 
| 10720 | 65 20 27 28 63 68 6f 69 63 65 20 28 63 6f 6e 73    74 20 3a 74 61 67 20 22 4f 66 66 22 20 6e 69 6c | e.'(choice.(const.:tag."Off".nil | 
| 10740 | 29 0a 20 20 20 20 20 20 20 20 20 20 64 69 72 65    63 74 6f 72 79 29 29 0a 0a 28 64 65 66 76 61 72 | )...........directory))..(defvar | 
| 10760 | 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66    65 72 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 | .elnode-log-buffer-position-writ | 
| 10780 | 74 65 6e 20 30 0a 20 20 22 54 68 65 20 70 6f 73    69 74 69 6f 6e 20 69 6e 20 74 68 65 20 6c 6f 67 | ten.0..."The.position.in.the.log | 
| 107a0 | 20 62 75 66 66 65 72 20 77 72 69 74 74 65 6e 2e    0a 0a 54 68 69 73 20 69 73 20 75 73 65 64 20 62 | .buffer.written...This.is.used.b | 
| 107c0 | 79 20 60 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75    66 66 65 72 2d 6c 6f 67 27 20 74 6f 20 74 72 61 | y.`elnode-log-buffer-log'.to.tra | 
| 107e0 | 63 6b 20 77 68 61 74 20 68 61 73 20 62 65 65 6e    20 77 72 69 74 74 65 6e 0a 73 6f 20 66 61 72 2e | ck.what.has.been.written.so.far. | 
| 10800 | 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f    64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6d 61 | ")..(defvar.elnode-log-buffer-ma | 
| 10820 | 78 2d 73 69 7a 65 20 31 30 30 30 0a 20 20 22 4d    61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 | x-size.1000..."Maximum.number.of | 
| 10840 | 20 6c 69 6e 65 73 20 6f 66 20 6c 6f 67 2e 22 29    0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 | .lines.of.log.")..(defvar.elnode | 
| 10860 | 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 64 61 74 65    74 69 6d 65 2d 66 6f 72 6d 61 74 20 22 25 59 2d | -log-buffer-datetime-format."%Y- | 
| 10880 | 25 6d 2d 25 64 54 25 48 3a 25 4d 3a 25 53 22 0a    20 20 22 54 68 65 20 64 61 74 65 20 74 69 6d 65 | %m-%dT%H:%M:%S"..."The.date.time | 
| 108a0 | 20 66 6f 72 6d 61 74 20 75 73 65 64 20 62 79 20    60 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 | .format.used.by.`elnode-log-buff | 
| 108c0 | 65 72 2d 6c 6f 67 27 2e 22 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 | er-log'.")..(defun.elnode-log-bu | 
| 108e0 | 66 66 65 72 2d 6c 6f 67 20 28 74 65 78 74 20 62    75 66 66 65 72 2d 6f 72 2d 6e 61 6d 65 20 26 6f | ffer-log.(text.buffer-or-name.&o | 
| 10900 | 70 74 69 6f 6e 61 6c 20 66 69 6c 65 6e 61 6d 65    29 0a 20 20 22 4c 6f 67 20 54 45 58 54 20 74 6f | ptional.filename)..."Log.TEXT.to | 
| 10920 | 20 74 68 65 20 42 55 46 46 45 52 2d 4f 52 2d 4e    41 4d 45 20 73 61 76 69 6e 67 20 74 68 65 20 62 | .the.BUFFER-OR-NAME.saving.the.b | 
| 10940 | 75 66 66 65 72 20 69 6e 20 46 49 4c 45 4e 41 4d    45 2e 0a 0a 42 55 46 46 45 52 2d 4f 52 2d 4e 41 | uffer.in.FILENAME...BUFFER-OR-NA | 
| 10960 | 4d 45 20 69 73 20 65 69 74 68 65 72 20 61 20 62    75 66 66 65 72 20 6f 72 20 61 20 73 74 72 69 6e | ME.is.either.a.buffer.or.a.strin | 
| 10980 | 67 20 6e 61 6d 69 6e 67 20 61 20 62 75 66 66 65    72 2e 0a 46 49 4c 45 4e 41 4d 45 20 69 73 20 61 | g.naming.a.buffer..FILENAME.is.a | 
| 109a0 | 20 66 69 6c 65 6e 61 6d 65 20 74 6f 20 73 61 76    65 20 74 68 65 20 62 75 66 66 65 72 20 69 6e 74 | .filename.to.save.the.buffer.int | 
| 109c0 | 6f 2e 20 20 49 66 20 74 68 65 20 46 49 4c 45 4e    41 4d 45 0a 69 73 20 6e 6f 74 20 73 70 65 63 69 | o...If.the.FILENAME.is.not.speci | 
| 109e0 | 66 69 65 64 20 74 68 65 6e 20 77 65 20 74 72 79    20 74 6f 20 75 73 65 20 74 68 65 20 66 69 6c 65 | fied.then.we.try.to.use.the.file | 
| 10a00 | 6e 61 6d 65 20 6f 66 20 74 68 65 0a 42 55 46 46    45 52 2d 4f 52 2d 4e 41 4d 45 2e 0a 0a 49 66 20 | name.of.the.BUFFER-OR-NAME...If. | 
| 10a20 | 6e 65 69 74 68 65 72 20 61 20 62 75 66 66 65 72    20 66 69 6c 65 6e 61 6d 65 20 6e 6f 72 20 46 49 | neither.a.buffer.filename.nor.FI | 
| 10a40 | 4c 45 4e 41 4d 45 20 69 73 20 73 70 65 63 69 66    69 65 64 20 74 68 65 6e 20 61 6e 0a 65 72 72 6f | LENAME.is.specified.then.an.erro | 
| 10a60 | 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 0a    0a 54 68 65 20 54 45 58 54 20 69 73 20 6c 6f 67 | r.is.generated...The.TEXT.is.log | 
| 10a80 | 67 65 64 20 77 69 74 68 20 74 68 65 20 63 75 72    72 65 6e 74 20 64 61 74 65 20 61 6e 64 20 74 69 | ged.with.the.current.date.and.ti | 
| 10aa0 | 6d 65 20 66 6f 72 6d 61 74 74 65 64 20 77 69 74    68 0a 60 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 | me.formatted.with.`elnode-log-bu | 
| 10ac0 | 66 66 65 72 2d 64 61 74 65 74 69 6d 65 2d 66 6f    72 6d 61 74 27 2e 22 0a 20 20 28 6c 65 74 20 28 | ffer-datetime-format'."...(let.( | 
| 10ae0 | 28 6e 61 6d 65 20 28 6f 72 20 66 69 6c 65 6e 61    6d 65 20 28 62 75 66 66 65 72 2d 66 69 6c 65 2d | (name.(or.filename.(buffer-file- | 
| 10b00 | 6e 61 6d 65 20 28 67 65 74 2d 62 75 66 66 65 72    20 62 75 66 66 65 72 2d 6f 72 2d 6e 61 6d 65 29 | name.(get-buffer.buffer-or-name) | 
| 10b20 | 29 29 29 29 0a 20 20 20 20 28 77 69 74 68 2d 63    75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 28 67 | )))).....(with-current-buffer.(g | 
| 10b40 | 65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65    20 62 75 66 66 65 72 2d 6f 72 2d 6e 61 6d 65 29 | et-buffer-create.buffer-or-name) | 
| 10b60 | 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 62 75    66 66 65 72 2d 72 65 61 64 2d 6f 6e 6c 79 20 6e | .......(let.((buffer-read-only.n | 
| 10b80 | 69 6c 29 29 0a 20 20 20 20 20 20 20 20 28 75 6e    6c 65 73 73 20 28 61 73 73 71 0a 20 20 20 20 20 | il)).........(unless.(assq...... | 
| 10ba0 | 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6c 6e    6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 70 | ............'elnode-log-buffer-p | 
| 10bc0 | 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | osition-written................. | 
| 10be0 | 20 28 62 75 66 66 65 72 2d 6c 6f 63 61 6c 2d 76    61 72 69 61 62 6c 65 73 29 29 0a 20 20 20 20 20 | .(buffer-local-variables))...... | 
| 10c00 | 20 20 20 20 20 28 6d 61 6b 65 2d 6c 6f 63 61 6c    2d 76 61 72 69 61 62 6c 65 20 27 65 6c 6e 6f 64 | .....(make-local-variable.'elnod | 
| 10c20 | 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 70 6f 73    69 74 69 6f 6e 2d 77 72 69 74 74 65 6e 29 0a 20 | e-log-buffer-position-written).. | 
| 10c40 | 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 65    6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 | .........(setq.elnode-log-buffer | 
| 10c60 | 2d 70 6f 73 69 74 69 6f 6e 2d 77 72 69 74 74 65    6e 20 28 6d 61 6b 65 2d 6d 61 72 6b 65 72 29 29 | -position-written.(make-marker)) | 
| 10c80 | 0a 20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d    6d 61 72 6b 65 72 20 65 6c 6e 6f 64 65 2d 6c 6f | ...........(set-marker.elnode-lo | 
| 10ca0 | 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f    6e 2d 77 72 69 74 74 65 6e 20 28 70 6f 69 6e 74 | g-buffer-position-written.(point | 
| 10cc0 | 2d 6d 69 6e 29 29 29 0a 20 20 20 20 20 20 20 20    3b 3b 20 54 6f 20 74 65 73 74 20 74 68 69 73 20 | -min))).........;;.To.test.this. | 
| 10ce0 | 73 74 75 66 66 20 77 65 20 63 6f 75 6c 64 20 72    69 70 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f | stuff.we.could.rip.these.functio | 
| 10d00 | 6e 73 20 6f 75 74 20 69 6e 74 6f 0a 20 20 20 20    20 20 20 20 3b 3b 20 73 65 70 61 72 61 74 65 20 | ns.out.into.........;;.separate. | 
| 10d20 | 70 69 65 63 65 73 3f 0a 20 20 20 20 20 20 20 20    28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e 0a | pieces?.........(save-excursion. | 
| 10d40 | 20 20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d    63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 | ..........(goto-char.(point-max) | 
| 10d60 | 29 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 73    65 72 74 0a 20 20 20 20 20 20 20 20 20 20 20 28 | )...........(insert............( | 
| 10d80 | 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 22 25 73 3a 20 25 73 5c 6e 22 0a 20 20 | format............."%s:.%s\n"... | 
| 10da0 | 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61    74 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 65 6c | ..........(format-time-string.el | 
| 10dc0 | 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d    64 61 74 65 74 69 6d 65 2d 66 6f 72 6d 61 74 29 | node-log-buffer-datetime-format) | 
| 10de0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78    74 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b | .............text))...........;; | 
| 10e00 | 20 53 61 76 65 20 74 68 65 20 66 69 6c 65 20 69    66 20 77 65 20 68 61 76 65 20 61 20 66 69 6c 65 | .Save.the.file.if.we.have.a.file | 
| 10e20 | 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 28    77 68 65 6e 20 6e 61 6d 65 0a 20 20 20 20 20 20 | name...........(when.name....... | 
| 10e40 | 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28    66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 28 66 | ......(if.(not.(file-exists-p.(f | 
| 10e60 | 69 6c 65 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f    72 79 20 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 | ile-name-directory.name)))...... | 
| 10e80 | 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b 65    2d 64 69 72 65 63 74 6f 72 79 20 28 66 69 6c 65 | ...........(make-directory.(file | 
| 10ea0 | 2d 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 20    6e 61 6d 65 29 20 74 29 29 0a 20 20 20 20 20 20 | -name-directory.name).t))....... | 
| 10ec0 | 20 20 20 20 20 20 3b 3b 20 63 6f 75 6c 64 20 62    65 20 73 77 69 74 63 68 65 64 20 74 6f 20 77 72 | ......;;.could.be.switched.to.wr | 
| 10ee0 | 69 74 65 2d 72 65 67 69 6f 6e 20 2d 20 70 72 6f    62 61 62 6c 79 20 62 65 74 74 65 72 0a 20 20 20 | ite-region.-.probably.better.... | 
| 10f00 | 20 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64    2d 74 6f 2d 66 69 6c 65 20 65 6c 6e 6f 64 65 2d | .........(append-to-file.elnode- | 
| 10f20 | 6c 6f 67 2d 62 75 66 66 65 72 2d 70 6f 73 69 74    69 6f 6e 2d 77 72 69 74 74 65 6e 20 28 70 6f 69 | log-buffer-position-written.(poi | 
| 10f40 | 6e 74 2d 6d 61 78 29 20 6e 61 6d 65 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d 6d | nt-max).name).............(set-m | 
| 10f60 | 61 72 6b 65 72 20 65 6c 6e 6f 64 65 2d 6c 6f 67    2d 62 75 66 66 65 72 2d 70 6f 73 69 74 69 6f 6e | arker.elnode-log-buffer-position | 
| 10f80 | 2d 77 72 69 74 74 65 6e 20 28 70 6f 69 6e 74 2d    6d 61 78 29 29 29 0a 20 20 20 20 20 20 20 20 20 | -written.(point-max))).......... | 
| 10fa0 | 20 3b 3b 20 54 72 75 6e 63 61 74 65 20 74 68 65    20 66 69 6c 65 20 69 66 20 69 74 27 73 20 67 72 | .;;.Truncate.the.file.if.it's.gr | 
| 10fc0 | 6f 77 6e 20 74 6f 6f 20 6c 61 72 67 65 0a 20 20    20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 68 | own.too.large...........(goto-ch | 
| 10fe0 | 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 0a    20 20 20 20 20 20 20 20 20 20 28 66 6f 72 77 61 | ar.(point-max))...........(forwa | 
| 11000 | 72 64 2d 6c 69 6e 65 20 28 2d 20 65 6c 6e 6f 64    65 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6d 61 78 | rd-line.(-.elnode-log-buffer-max | 
| 11020 | 2d 73 69 7a 65 29 29 0a 20 20 20 20 20 20 20 20    20 20 28 62 65 67 69 6e 6e 69 6e 67 2d 6f 66 2d | -size))...........(beginning-of- | 
| 11040 | 6c 69 6e 65 29 0a 20 20 20 20 20 20 20 20 20 20    28 64 65 6c 65 74 65 2d 72 65 67 69 6f 6e 20 28 | line)...........(delete-region.( | 
| 11060 | 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 6e    74 29 29 29 29 29 29 29 0a 0a 28 64 65 66 63 75 | point-min).(point)))))))..(defcu | 
| 11080 | 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 65 72 72 6f    72 2d 6c 6f 67 2d 74 6f 2d 6d 65 73 73 61 67 65 | stom.elnode-error-log-to-message | 
| 110a0 | 73 20 74 0a 20 20 22 57 68 65 74 68 65 72 20 74    6f 20 73 65 6e 64 20 65 6c 6e 6f 64 65 20 6c 6f | s.t..."Whether.to.send.elnode.lo | 
| 110c0 | 67 67 69 6e 67 20 74 68 72 6f 75 67 68 20 74 68    65 20 6d 65 73 73 61 67 69 6e 67 20 73 79 73 74 | gging.through.the.messaging.syst | 
| 110e0 | 65 6d 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65    6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 | em."...:group.'elnode...:type.'( | 
| 11100 | 62 6f 6f 6c 65 61 6e 29 29 0a 0a 28 64 65 66 76    61 72 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 | boolean))..(defvar.elnode-server | 
| 11120 | 2d 65 72 72 6f 72 2d 6c 6f 67 20 22 2a 65 6c 6e    6f 64 65 2d 73 65 72 76 65 72 2d 65 72 72 6f 72 | -error-log."*elnode-server-error | 
| 11140 | 2a 22 0a 20 20 22 54 68 65 20 62 75 66 66 65 72    20 77 68 65 72 65 20 65 72 72 6f 72 20 6c 6f 67 | *"..."The.buffer.where.error.log | 
| 11160 | 20 6d 65 73 73 61 67 65 73 20 61 72 65 20 73 65    6e 74 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 | .messages.are.sent.")..(defvar.e | 
| 11180 | 6c 6e 6f 64 65 2d 2d 64 6f 2d 65 72 72 6f 72 2d    6c 6f 67 67 69 6e 67 20 74 0a 20 20 22 41 6c 6c | lnode--do-error-logging.t..."All | 
| 111a0 | 6f 77 73 20 74 65 73 74 73 20 74 6f 20 74 75 72    6e 20 6f 66 66 20 65 72 72 6f 72 20 6c 6f 67 67 | ows.tests.to.turn.off.error.logg | 
| 111c0 | 69 6e 67 2e 22 29 0a 0a 28 64 65 66 76 61 72 20    65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 73 65 6e | ing.")..(defvar.elnode--http-sen | 
| 111e0 | 64 2d 73 74 72 69 6e 67 2d 64 65 62 75 67 20 6e    69 6c 0a 20 20 22 57 68 65 74 68 65 72 20 74 6f | d-string-debug.nil..."Whether.to | 
| 11200 | 20 64 6f 20 65 72 72 6f 72 20 6c 6f 67 67 69 6e    67 20 69 6e 20 60 65 6c 6e 6f 64 65 2d 68 74 74 | .do.error.logging.in.`elnode-htt | 
| 11220 | 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 27 2e 0a    0a 54 68 61 74 20 69 73 20 76 65 72 79 20 68 69 | p-send-string'...That.is.very.hi | 
| 11240 | 67 68 20 6c 6f 67 67 69 6e 67 2c 20 70 72 6f 62    61 62 6c 79 20 61 20 62 61 64 20 69 64 65 61 20 | gh.logging,.probably.a.bad.idea. | 
| 11260 | 66 6f 72 20 61 6e 79 6f 6e 65 20 62 75 74 20 61    6e 0a 65 6c 6e 6f 64 65 20 64 65 76 65 6c 6f 70 | for.anyone.but.an.elnode.develop | 
| 11280 | 65 72 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c    6e 6f 64 65 2d 2d 67 65 74 2d 65 72 72 6f 72 2d | er.")..(defun.elnode--get-error- | 
| 112a0 | 6c 6f 67 2d 62 75 66 66 65 72 20 28 29 0a 20 20    22 52 65 74 75 72 6e 73 20 74 68 65 20 62 75 66 | log-buffer.()..."Returns.the.buf | 
| 112c0 | 66 65 72 20 66 6f 72 20 74 68 65 20 65 72 72 6f    72 2d 6c 6f 67 2e 22 0a 20 20 28 67 65 74 2d 62 | fer.for.the.error-log."...(get-b | 
| 112e0 | 75 66 66 65 72 2d 63 72 65 61 74 65 20 65 6c 6e    6f 64 65 2d 73 65 72 76 65 72 2d 65 72 72 6f 72 | uffer-create.elnode-server-error | 
| 11300 | 2d 6c 6f 67 29 29 0a 0a 28 64 65 66 75 6e 20 65    6c 6e 6f 64 65 2d 65 72 72 6f 72 20 28 6d 73 67 | -log))..(defun.elnode-error.(msg | 
| 11320 | 20 26 72 65 73 74 20 61 72 67 73 29 0a 20 20 22    4c 6f 67 20 4d 53 47 20 77 69 74 68 20 41 52 47 | .&rest.args)..."Log.MSG.with.ARG | 
| 11340 | 53 20 61 73 20 61 6e 20 65 72 72 6f 72 2e 0a 0a    54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 | S.as.an.error...This.function.is | 
| 11360 | 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 68    61 6e 64 6c 65 72 73 20 74 6f 20 63 61 6c 6c 2e | .available.for.handlers.to.call. | 
| 11380 | 20 20 49 74 20 69 73 20 61 6c 73 6f 20 75 73 65    64 0a 62 79 20 65 6c 6e 6f 64 65 20 69 74 65 73 | ..It.is.also.used.by.elnode.ites | 
| 113a0 | 6c 66 2e 0a 0a 54 68 65 72 65 20 69 73 20 6f 6e    6c 79 20 6f 6e 65 20 65 72 72 6f 72 20 6c 6f 67 | lf...There.is.only.one.error.log | 
| 113c0 | 2c 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 20    74 68 65 72 65 20 6d 61 79 20 62 65 20 6d 6f 72 | ,.in.the.future.there.may.be.mor | 
| 113e0 | 65 2e 22 0a 20 20 28 77 68 65 6e 20 65 6c 6e 6f    64 65 2d 2d 64 6f 2d 65 72 72 6f 72 2d 6c 6f 67 | e."...(when.elnode--do-error-log | 
| 11400 | 67 69 6e 67 0a 20 20 20 20 28 6c 65 74 20 28 28    66 69 6c 65 6e 61 6d 65 20 28 65 6c 6e 6f 64 65 | ging.....(let.((filename.(elnode | 
| 11420 | 2d 2d 6c 6f 67 2d 66 69 6c 65 6e 61 6d 65 20 22    65 6c 6e 6f 64 65 2d 65 72 72 6f 72 22 29 29 0a | --log-filename."elnode-error")). | 
| 11440 | 20 20 20 20 20 20 20 20 20 20 28 66 6d 74 6d 73    67 20 28 61 70 70 6c 79 20 27 66 6f 72 6d 61 74 | ..........(fmtmsg.(apply.'format | 
| 11460 | 20 60 28 2c 6d 73 67 20 2c 40 61 72 67 73 29 29    29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | .`(,msg.,@args)))).......(elnode | 
| 11480 | 2d 6c 6f 67 2d 62 75 66 66 65 72 2d 6c 6f 67 0a    20 20 20 20 20 20 20 66 6d 74 6d 73 67 0a 20 20 | -log-buffer-log........fmtmsg... | 
| 114a0 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 67 65    74 2d 65 72 72 6f 72 2d 6c 6f 67 2d 62 75 66 66 | .....(elnode--get-error-log-buff | 
| 114c0 | 65 72 29 0a 20 20 20 20 20 20 20 66 69 6c 65 6e    61 6d 65 29 0a 20 20 20 20 20 20 28 77 68 65 6e | er)........filename).......(when | 
| 114e0 | 20 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 2d 6c 6f    67 2d 74 6f 2d 6d 65 73 73 61 67 65 73 0a 20 20 | .elnode-error-log-to-messages... | 
| 11500 | 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 22    65 6c 6e 6f 64 65 2d 65 72 72 6f 72 3a 20 25 73 | ......(message."elnode-error:.%s | 
| 11520 | 22 20 66 6d 74 6d 73 67 29 29 29 29 29 0a 0a 28    64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6c 6f | ".fmtmsg)))))..(defun.elnode--lo | 
| 11540 | 67 2d 66 69 6c 65 6e 61 6d 65 20 28 6c 6f 67 6e    61 6d 65 29 0a 20 20 22 54 75 72 6e 20 4c 4f 47 | g-filename.(logname)..."Turn.LOG | 
| 11560 | 4e 41 4d 45 20 69 6e 74 6f 20 61 20 66 69 6c 65    6e 61 6d 65 2e 0a 0a 60 65 6c 6e 6f 64 65 2d 6c | NAME.into.a.filename...`elnode-l | 
| 11580 | 6f 67 2d 66 69 6c 65 73 2d 64 69 72 65 63 74 6f    72 79 27 20 69 73 20 75 73 65 64 20 61 73 20 74 | og-files-directory'.is.used.as.t | 
| 115a0 | 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 66 6f 72    20 6c 6f 67 20 66 69 6c 65 73 2e 0a 0a 54 68 69 | he.container.for.log.files...Thi | 
| 115c0 | 73 20 66 75 6e 63 74 69 6f 6e 20 6d 61 69 6e 6c    79 20 65 78 69 73 74 73 20 74 6f 20 6d 61 6b 65 | s.function.mainly.exists.to.make | 
| 115e0 | 20 74 65 73 74 69 6e 67 20 65 61 73 69 65 72 2e    22 0a 20 20 28 77 68 65 6e 20 65 6c 6e 6f 64 65 | .testing.easier."...(when.elnode | 
| 11600 | 2d 6c 6f 67 2d 66 69 6c 65 73 2d 64 69 72 65 63    74 6f 72 79 0a 20 20 20 20 28 65 78 70 61 6e 64 | -log-files-directory.....(expand | 
| 11620 | 2d 66 69 6c 65 2d 6e 61 6d 65 0a 20 20 20 20 20    28 66 6f 72 6d 61 74 20 22 25 73 2f 25 73 22 0a | -file-name......(format."%s/%s". | 
| 11640 | 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e    6f 64 65 2d 6c 6f 67 2d 66 69 6c 65 73 2d 64 69 | .............elnode-log-files-di | 
| 11660 | 72 65 63 74 6f 72 79 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 6c 6f 67 6e 61 6d 65 29 29 29 29 | rectory..............logname)))) | 
| 11680 | 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65    2d 6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d | ..(defvar.elnode-log-access-form | 
| 116a0 | 61 74 2d 70 61 74 68 2d 77 69 64 74 68 20 32 30    29 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d | at-path-width.20).(defun.elnode- | 
| 116c0 | 6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d 61    74 2d 66 75 6e 63 20 28 68 74 74 70 63 6f 6e 29 | log-access-format-func.(httpcon) | 
| 116e0 | 0a 20 20 22 53 74 61 6e 64 61 72 64 20 61 63 63    65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 20 66 | ..."Standard.access.log.format.f | 
| 11700 | 75 6e 63 74 69 6f 6e 2e 22 0a 20 20 28 66 6f 72    6d 61 74 0a 20 20 20 28 63 6f 6e 63 61 74 0a 20 | unction."...(format....(concat.. | 
| 11720 | 20 20 20 22 25 73 20 25 20 38 64 20 25 73 20 25    20 22 0a 20 20 20 20 28 6e 75 6d 62 65 72 2d 74 | ..."%s.%.8d.%s.%.".....(number-t | 
| 11740 | 6f 2d 73 74 72 69 6e 67 20 65 6c 6e 6f 64 65 2d    6c 6f 67 2d 61 63 63 65 73 73 2d 66 6f 72 6d 61 | o-string.elnode-log-access-forma | 
| 11760 | 74 2d 70 61 74 68 2d 77 69 64 74 68 29 0a 20 20    20 20 22 73 22 29 0a 20 20 20 28 70 72 6f 63 65 | t-path-width)....."s")....(proce | 
| 11780 | 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a    65 6c 6e 6f 64 65 2d 68 74 74 70 72 65 73 70 6f | ss-get.httpcon.:elnode-httprespo | 
| 117a0 | 6e 73 65 2d 73 74 61 74 75 73 29 0a 20 20 20 28    6f 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 | nse-status)....(or.(process-get. | 
| 117c0 | 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d    62 79 74 65 73 2d 77 72 69 74 74 65 6e 29 20 30 | httpcon.:elnode-bytes-written).0 | 
| 117e0 | 29 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e | )....(elnode-http-method.httpcon | 
| 11800 | 29 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 | )....(elnode-http-pathinfo.httpc | 
| 11820 | 6f 6e 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f    6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 | on)))..(defcustom.elnode-log-acc | 
| 11840 | 65 73 73 2d 64 65 66 61 75 6c 74 2d 66 6f 72 6d    61 74 74 65 72 2d 66 75 6e 63 74 69 6f 6e 0a 20 | ess-default-formatter-function.. | 
| 11860 | 20 27 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63    65 73 73 2d 66 6f 72 6d 61 74 2d 66 75 6e 63 0a | .'elnode-log-access-format-func. | 
| 11880 | 20 20 22 54 68 65 20 64 65 66 61 75 6c 74 20 61    63 63 65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 | .."The.default.access.log.format | 
| 118a0 | 74 65 72 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 54    68 69 73 20 69 73 20 75 73 65 64 20 77 68 65 6e | ter.function...This.is.used.when | 
| 118c0 | 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 70 65    63 69 66 69 63 20 6c 6f 67 67 65 72 20 66 75 6e | .there.is.no.specific.logger.fun | 
| 118e0 | 63 74 69 6f 6e 20 66 6f 72 20 61 0a 6c 6f 67 2d    6e 61 6d 65 2e 22 0a 20 20 3a 67 72 6f 75 70 20 | ction.for.a.log-name."...:group. | 
| 11900 | 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20    27 66 75 6e 63 74 69 6f 6e 29 0a 0a 28 64 65 66 | 'elnode...:type.'function)..(def | 
| 11920 | 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f    67 2d 61 63 63 65 73 73 2d 61 6c 69 73 74 20 6e | custom.elnode-log-access-alist.n | 
| 11940 | 69 6c 0a 20 20 22 41 6e 20 61 73 73 6f 63 69 61    74 69 6f 6e 20 6c 69 73 74 20 6f 66 20 61 63 63 | il..."An.association.list.of.acc | 
| 11960 | 65 73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 20 66    75 6e 63 74 69 6f 6e 73 20 66 6f 72 20 6c 6f 67 | ess.log.format.functions.for.log | 
| 11980 | 20 6e 61 6d 65 73 2e 0a 0a 41 6e 20 61 63 63 65    73 73 20 6c 6f 67 20 66 6f 72 6d 61 74 20 66 75 | .names...An.access.log.format.fu | 
| 119a0 | 6e 63 74 69 6f 6e 20 72 65 63 65 69 76 65 73 20    74 68 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 | nction.receives.the.http.connect | 
| 119c0 | 69 6f 6e 20 61 6e 64 0a 73 68 6f 75 6c 64 20 72    65 74 75 72 6e 20 61 20 6c 6f 67 20 6c 69 6e 65 | ion.and.should.return.a.log.line | 
| 119e0 | 20 74 6f 20 62 65 20 65 6e 74 65 72 65 64 20 69    6e 20 74 68 65 20 6c 6f 67 20 62 75 66 66 65 72 | .to.be.entered.in.the.log.buffer | 
| 11a00 | 2e 0a 0a 54 68 65 73 65 20 6f 76 65 72 72 69 64    65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f | ...These.override.the.default.lo | 
| 11a20 | 67 20 66 6f 72 6d 61 74 74 65 72 2e 22 0a 20 20    3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 | g.formatter."...:group.'elnode.. | 
| 11a40 | 20 3a 74 79 70 65 20 27 28 61 6c 69 73 74 0a 20    20 20 20 20 20 20 20 20 20 3a 6b 65 79 2d 74 79 | .:type.'(alist...........:key-ty | 
| 11a60 | 70 65 20 73 74 72 69 6e 67 0a 20 20 20 20 20 20    20 20 20 20 3a 76 61 6c 75 65 2d 74 79 70 65 20 | pe.string...........:value-type. | 
| 11a80 | 66 75 6e 63 74 69 6f 6e 29 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 | function))..(defun.elnode-log-ac | 
| 11aa0 | 63 65 73 73 20 28 6c 6f 67 6e 61 6d 65 20 68 74    74 70 63 6f 6e 29 0a 20 20 22 4c 6f 67 20 74 68 | cess.(logname.httpcon)..."Log.th | 
| 11ac0 | 65 20 48 54 54 50 20 61 63 63 65 73 73 20 69 6e    20 62 75 66 66 65 72 20 4c 4f 47 4e 41 4d 45 2e | e.HTTP.access.in.buffer.LOGNAME. | 
| 11ae0 | 0a 0a 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20    69 73 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 | ..This.function.is.available.for | 
| 11b00 | 20 68 61 6e 64 6c 65 72 73 20 74 6f 20 63 61 6c    6c 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 75 | .handlers.to.call...It.is.also.u | 
| 11b20 | 73 65 64 0a 62 79 20 65 6c 6e 6f 64 65 20 69 74    65 73 6c 66 2e 22 0a 20 20 28 6c 65 74 2a 20 28 | sed.by.elnode.iteslf."...(let*.( | 
| 11b40 | 28 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 66 66    65 72 2d 64 61 74 65 74 69 6d 65 2d 66 6f 72 6d | (elnode-log-buffer-datetime-form | 
| 11b60 | 61 74 20 22 25 59 2d 25 6d 2d 25 64 2d 25 48 3a    25 4d 3a 25 53 22 29 0a 20 20 20 20 20 20 20 20 | at."%Y-%m-%d-%H:%M:%S")......... | 
| 11b80 | 20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 28 66    6f 72 6d 61 74 20 22 2a 25 73 2d 65 6c 6e 6f 64 | .(buffer-name.(format."*%s-elnod | 
| 11ba0 | 65 2d 61 63 63 65 73 73 2a 22 20 6c 6f 67 6e 61    6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 | e-access*".logname))..........(f | 
| 11bc0 | 69 6c 65 6e 61 6d 65 20 28 65 6c 6e 6f 64 65 2d    2d 6c 6f 67 2d 66 69 6c 65 6e 61 6d 65 20 6c 6f | ilename.(elnode--log-filename.lo | 
| 11be0 | 67 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20    20 28 66 6f 72 6d 61 74 74 65 72 0a 20 20 20 20 | gname))..........(formatter..... | 
| 11c00 | 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 20    20 20 20 20 20 28 6b 76 61 20 6c 6f 67 6e 61 6d | ......(or............(kva.lognam | 
| 11c20 | 65 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63    65 73 73 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 | e.elnode-log-access-alist)...... | 
| 11c40 | 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 6c 6f 67    2d 61 63 63 65 73 73 2d 64 65 66 61 75 6c 74 2d | ......elnode-log-access-default- | 
| 11c60 | 66 6f 72 6d 61 74 74 65 72 2d 66 75 6e 63 74 69    6f 6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 66 | formatter-function))..........(f | 
| 11c80 | 6f 72 6d 61 74 74 65 64 0a 20 20 20 20 20 20 20    20 20 20 28 77 68 65 6e 20 66 6f 72 6d 61 74 74 | ormatted...........(when.formatt | 
| 11ca0 | 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    66 75 6e 63 61 6c 6c 20 66 6f 72 6d 61 74 74 65 | er.............(funcall.formatte | 
| 11cc0 | 72 20 68 74 74 70 63 6f 6e 29 29 29 29 0a 20 20    20 20 28 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 62 75 | r.httpcon)))).....(elnode-log-bu | 
| 11ce0 | 66 66 65 72 2d 6c 6f 67 20 66 6f 72 6d 61 74 74    65 64 20 62 75 66 66 65 72 2d 6e 61 6d 65 20 66 | ffer-log.formatted.buffer-name.f | 
| 11d00 | 69 6c 65 6e 61 6d 65 29 29 29 0a 0a 0a 3b 3b 20    44 65 66 65 72 20 73 74 75 66 66 0a 0a 28 70 72 | ilename)))...;;.Defer.stuff..(pr | 
| 11d20 | 6f 67 6e 0a 20 20 3b 3b 20 53 65 74 73 20 75 70    20 74 68 65 20 65 6c 6e 6f 64 65 20 64 65 66 65 | ogn...;;.Sets.up.the.elnode.defe | 
| 11d40 | 72 20 73 69 67 6e 61 6c 0a 20 20 28 70 75 74 20    27 65 6c 6e 6f 64 65 2d 64 65 66 65 72 0a 20 20 | r.signal...(put.'elnode-defer... | 
| 11d60 | 20 20 20 20 20 27 65 72 72 6f 72 2d 63 6f 6e 64    69 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 27 28 | .....'error-conditions........'( | 
| 11d80 | 65 72 72 6f 72 20 65 6c 6e 6f 64 65 20 65 6c 6e    6f 64 65 2d 64 65 66 65 72 29 29 0a 20 20 28 70 | error.elnode.elnode-defer))...(p | 
| 11da0 | 75 74 20 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72    0a 20 20 20 20 20 20 20 27 65 72 72 6f 72 2d 6d | ut.'elnode-defer........'error-m | 
| 11dc0 | 65 73 73 61 67 65 0a 20 20 20 20 20 20 20 22 45    6c 6e 6f 64 65 20 68 61 6e 64 6c 65 72 20 70 72 | essage........"Elnode.handler.pr | 
| 11de0 | 6f 63 65 73 73 69 6e 67 20 64 65 66 65 72 65 64    22 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e | ocessing.defered"))..(defvar.eln | 
| 11e00 | 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 20 27 28    29 0a 20 20 22 4c 69 73 74 20 6f 66 20 64 65 66 | ode--deferred.'()..."List.of.def | 
| 11e20 | 65 72 72 65 64 20 70 61 69 72 73 3a 20 28 73 6f    63 6b 65 74 20 2e 20 68 61 6e 64 6c 65 72 29 2e | erred.pairs:.(socket...handler). | 
| 11e40 | 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64    65 2d 64 65 66 65 72 2d 6e 6f 77 20 28 68 61 6e | ")..(defun.elnode-defer-now.(han | 
| 11e60 | 64 6c 65 72 29 0a 20 20 22 54 68 65 20 66 75 6e    63 74 69 6f 6e 20 79 6f 75 20 63 61 6c 6c 20 74 | dler)..."The.function.you.call.t | 
| 11e80 | 6f 20 64 65 66 65 72 20 70 72 6f 63 65 73 73 69    6e 67 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e | o.defer.processing.of.the.curren | 
| 11ea0 | 74 20 73 6f 63 6b 65 74 2e 0a 0a 50 61 73 73 20    69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 48 | t.socket...Pass.in.the.current.H | 
| 11ec0 | 41 4e 44 4c 45 52 2e 0a 0a 46 49 58 4d 45 3a 20    57 65 20 63 6f 75 6c 64 20 63 61 70 74 75 72 65 | ANDLER...FIXME:.We.could.capture | 
| 11ee0 | 20 74 68 65 20 63 75 72 72 65 6e 74 20 68 61 6e    64 6c 65 72 20 73 6f 6d 65 68 6f 77 3f 20 49 20 | .the.current.handler.somehow?.I. | 
| 11f00 | 74 68 69 6e 6b 20 74 68 65 0a 70 6f 69 6e 74 20    69 73 20 74 68 61 74 20 77 68 61 74 65 76 65 72 | think.the.point.is.that.whatever | 
| 11f20 | 20 73 69 67 6e 61 6c 73 20 65 6c 6e 6f 64 65 2d    64 65 66 65 72 20 73 68 6f 75 6c 64 20 62 65 20 | .signals.elnode-defer.should.be. | 
| 11f40 | 67 65 74 74 69 6e 67 0a 63 6f 6e 74 72 6f 6c 20    62 61 63 6b 20 77 68 65 6e 20 74 68 65 20 64 65 | getting.control.back.when.the.de | 
| 11f60 | 66 65 72 72 65 64 20 69 73 20 72 65 2d 70 72 6f    63 65 73 73 65 64 2e 22 0a 20 20 28 73 69 67 6e | ferred.is.re-processed."...(sign | 
| 11f80 | 61 6c 20 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72    20 68 61 6e 64 6c 65 72 29 29 0a 0a 28 64 65 66 | al.'elnode-defer.handler))..(def | 
| 11fa0 | 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 64 65 66    65 72 2d 75 6e 74 69 6c 20 28 67 75 61 72 64 20 | macro.elnode-defer-until.(guard. | 
| 11fc0 | 26 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 54    65 73 74 20 47 55 41 52 44 20 61 6e 64 20 64 65 | &rest.body)..."Test.GUARD.and.de | 
| 11fe0 | 66 65 72 20 69 66 20 69 74 20 66 61 69 6c 73 20    61 6e 64 20 42 4f 44 59 20 69 66 20 69 74 20 64 | fer.if.it.fails.and.BODY.if.it.d | 
| 12000 | 6f 65 73 6e 27 74 2e 0a 0a 60 68 74 74 70 63 6f    6e 27 20 69 73 20 63 61 70 74 75 72 65 64 20 69 | oesn't...`httpcon'.is.captured.i | 
| 12020 | 6e 20 74 68 69 73 20 6d 61 63 72 6f 20 77 68 69    63 68 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 63 | n.this.macro.which.means.the.mac | 
| 12040 | 72 6f 20 63 61 6e 0a 6f 6e 6c 79 20 62 65 20 65    78 70 61 6e 64 65 64 20 77 68 65 72 65 20 74 68 | ro.can.only.be.expanded.where.th | 
| 12060 | 65 72 65 20 69 73 20 61 6e 20 69 6e 73 63 6f 70    65 20 60 68 74 74 70 63 6f 6e 27 2e 0a 0a 49 6e | ere.is.an.inscope.`httpcon'...In | 
| 12080 | 73 69 64 65 20 74 68 65 20 6d 61 63 72 6f 20 74    68 65 20 73 79 6d 62 6f 6c 20 60 65 6c 6e 6f 64 | side.the.macro.the.symbol.`elnod | 
| 120a0 | 65 2d 64 65 66 65 72 2d 67 75 61 72 64 2d 69 74    27 20 69 73 20 62 6f 75 6e 64 20 74 6f 0a 74 68 | e-defer-guard-it'.is.bound.to.th | 
| 120c0 | 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 47    55 41 52 44 2e 22 0a 20 20 28 64 65 63 6c 61 72 | e.value.of.the.GUARD."...(declar | 
| 120e0 | 65 20 28 69 6e 64 65 6e 74 20 31 29 29 0a 20 20    28 6c 65 74 20 28 28 62 76 20 28 6d 61 6b 65 2d | e.(indent.1))...(let.((bv.(make- | 
| 12100 | 73 79 6d 62 6f 6c 20 22 62 76 22 29 29 0a 20 20    20 20 20 20 20 20 28 67 76 20 28 6d 61 6b 65 2d | symbol."bv")).........(gv.(make- | 
| 12120 | 73 79 6d 62 6f 6c 20 22 67 76 22 29 29 0a 20 20    20 20 20 20 20 20 28 66 76 20 28 6d 61 6b 65 2d | symbol."gv")).........(fv.(make- | 
| 12140 | 73 79 6d 62 6f 6c 20 22 66 76 22 29 29 29 0a 20    20 20 20 60 28 6c 65 74 2a 20 28 28 2c 67 76 20 | symbol."fv"))).....`(let*.((,gv. | 
| 12160 | 28 6c 61 6d 62 64 61 20 28 29 20 2c 67 75 61 72    64 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | (lambda.().,guard))............. | 
| 12180 | 28 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 67 75    61 72 64 2d 69 74 20 28 66 75 6e 63 61 6c 6c 20 | (elnode-defer-guard-it.(funcall. | 
| 121a0 | 2c 67 76 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 2c 62 76 20 28 6c 61 6d 62 64 61 20 28 | ,gv)).............(,bv.(lambda.( | 
| 121c0 | 68 74 74 70 63 6f 6e 29 20 2c 40 62 6f 64 79 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c | httpcon).,@body)).............(, | 
| 121e0 | 66 76 20 3b 20 61 20 79 2d 63 6f 6d 62 69 6e 61    74 6f 72 21 0a 20 20 20 20 20 20 20 20 20 20 20 | fv.;.a.y-combinator!............ | 
| 12200 | 20 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63    6f 6e 20 70 72 6f 63 29 0a 20 20 20 20 20 20 20 | ..(lambda.(httpcon.proc)........ | 
| 12220 | 20 20 20 20 20 20 20 20 28 73 65 74 71 20 65 6c    6e 6f 64 65 2d 64 65 66 65 72 2d 67 75 61 72 64 | ........(setq.elnode-defer-guard | 
| 12240 | 2d 69 74 20 28 66 75 6e 63 61 6c 6c 20 2c 67 76    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | -it.(funcall.,gv)).............. | 
| 12260 | 20 20 28 69 66 20 65 6c 6e 6f 64 65 2d 64 65 66    65 72 2d 67 75 61 72 64 2d 69 74 0a 20 20 20 20 | ..(if.elnode-defer-guard-it..... | 
| 12280 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    66 75 6e 63 61 6c 6c 20 2c 62 76 20 68 74 74 70 | ...............(funcall.,bv.http | 
| 122a0 | 63 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20 74 | con)....................;;.the.t | 
| 122c0 | 65 73 74 20 66 61 69 6c 65 64 20 77 65 20 73 68    6f 75 6c 64 20 64 65 66 65 72 20 61 67 61 69 6e | est.failed.we.should.defer.again | 
| 122e0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 65 6c 6e 6f 64 65 2d 64 65 66 65 | ....................(elnode-defe | 
| 12300 | 72 2d 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 | r-now.....................(lambd | 
| 12320 | 61 20 28 68 74 74 70 2d 63 6f 6e 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | a.(http-con).................... | 
| 12340 | 20 20 20 28 66 75 6e 63 61 6c 6c 20 70 72 6f 63    20 68 74 74 70 2d 63 6f 6e 20 70 72 6f 63 29 29 | ...(funcall.proc.http-con.proc)) | 
| 12360 | 29 29 29 29 29 0a 20 20 20 20 20 20 20 28 69 66    20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 2d 67 75 | )))))........(if.elnode-defer-gu | 
| 12380 | 61 72 64 2d 69 74 0a 20 20 20 20 20 20 20 20 20    20 20 28 66 75 6e 63 61 6c 6c 20 2c 62 76 20 68 | ard-it............(funcall.,bv.h | 
| 123a0 | 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 20    20 20 20 3b 3b 20 54 68 65 20 74 65 73 74 20 66 | ttpcon)............;;.The.test.f | 
| 123c0 | 61 69 6c 65 64 2c 20 77 65 20 73 68 6f 75 6c 64    20 64 65 66 65 72 2e 0a 20 20 20 20 20 20 20 20 | ailed,.we.should.defer.......... | 
| 123e0 | 20 20 20 28 65 6c 6e 6f 64 65 2d 64 65 66 65 72    2d 6e 6f 77 0a 20 20 20 20 20 20 20 20 20 20 20 | ...(elnode-defer-now............ | 
| 12400 | 20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f    6e 29 20 3b 20 61 70 70 6c 79 20 74 68 65 20 79 | .(lambda.(httpcon).;.apply.the.y | 
| 12420 | 2d 63 6f 6d 62 69 6e 61 74 6f 72 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 | -combinator...............(funca | 
| 12440 | 6c 6c 20 2c 66 76 20 68 74 74 70 63 6f 6e 20 2c    66 76 29 29 29 29 29 29 29 0a 0a 28 64 65 66 75 | ll.,fv.httpcon.,fv)))))))..(defu | 
| 12460 | 6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72    65 64 2d 61 64 64 20 28 68 74 74 70 63 6f 6e 20 | n.elnode--deferred-add.(httpcon. | 
| 12480 | 68 61 6e 64 6c 65 72 29 0a 20 20 22 41 64 64 20    74 68 65 20 73 70 65 63 69 66 69 65 64 20 48 54 | handler)..."Add.the.specified.HT | 
| 124a0 | 54 50 43 4f 4e 2f 48 41 4e 44 4c 45 52 20 70 61    69 72 20 74 6f 20 74 68 65 20 64 65 66 65 72 72 | TPCON/HANDLER.pair.to.the.deferr | 
| 124c0 | 65 64 20 6c 69 73 74 2e 22 0a 20 20 28 65 6c 6e    6f 64 65 2d 65 72 72 6f 72 20 22 64 65 66 65 72 | ed.list."...(elnode-error."defer | 
| 124e0 | 72 65 64 2d 61 64 64 3a 20 61 64 64 69 6e 67 20    61 20 64 65 66 65 72 20 25 73 20 66 6f 72 20 25 | red-add:.adding.a.defer.%s.for.% | 
| 12500 | 73 22 20 68 61 6e 64 6c 65 72 20 68 74 74 70 63    6f 6e 29 0a 20 20 28 70 75 73 68 20 28 63 6f 6e | s".handler.httpcon)...(push.(con | 
| 12520 | 73 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65    72 29 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 | s.httpcon.handler).elnode--defer | 
| 12540 | 72 65 64 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c    6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 70 | red))..(defun.elnode--deferred-p | 
| 12560 | 72 6f 63 65 73 73 2d 6f 70 65 6e 20 28 68 74 74    70 63 6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 | rocess-open.(httpcon.handler)... | 
| 12580 | 22 50 72 6f 63 65 73 73 20 74 68 65 20 48 41 4e    44 4c 45 52 20 77 69 74 68 20 74 68 65 20 6b 6e | "Process.the.HANDLER.with.the.kn | 
| 125a0 | 6f 77 6e 20 6f 70 65 6e 20 48 54 54 50 43 4f 4e    2e 22 0a 20 20 3b 3b 20 28 65 6c 6e 6f 64 65 2d | own.open.HTTPCON."...;;.(elnode- | 
| 125c0 | 65 72 72 6f 72 20 22 64 65 66 65 72 20 2d 20 6a    75 73 74 20 62 65 66 6f 72 65 20 63 61 6c 6c 69 | error."defer.-.just.before.calli | 
| 125e0 | 6e 67 20 74 68 65 20 68 61 6e 64 6c 65 72 20 25    73 22 20 68 61 6e 64 6c 65 72 29 0a 20 20 28 66 | ng.the.handler.%s".handler)...(f | 
| 12600 | 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65 72 20 68    74 74 70 63 6f 6e 29 29 0a 0a 0a 3b 3b 20 4c 6f | uncall.handler.httpcon))...;;.Lo | 
| 12620 | 67 20 6c 65 76 65 6c 73 0a 28 64 65 66 63 6f 6e    73 74 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 64 65 | g.levels.(defconst.elnode-log-de | 
| 12640 | 62 75 67 20 30 29 0a 28 64 65 66 63 6f 6e 73 74    20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 69 6e 66 6f | bug.0).(defconst.elnode-log-info | 
| 12660 | 20 31 29 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c    6e 6f 64 65 2d 6c 6f 67 2d 77 61 72 6e 69 6e 67 | .1).(defconst.elnode-log-warning | 
| 12680 | 20 32 29 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c    6e 6f 64 65 2d 6c 6f 67 2d 63 72 69 74 69 63 61 | .2).(defconst.elnode-log-critica | 
| 126a0 | 6c 20 33 29 0a 0a 28 64 65 66 76 61 72 20 65 6c    6e 6f 64 65 2d 64 65 66 65 72 2d 70 72 6f 63 65 | l.3)..(defvar.elnode-defer-proce | 
| 126c0 | 73 73 6f 72 2d 6c 6f 67 2d 6c 65 76 65 6c 20 65    6c 6e 6f 64 65 2d 6c 6f 67 2d 63 72 69 74 69 63 | ssor-log-level.elnode-log-critic | 
| 126e0 | 61 6c 0a 20 20 22 4c 6f 67 20 6c 65 76 65 6c 20    6f 66 20 74 68 65 20 64 65 66 65 72 20 70 72 6f | al..."Log.level.of.the.defer.pro | 
| 12700 | 63 65 73 73 6f 72 2e 22 29 0a 0a 28 64 65 66 75    6e 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 | cessor.")..(defun.elnode--deferr | 
| 12720 | 65 64 2d 6c 6f 67 20 28 6c 65 76 65 6c 20 6d 73    67 20 26 72 65 73 74 20 61 72 67 73 29 0a 20 20 | ed-log.(level.msg.&rest.args)... | 
| 12740 | 22 53 70 65 63 69 61 6c 20 6c 6f 67 20 66 6f 72    20 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 | "Special.log.for.elnode-deferred | 
| 12760 | 73 22 0a 20 20 28 77 68 65 6e 20 28 3e 3d 20 6c    65 76 65 6c 20 65 6c 6e 6f 64 65 2d 64 65 66 65 | s"...(when.(>=.level.elnode-defe | 
| 12780 | 72 2d 70 72 6f 63 65 73 73 6f 72 2d 6c 6f 67 2d    6c 65 76 65 6c 29 0a 20 20 20 20 28 61 70 70 6c | r-processor-log-level).....(appl | 
| 127a0 | 79 0a 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 65    72 72 6f 72 0a 20 20 20 20 20 28 66 6f 72 6d 61 | y......'elnode-error......(forma | 
| 127c0 | 74 20 22 65 6c 6e 6f 64 65 2d 64 65 66 65 72 72    65 64 2d 70 72 6f 63 65 73 73 6f 72 20 25 73 22 | t."elnode-deferred-processor.%s" | 
| 127e0 | 20 6d 73 67 29 0a 20 20 20 20 20 61 72 67 73 29    29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f | .msg)......args)))..(defvar.elno | 
| 12800 | 64 65 2d 64 65 66 65 72 2d 66 61 69 6c 75 72 65    2d 68 6f 6f 6b 20 6e 69 6c 0a 20 20 22 48 6f 6f | de-defer-failure-hook.nil..."Hoo | 
| 12820 | 6b 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 20    64 65 66 65 72 72 65 64 20 73 6f 63 6b 65 74 20 | k.called.when.a.deferred.socket. | 
| 12840 | 66 61 69 6c 73 2e 0a 0a 54 68 65 20 68 6f 6f 6b    20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c | fails...The.hook.function.is.cal | 
| 12860 | 6c 65 64 20 77 69 74 68 20 74 68 65 20 68 74 74    70 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 6e 64 | led.with.the.http.connection.and | 
| 12880 | 20 74 68 65 0a 66 61 69 6c 75 72 65 20 73 74 61    74 65 20 77 68 69 63 68 20 65 69 74 68 65 72 20 | .the.failure.state.which.either. | 
| 128a0 | 74 68 65 20 73 79 6d 62 6f 6c 20 60 63 6c 6f 73    65 64 27 20 6f 72 20 74 68 65 20 73 79 6d 62 6f | the.symbol.`closed'.or.the.symbo | 
| 128c0 | 6c 0a 60 66 61 69 6c 65 64 27 2e 22 29 0a 0a 28    64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d | l.`failed'.")..(defconst.elnode- | 
| 128e0 | 2d 64 65 62 75 67 2d 77 69 74 68 2d 62 61 63 6b    74 72 61 63 65 73 20 6e 69 6c 0a 20 20 22 46 65 | -debug-with-backtraces.nil..."Fe | 
| 12900 | 61 74 75 72 65 20 73 77 69 74 63 68 20 74 6f 20    69 6e 63 6c 75 64 65 20 62 61 63 6b 74 72 61 63 | ature.switch.to.include.backtrac | 
| 12920 | 65 20 64 65 62 75 67 67 69 6e 67 20 73 75 70 70    6f 72 74 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 | e.debugging.support.")..(defun.e | 
| 12940 | 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d    70 72 6f 63 65 73 73 6f 72 20 28 29 0a 20 20 22 | lnode--deferred-processor.()..." | 
| 12960 | 50 72 6f 63 65 73 73 20 74 68 65 20 64 65 66 65    72 72 65 64 20 71 75 65 75 65 2e 22 0a 20 20 28 | Process.the.deferred.queue."...( | 
| 12980 | 6c 65 74 20 28 28 72 75 6e 20 28 72 61 6e 64 6f    6d 20 35 30 30 30 29 29 20 3b 20 75 73 65 20 74 | let.((run.(random.5000)).;.use.t | 
| 129a0 | 68 69 73 20 74 6f 20 64 69 73 61 6d 62 69 67 75    61 74 65 20 72 75 6e 73 20 69 6e 20 74 68 65 20 | his.to.disambiguate.runs.in.the. | 
| 129c0 | 6c 6f 67 73 0a 20 20 20 20 20 20 20 20 28 6e 65    77 2d 64 65 66 65 72 72 65 64 20 28 6c 69 73 74 | logs.........(new-deferred.(list | 
| 129e0 | 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d    2d 64 65 66 65 72 72 65 64 2d 6c 6f 67 20 65 6c | ))).....(elnode--deferred-log.el | 
| 12a00 | 6e 6f 64 65 2d 6c 6f 67 2d 69 6e 66 6f 20 22 73    74 61 72 74 22 29 0a 20 20 20 20 28 6c 6f 6f 70 | node-log-info."start").....(loop | 
| 12a20 | 20 66 6f 72 20 70 61 69 72 20 69 6e 20 65 6c 6e    6f 64 65 2d 2d 64 65 66 65 72 72 65 64 0a 20 20 | .for.pair.in.elnode--deferred... | 
| 12a40 | 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 20    20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 20 | .....do..........(let.((httpcon. | 
| 12a60 | 28 63 61 72 20 70 61 69 72 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 68 61 6e 64 | (car.pair))................(hand | 
| 12a80 | 6c 65 72 20 28 63 64 72 20 70 61 69 72 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 28 63 61 73 | ler.(cdr.pair)))............(cas | 
| 12aa0 | 65 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75    73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 | e.(process-status.httpcon)...... | 
| 12ac0 | 20 20 20 20 20 20 20 20 28 27 6f 70 65 6e 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c | ........('open...............(el | 
| 12ae0 | 6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c    6f 67 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 69 6e | node--deferred-log.elnode-log-in | 
| 12b00 | 66 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | fo.............................. | 
| 12b20 | 20 20 20 20 20 20 20 22 6f 70 65 6e 20 25 73 20    25 73 22 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 | ......."open.%s.%s".httpcon.hand | 
| 12b40 | 6c 65 72 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 | ler)...............(condition-ca | 
| 12b60 | 73 65 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | se.signal-value................. | 
| 12b80 | 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72    72 65 64 2d 70 72 6f 63 65 73 73 2d 6f 70 65 6e | ..(elnode--deferred-process-open | 
| 12ba0 | 20 68 74 74 70 63 6f 6e 20 68 61 6e 64 6c 65 72    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .httpcon.handler)............... | 
| 12bc0 | 20 20 28 27 65 6c 6e 6f 64 65 2d 64 65 66 65 72    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..('elnode-defer................ | 
| 12be0 | 20 20 28 70 75 73 68 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 | ..(push...................(cons. | 
| 12c00 | 68 74 74 70 63 6f 6e 20 28 63 64 72 20 73 69 67    6e 61 6c 2d 76 61 6c 75 65 29 29 0a 20 20 20 20 | httpcon.(cdr.signal-value))..... | 
| 12c20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65    77 2d 64 65 66 65 72 72 65 64 29 29 0a 20 20 20 | ..............new-deferred)).... | 
| 12c40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 72    72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 | .............(error............. | 
| 12c60 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65    66 65 72 72 65 64 2d 6c 6f 67 0a 20 20 20 20 20 | .....(elnode--deferred-log...... | 
| 12c80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e    6f 64 65 2d 6c 6f 67 2d 63 72 69 74 69 63 61 6c | .............elnode-log-critical | 
| 12ca0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 22 65 72 72 6f 72 20 25 73 20 2d 20 25 | ..................."error.%s.-.% | 
| 12cc0 | 73 20 25 53 22 20 68 74 74 70 63 6f 6e 20 73 69    67 6e 61 6c 2d 76 61 6c 75 65 0a 20 20 20 20 20 | s.%S".httpcon.signal-value...... | 
| 12ce0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66    20 65 6c 6e 6f 64 65 2d 2d 64 65 62 75 67 2d 77 | .............(if.elnode--debug-w | 
| 12d00 | 69 74 68 2d 62 61 63 6b 74 72 61 63 65 73 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ith-backtraces.................. | 
| 12d20 | 20 20 20 20 20 64 65 62 75 67 67 65 72 2d 70 72    65 76 69 6f 75 73 2d 62 61 63 6b 74 72 61 63 65 | .....debugger-previous-backtrace | 
| 12d40 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 22 22 29 29 29 29 29 0a 20 | .......................""))))).. | 
| 12d60 | 20 20 20 20 20 20 20 20 20 20 20 20 28 27 63 6c    6f 73 65 64 0a 20 20 20 20 20 20 20 20 20 20 20 | ............('closed............ | 
| 12d80 | 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65    72 72 65 64 2d 6c 6f 67 20 65 6c 6e 6f 64 65 2d | ...(elnode--deferred-log.elnode- | 
| 12da0 | 6c 6f 67 2d 69 6e 66 6f 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | log-info........................ | 
| 12dc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6c    6f 73 65 64 20 25 73 20 25 73 22 20 68 74 74 70 | ............."closed.%s.%s".http | 
| 12de0 | 63 6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 61 | con.handler)...............;;.Ca | 
| 12e00 | 6c 6c 20 61 6e 79 20 68 6f 6f 6b 20 66 75 6e 63    74 69 6f 6e 20 66 6f 72 20 64 65 66 65 72 20 63 | ll.any.hook.function.for.defer.c | 
| 12e20 | 6c 6f 73 65 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 68 6f | loses...............(loop.for.ho | 
| 12e40 | 6f 6b 2d 66 75 6e 63 20 69 6e 20 65 6c 6e 6f 64    65 2d 64 65 66 65 72 2d 66 61 69 6c 75 72 65 2d | ok-func.in.elnode-defer-failure- | 
| 12e60 | 68 6f 6f 6b 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 | hook..................do........ | 
| 12e80 | 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e    63 61 6c 6c 20 68 6f 6f 6b 2d 66 75 6e 63 20 68 | ............(funcall.hook-func.h | 
| 12ea0 | 74 74 70 63 6f 6e 20 27 63 6c 6f 73 65 64 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | ttpcon.'closed)))..............( | 
| 12ec0 | 27 66 61 69 6c 65 64 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 | 'failed...............(elnode--d | 
| 12ee0 | 65 66 65 72 72 65 64 2d 6c 6f 67 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 | eferred-log................elnod | 
| 12f00 | 65 2d 6c 6f 67 2d 69 6e 66 6f 20 22 66 61 69 6c    65 64 20 25 73 20 25 73 22 20 68 74 74 70 63 6f | e-log-info."failed.%s.%s".httpco | 
| 12f20 | 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3b 3b 20 43 61 6c 6c | n.handler)...............;;.Call | 
| 12f40 | 20 61 6e 79 20 68 6f 6f 6b 20 66 75 6e 63 74 69    6f 6e 20 66 6f 72 20 64 65 66 65 72 20 66 61 69 | .any.hook.function.for.defer.fai | 
| 12f60 | 6c 75 72 65 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 68 6f | lures...............(loop.for.ho | 
| 12f80 | 6f 6b 2d 66 75 6e 63 20 69 6e 20 65 6c 6e 6f 64    65 2d 64 65 66 65 72 2d 66 61 69 6c 75 72 65 2d | ok-func.in.elnode-defer-failure- | 
| 12fa0 | 68 6f 6f 6b 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 64 6f 0a 20 20 20 20 20 20 20 | hook..................do........ | 
| 12fc0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e    63 61 6c 6c 20 68 6f 6f 6b 2d 66 75 6e 63 20 68 | ............(funcall.hook-func.h | 
| 12fe0 | 74 74 70 63 6f 6e 20 27 66 61 69 6c 65 64 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ttpcon.'failed)))..............; | 
| 13000 | 3b 20 4e 6f 74 20 73 75 72 65 20 68 6f 77 20 74    6f 20 64 6f 20 63 6f 6e 6e 65 63 74 2e 2e 2e 20 | ;.Not.sure.how.to.do.connect.... | 
| 13020 | 73 61 6d 65 20 61 73 20 6f 70 65 6e 3f 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 2e 2e | same.as.open?..............;;... | 
| 13040 | 2e 20 6f 72 20 6a 75 73 74 20 70 75 74 20 69 74    20 62 61 63 6b 3f 0a 20 20 20 20 20 20 20 20 20 | ..or.just.put.it.back?.......... | 
| 13060 | 20 20 20 20 28 27 63 6f 6e 6e 65 63 74 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 70 75 73 | ....('connect...............(pus | 
| 13080 | 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 63 6f 6e 73 20 68 74 74 70 63 6f 6e 20 68 | h................(cons.httpcon.h | 
| 130a0 | 61 6e 64 6c 65 72 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 6e 65 77 2d 64 65 66 65 72 | andler)................new-defer | 
| 130c0 | 72 65 64 29 29 29 29 29 0a 20 20 20 20 28 65 6c    6e 6f 64 65 2d 2d 64 65 66 65 72 72 65 64 2d 6c | red))))).....(elnode--deferred-l | 
| 130e0 | 6f 67 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 69 6e    66 6f 20 22 63 6f 6d 70 6c 65 74 65 22 29 0a 20 | og.elnode-log-info."complete").. | 
| 13100 | 20 20 20 3b 3b 20 53 65 74 20 74 68 65 20 63 6f    72 72 65 63 74 20 71 75 65 75 65 0a 20 20 20 20 | ...;;.Set.the.correct.queue..... | 
| 13120 | 28 73 65 74 71 20 65 6c 6e 6f 64 65 2d 2d 64 65    66 65 72 72 65 64 20 6e 65 77 2d 64 65 66 65 72 | (setq.elnode--deferred.new-defer | 
| 13140 | 72 65 64 29 29 29 0a 0a 28 64 65 66 75 6e 20 65    6c 6e 6f 64 65 2d 64 65 66 65 72 72 65 64 2d 71 | red)))..(defun.elnode-deferred-q | 
| 13160 | 75 65 75 65 2d 70 72 6f 63 65 73 73 20 28 29 0a    20 20 28 69 6e 74 65 72 61 63 74 69 76 65 29 0a | ueue-process.()...(interactive). | 
| 13180 | 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72    72 65 64 2d 70 72 6f 63 65 73 73 6f 72 29 29 0a | ..(elnode--deferred-processor)). | 
| 131a0 | 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d    64 65 66 65 72 2d 6f 6e 20 6e 69 6c 0a 20 20 22 | .(defvar.elnode-defer-on.nil..." | 
| 131c0 | 57 68 65 74 68 65 72 20 74 6f 20 64 6f 20 64 65    66 65 72 72 69 6e 67 20 6f 72 20 6e 6f 74 2e 22 | Whether.to.do.deferring.or.not." | 
| 131e0 | 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64    65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 20 6e | )..(defvar.elnode--defer-timer.n | 
| 13200 | 69 6c 0a 20 20 22 54 68 65 20 74 69 6d 65 72 20    75 73 65 64 20 62 79 20 74 68 65 20 65 6c 6e 6f | il..."The.timer.used.by.the.elno | 
| 13220 | 64 65 20 64 65 66 65 72 20 70 72 6f 63 65 73 73    69 6e 67 2e 0a 0a 54 68 69 73 20 69 73 20 69 6e | de.defer.processing...This.is.in | 
| 13240 | 69 74 69 61 6c 69 7a 65 64 20 62 79 20 60 65 6c    6e 6f 64 65 2d 2d 69 6e 69 74 2d 64 65 66 65 72 | itialized.by.`elnode--init-defer | 
| 13260 | 72 69 6e 67 27 2e 22 29 0a 0a 28 64 65 66 75 6e    20 65 6c 6e 6f 64 65 2d 2d 69 6e 69 74 2d 64 65 | ring'.")..(defun.elnode--init-de | 
| 13280 | 66 65 72 72 69 6e 67 20 28 29 0a 20 20 22 49 6e    69 74 69 61 6c 69 7a 65 20 65 6c 6e 6f 64 65 20 | ferring.()..."Initialize.elnode. | 
| 132a0 | 64 65 66 65 72 20 70 72 6f 63 65 73 73 69 6e 67    2e 0a 0a 4e 65 63 65 73 73 61 72 79 20 66 6f 72 | defer.processing...Necessary.for | 
| 132c0 | 20 72 75 6e 6e 69 6e 67 20 63 6f 6d 65 74 20 61    70 70 73 2e 22 0a 20 20 28 73 65 74 71 20 65 6c | .running.comet.apps."...(setq.el | 
| 132e0 | 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65    72 0a 20 20 20 20 20 20 20 20 28 72 75 6e 2d 61 | node--defer-timer.........(run-a | 
| 13300 | 74 2d 74 69 6d 65 20 22 32 20 73 65 63 22 20 32    20 27 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 72 | t-time."2.sec".2.'elnode--deferr | 
| 13320 | 65 64 2d 70 72 6f 63 65 73 73 6f 72 29 29 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 64 | ed-processor)))..(defun.elnode-d | 
| 13340 | 65 66 65 72 72 65 64 2d 71 75 65 75 65 2d 73 74    61 72 74 20 28 29 0a 20 20 22 53 74 61 72 74 20 | eferred-queue-start.()..."Start. | 
| 13360 | 74 68 65 20 64 65 66 65 72 72 65 64 20 71 75 65    75 65 2c 20 75 6e 6c 65 73 73 20 69 74 27 73 20 | the.deferred.queue,.unless.it's. | 
| 13380 | 72 75 6e 6e 69 6e 67 2e 22 0a 20 20 28 69 6e 74    65 72 61 63 74 69 76 65 29 0a 20 20 28 75 6e 6c | running."...(interactive)...(unl | 
| 133a0 | 65 73 73 20 65 6c 6e 6f 64 65 2d 64 65 66 65 72    2d 6f 6e 0a 20 20 20 20 28 73 65 74 71 20 65 6c | ess.elnode-defer-on.....(setq.el | 
| 133c0 | 6e 6f 64 65 2d 64 65 66 65 72 2d 6f 6e 20 74 29    29 0a 20 20 28 75 6e 6c 65 73 73 20 65 6c 6e 6f | node-defer-on.t))...(unless.elno | 
| 133e0 | 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 0a    20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 69 6e 69 | de--defer-timer.....(elnode--ini | 
| 13400 | 74 2d 64 65 66 65 72 72 69 6e 67 29 29 29 0a 0a    28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 64 65 | t-deferring)))..(defun.elnode-de | 
| 13420 | 66 65 72 72 65 64 2d 71 75 65 75 65 2d 73 74 6f    70 20 28 29 0a 20 20 22 53 74 6f 70 20 61 6e 79 | ferred-queue-stop.()..."Stop.any | 
| 13440 | 20 72 75 6e 6e 69 6e 67 20 64 65 66 65 72 72 65    64 20 71 75 65 75 65 20 70 72 6f 63 65 73 73 6f | .running.deferred.queue.processo | 
| 13460 | 72 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69    76 65 29 0a 20 20 28 77 68 65 6e 20 65 6c 6e 6f | r."...(interactive)...(when.elno | 
| 13480 | 64 65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 0a    20 20 20 20 28 63 61 6e 63 65 6c 2d 74 69 6d 65 | de--defer-timer.....(cancel-time | 
| 134a0 | 72 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d    74 69 6d 65 72 29 0a 20 20 20 20 28 73 65 74 71 | r.elnode--defer-timer).....(setq | 
| 134c0 | 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 65 72 2d 74    69 6d 65 72 20 6e 69 6c 29 29 29 0a 0a 3b 3b 3b | .elnode--defer-timer.nil)))..;;; | 
| 134e0 | 20 42 61 73 69 63 20 72 65 73 70 6f 6e 73 65 20    6d 61 6e 67 6c 69 6e 67 0a 0a 28 64 65 66 63 75 | .Basic.response.mangling..(defcu | 
| 13500 | 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 64 65 66 61    75 6c 74 2d 72 65 73 70 6f 6e 73 65 2d 74 61 62 | stom.elnode-default-response-tab | 
| 13520 | 6c 65 0a 20 20 27 28 28 32 30 31 20 2e 20 22 43    72 65 61 74 65 64 22 29 0a 20 20 20 20 28 34 30 | le...'((201..."Created").....(40 | 
| 13540 | 30 20 2e 20 22 42 61 64 20 72 65 71 75 65 73 74    22 29 0a 20 20 20 20 28 34 30 34 20 2e 20 22 4e | 0..."Bad.request").....(404..."N | 
| 13560 | 6f 74 20 66 6f 75 6e 64 22 29 0a 20 20 20 20 28    35 30 30 20 2e 20 22 53 65 72 76 65 72 20 65 72 | ot.found").....(500..."Server.er | 
| 13580 | 72 6f 72 22 29 0a 20 20 20 20 28 74 20 2e 20 22    4f 6b 22 29 29 0a 20 20 22 54 68 65 20 73 74 61 | ror").....(t..."Ok"))..."The.sta | 
| 135a0 | 74 75 73 20 63 6f 64 65 20 2d 3e 20 64 65 66 61    75 6c 74 20 6d 65 73 73 61 67 65 20 6d 61 70 70 | tus.code.->.default.message.mapp | 
| 135c0 | 69 6e 67 73 2e 0a 0a 57 68 65 6e 20 45 6c 6e 6f    64 65 20 73 65 6e 64 73 20 61 20 64 65 66 61 75 | ings...When.Elnode.sends.a.defau | 
| 135e0 | 6c 74 20 72 65 73 70 6f 6e 73 65 20 74 68 65 73    65 20 61 72 65 20 74 68 65 20 74 65 78 74 20 75 | lt.response.these.are.the.text.u | 
| 13600 | 73 65 64 2e 0a 0a 41 6c 74 65 72 20 74 68 69 73    20 69 66 20 79 6f 75 20 77 61 6e 74 20 74 6f 20 | sed...Alter.this.if.you.want.to. | 
| 13620 | 63 68 61 6e 67 65 20 74 68 65 20 6d 65 73 73 61    67 65 73 20 74 68 61 74 20 45 6c 6e 6f 64 65 20 | change.the.messages.that.Elnode. | 
| 13640 | 73 65 6e 64 73 0a 77 69 74 68 20 74 68 65 20 66    6f 6c 6c 6f 77 69 6e 67 20 66 75 6e 63 74 69 6f | sends.with.the.following.functio | 
| 13660 | 6e 73 3a 0a 0a 20 27 65 6c 6e 6f 64 65 2d 73 65    6e 64 2d 34 30 30 27 0a 20 27 65 6c 6e 6f 64 65 | ns:...'elnode-send-400'..'elnode | 
| 13680 | 2d 73 65 6e 64 2d 34 30 34 27 0a 20 27 65 6c 6e    6f 64 65 2d 73 65 6e 64 2d 35 30 30 27 0a 0a 54 | -send-404'..'elnode-send-500'..T | 
| 136a0 | 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 65 6c 6e    6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 73 27 | he.function.`elnode-send-status' | 
| 136c0 | 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 73 65    2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e | .also.uses.these."...:group.'eln | 
| 136e0 | 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 61 6c    69 73 74 20 3a 6b 65 79 2d 74 79 70 65 20 69 6e | ode...:type.'(alist.:key-type.in | 
| 13700 | 74 65 67 65 72 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3a 76 61 6c 75 65 2d 74 79 70 | teger.................:value-typ | 
| 13720 | 65 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66    63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d 2d 64 65 | e.string))..(defconst.elnode--de | 
| 13740 | 66 61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 2d 67    72 6f 75 70 73 0a 20 20 27 28 28 31 20 2e 20 22 | fault-response-groups...'((1..." | 
| 13760 | 49 6e 66 6f 72 6d 69 6e 67 20 79 6f 75 20 6f 66    20 73 6f 6d 65 74 68 69 6e 67 2e 22 29 0a 20 20 | Informing.you.of.something.")... | 
| 13780 | 20 20 28 32 20 2e 20 22 4f 6b 2e 22 29 0a 20 20    20 20 28 33 20 2e 20 22 22 29 0a 20 20 20 20 28 | ..(2..."Ok.").....(3..."").....( | 
| 137a0 | 34 20 2e 20 22 42 61 64 2e 22 29 0a 20 20 20 20    28 35 20 2e 20 22 45 72 72 6f 72 2e 22 29 29 0a | 4..."Bad.").....(5..."Error.")). | 
| 137c0 | 20 20 22 52 65 73 70 6f 6e 73 65 20 63 6f 64 65    73 20 66 6f 72 20 65 72 72 6f 72 20 63 6f 64 65 | .."Response.codes.for.error.code | 
| 137e0 | 20 2f 20 31 30 30 2e 0a 0a 54 68 65 73 65 20 61    72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 | ./.100...These.are.designed.to.b | 
| 13800 | 65 20 75 73 65 64 20 77 68 65 6e 20 61 20 73 70    65 63 69 66 69 63 20 63 6f 64 65 20 69 73 20 6e | e.used.when.a.specific.code.is.n | 
| 13820 | 6f 74 0a 61 76 61 69 6c 61 62 6c 65 2e 22 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d | ot.available.")..(defun.elnode-- | 
| 13840 | 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e 73 65 20    28 73 74 61 74 75 73 20 26 6f 70 74 69 6f 6e 61 | format-response.(status.&optiona | 
| 13860 | 6c 20 6d 73 67 29 0a 20 20 22 46 6f 72 6d 61 74    20 74 68 65 20 53 54 41 54 55 53 20 61 6e 64 20 | l.msg)..."Format.the.STATUS.and. | 
| 13880 | 6f 70 74 69 6f 6e 61 6c 6c 79 20 4d 45 53 53 41    47 45 20 61 73 20 61 6e 20 48 54 4d 4c 20 72 65 | optionally.MESSAGE.as.an.HTML.re | 
| 138a0 | 74 75 72 6e 2e 22 0a 20 20 28 66 6f 72 6d 61 74    20 22 3c 68 31 3e 25 73 3c 2f 68 31 3e 25 73 5c | turn."...(format."<h1>%s</h1>%s\ | 
| 138c0 | 72 5c 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28    63 64 72 20 28 6f 72 20 28 61 73 73 6f 63 20 73 | r\n"...........(cdr.(or.(assoc.s | 
| 138e0 | 74 61 74 75 73 20 65 6c 6e 6f 64 65 2d 64 65 66    61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 2d 74 61 | tatus.elnode-default-response-ta | 
| 13900 | 62 6c 65 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 61 73 73 6f 63 20 28 | ble)....................(assoc.( | 
| 13920 | 2f 20 73 74 61 74 75 73 20 31 30 30 29 20 65 6c    6e 6f 64 65 2d 2d 64 65 66 61 75 6c 74 2d 72 65 | /.status.100).elnode--default-re | 
| 13940 | 73 70 6f 6e 73 65 2d 67 72 6f 75 70 73 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | sponse-groups).................. | 
| 13960 | 20 20 28 61 73 73 6f 63 20 74 20 65 6c 6e 6f 64    65 2d 64 65 66 61 75 6c 74 2d 72 65 73 70 6f 6e | ..(assoc.t.elnode-default-respon | 
| 13980 | 73 65 2d 74 61 62 6c 65 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 28 69 66 20 6d 73 67 20 28 66 | se-table)))...........(if.msg.(f | 
| 139a0 | 6f 72 6d 61 74 20 22 3c 70 3e 25 73 3c 2f 70 3e    22 20 6d 73 67 29 20 22 22 29 29 29 0a 0a 0a 3b | ormat."<p>%s</p>".msg)."")))...; | 
| 139c0 | 3b 20 4d 61 69 6e 20 63 6f 6e 74 72 6f 6c 20 66    75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66 75 6e | ;.Main.control.functions..(defun | 
| 139e0 | 20 65 6c 6e 6f 64 65 2d 2d 73 65 6e 74 69 6e 65    6c 20 28 70 72 6f 63 65 73 73 20 73 74 61 74 75 | .elnode--sentinel.(process.statu | 
| 13a00 | 73 29 0a 20 20 22 53 65 6e 74 69 6e 65 6c 20 66    75 6e 63 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 | s)..."Sentinel.function.for.the. | 
| 13a20 | 6d 61 69 6e 20 73 65 72 76 65 72 20 61 6e 64 20    66 6f 72 20 74 68 65 20 63 6c 69 65 6e 74 20 73 | main.server.and.for.the.client.s | 
| 13a40 | 6f 63 6b 65 74 73 2e 22 0a 20 20 28 65 6c 6e 6f    64 65 2d 65 72 72 6f 72 0a 20 20 20 22 65 6c 6e | ockets."...(elnode-error...."eln | 
| 13a60 | 6f 64 65 2d 2d 73 65 6e 74 69 6e 65 6c 20 27 25    73 27 20 66 6f 72 20 70 72 6f 63 65 73 73 20 20 | ode--sentinel.'%s'.for.process.. | 
| 13a80 | 25 73 20 77 69 74 68 20 62 75 66 66 65 72 20 25    73 22 0a 20 20 20 28 65 6c 6e 6f 64 65 2d 74 72 | %s.with.buffer.%s"....(elnode-tr | 
| 13aa0 | 75 6e 63 20 73 74 61 74 75 73 29 0a 20 20 20 28    70 72 6f 63 65 73 73 2d 6e 61 6d 65 20 70 72 6f | unc.status)....(process-name.pro | 
| 13ac0 | 63 65 73 73 29 0a 20 20 20 28 70 72 6f 63 65 73    73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 | cess)....(process-buffer.process | 
| 13ae0 | 29 29 0a 20 20 28 63 6f 6e 64 0a 20 20 20 3b 3b    20 53 65 72 76 65 72 20 73 74 61 74 75 73 0a 20 | ))...(cond....;;.Server.status.. | 
| 13b00 | 20 20 28 28 61 6e 64 0a 20 20 20 20 20 28 61 73    73 6f 63 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e | ..((and......(assoc.(process-con | 
| 13b20 | 74 61 63 74 20 70 72 6f 63 65 73 73 20 3a 73 65    72 76 69 63 65 29 20 65 6c 6e 6f 64 65 2d 73 65 | tact.process.:service).elnode-se | 
| 13b40 | 72 76 65 72 2d 73 6f 63 6b 65 74 29 0a 20 20 20    20 20 28 65 71 75 61 6c 20 73 74 61 74 75 73 20 | rver-socket)......(equal.status. | 
| 13b60 | 22 64 65 6c 65 74 65 64 5c 6e 22 29 29 0a 20 20    20 20 28 69 66 20 28 65 71 75 61 6c 0a 09 20 28 | "deleted\n")).....(if.(equal...( | 
| 13b80 | 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 0a 09    20 20 3b 3b 20 47 65 74 20 74 68 65 20 73 65 72 | process-buffer....;;.Get.the.ser | 
| 13ba0 | 76 65 72 20 70 72 6f 63 65 73 73 0a 09 20 20 28    63 64 72 20 28 61 73 73 6f 63 0a 09 09 28 70 72 | ver.process....(cdr.(assoc...(pr | 
| 13bc0 | 6f 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72    6f 63 65 73 73 20 3a 73 65 72 76 69 63 65 29 0a | ocess-contact.process.:service). | 
| 13be0 | 09 09 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d    73 6f 63 6b 65 74 29 29 29 0a 09 20 28 70 72 6f | ..elnode-server-socket)))...(pro | 
| 13c00 | 63 65 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63    65 73 73 29 29 0a 09 28 6d 65 73 73 61 67 65 20 | cess-buffer.process))..(message. | 
| 13c20 | 22 66 6f 75 6e 64 20 74 68 65 20 73 65 72 76 65    72 20 70 72 6f 63 65 73 73 20 2d 20 4e 4f 54 20 | "found.the.server.process.-.NOT. | 
| 13c40 | 64 65 6c 65 74 69 6e 67 22 29 0a 20 20 20 20 20    20 28 6d 65 73 73 61 67 65 20 22 61 68 61 21 20 | deleting").......(message."aha!. | 
| 13c60 | 64 65 6c 65 74 69 6e 67 20 74 68 65 20 63 6f 6e    6e 65 63 74 69 6f 6e 20 70 72 6f 63 65 73 73 22 | deleting.the.connection.process" | 
| 13c80 | 29 0a 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 75    66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62 75 | ).......(kill-buffer.(process-bu | 
| 13ca0 | 66 66 65 72 20 70 72 6f 63 65 73 73 29 29 29 0a    20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f | ffer.process))).....(elnode-erro | 
| 13cc0 | 72 20 22 45 6c 6e 6f 64 65 20 73 65 72 76 65 72    20 73 74 6f 70 70 65 64 22 29 29 0a 0a 20 20 20 | r."Elnode.server.stopped"))..... | 
| 13ce0 | 3b 3b 20 43 6c 69 65 6e 74 20 73 6f 63 6b 65 74    20 73 74 61 74 75 73 0a 20 20 20 28 28 65 71 75 | ;;.Client.socket.status....((equ | 
| 13d00 | 61 6c 20 73 74 61 74 75 73 20 22 63 6f 6e 6e 65    63 74 69 6f 6e 20 62 72 6f 6b 65 6e 20 62 79 20 | al.status."connection.broken.by. | 
| 13d20 | 72 65 6d 6f 74 65 20 70 65 65 72 5c 6e 22 29 0a    20 20 20 20 28 77 68 65 6e 20 28 70 72 6f 63 65 | remote.peer\n").....(when.(proce | 
| 13d40 | 73 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73    73 29 0a 20 20 20 20 20 20 28 6b 69 6c 6c 2d 62 | ss-buffer.process).......(kill-b | 
| 13d60 | 75 66 66 65 72 20 28 70 72 6f 63 65 73 73 2d 62    75 66 66 65 72 20 70 72 6f 63 65 73 73 29 29 0a | uffer.(process-buffer.process)). | 
| 13d80 | 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72    72 6f 72 20 22 45 6c 6e 6f 64 65 20 63 6f 6e 6e | ......(elnode-error."Elnode.conn | 
| 13da0 | 65 63 74 69 6f 6e 20 64 72 6f 70 70 65 64 20 25    73 22 20 70 72 6f 63 65 73 73 29 29 29 0a 0a 20 | ection.dropped.%s".process)))... | 
| 13dc0 | 20 20 28 28 65 71 75 61 6c 20 73 74 61 74 75 73    20 22 6f 70 65 6e 5c 6e 22 29 20 3b 3b 20 74 68 | ..((equal.status."open\n").;;.th | 
| 13de0 | 69 73 20 73 61 79 73 20 22 6f 70 65 6e 20 66 72    6f 6d 20 2e 2e 2e 22 0a 20 20 20 20 28 65 6c 6e | is.says."open.from....".....(eln | 
| 13e00 | 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c 6e 6f 64    65 20 6f 70 65 6e 65 64 20 6e 65 77 20 63 6f 6e | ode-error."Elnode.opened.new.con | 
| 13e20 | 6e 65 63 74 69 6f 6e 22 29 29 0a 0a 20 20 20 3b    3b 20 44 65 66 61 75 6c 74 0a 20 20 20 28 74 0a | nection")).....;;.Default....(t. | 
| 13e40 | 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f    72 20 22 45 6c 6e 6f 64 65 20 73 74 61 74 75 73 | ....(elnode-error."Elnode.status | 
| 13e60 | 3a 20 25 73 20 25 73 22 20 70 72 6f 63 65 73 73    20 28 65 6c 6e 6f 64 65 2d 74 72 69 6d 20 73 74 | :.%s.%s".process.(elnode-trim.st | 
| 13e80 | 61 74 75 73 29 29 29 29 29 0a 0a 28 64 65 66 75    6e 20 65 6c 6e 6f 64 65 2d 2d 70 72 6f 63 65 73 | atus)))))..(defun.elnode--proces | 
| 13ea0 | 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 28 70    72 6f 63 20 64 61 74 61 29 0a 20 20 22 45 6c 6e | s-send-string.(proc.data)..."Eln | 
| 13ec0 | 6f 64 65 20 61 64 61 70 74 65 72 20 66 6f 72 20    60 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 | ode.adapter.for.`process-send-st | 
| 13ee0 | 72 69 6e 67 27 2e 0a 0a 53 65 6e 64 73 20 44 41    54 41 20 74 6f 20 74 68 65 20 48 54 54 50 20 63 | ring'...Sends.DATA.to.the.HTTP.c | 
| 13f00 | 6f 6e 6e 65 63 74 69 6f 6e 20 50 52 4f 43 20 28    77 68 69 63 68 20 69 73 20 61 6e 20 48 54 54 50 | onnection.PROC.(which.is.an.HTTP | 
| 13f20 | 0a 63 6f 6e 6e 65 63 74 69 6f 6e 29 20 75 73 69    6e 67 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | .connection).using.`elnode-http- | 
| 13f40 | 73 65 6e 64 2d 73 74 72 69 6e 67 27 2e 0a 0a 54    68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 60 | send-string'...This.is.used.by.` | 
| 13f60 | 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c    69 73 70 27 20 74 6f 20 69 6d 70 6c 65 6d 65 6e | elnode-worker-elisp'.to.implemen | 
| 13f80 | 74 20 61 20 70 72 6f 74 6f 63 6f 6c 20 66 6f 72    0a 73 65 6e 64 69 6e 67 20 64 61 74 61 20 74 68 | t.a.protocol.for.sending.data.th | 
| 13fa0 | 72 6f 75 67 68 20 61 6e 20 65 6c 6e 6f 64 65 20    63 6f 6e 6e 65 63 74 69 6f 6e 20 74 72 61 6e 73 | rough.an.elnode.connection.trans | 
| 13fc0 | 70 61 72 65 6e 74 6c 79 2e 22 0a 20 20 28 65 6c    6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 | parently."...(elnode-http-send-s | 
| 13fe0 | 74 72 69 6e 67 20 70 72 6f 63 20 64 61 74 61 29    29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | tring.proc.data))..(defun.elnode | 
| 14000 | 2d 2d 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65    6f 66 20 28 70 72 6f 63 29 0a 20 20 22 45 6c 6e | --process-send-eof.(proc)..."Eln | 
| 14020 | 6f 64 65 20 61 64 61 70 74 65 72 20 66 6f 72 20    60 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f | ode.adapter.for.`process-send-eo | 
| 14040 | 66 27 2e 0a 0a 53 65 6e 64 73 20 45 4f 46 20 74    6f 20 74 68 65 20 48 54 54 50 20 63 6f 6e 6e 65 | f'...Sends.EOF.to.the.HTTP.conne | 
| 14060 | 63 74 69 6f 6e 20 50 52 4f 43 20 28 77 68 69 63    68 20 69 73 20 61 6e 20 48 54 54 50 0a 63 6f 6e | ction.PROC.(which.is.an.HTTP.con | 
| 14080 | 6e 65 63 74 69 6f 6e 29 20 69 6e 20 61 20 77 61    79 20 74 68 61 74 20 63 68 75 6e 6b 65 64 20 65 | nection).in.a.way.that.chunked.e | 
| 140a0 | 6e 63 6f 64 69 6e 67 20 69 73 20 65 6e 64 65 64    20 70 72 6f 70 65 72 6c 79 2e 0a 0a 54 68 69 73 | ncoding.is.ended.properly...This | 
| 140c0 | 20 69 73 20 75 73 65 64 20 62 79 20 60 65 6c 6e    6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 | .is.used.by.`elnode-worker-elisp | 
| 140e0 | 27 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 61    20 70 72 6f 74 6f 63 6f 6c 20 66 6f 72 0a 73 65 | '.to.implement.a.protocol.for.se | 
| 14100 | 6e 64 69 6e 67 20 64 61 74 61 20 74 68 72 6f 75    67 68 20 61 6e 20 65 6c 6e 6f 64 65 20 63 6f 6e | nding.data.through.an.elnode.con | 
| 14120 | 6e 65 63 74 69 6f 6e 20 74 72 61 6e 73 70 61 72    65 6e 74 6c 79 2e 22 0a 20 20 28 65 6c 6e 6f 64 | nection.transparently."...(elnod | 
| 14140 | 65 2d 65 72 72 6f 72 20 22 65 6c 6e 6f 64 65 2d    2d 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f | e-error."elnode--process-send-eo | 
| 14160 | 66 20 6f 6e 20 25 73 22 20 70 72 6f 63 29 0a 20    20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 | f.on.%s".proc)...(elnode-http-se | 
| 14180 | 6e 64 2d 73 74 72 69 6e 67 20 70 72 6f 63 20 22    22 29 0a 20 20 3b 3b 28 70 72 6f 63 65 73 73 2d | nd-string.proc."")...;;(process- | 
| 141a0 | 73 65 6e 64 2d 73 74 72 69 6e 67 20 70 72 6f 63    20 22 5c 72 5c 6e 22 29 0a 20 20 28 65 6c 6e 6f | send-string.proc."\r\n")...(elno | 
| 141c0 | 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 70 72 6f    63 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f | de--http-end.proc))..(defun.elno | 
| 141e0 | 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 68    65 61 64 65 72 20 28 62 75 66 66 65 72 20 73 74 | de--http-parse-header.(buffer.st | 
| 14200 | 61 72 74 20 26 6f 70 74 69 6f 6e 61 6c 20 6e 6f    6e 2d 68 65 61 64 65 72 29 0a 20 20 22 50 61 72 | art.&optional.non-header)..."Par | 
| 14220 | 73 65 20 61 20 68 65 61 64 65 72 20 66 72 6f 6d    20 74 68 65 20 42 55 46 46 45 52 20 61 74 20 70 | se.a.header.from.the.BUFFER.at.p | 
| 14240 | 6f 69 6e 74 20 53 54 41 52 54 2e 0a 0a 54 68 65    20 69 6e 69 74 69 61 6c 20 68 65 61 64 65 72 20 | oint.START...The.initial.header. | 
| 14260 | 6d 61 79 20 62 65 20 70 61 72 73 65 64 20 77 69    74 68 20 74 68 69 73 20 6f 72 20 69 66 20 4e 4f | may.be.parsed.with.this.or.if.NO | 
| 14280 | 4e 2d 48 45 41 44 45 52 20 69 73 0a 73 65 6e 74    20 74 68 65 6e 20 61 6e 6f 74 68 65 72 20 68 65 | N-HEADER.is.sent.then.another.he | 
| 142a0 | 61 64 65 72 2c 20 73 75 63 68 20 61 73 20 61 20    6d 75 6c 74 69 70 61 72 74 20 68 65 61 64 65 72 | ader,.such.as.a.multipart.header | 
| 142c0 | 2c 20 6d 61 79 20 62 65 20 72 65 61 64 2e 0a 0a    49 66 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 | ,.may.be.read...If.the.complete. | 
| 142e0 | 68 65 61 64 65 72 20 68 61 73 20 6e 6f 74 20 62    65 65 6e 20 72 65 61 64 20 74 68 65 6e 20 77 65 | header.has.not.been.read.then.we | 
| 14300 | 20 74 68 72 6f 77 20 74 6f 0a 60 65 6c 6e 6f 64    65 2d 70 61 72 73 65 2d 68 74 74 70 27 20 77 69 | .throw.to.`elnode-parse-http'.wi | 
| 14320 | 74 68 20 65 69 74 68 65 72 20 60 68 65 61 64 65    72 27 20 6f 72 20 60 6e 6f 6e 2d 68 65 61 64 65 | th.either.`header'.or.`non-heade | 
| 14340 | 72 27 2e 0a 0a 57 65 20 72 65 74 75 72 6e 20 61    20 6c 69 73 74 20 6f 66 20 74 68 65 20 6c 65 61 | r'...We.return.a.list.of.the.lea | 
| 14360 | 64 65 72 2c 20 77 68 69 63 68 20 69 73 20 74 68    65 20 66 69 72 73 74 20 6c 69 6e 65 20 6f 66 20 | der,.which.is.the.first.line.of. | 
| 14380 | 74 68 65 0a 68 65 61 64 65 72 20 28 77 68 69 63    68 20 69 73 20 6e 6f 74 20 74 68 65 20 68 65 61 | the.header.(which.is.not.the.hea | 
| 143a0 | 64 65 72 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79    20 61 6e 20 61 6c 69 73 74 20 6f 66 0a 68 65 61 | der).followed.by.an.alist.of.hea | 
| 143c0 | 64 65 72 73 2e 22 0a 20 20 28 77 69 74 68 2d 63    75 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75 | ders."...(with-current-buffer.bu | 
| 143e0 | 66 66 65 72 0a 20 20 20 20 28 6c 65 74 20 28 28    68 64 72 65 6e 64 20 28 72 65 2d 73 65 61 72 63 | ffer.....(let.((hdrend.(re-searc | 
| 14400 | 68 2d 66 6f 72 77 61 72 64 20 22 5c 72 5c 6e 5c    72 5c 6e 22 20 6e 69 6c 20 27 74 29 29 29 0a 20 | h-forward."\r\n\r\n".nil.'t))).. | 
| 14420 | 20 20 20 20 20 28 77 68 65 6e 20 28 6e 6f 74 20    68 64 72 65 6e 64 29 0a 20 20 20 20 20 20 20 20 | .....(when.(not.hdrend)......... | 
| 14440 | 28 74 68 72 6f 77 20 27 65 6c 6e 6f 64 65 2d 70    61 72 73 65 2d 68 74 74 70 20 28 6f 72 20 28 61 | (throw.'elnode-parse-http.(or.(a | 
| 14460 | 6e 64 20 6e 6f 6e 2d 68 65 61 64 65 72 20 27 6e    6f 6e 2d 68 65 61 64 65 72 29 20 27 68 65 61 64 | nd.non-header.'non-header).'head | 
| 14480 | 65 72 29 29 29 0a 20 20 20 20 20 20 28 6c 65 74    2a 20 28 28 6c 69 6e 65 73 0a 20 20 20 20 20 20 | er))).......(let*.((lines....... | 
| 144a0 | 20 20 20 20 20 20 20 20 28 73 70 6c 69 74 2d 73    74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 20 | ........(split-string........... | 
| 144c0 | 20 20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62    73 74 72 69 6e 67 20 73 74 61 72 74 20 68 64 72 | .....(buffer-substring.start.hdr | 
| 144e0 | 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 22 5c 72 5c 6e 22 0a 20 20 20 20 20 | end)................"\r\n"...... | 
| 14500 | 20 20 20 20 20 20 20 20 20 20 27 74 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 61 | ..........'t))..............(sta | 
| 14520 | 74 75 73 20 28 63 61 72 20 6c 69 6e 65 73 29 29    20 3b 3b 20 74 68 65 20 66 69 72 73 74 20 6c 69 | tus.(car.lines)).;;.the.first.li | 
| 14540 | 6e 65 20 69 73 20 74 68 65 20 73 74 61 74 75 73    20 6c 69 6e 65 0a 20 20 20 20 20 20 20 20 20 20 | ne.is.the.status.line........... | 
| 14560 | 20 20 20 28 68 65 61 64 65 72 20 28 63 64 72 20    6c 69 6e 65 73 29 29 20 3b 3b 20 74 68 65 20 72 | ...(header.(cdr.lines)).;;.the.r | 
| 14580 | 65 73 74 20 6f 66 20 74 68 65 20 6c 69 6e 65 73    20 61 72 65 20 74 68 65 20 68 65 61 64 65 72 0a | est.of.the.lines.are.the.header. | 
| 145a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 65    61 64 65 72 2d 61 6c 69 73 74 2d 73 74 72 69 6e | .............(header-alist-strin | 
| 145c0 | 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6d 61 70 63 61 72 0a 20 20 20 20 20 20 20 | gs...............(mapcar........ | 
| 145e0 | 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20    28 68 64 72 6c 69 6e 65 29 0a 20 20 20 20 20 20 | ........(lambda.(hdrline)....... | 
| 14600 | 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 6e    20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 0a 20 | ...........(when.(string-match.. | 
| 14620 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 22 5c 5c 28 5b 41 2d 5a 61 | ......................."\\([A-Za | 
| 14640 | 2d 7a 30 2d 39 5f 2d 5d 2b 5c 5c 29 3a 5b 20 5d    2a 5c 5c 28 2e 2a 5c 5c 29 22 0a 20 20 20 20 20 | -z0-9_-]+\\):[.]*\\(.*\\)"...... | 
| 14660 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 68 64 72 6c 69 6e 65 29 0a 20 20 20 20 | ...................hdrline)..... | 
| 14680 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    63 6f 6e 73 0a 20 20 20 20 20 20 20 20 20 20 20 | ...............(cons............ | 
| 146a0 | 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 68 2d    73 74 72 69 6e 67 20 31 20 68 64 72 6c 69 6e 65 | .........(match-string.1.hdrline | 
| 146c0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 | ).....................(match-str | 
| 146e0 | 69 6e 67 20 32 20 68 64 72 6c 69 6e 65 29 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ing.2.hdrline))))............... | 
| 14700 | 20 68 65 61 64 65 72 29 29 29 0a 20 20 20 20 20    20 20 20 28 6c 69 73 74 20 73 74 61 74 75 73 20 | .header))).........(list.status. | 
| 14720 | 68 65 61 64 65 72 2d 61 6c 69 73 74 2d 73 74 72    69 6e 67 73 29 29 29 29 29 0a 0a 28 64 65 66 75 | header-alist-strings)))))..(defu | 
| 14740 | 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70    61 72 73 65 20 28 68 74 74 70 63 6f 6e 29 0a 20 | n.elnode--http-parse.(httpcon).. | 
| 14760 | 20 22 50 61 72 73 65 20 74 68 65 20 48 54 54 50    20 68 65 61 64 65 72 20 66 6f 72 20 74 68 65 20 | ."Parse.the.HTTP.header.for.the. | 
| 14780 | 70 72 6f 63 65 73 73 2e 0a 0a 49 66 20 74 68 65    20 72 65 71 75 65 73 74 20 69 73 20 6e 6f 74 20 | process...If.the.request.is.not. | 
| 147a0 | 66 75 6c 6c 79 20 63 6f 6d 70 6c 65 74 65 20 28    69 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 | fully.complete.(if.the.header.ha | 
| 147c0 | 73 20 6e 6f 74 0a 61 72 72 69 76 65 64 20 79 65    74 20 6f 72 20 77 65 20 64 6f 6e 27 74 20 68 61 | s.not.arrived.yet.or.we.don't.ha | 
| 147e0 | 76 65 20 61 6c 6c 20 74 68 65 20 63 6f 6e 74 65    6e 74 2d 6c 65 6e 67 74 68 20 79 65 74 20 66 6f | ve.all.the.content-length.yet.fo | 
| 14800 | 72 0a 65 78 61 6d 70 6c 65 29 20 74 68 69 73 20    63 61 6e 20 74 68 72 6f 77 20 60 65 6c 6e 6f 64 | r.example).this.can.throw.`elnod | 
| 14820 | 65 2d 70 61 72 73 65 2d 68 74 74 70 27 2e 20 20    54 68 65 20 74 68 69 6e 67 20 62 65 69 6e 67 0a | e-parse-http'...The.thing.being. | 
| 14840 | 77 61 69 74 65 64 20 66 6f 72 20 69 73 20 69 6e    64 69 63 61 74 65 64 2e 0a 0a 49 6d 70 6f 72 74 | waited.for.is.indicated...Import | 
| 14860 | 61 6e 74 20 73 69 64 65 20 65 66 66 65 63 74 73    20 6f 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f | ant.side.effects.of.this.functio | 
| 14880 | 6e 20 61 72 65 20 74 6f 20 61 64 64 20 63 65 72    74 61 69 6e 0a 70 72 6f 63 65 73 73 20 70 72 6f | n.are.to.add.certain.process.pro | 
| 148a0 | 70 65 72 74 69 65 73 20 74 6f 20 74 68 65 20 48    54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 | perties.to.the.HTTP.connection.. | 
| 148c0 | 20 54 68 65 73 65 20 61 72 65 20 74 68 65 20 72    65 73 75 6c 74 0a 6f 66 20 73 75 63 63 65 73 73 | .These.are.the.result.of.success | 
| 148e0 | 66 75 6c 20 70 61 72 73 69 6e 67 2e 22 0a 20 20    3b 3b 20 46 49 58 4d 45 20 2d 20 77 65 20 64 6f | ful.parsing."...;;.FIXME.-.we.do | 
| 14900 | 6e 27 74 20 6e 65 65 64 20 74 6f 20 64 6f 20 74    68 69 73 20 2d 20 77 65 20 73 68 6f 75 6c 64 20 | n't.need.to.do.this.-.we.should. | 
| 14920 | 63 68 65 63 6b 20 66 6f 72 0a 20 20 3b 3b 20 68    65 61 64 65 72 2d 70 61 72 73 65 64 20 61 6e 64 | check.for...;;.header-parsed.and | 
| 14940 | 20 61 76 6f 69 64 20 69 74 20 77 65 20 77 65 20    63 61 6e 0a 20 20 28 77 69 74 68 2d 63 75 72 72 | .avoid.it.we.we.can...(with-curr | 
| 14960 | 65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63    65 73 73 2d 62 75 66 66 65 72 20 68 74 74 70 63 | ent-buffer.(process-buffer.httpc | 
| 14980 | 6f 6e 29 0a 20 20 20 20 28 73 61 76 65 2d 65 78    63 75 72 73 69 6f 6e 0a 20 20 20 20 20 20 28 67 | on).....(save-excursion.......(g | 
| 149a0 | 6f 74 6f 2d 63 68 61 72 20 28 70 6f 69 6e 74 2d    6d 69 6e 29 29 0a 20 20 20 20 20 20 28 64 65 73 | oto-char.(point-min)).......(des | 
| 149c0 | 74 72 75 63 74 75 72 69 6e 67 2d 62 69 6e 64 20    28 6c 65 61 64 65 72 20 61 6c 69 73 74 2d 73 74 | tructuring-bind.(leader.alist-st | 
| 149e0 | 72 69 6e 67 73 29 0a 20 20 20 20 20 20 20 20 20    20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 | rings)...........(elnode--http-p | 
| 14a00 | 61 72 73 65 2d 68 65 61 64 65 72 20 28 63 75 72    72 65 6e 74 2d 62 75 66 66 65 72 29 20 28 70 6f | arse-header.(current-buffer).(po | 
| 14a20 | 69 6e 74 2d 6d 69 6e 29 29 0a 20 20 20 20 20 20    20 20 28 6c 65 74 2a 20 28 28 68 64 72 65 6e 64 | int-min)).........(let*.((hdrend | 
| 14a40 | 20 28 70 6f 69 6e 74 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 61 6c 69 73 74 2d | .(point))................(alist- | 
| 14a60 | 73 79 6d 73 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6b 76 61 6c 69 73 74 2d 6b 65 | syms.................(kvalist-ke | 
| 14a80 | 79 73 2d 3e 73 79 6d 62 6f 6c 73 20 61 6c 69 73    74 2d 73 74 72 69 6e 67 73 20 3a 66 69 72 73 74 | ys->symbols.alist-strings.:first | 
| 14aa0 | 2d 66 6e 20 27 64 6f 77 6e 63 61 73 65 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | -fn.'downcase))................( | 
| 14ac0 | 63 6f 6e 74 65 6e 74 2d 6c 65 6e 20 28 61 73 73    71 20 27 63 6f 6e 74 65 6e 74 2d 6c 65 6e 67 74 | content-len.(assq.'content-lengt | 
| 14ae0 | 68 20 61 6c 69 73 74 2d 73 79 6d 73 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 3b 3b 20 43 68 65 | h.alist-syms)))...........;;.Che | 
| 14b00 | 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69    66 20 77 65 20 68 61 76 65 20 69 74 2e 0a 20 20 | ck.the.content.if.we.have.it.... | 
| 14b20 | 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 63 6f    6e 74 65 6e 74 2d 6c 65 6e 0a 20 20 20 20 20 20 | ........(when.content-len....... | 
| 14b40 | 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28 61 76    61 69 6c 61 62 6c 65 2d 63 6f 6e 74 65 6e 74 20 | ......(let*.((available-content. | 
| 14b60 | 28 2d 20 28 70 6f 69 6e 74 2d 6d 61 78 29 20 68    64 72 65 6e 64 29 29 29 0a 20 20 20 20 20 20 20 | (-.(point-max).hdrend)))........ | 
| 14b80 | 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 3e 20    28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 | .......(when.(>.(string-to-numbe | 
| 14ba0 | 72 20 28 63 64 72 20 63 6f 6e 74 65 6e 74 2d 6c    65 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | r.(cdr.content-len))............ | 
| 14bc0 | 20 20 20 20 20 20 20 20 20 20 20 20 61 76 61 69    6c 61 62 6c 65 2d 63 6f 6e 74 65 6e 74 29 0a 20 | ............available-content).. | 
| 14be0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    74 68 72 6f 77 20 27 65 6c 6e 6f 64 65 2d 70 61 | ...............(throw.'elnode-pa | 
| 14c00 | 72 73 65 2d 68 74 74 70 20 27 63 6f 6e 74 65 6e    74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | rse-http.'content))))........... | 
| 14c20 | 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74    70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 65 61 | (process-put.httpcon.:elnode-hea | 
| 14c40 | 64 65 72 2d 65 6e 64 20 68 64 72 65 6e 64 29 0a    20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 | der-end.hdrend)...........(proce | 
| 14c60 | 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 74 | ss-put.httpcon.:elnode-http-stat | 
| 14c80 | 75 73 20 6c 65 61 64 65 72 29 0a 20 20 20 20 20    20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 | us.leader)...........(process-pu | 
| 14ca0 | 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64    65 2d 68 74 74 70 2d 68 65 61 64 65 72 2d 73 79 | t.httpcon.:elnode-http-header-sy | 
| 14cc0 | 6d 73 20 61 6c 69 73 74 2d 73 79 6d 73 29 0a 20    20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 | ms.alist-syms)...........(proces | 
| 14ce0 | 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65    6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 | s-put.httpcon.:elnode-http-heade | 
| 14d00 | 72 20 61 6c 69 73 74 2d 73 74 72 69 6e 67 73 29    29 29 29 29 0a 20 20 3b 3b 20 52 65 74 75 72 6e | r.alist-strings)))))...;;.Return | 
| 14d20 | 20 61 20 73 79 6d 62 6f 6c 20 74 6f 20 69 6e 64    69 63 61 74 65 20 64 6f 6e 65 2d 6e 65 73 73 0a | .a.symbol.to.indicate.done-ness. | 
| 14d40 | 20 20 27 64 6f 6e 65 29 0a 0a 28 64 65 66 75 6e    20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 | ..'done)..(defun.elnode--http-ma | 
| 14d60 | 6b 65 2d 68 64 72 20 28 6d 65 74 68 6f 64 20 72    65 73 6f 75 72 63 65 20 26 72 65 73 74 20 68 65 | ke-hdr.(method.resource.&rest.he | 
| 14d80 | 61 64 65 72 73 29 0a 20 20 20 20 22 43 6f 6e 76    65 6e 69 65 6e 63 65 20 66 75 6e 63 74 69 6f 6e | aders)....."Convenience.function | 
| 14da0 | 20 74 6f 20 6d 61 6b 65 20 61 6e 20 48 54 54 50    20 68 65 61 64 65 72 2e 0a 0a 4d 45 54 48 4f 44 | .to.make.an.HTTP.header...METHOD | 
| 14dc0 | 20 69 73 20 74 68 65 20 6d 65 74 68 6f 64 20 74    6f 20 75 73 65 2e 20 20 52 45 53 4f 55 52 43 45 | .is.the.method.to.use...RESOURCE | 
| 14de0 | 20 69 73 20 74 68 65 20 70 61 74 68 20 74 6f 20    75 73 65 2e 0a 48 45 41 44 45 52 53 20 73 68 6f | .is.the.path.to.use..HEADERS.sho | 
| 14e00 | 75 6c 64 20 62 65 20 70 61 69 72 73 20 6f 66 20    73 74 72 69 6e 67 73 20 69 6e 64 69 63 61 74 69 | uld.be.pairs.of.strings.indicati | 
| 14e20 | 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 76 61    6c 75 65 73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d | ng.the.header.values:...(elnode- | 
| 14e40 | 2d 68 74 74 70 2d 6d 61 6b 65 2d 68 64 72 20 27    67 65 74 20 5c 22 2f 5c 22 20 27 28 68 6f 73 74 | -http-make-hdr.'get.\"/\".'(host | 
| 14e60 | 20 2e 20 5c 22 6c 6f 63 61 6c 68 6f 73 74 5c 22    29 29 0a 0a 57 68 65 72 65 20 73 79 6d 62 6f 6c | ...\"localhost\"))..Where.symbol | 
| 14e80 | 73 20 61 72 65 20 65 6e 63 6f 75 6e 74 65 72 65    64 20 74 68 65 79 20 61 72 65 20 74 75 72 6e 65 | s.are.encountered.they.are.turne | 
| 14ea0 | 64 20 69 6e 74 6f 20 73 74 72 69 6e 67 73 2e 0a    49 6e 73 69 64 65 20 68 65 61 64 65 72 73 20 74 | d.into.strings..Inside.headers.t | 
| 14ec0 | 68 65 79 20 61 72 65 20 63 61 70 69 74 61 6c 69    7a 65 64 2e 0a 0a 41 20 68 65 61 64 65 72 20 70 | hey.are.capitalized...A.header.p | 
| 14ee0 | 61 69 72 20 77 69 74 68 20 74 68 65 20 6b 65 79    20 60 62 6f 64 79 27 20 63 61 6e 20 62 65 20 75 | air.with.the.key.`body'.can.be.u | 
| 14f00 | 73 65 64 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f    6e 74 65 6e 74 20 62 6f 64 79 3a 0a 0a 20 28 65 | sed.to.make.a.content.body:...(e | 
| 14f20 | 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 61 6b 65    2d 68 64 72 20 27 67 65 74 20 5c 22 2f 5c 22 20 | lnode--http-make-hdr.'get.\"/\". | 
| 14f40 | 27 28 62 6f 64 79 20 2e 20 5c 22 73 6f 6d 65 20    74 65 78 74 5c 22 29 29 0a 20 3d 3e 0a 20 47 45 | '(body...\"some.text\"))..=>..GE | 
| 14f60 | 54 20 2f 20 48 54 54 50 2f 31 2e 31 0a 0a 20 73    6f 6d 65 20 74 65 78 74 0a 0a 4e 6f 20 6f 74 68 | T./.HTTP/1.1...some.text..No.oth | 
| 14f80 | 65 72 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f    6e 73 20 61 72 65 20 64 6f 6e 65 20 6f 6e 20 74 | er.transformations.are.done.on.t | 
| 14fa0 | 68 65 20 62 6f 64 79 2c 20 6e 6f 20 63 6f 6e 74    65 6e 74 20 74 79 70 65 0a 61 64 64 65 64 20 6f | he.body,.no.content.type.added.o | 
| 14fc0 | 72 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68    20 63 6f 6d 70 75 74 65 64 2e 22 0a 20 20 20 20 | r.content.length.computed."..... | 
| 14fe0 | 28 6c 65 74 20 28 62 6f 64 79 29 0a 20 20 20 20    20 20 28 6e 6f 66 6c 65 74 20 28 28 68 65 61 64 | (let.(body).......(noflet.((head | 
| 15000 | 65 72 2d 6e 61 6d 65 20 28 68 64 72 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 | er-name.(hdr)................(if | 
| 15020 | 20 28 73 79 6d 62 6f 6c 70 20 28 63 61 72 20 68    64 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | .(symbolp.(car.hdr))............ | 
| 15040 | 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f 6c 2d    6e 61 6d 65 20 28 63 61 72 20 68 64 72 29 29 0a | ........(symbol-name.(car.hdr)). | 
| 15060 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 63 61 72 20 68 64 72 29 29 29 29 0a | ...................(car.hdr)))). | 
| 15080 | 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 0a    20 20 20 20 20 20 20 20 20 22 25 73 20 25 73 20 | ........(format.........."%s.%s. | 
| 150a0 | 48 54 54 50 2f 31 2e 31 5c 72 5c 6e 25 73 5c 72    5c 6e 25 73 22 0a 20 20 20 20 20 20 20 20 20 28 | HTTP/1.1\r\n%s\r\n%s"..........( | 
| 150c0 | 75 70 63 61 73 65 20 28 69 66 20 28 73 79 6d 62    6f 6c 70 20 6d 65 74 68 6f 64 29 20 28 73 79 6d | upcase.(if.(symbolp.method).(sym | 
| 150e0 | 62 6f 6c 2d 6e 61 6d 65 20 6d 65 74 68 6f 64 29    20 6d 65 74 68 6f 64 29 29 0a 20 20 20 20 20 20 | bol-name.method).method))....... | 
| 15100 | 20 20 20 72 65 73 6f 75 72 63 65 0a 20 20 20 20    20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20 68 | ...resource..........(loop.for.h | 
| 15120 | 65 61 64 65 72 20 69 6e 20 68 65 61 64 65 72 73    0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 | eader.in.headers.............if. | 
| 15140 | 28 65 71 75 61 6c 20 28 68 65 61 64 65 72 2d 6e    61 6d 65 20 68 65 61 64 65 72 29 20 22 62 6f 64 | (equal.(header-name.header)."bod | 
| 15160 | 79 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    64 6f 20 28 73 65 74 71 20 62 6f 64 79 20 28 63 | y").............do.(setq.body.(c | 
| 15180 | 64 72 20 68 65 61 64 65 72 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 | dr.header)).............else.... | 
| 151a0 | 20 20 20 20 20 20 20 20 20 63 6f 6e 63 61 74 20    28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 20 20 | .........concat.(format......... | 
| 151c0 | 20 20 20 20 20 20 20 20 20 20 20 20 22 25 73 3a    20 25 73 5c 72 5c 6e 22 0a 20 20 20 20 20 20 20 | ............"%s:.%s\r\n"........ | 
| 151e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61    70 69 74 61 6c 69 7a 65 20 28 68 65 61 64 65 72 | .............(capitalize.(header | 
| 15200 | 2d 6e 61 6d 65 20 68 65 61 64 65 72 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | -name.header)).................. | 
| 15220 | 20 20 20 28 63 64 72 20 68 65 61 64 65 72 29 29    29 0a 20 20 20 20 20 20 20 20 20 3b 3b 20 49 66 | ...(cdr.header)))..........;;.If | 
| 15240 | 20 77 65 20 68 61 76 65 20 61 20 62 6f 64 79 20    74 68 65 6e 20 61 64 64 20 74 68 61 74 20 61 73 | .we.have.a.body.then.add.that.as | 
| 15260 | 20 77 65 6c 6c 0a 20 20 20 20 20 20 20 20 20 28    6f 72 20 62 6f 64 79 20 22 22 29 29 29 29 29 0a | .well..........(or.body.""))))). | 
| 15280 | 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d    67 65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 20 | .(defun.elnode--get-server-prop. | 
| 152a0 | 28 70 72 6f 63 65 73 73 20 6b 65 79 29 0a 20 20    22 47 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f | (process.key)..."Get.the.value.o | 
| 152c0 | 66 20 74 68 65 20 4b 45 59 20 66 72 6f 6d 20 74    68 65 20 73 65 72 76 65 72 20 61 74 74 61 63 68 | f.the.KEY.from.the.server.attach | 
| 152e0 | 65 64 20 74 6f 20 50 52 4f 43 45 53 53 2e 0a 0a    53 65 72 76 65 72 20 70 72 6f 70 65 72 74 69 65 | ed.to.PROCESS...Server.propertie | 
| 15300 | 73 20 61 72 65 20 62 6f 75 6e 64 20 77 69 74 68    20 60 65 6c 6e 6f 64 65 2d 73 74 61 72 74 27 20 | s.are.bound.with.`elnode-start'. | 
| 15320 | 77 68 69 63 68 20 73 65 74 73 20 75 70 0a 60 65    6c 6e 6f 64 65 2d 2d 6c 6f 67 2d 66 6e 27 20 74 | which.sets.up.`elnode--log-fn'.t | 
| 15340 | 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 61 6c    6c 20 73 6f 63 6b 65 74 73 20 63 72 65 61 74 65 | o.ensure.that.all.sockets.create | 
| 15360 | 64 20 68 61 76 65 20 61 20 6c 69 6e 6b 0a 62 61    63 6b 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 | d.have.a.link.back.to.the.server | 
| 15380 | 2e 22 0a 20 20 20 20 28 6c 65 74 2a 20 28 28 73    65 72 76 65 72 20 28 70 72 6f 63 65 73 73 2d 67 | .".....(let*.((server.(process-g | 
| 153a0 | 65 74 20 70 72 6f 63 65 73 73 20 3a 73 65 72 76    65 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | et.process.:server))............ | 
| 153c0 | 28 76 61 6c 75 65 20 28 70 72 6f 63 65 73 73 2d    67 65 74 20 73 65 72 76 65 72 20 6b 65 79 29 29 | (value.(process-get.server.key)) | 
| 153e0 | 29 0a 20 20 20 20 20 20 76 61 6c 75 65 29 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d | ).......value))..(defun.elnode-- | 
| 15400 | 6d 61 6b 65 2d 73 65 6e 64 2d 73 74 72 69 6e 67    20 28 29 0a 20 20 20 20 22 4d 61 6b 65 20 61 20 | make-send-string.()....."Make.a. | 
| 15420 | 66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65 6e 64    20 61 20 73 74 72 69 6e 67 20 74 6f 20 61 6e 20 | function.to.send.a.string.to.an. | 
| 15440 | 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e    22 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 | HTTP.connection.".....(lambda.(h | 
| 15460 | 74 74 70 63 6f 6e 20 73 74 72 29 0a 20 20 20 20    20 20 22 53 65 6e 64 20 53 54 52 20 74 6f 20 74 | ttpcon.str)......."Send.STR.to.t | 
| 15480 | 68 65 20 48 54 54 50 43 4f 4e 2e 0a 44 6f 65 73    20 61 6e 79 20 6e 65 63 65 73 73 61 72 79 20 65 | he.HTTPCON..Does.any.necessary.e | 
| 154a0 | 6e 63 6f 64 69 6e 67 2e 22 0a 20 20 20 20 20 20    28 65 6c 6e 6f 64 65 2d 2d 70 72 6f 63 65 73 73 | ncoding.".......(elnode--process | 
| 154c0 | 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74    70 63 6f 6e 20 73 74 72 29 29 29 0a 0a 28 64 65 | -send-string.httpcon.str)))..(de | 
| 154e0 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65    2d 73 65 6e 64 2d 65 6f 66 20 28 29 0a 20 20 22 | fun.elnode--make-send-eof.()..." | 
| 15500 | 4d 61 6b 65 20 61 20 66 75 6e 63 74 69 6f 6e 20    74 6f 20 73 65 6e 64 20 45 4f 46 20 74 6f 20 61 | Make.a.function.to.send.EOF.to.a | 
| 15520 | 6e 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f    6e 2e 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 63 | n.HTTP.connection."...(lambda.(c | 
| 15540 | 6f 6e 29 0a 20 20 20 20 22 53 65 6e 64 20 45 4f    46 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e | on)....."Send.EOF.to.the.HTTPCON | 
| 15560 | 2e 0a 44 6f 65 73 20 61 6e 79 20 6e 65 63 65 73    73 61 72 79 20 65 6e 63 6f 64 69 6e 67 2e 22 0a | ..Does.any.necessary.encoding.". | 
| 15580 | 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 70 72 6f    63 65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 63 6f | ....(elnode--process-send-eof.co | 
| 155a0 | 6e 29 29 29 0a 0a 0a 28 64 65 66 75 6e 20 65 6c    6e 6f 64 65 2d 2d 68 61 6e 64 6c 65 72 2d 63 61 | n)))...(defun.elnode--handler-ca | 
| 155c0 | 6c 6c 20 28 68 61 6e 64 6c 65 72 20 70 72 6f 63    65 73 73 29 0a 20 20 22 53 69 6d 70 6c 65 20 66 | ll.(handler.process)..."Simple.f | 
| 155e0 | 75 6e 63 74 69 6f 6e 20 74 6f 20 77 72 61 70 20    63 61 6c 6c 69 6e 67 20 74 68 65 20 48 41 4e 44 | unction.to.wrap.calling.the.HAND | 
| 15600 | 4c 45 52 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d    65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20 63 | LER."...(elnode-error."filter:.c | 
| 15620 | 61 6c 6c 69 6e 67 20 68 61 6e 64 6c 65 72 20 6f    6e 20 25 73 22 20 70 72 6f 63 65 73 73 29 0a 20 | alling.handler.on.%s".process).. | 
| 15640 | 20 28 66 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65    72 20 70 72 6f 63 65 73 73 29 0a 20 20 28 65 6c | .(funcall.handler.process)...(el | 
| 15660 | 6e 6f 64 65 2d 65 72 72 6f 72 20 22 66 69 6c 74    65 72 3a 20 68 61 6e 64 6c 65 72 20 72 65 74 75 | node-error."filter:.handler.retu | 
| 15680 | 72 6e 65 64 20 6f 6e 20 25 73 22 20 70 72 6f 63    65 73 73 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c | rned.on.%s".process))..(defun.el | 
| 156a0 | 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 20 28 70 72    6f 63 65 73 73 20 64 61 74 61 29 0a 20 20 22 46 | node--filter.(process.data)..."F | 
| 156c0 | 69 6c 74 65 72 69 6e 67 20 44 41 54 41 20 73 65    6e 74 20 66 72 6f 6d 20 74 68 65 20 63 6c 69 65 | iltering.DATA.sent.from.the.clie | 
| 156e0 | 6e 74 20 50 52 4f 43 45 53 53 2e 2e 0a 0a 54 68    69 73 20 64 6f 65 73 20 74 68 65 20 77 6f 72 6b | nt.PROCESS....This.does.the.work | 
| 15700 | 20 6f 66 20 66 69 6e 64 69 6e 67 20 61 6e 64 20    63 61 6c 6c 69 6e 67 20 74 68 65 20 75 73 65 72 | .of.finding.and.calling.the.user | 
| 15720 | 20 48 54 54 50 0a 63 6f 6e 6e 65 63 74 69 6f 6e    20 68 61 6e 64 6c 65 72 20 66 6f 72 20 74 68 65 | .HTTP.connection.handler.for.the | 
| 15740 | 20 72 65 71 75 65 73 74 20 6f 6e 20 50 52 4f 43    45 53 53 2e 0a 0a 41 20 62 75 66 66 65 72 20 66 | .request.on.PROCESS...A.buffer.f | 
| 15760 | 6f 72 20 74 68 65 20 48 54 54 50 20 63 6f 6e 6e    65 63 74 69 6f 6e 20 69 73 20 63 72 65 61 74 65 | or.the.HTTP.connection.is.create | 
| 15780 | 64 2c 20 75 6e 69 71 75 69 66 69 65 64 20 62 79    20 74 68 65 0a 70 6f 72 74 20 6e 75 6d 62 65 72 | d,.uniquified.by.the.port.number | 
| 157a0 | 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69    6f 6e 2e 22 0a 20 20 28 6c 65 74 20 28 28 62 75 | .of.the.connection."...(let.((bu | 
| 157c0 | 66 0a 20 20 20 20 20 20 20 20 20 28 6f 72 0a 20    20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 | f..........(or...........(proces | 
| 157e0 | 73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73    29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 53 | s-buffer.process)...........;;.S | 
| 15800 | 65 74 20 74 68 65 20 70 72 6f 63 65 73 73 20 62    75 66 66 65 72 20 28 62 65 63 61 75 73 65 20 74 | et.the.process.buffer.(because.t | 
| 15820 | 68 65 20 73 65 72 76 65 72 20 64 6f 65 73 6e 27    74 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20 61 | he.server.doesn't...........;;.a | 
| 15840 | 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 61 6c 6c    6f 63 61 74 65 20 74 68 65 6d 29 0a 20 20 20 20 | utomatically.allocate.them)..... | 
| 15860 | 20 20 20 20 20 20 3b 3b 0a 20 20 20 20 20 20 20    20 20 20 3b 3b 20 54 68 65 20 6e 61 6d 65 20 6f | ......;;...........;;.The.name.o | 
| 15880 | 66 20 74 68 65 20 62 75 66 66 65 72 20 68 61 73    20 74 68 65 20 63 6c 69 65 6e 74 20 70 6f 72 74 | f.the.buffer.has.the.client.port | 
| 158a0 | 20 69 6e 20 69 74 0a 20 20 20 20 20 20 20 20 20    20 3b 3b 20 74 68 65 20 73 70 61 63 65 20 69 6e | .in.it...........;;.the.space.in | 
| 158c0 | 20 74 68 65 20 6e 61 6d 65 20 65 6e 73 75 72 65    73 20 74 68 61 74 20 65 6d 61 63 73 20 64 6f 65 | .the.name.ensures.that.emacs.doe | 
| 158e0 | 73 20 6e 6f 74 20 6c 69 73 74 20 69 74 0a 20 20    20 20 20 20 20 20 20 20 3b 3b 0a 20 20 20 20 20 | s.not.list.it...........;;...... | 
| 15900 | 20 20 20 20 20 3b 3b 20 57 65 20 61 6c 73 6f 20    75 73 65 20 74 68 69 73 20 6d 6f 6d 65 6e 74 20 | .....;;.We.also.use.this.moment. | 
| 15920 | 74 6f 20 73 65 74 75 70 20 66 75 6e 63 74 69 6f    6e 73 20 72 65 71 75 69 72 65 64 20 62 79 0a 20 | to.setup.functions.required.by.. | 
| 15940 | 20 20 20 20 20 20 20 20 20 3b 3b 20 65 6c 6e 6f    64 65 2d 77 6f 72 6b 65 72 2d 6c 69 73 70 0a 20 | .........;;.elnode-worker-lisp.. | 
| 15960 | 20 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28    28 70 6f 72 74 20 28 63 61 64 72 20 28 70 72 6f | .........(let*.((port.(cadr.(pro | 
| 15980 | 63 65 73 73 2d 63 6f 6e 74 61 63 74 20 70 72 6f    63 65 73 73 29 29 29 0a 20 20 20 20 20 20 20 20 | cess-contact.process)))......... | 
| 159a0 | 20 20 20 20 20 20 20 20 20 28 73 65 6e 64 2d 73    74 72 69 6e 67 2d 66 75 6e 63 20 28 65 6c 6e 6f | .........(send-string-func.(elno | 
| 159c0 | 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d 73 74    72 69 6e 67 29 29 0a 20 20 20 20 20 20 20 20 20 | de--make-send-string)).......... | 
| 159e0 | 20 20 20 20 20 20 20 20 28 73 65 6e 64 2d 65 6f    66 2d 66 75 6e 63 20 28 65 6c 6e 6f 64 65 2d 2d | ........(send-eof-func.(elnode-- | 
| 15a00 | 6d 61 6b 65 2d 73 65 6e 64 2d 65 6f 66 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 | make-send-eof))).............(pr | 
| 15a20 | 6f 63 65 73 73 2d 70 75 74 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 70 72 6f 63 65 73 73 20 3a | ocess-put..............process.: | 
| 15a40 | 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e 63    74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 | send-string-function............ | 
| 15a60 | 20 20 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75    6e 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ..send-string-func)............. | 
| 15a80 | 3b 3b 20 2e 2e 2e 20 61 6e 64 20 74 68 69 73 20    6f 6e 65 20 64 6f 65 73 20 63 6c 6f 73 69 6e 67 | ;;.....and.this.one.does.closing | 
| 15aa0 | 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20    70 72 6f 70 65 72 6c 79 0a 20 20 20 20 20 20 20 | .the.connection.properly........ | 
| 15ac0 | 20 20 20 20 20 3b 3b 20 77 69 74 68 20 65 6c 6e    6f 64 65 27 73 20 63 68 75 6e 6b 65 64 20 65 6e | .....;;.with.elnode's.chunked.en | 
| 15ae0 | 63 6f 64 69 6e 67 2e 0a 20 20 20 20 20 20 20 20    20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 | coding..............(process-put | 
| 15b00 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72    6f 63 65 73 73 20 3a 73 65 6e 64 2d 65 6f 66 2d | ..............process.:send-eof- | 
| 15b20 | 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 73 65 6e 64 2d 65 6f 66 2d 66 | function..............send-eof-f | 
| 15b40 | 75 6e 63 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 3b 3b 20 4e 6f 77 20 64 6f 20 74 68 65 20 62 | unc).............;;.Now.do.the.b | 
| 15b60 | 75 66 66 65 72 20 63 72 65 61 74 69 6f 6e 0a 20    20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 2d | uffer.creation.............(set- | 
| 15b80 | 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 63 | process-buffer..............proc | 
| 15ba0 | 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65 | ess..............(get-buffer-cre | 
| 15bc0 | 61 74 65 20 28 66 6f 72 6d 61 74 20 22 20 2a 65    6c 6e 6f 64 65 2d 72 65 71 75 65 73 74 2d 25 73 | ate.(format.".*elnode-request-%s | 
| 15be0 | 2a 22 20 70 6f 72 74 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d | *".port))).............(process- | 
| 15c00 | 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 29 29    29 29 29 0a 20 20 20 20 28 77 69 74 68 2d 63 75 | buffer.process))))).....(with-cu | 
| 15c20 | 72 72 65 6e 74 2d 62 75 66 66 65 72 20 62 75 66    0a 20 20 20 20 20 20 28 69 6e 73 65 72 74 20 64 | rrent-buffer.buf.......(insert.d | 
| 15c40 | 61 74 61 29 0a 20 20 20 20 20 20 3b 3b 20 54 72    79 20 61 6e 64 20 70 61 72 73 65 2e 2e 2e 0a 20 | ata).......;;.Try.and.parse..... | 
| 15c60 | 20 20 20 20 20 28 6c 65 74 20 28 28 70 61 72 73    65 2d 73 74 61 74 75 73 20 28 63 61 74 63 68 20 | .....(let.((parse-status.(catch. | 
| 15c80 | 27 65 6c 6e 6f 64 65 2d 70 61 72 73 65 2d 68 74    74 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | 'elnode-parse-http.............. | 
| 15ca0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 | ...............(elnode--http-par | 
| 15cc0 | 73 65 20 70 72 6f 63 65 73 73 29 29 29 29 0a 20    20 20 20 20 20 20 20 28 63 61 73 65 20 70 61 72 | se.process)))).........(case.par | 
| 15ce0 | 73 65 2d 73 74 61 74 75 73 0a 20 20 20 20 20 20    20 20 20 20 3b 3b 20 49 66 20 74 68 69 73 20 66 | se-status...........;;.If.this.f | 
| 15d00 | 61 69 6c 73 20 77 69 74 68 20 6f 6e 65 20 6f 66    20 74 68 65 73 65 20 73 70 65 63 69 66 69 63 20 | ails.with.one.of.these.specific. | 
| 15d20 | 63 6f 64 65 73 20 69 74 27 73 0a 20 20 20 20 20    20 20 20 20 20 3b 3b 20 6f 6b 2e 2e 2e 20 77 65 | codes.it's...........;;.ok....we | 
| 15d40 | 27 6c 6c 20 66 69 6e 69 73 68 20 69 74 20 77 68    65 6e 20 74 68 65 20 64 61 74 61 20 61 72 72 69 | 'll.finish.it.when.the.data.arri | 
| 15d60 | 76 65 73 0a 20 20 20 20 20 20 20 20 20 20 28 27    68 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 20 | ves...........('header.......... | 
| 15d80 | 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20    22 65 6c 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 3a | ..(elnode-error."elnode--filter: | 
| 15da0 | 20 70 61 72 74 69 61 6c 20 68 65 61 64 65 72 20    64 61 74 61 20 72 65 63 65 69 76 65 64 22 29 29 | .partial.header.data.received")) | 
| 15dc0 | 0a 20 20 20 20 20 20 20 20 20 20 28 27 63 6f 6e    74 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 | ...........('content............ | 
| 15de0 | 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 65    6c 6e 6f 64 65 2d 2d 66 69 6c 74 65 72 3a 20 70 | (elnode-error."elnode--filter:.p | 
| 15e00 | 61 72 74 69 61 6c 20 68 65 61 64 65 72 20 64 61    74 61 20 72 65 63 65 69 76 65 64 22 29 29 0a 20 | artial.header.data.received")).. | 
| 15e20 | 20 20 20 20 20 20 20 20 20 3b 3b 20 57 65 20 77    65 72 65 20 73 75 63 63 65 73 73 66 75 6c 20 73 | .........;;.We.were.successful.s | 
| 15e40 | 6f 20 77 65 20 63 61 6e 20 63 61 6c 6c 20 74 68    65 20 75 73 65 72 20 68 61 6e 64 6c 65 72 2e 0a | o.we.can.call.the.user.handler.. | 
| 15e60 | 20 20 20 20 20 20 20 20 20 20 28 27 64 6f 6e 65    0a 20 20 20 20 20 20 20 20 20 20 20 28 73 61 76 | ..........('done............(sav | 
| 15e80 | 65 2d 65 78 63 75 72 73 69 6f 6e 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d 63 | e-excursion..............(goto-c | 
| 15ea0 | 68 61 72 20 28 70 72 6f 63 65 73 73 2d 67 65 74    20 70 72 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 | har.(process-get.process.:elnode | 
| 15ec0 | 2d 68 65 61 64 65 72 2d 65 6e 64 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 | -header-end))..............(let. | 
| 15ee0 | 28 28 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | ((handler.....................(e | 
| 15f00 | 6c 6e 6f 64 65 2d 2d 67 65 74 2d 73 65 72 76 65    72 2d 70 72 6f 70 20 70 72 6f 63 65 73 73 20 3a | lnode--get-server-prop.process.: | 
| 15f20 | 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 61 6e 64    6c 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 | elnode-http-handler))).......... | 
| 15f40 | 20 20 20 20 20 20 3b 3b 20 54 68 69 73 20 69 73    20 77 68 65 72 65 20 77 65 20 63 61 6c 6c 20 74 | ......;;.This.is.where.we.call.t | 
| 15f60 | 68 65 20 75 73 65 72 20 68 61 6e 64 6c 65 72 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | he.user.handler................; | 
| 15f80 | 3b 20 54 4f 44 4f 3a 20 74 68 69 73 20 6e 65 65    64 73 20 65 72 72 6f 72 20 70 72 6f 74 65 63 74 | ;.TODO:.this.needs.error.protect | 
| 15fa0 | 69 6f 6e 20 73 6f 20 77 65 20 63 61 6e 20 72 65    74 75 72 6e 20 61 6e 20 65 72 72 6f 72 3f 0a 20 | ion.so.we.can.return.an.error?.. | 
| 15fc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 75    6e 77 69 6e 64 2d 70 72 6f 74 65 63 74 0a 20 20 | ..............(unwind-protect... | 
| 15fe0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 | ..................(condition-cas | 
| 16000 | 65 20 73 69 67 6e 61 6c 2d 76 61 6c 75 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e.signal-value.................. | 
| 16020 | 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d    68 61 6e 64 6c 65 72 2d 63 61 6c 6c 20 68 61 6e | .......(elnode--handler-call.han | 
| 16040 | 64 6c 65 72 20 70 72 6f 63 65 73 73 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | dler.process)................... | 
| 16060 | 20 20 20 20 28 27 65 6c 6e 6f 64 65 2d 64 65 66    65 72 20 3b 20 73 65 65 20 65 6c 6e 6f 64 65 2d | ....('elnode-defer.;.see.elnode- | 
| 16080 | 64 65 66 65 72 2d 6e 6f 77 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | defer-now....................... | 
| 160a0 | 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22    66 69 6c 74 65 72 3a 20 64 65 66 65 72 20 63 61 | .(elnode-error."filter:.defer.ca | 
| 160c0 | 75 67 68 74 20 6f 6e 20 25 73 22 20 70 72 6f 63    65 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 | ught.on.%s".process)............ | 
| 160e0 | 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 43    68 65 63 6b 20 74 68 65 20 74 69 6d 65 72 2c 20 | ............;;.Check.the.timer,. | 
| 16100 | 74 68 69 73 20 69 73 20 70 72 6f 62 61 62 6c 79    20 73 70 75 72 69 6f 75 73 20 62 75 74 0a 20 20 | this.is.probably.spurious.but... | 
| 16120 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 3b 3b 20 75 73 65 66 75 6c 20 22 | .....................;;.useful." | 
| 16140 | 66 6f 72 20 6e 6f 77 22 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | for.now"........................ | 
| 16160 | 28 75 6e 6c 65 73 73 20 65 6c 6e 6f 64 65 2d 64    65 66 65 72 2d 6f 6e 0a 20 20 20 20 20 20 20 20 | (unless.elnode-defer-on......... | 
| 16180 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 | .................(elnode-error." | 
| 161a0 | 66 69 6c 74 65 72 3a 20 6e 6f 20 64 65 66 65 72    20 74 69 6d 65 72 20 66 6f 72 20 25 73 22 20 70 | filter:.no.defer.timer.for.%s".p | 
| 161c0 | 72 6f 63 65 73 73 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | rocess))........................ | 
| 161e0 | 28 63 61 73 65 20 28 65 6c 6e 6f 64 65 2d 2d 67    65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 0a 20 | (case.(elnode--get-server-prop.. | 
| 16200 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f | .............................pro | 
| 16220 | 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 64 65 66    65 72 2d 6d 6f 64 65 29 0a 20 20 20 20 20 20 20 | cess.:elnode-defer-mode)........ | 
| 16240 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 28 3a 6d 61 6e 61 67 65 64 20 27 6d 61 | ..................((:managed.'ma | 
| 16260 | 6e 61 67 65 64 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | naged).......................... | 
| 16280 | 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 70 72    6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 64 65 | .(process-put.process.:elnode-de | 
| 162a0 | 66 65 72 72 65 64 20 74 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ferred.t)....................... | 
| 162c0 | 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 65 66    65 72 72 65 64 2d 61 64 64 0a 20 20 20 20 20 20 | ....(elnode--deferred-add....... | 
| 162e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 70 72 6f 63 65 73 73 0a 20 20 20 | .....................process.... | 
| 16300 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20 63 | ........................;;.the.c | 
| 16320 | 64 72 20 6f 66 20 74 68 65 20 73 69 67 20 76 61    6c 75 65 20 69 73 20 74 68 65 20 66 75 6e 63 0a | dr.of.the.sig.value.is.the.func. | 
| 16340 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 | ...........................(cdr. | 
| 16360 | 73 69 67 6e 61 6c 2d 76 61 6c 75 65 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | signal-value)))................. | 
| 16380 | 20 20 20 20 20 20 20 20 20 28 28 3a 69 6d 6d 65    64 69 61 74 65 20 27 69 6d 6d 65 64 69 61 74 65 | .........((:immediate.'immediate | 
| 163a0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | )...........................(eln | 
| 163c0 | 6f 64 65 2d 65 72 72 6f 72 20 22 66 69 6c 74 65    72 3a 20 69 6d 6d 65 64 69 61 74 65 20 64 65 66 | ode-error."filter:.immediate.def | 
| 163e0 | 65 72 20 6f 6e 20 25 73 22 20 70 72 6f 63 65 73    73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | er.on.%s".process).............. | 
| 16400 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75    6e 63 61 6c 6c 20 28 63 64 72 20 73 69 67 6e 61 | .............(funcall.(cdr.signa | 
| 16420 | 6c 2d 76 61 6c 75 65 29 20 70 72 6f 63 65 73 73    29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | l-value).process))))............ | 
| 16440 | 20 20 20 20 20 20 20 20 20 20 20 28 27 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........('t.................. | 
| 16460 | 20 20 20 20 20 20 3b 3b 20 46 49 58 4d 45 3a 20    77 65 20 6e 65 65 64 20 73 6f 6d 65 20 73 6f 72 | ......;;.FIXME:.we.need.some.sor | 
| 16480 | 74 20 6f 66 20 63 68 65 63 6b 20 74 6f 20 73 65    65 20 69 66 20 74 68 65 0a 20 20 20 20 20 20 20 | t.of.check.to.see.if.the........ | 
| 164a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3b 3b 20 68 65 61 64 65 72 20 68 61 73 20 62 65 | ................;;.header.has.be | 
| 164c0 | 65 6e 20 77 72 69 74 74 65 6e 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | en.written...................... | 
| 164e0 | 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..(elnode-error................. | 
| 16500 | 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d    2d 66 69 6c 74 65 72 3a 20 64 65 66 61 75 6c 74 | ........"elnode--filter:.default | 
| 16520 | 20 68 61 6e 64 6c 69 6e 67 20 25 53 22 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .handling.%S"................... | 
| 16540 | 20 20 20 20 20 20 73 69 67 6e 61 6c 2d 76 61 6c    75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ......signal-value)............. | 
| 16560 | 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63    65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 0a | ...........(process-send-string. | 
| 16580 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73 0a | ........................process. | 
| 165a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d | ........................(elnode- | 
| 165c0 | 2d 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e 73 65    20 35 30 30 29 29 29 29 0a 20 20 20 20 20 20 20 | -format-response.500))))........ | 
| 165e0 | 20 20 20 20 20 20 20 20 20 20 3b 3b 20 48 61 6e    64 6c 65 20 75 6e 77 69 6e 64 20 65 72 72 6f 72 | ..........;;.Handle.unwind.error | 
| 16600 | 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 77 68 65 6e 0a 20 20 20 20 20 20 20 | s..................(when........ | 
| 16620 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61    6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..............(and.............. | 
| 16640 | 20 20 20 20 20 20 20 20 20 28 6e 6f 74 20 28 70    72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f 63 65 | .........(not.(process-get.proce | 
| 16660 | 73 73 20 3a 65 6c 6e 6f 64 65 2d 64 65 66 65 72    72 65 64 29 29 0a 20 20 20 20 20 20 20 20 20 20 | ss.:elnode-deferred))........... | 
| 16680 | 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 74    20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 | ............(not.(process-get.pr | 
| 166a0 | 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74    74 70 2d 73 74 61 72 74 65 64 29 29 0a 20 20 20 | ocess.:elnode-http-started)).... | 
| 166c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6e 6f 74 20 28 70 72 6f 63 65 73 73 | ...................(not.(process | 
| 166e0 | 2d 67 65 74 20 70 72 6f 63 65 73 73 20 3a 65 6c    6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 | -get.process.:elnode-child-proce | 
| 16700 | 73 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | ss)))....................(elnode | 
| 16720 | 2d 65 72 72 6f 72 20 22 66 69 6c 74 65 72 3a 20    63 61 75 67 68 74 20 61 6e 20 65 72 72 6f 72 20 | -error."filter:.caught.an.error. | 
| 16740 | 69 6e 20 74 68 65 20 68 61 6e 64 6c 69 6e 67 22    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | in.the.handling")............... | 
| 16760 | 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73 65    6e 64 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 | .....(process-send-string....... | 
| 16780 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72    6f 63 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 | ..............process........... | 
| 167a0 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 2d 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e | ..........(elnode--format-respon | 
| 167c0 | 73 65 20 35 30 30 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c | se.500))....................(del | 
| 167e0 | 65 74 65 2d 70 72 6f 63 65 73 73 20 70 72 6f 63    65 73 73 29 29 29 29 29 29 29 29 29 29 29 0a 0a | ete-process.process))))))))))).. | 
| 16800 | 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d    69 70 2d 61 64 64 72 2d 3e 73 74 72 69 6e 67 20 | .(defun.elnode--ip-addr->string. | 
| 16820 | 28 69 70 2d 61 64 64 72 29 0a 20 20 22 54 75 72    6e 20 61 20 76 65 63 74 6f 72 20 49 50 2d 41 44 | (ip-addr)..."Turn.a.vector.IP-AD | 
| 16840 | 44 52 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67    20 66 6f 72 6d 2e 0a 0a 54 68 65 20 76 65 63 74 | DR.into.a.string.form...The.vect | 
| 16860 | 6f 72 20 66 6f 72 6d 20 69 73 20 70 72 6f 64 75    63 65 64 20 62 79 20 60 70 72 6f 63 65 73 73 2d | or.form.is.produced.by.`process- | 
| 16880 | 63 6f 6e 74 61 63 74 27 20 61 6e 64 20 69 6e 63    6c 75 64 65 73 20 74 68 65 0a 70 6f 72 74 20 6e | contact'.and.includes.the.port.n | 
| 168a0 | 75 6d 62 65 72 2e 22 0a 20 20 28 64 65 73 74 72    75 63 74 75 72 69 6e 67 2d 62 69 6e 64 20 28 61 | umber."...(destructuring-bind.(a | 
| 168c0 | 20 62 20 63 20 64 20 70 6f 72 74 29 0a 20 20 20    20 20 20 28 6d 61 70 63 61 72 20 27 69 64 65 6e | .b.c.d.port).......(mapcar.'iden | 
| 168e0 | 74 69 74 79 20 69 70 2d 61 64 64 72 29 0a 20 20    20 20 28 66 6f 72 6d 61 74 20 22 25 73 2e 25 73 | tity.ip-addr).....(format."%s.%s | 
| 16900 | 2e 25 73 2e 25 73 3a 25 73 22 20 61 20 62 20 63    20 64 20 70 6f 72 74 29 29 29 0a 0a 28 64 65 66 | .%s.%s:%s".a.b.c.d.port)))..(def | 
| 16920 | 75 6e 20 65 6c 6e 6f 64 65 2d 67 65 74 2d 72 65    6d 6f 74 65 2d 69 70 61 64 64 72 20 28 68 74 74 | un.elnode-get-remote-ipaddr.(htt | 
| 16940 | 70 63 6f 6e 29 0a 20 20 22 52 65 74 75 72 6e 20    74 68 65 20 72 65 6d 6f 74 65 20 49 50 20 61 64 | pcon)..."Return.the.remote.IP.ad | 
| 16960 | 64 72 65 73 73 20 66 72 6f 6d 20 74 68 65 20 48    54 54 50 43 4f 4e 2e 0a 0a 52 65 74 75 72 6e 65 | dress.from.the.HTTPCON...Returne | 
| 16980 | 64 20 61 73 20 61 20 64 6f 74 74 65 64 20 69 70    20 61 64 64 72 65 73 73 20 66 6f 6c 6c 6f 77 65 | d.as.a.dotted.ip.address.followe | 
| 169a0 | 64 20 62 79 20 61 20 63 6f 6c 6f 6e 20 73 65 70    61 72 61 74 65 64 0a 70 6f 72 74 20 6e 75 6d 62 | d.by.a.colon.separated.port.numb | 
| 169c0 | 65 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65    3a 20 5c 22 31 32 37 2e 30 2e 30 2e 31 3a 38 30 | er...For.example:.\"127.0.0.1:80 | 
| 169e0 | 38 30 5c 22 2e 22 0a 20 20 28 6c 65 74 2a 20 28    28 72 65 6d 6f 74 65 20 28 70 6c 69 73 74 2d 67 | 80\"."...(let*.((remote.(plist-g | 
| 16a00 | 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 63 6f | et...................(process-co | 
| 16a20 | 6e 74 61 63 74 20 68 74 74 70 63 6f 6e 20 74 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ntact.httpcon.t)................ | 
| 16a40 | 20 20 20 3a 72 65 6d 6f 74 65 29 29 29 0a 20 20    20 20 28 65 6c 6e 6f 64 65 2d 2d 69 70 2d 61 64 | ...:remote))).....(elnode--ip-ad | 
| 16a60 | 64 72 2d 3e 73 74 72 69 6e 67 20 72 65 6d 6f 74    65 29 29 29 0a 0a 28 64 65 66 61 6c 69 61 73 20 | dr->string.remote)))..(defalias. | 
| 16a80 | 27 65 6c 6e 6f 64 65 2d 72 65 6d 6f 74 65 2d 69    70 61 64 64 72 20 27 65 6c 6e 6f 64 65 2d 67 65 | 'elnode-remote-ipaddr.'elnode-ge | 
| 16aa0 | 74 2d 72 65 6d 6f 74 65 2d 69 70 61 64 64 72 29    0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d | t-remote-ipaddr)..(defun.elnode- | 
| 16ac0 | 73 65 72 76 65 72 2d 69 6e 66 6f 20 28 68 74 74    70 63 6f 6e 29 0a 20 20 22 52 65 74 75 72 6e 73 | server-info.(httpcon)..."Returns | 
| 16ae0 | 20 61 20 73 74 72 69 6e 67 20 61 64 72 65 73 73    20 6f 66 20 74 68 65 20 73 65 72 76 65 72 20 68 | .a.string.adress.of.the.server.h | 
| 16b00 | 6f 73 74 20 61 6e 64 20 70 6f 72 74 20 66 6f 72    20 48 54 54 50 43 4f 4e 2e 0a 0a 46 6f 72 20 65 | ost.and.port.for.HTTPCON...For.e | 
| 16b20 | 78 61 6d 70 6c 65 3a 20 5c 22 31 32 37 2e 30 2e    30 2e 31 3a 38 30 30 30 5c 22 20 2d 20 6c 6f 63 | xample:.\"127.0.0.1:8000\".-.loc | 
| 16b40 | 61 6c 68 6f 73 74 20 6f 6e 20 70 6f 72 74 20 38    30 30 30 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d | alhost.on.port.8000."...(elnode- | 
| 16b60 | 2d 69 70 2d 61 64 64 72 2d 3e 73 74 72 69 6e 67    0a 20 20 20 28 70 6c 69 73 74 2d 67 65 74 0a 20 | -ip-addr->string....(plist-get.. | 
| 16b80 | 20 20 20 28 70 72 6f 63 65 73 73 2d 63 6f 6e 74    61 63 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74 | ...(process-contact.(process-get | 
| 16ba0 | 20 68 74 74 70 63 6f 6e 20 3a 73 65 72 76 65 72    29 20 74 29 0a 20 20 20 20 3a 6c 6f 63 61 6c 29 | .httpcon.:server).t).....:local) | 
| 16bc0 | 29 29 0a 0a 0a 3b 3b 3b 20 54 65 73 74 69 6e 67    20 73 74 75 66 66 0a 0a 28 64 65 66 76 61 72 20 | ))...;;;.Testing.stuff..(defvar. | 
| 16be0 | 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73    74 6f 72 65 20 6e 69 6c 0a 20 20 22 43 6f 6f 6b | elnode--cookie-store.nil..."Cook | 
| 16c00 | 69 65 20 73 74 6f 72 65 20 66 6f 72 20 74 65 73    74 20 73 65 72 76 65 72 73 2e 0a 0a 54 68 69 73 | ie.store.for.test.servers...This | 
| 16c20 | 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 64 65    66 76 61 72 20 66 6f 72 20 64 79 6e 61 6d 69 63 | .is.a.special.defvar.for.dynamic | 
| 16c40 | 20 6f 76 65 72 72 69 64 69 6e 67 20 62 79 0a 60    77 69 74 68 2d 65 6c 6e 6f 64 65 2d 6d 6f 63 6b | .overriding.by.`with-elnode-mock | 
| 16c60 | 2d 73 65 72 76 65 72 27 2e 22 29 0a 0a 28 64 65    66 6d 61 63 72 6f 20 77 69 74 68 2d 65 6c 6e 6f | -server'.")..(defmacro.with-elno | 
| 16c80 | 64 65 2d 6d 6f 63 6b 2d 73 65 72 76 65 72 20 28    68 61 6e 64 6c 65 72 20 26 72 65 73 74 20 62 6f | de-mock-server.(handler.&rest.bo | 
| 16ca0 | 64 79 29 0a 20 20 22 45 78 65 63 75 74 65 20 42    4f 44 59 20 77 69 74 68 20 61 20 66 61 6b 65 20 | dy)..."Execute.BODY.with.a.fake. | 
| 16cc0 | 73 65 72 76 65 72 20 77 68 69 63 68 20 69 73 20    62 6f 75 6e 64 20 74 6f 20 48 41 4e 44 4c 45 52 | server.which.is.bound.to.HANDLER | 
| 16ce0 | 2e 0a 0a 54 68 69 73 20 69 73 20 75 73 65 66 75    6c 20 66 6f 72 20 64 6f 69 6e 67 20 65 6e 64 20 | ...This.is.useful.for.doing.end. | 
| 16d00 | 74 6f 20 65 6e 64 20 63 6c 69 65 6e 74 20 74 65    73 74 69 6e 67 3a 0a 0a 20 28 65 72 74 2d 64 65 | to.end.client.testing:...(ert-de | 
| 16d20 | 66 74 65 73 74 20 65 6c 6e 6f 64 65 2d 73 6f 6d    65 2d 70 61 67 65 20 28 29 0a 20 20 28 77 69 74 | ftest.elnode-some-page.()...(wit | 
| 16d40 | 68 2d 65 6c 6e 6f 64 65 2d 6d 6f 63 6b 2d 73 65    72 76 65 72 20 27 65 6c 6e 6f 64 65 2d 68 6f 73 | h-elnode-mock-server.'elnode-hos | 
| 16d60 | 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d 68 61    6e 64 6c 65 72 0a 20 20 20 20 28 65 6c 6e 6f 64 | tpath-default-handler.....(elnod | 
| 16d80 | 65 2d 74 65 73 74 2d 63 61 6c 6c 20 5c 22 2f 73    6f 6d 65 74 68 69 6e 67 2f 74 65 73 74 5c 22 29 | e-test-call.\"/something/test\") | 
| 16da0 | 29 29 0a 0a 54 68 65 20 74 65 73 74 20 63 61 6c    6c 20 77 69 74 68 20 62 65 20 70 61 73 73 65 64 | ))..The.test.call.with.be.passed | 
| 16dc0 | 20 74 6f 20 74 68 65 0a 60 65 6c 6e 6f 64 65 2d    68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 | .to.the.`elnode-hostpath-default | 
| 16de0 | 2d 68 61 6e 64 6c 65 72 27 20 76 69 61 20 74 68    65 20 6e 6f 72 6d 61 6c 20 48 54 54 50 20 70 61 | -handler'.via.the.normal.HTTP.pa | 
| 16e00 | 72 73 69 6e 67 0a 72 6f 75 74 69 6e 65 73 2e 22    0a 20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 | rsing.routines."...(declare....( | 
| 16e20 | 69 6e 64 65 6e 74 20 31 29 0a 20 20 20 28 64 65    62 75 67 20 74 29 29 0a 20 20 60 28 6c 65 74 20 | indent.1)....(debug.t))...`(let. | 
| 16e40 | 28 28 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65    2d 73 74 6f 72 65 20 28 6d 61 6b 65 2d 68 61 73 | ((elnode--cookie-store.(make-has | 
| 16e60 | 68 2d 74 61 62 6c 65 20 3a 74 65 73 74 20 27 65    71 75 61 6c 29 29 29 0a 20 20 20 20 20 28 6e 6f | h-table.:test.'equal)))......(no | 
| 16e80 | 66 6c 65 74 20 28 28 65 6c 6e 6f 64 65 2d 2d 67    65 74 2d 73 65 72 76 65 72 2d 70 72 6f 70 20 28 | flet.((elnode--get-server-prop.( | 
| 16ea0 | 70 72 6f 63 20 6b 65 79 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a | proc.key).................(cond. | 
| 16ec0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 28 65 71 20 6b 65 79 20 3a 65 6c 6e 6f | ..................((eq.key.:elno | 
| 16ee0 | 64 65 2d 68 74 74 70 2d 68 61 6e 64 6c 65 72 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | de-http-handler)................ | 
| 16f00 | 20 20 20 20 2c 68 61 6e 64 6c 65 72 29 29 29 29    0a 20 20 20 20 20 20 20 2c 40 62 6f 64 79 29 29 | ....,handler))))........,@body)) | 
| 16f20 | 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 2d 61 6c 69 73 74 2d 74 6f 2d 71 75 65 72 79 | )..(defun.elnode--alist-to-query | 
| 16f40 | 20 28 61 6c 69 73 74 29 0a 20 20 22 54 75 72 6e    20 61 6e 20 61 6c 69 73 74 20 69 6e 74 6f 20 61 | .(alist)..."Turn.an.alist.into.a | 
| 16f60 | 20 66 6f 72 6d 64 61 74 61 2f 71 75 65 72 79 20    73 74 72 69 6e 67 2e 22 0a 20 20 28 6e 6f 66 6c | .formdata/query.string."...(nofl | 
| 16f80 | 65 74 20 28 28 77 65 62 2d 2d 6b 65 79 2d 76 61    6c 75 65 2d 65 6e 63 6f 64 65 20 28 6b 65 79 20 | et.((web--key-value-encode.(key. | 
| 16fa0 | 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 22 45 6e 63 6f 64 65 20 61 20 4b 45 | value).............."Encode.a.KE | 
| 16fc0 | 59 20 61 6e 64 20 56 41 4c 55 45 20 66 6f 72 20    75 72 6c 20 65 6e 63 6f 64 69 6e 67 2e 22 0a 20 | Y.and.VALUE.for.url.encoding.".. | 
| 16fe0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e    64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ............(cond............... | 
| 17000 | 20 28 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 6e 75 6d 62 65 72 70 20 | .((or..................(numberp. | 
| 17020 | 76 61 6c 75 65 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 70 | value)..................(stringp | 
| 17040 | 20 76 61 6c 75 65 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 | .value)).................(format | 
| 17060 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 22 25 73 3d 25 73 22 0a 20 20 20 20 20 20 | .................."%s=%s"....... | 
| 17080 | 20 20 20 20 20 20 20 20 20 20 20 28 75 72 6c 2d    68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 28 66 | ...........(url-hexify-string.(f | 
| 170a0 | 6f 72 6d 61 74 20 22 25 73 22 20 6b 65 79 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ormat."%s".key))................ | 
| 170c0 | 20 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74    72 69 6e 67 20 28 66 6f 72 6d 61 74 20 22 25 73 | ..(url-hexify-string.(format."%s | 
| 170e0 | 22 20 76 61 6c 75 65 29 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 74 0a 20 20 | ".value))))................(t... | 
| 17100 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66    6f 72 6d 61 74 20 22 25 73 22 20 28 75 72 6c 2d | ..............(format."%s".(url- | 
| 17120 | 68 65 78 69 66 79 2d 73 74 72 69 6e 67 20 28 66    6f 72 6d 61 74 20 22 25 73 22 20 6b 65 79 29 29 | hexify-string.(format."%s".key)) | 
| 17140 | 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    28 77 65 62 2d 2d 74 6f 2d 71 75 65 72 79 2d 73 | ))))............(web--to-query-s | 
| 17160 | 74 72 69 6e 67 20 28 6f 62 6a 65 63 74 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e | tring.(object).............."Con | 
| 17180 | 76 65 72 74 20 4f 42 4a 45 43 54 20 28 61 20 68    61 73 68 2d 74 61 62 6c 65 20 6f 72 20 61 6c 69 | vert.OBJECT.(a.hash-table.or.ali | 
| 171a0 | 73 74 29 20 74 6f 20 61 6e 20 48 54 54 50 20 71    75 65 72 79 20 73 74 72 69 6e 67 2e 22 0a 20 20 | st).to.an.HTTP.query.string."... | 
| 171c0 | 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 53 74    6f 6c 65 6e 20 66 72 6f 6d 20 77 65 62 0a 20 20 | ...........;;.Stolen.from.web... | 
| 171e0 | 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 70 63    6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20 20 | ...........(mapconcat........... | 
| 17200 | 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 61 69    72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....(lambda.(pair).............. | 
| 17220 | 20 20 20 28 77 65 62 2d 2d 6b 65 79 2d 76 61 6c    75 65 2d 65 6e 63 6f 64 65 20 28 63 61 72 20 70 | ...(web--key-value-encode.(car.p | 
| 17240 | 61 69 72 29 20 28 63 64 72 20 70 61 69 72 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | air).(cdr.pair)))............... | 
| 17260 | 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 28 68 61 73 68 2d 74 61 62 | (cond.................((hash-tab | 
| 17280 | 6c 65 2d 70 20 6f 62 6a 65 63 74 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c | le-p.object)..................(l | 
| 172a0 | 65 74 20 28 72 65 73 75 6c 74 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | et.(result)....................( | 
| 172c0 | 6d 61 70 68 61 73 68 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d | maphash.....................(lam | 
| 172e0 | 62 64 61 20 28 6b 65 79 20 76 61 6c 75 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | bda.(key.value)................. | 
| 17300 | 20 20 20 20 28 73 65 74 71 20 72 65 73 75 6c 74    20 28 61 70 70 65 6e 64 20 28 6c 69 73 74 20 28 | ....(setq.result.(append.(list.( | 
| 17320 | 63 6f 6e 73 20 6b 65 79 20 76 61 6c 75 65 29 29    20 72 65 73 75 6c 74 29 29 29 0a 20 20 20 20 20 | cons.key.value)).result)))...... | 
| 17340 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f    62 6a 65 63 74 29 0a 20 20 20 20 20 20 20 20 20 | ...............object).......... | 
| 17360 | 20 20 20 20 20 20 20 20 20 20 28 72 65 76 65 72    73 65 20 72 65 73 75 6c 74 29 29 29 0a 20 20 20 | ..........(reverse.result))).... | 
| 17380 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 6c    69 73 74 70 20 6f 62 6a 65 63 74 29 0a 20 20 20 | .............((listp.object).... | 
| 173a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62    6a 65 63 74 29 29 0a 20 20 20 20 20 20 20 20 20 | ..............object)).......... | 
| 173c0 | 20 20 20 20 20 22 26 22 29 29 29 0a 20 20 20 20    28 77 65 62 2d 2d 74 6f 2d 71 75 65 72 79 2d 73 | ....."&"))).....(web--to-query-s | 
| 173e0 | 74 72 69 6e 67 20 61 6c 69 73 74 29 29 29 0a 0a    28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d | tring.alist)))..(defun.elnode--m | 
| 17400 | 61 6b 65 2d 74 65 73 74 2d 63 61 6c 6c 20 28 70    61 74 68 20 6d 65 74 68 6f 64 20 70 61 72 61 6d | ake-test-call.(path.method.param | 
| 17420 | 65 74 65 72 73 20 68 65 61 64 65 72 73 29 0a 20    20 22 43 6f 6e 73 74 72 75 63 74 20 74 68 65 20 | eters.headers)..."Construct.the. | 
| 17440 | 48 54 54 50 20 72 65 71 75 65 73 74 20 66 6f 72    20 61 20 74 65 73 74 20 63 61 6c 6c 2e 0a 0a 54 | HTTP.request.for.a.test.call...T | 
| 17460 | 68 69 73 20 73 68 6f 75 6c 64 20 70 72 6f 62 61    62 6c 79 20 62 65 20 6d 65 72 67 65 64 20 77 69 | his.should.probably.be.merged.wi | 
| 17480 | 74 68 20 74 68 65 20 73 74 75 66 66 20 69 6e 20    74 68 65 20 60 77 65 62 27 0a 6d 6f 64 75 6c 65 | th.the.stuff.in.the.`web'.module | 
| 174a0 | 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 71 75 65    72 79 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 | ."...(let*.((query...........(if | 
| 174c0 | 20 28 61 6e 64 20 70 61 72 61 6d 65 74 65 72 73    20 28 65 71 75 61 6c 20 6d 65 74 68 6f 64 20 22 | .(and.parameters.(equal.method." | 
| 174e0 | 47 45 54 22 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 66 6f 72 6d 61 74 0a 20 20 20 | GET"))...............(format.... | 
| 17500 | 20 20 20 20 20 20 20 20 20 20 20 20 22 3f 25 73    22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ............"?%s"............... | 
| 17520 | 20 28 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 74 2d    74 6f 2d 71 75 65 72 79 20 70 61 72 61 6d 65 74 | .(elnode--alist-to-query.paramet | 
| 17540 | 65 72 73 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 22 22 29 29 0a 20 20 20 20 20 20 20 | ers))...............""))........ | 
| 17560 | 20 20 28 68 74 74 70 2d 70 61 74 68 0a 20 20 20    20 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 | ..(http-path...........(if.(equa | 
| 17580 | 6c 20 71 75 65 72 79 20 22 22 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 70 61 74 68 0a 20 | l.query."")...............path.. | 
| 175a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f    72 6d 61 74 20 22 25 73 25 73 22 20 70 61 74 68 | .............(format."%s%s".path | 
| 175c0 | 20 71 75 65 72 79 29 29 29 0a 20 20 20 20 20 20    20 20 20 28 68 74 74 70 2d 62 6f 64 79 0a 20 20 | .query)))..........(http-body... | 
| 175e0 | 20 20 20 20 20 20 20 20 28 69 66 20 28 65 71 75    61 6c 20 6d 65 74 68 6f 64 20 22 47 45 54 22 29 | ........(if.(equal.method."GET") | 
| 17600 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e    69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...............nil.............. | 
| 17620 | 20 28 6c 65 74 20 28 28 70 61 72 61 6d 2d 64 61    74 61 20 28 65 6c 6e 6f 64 65 2d 2d 61 6c 69 73 | .(let.((param-data.(elnode--alis | 
| 17640 | 74 2d 74 6f 2d 71 75 65 72 79 20 70 61 72 61 6d    65 74 65 72 73 29 29 29 0a 20 20 20 20 20 20 20 | t-to-query.parameters)))........ | 
| 17660 | 20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 68    65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20 | .........(setq.headers.......... | 
| 17680 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 70    70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 | .............(append............ | 
| 176a0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ............(list............... | 
| 176c0 | 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20    22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 0a 20 | ..........(cons."Content-Type".. | 
| 176e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 | ............................."ap | 
| 17700 | 70 6c 69 63 61 74 69 6f 6e 2f 78 2d 77 77 77 2d    66 6f 72 6d 2d 75 72 6c 65 6e 63 6f 64 65 64 22 | plication/x-www-form-urlencoded" | 
| 17720 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 | ).........................(cons. | 
| 17740 | 22 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 22    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | "Content-Length"................ | 
| 17760 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    66 6f 72 6d 61 74 20 22 25 64 22 20 28 6c 65 6e | ...............(format."%d".(len | 
| 17780 | 67 74 68 20 70 61 72 61 6d 2d 64 61 74 61 29 29    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | gth.param-data)))).............. | 
| 177a0 | 20 20 20 20 20 20 20 20 20 20 68 65 61 64 65 72    73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ..........headers))............. | 
| 177c0 | 20 20 20 20 70 61 72 61 6d 2d 64 61 74 61 29 29    29 29 0a 20 20 20 20 28 61 70 70 6c 79 0a 20 20 | ....param-data)))).....(apply... | 
| 177e0 | 20 20 20 27 65 6c 6e 6f 64 65 2d 2d 68 74 74 70    2d 6d 61 6b 65 2d 68 64 72 0a 20 20 20 20 20 60 | ...'elnode--http-make-hdr......` | 
| 17800 | 28 2c 6d 65 74 68 6f 64 0a 20 20 20 20 20 20 20    2c 68 74 74 70 2d 70 61 74 68 0a 20 20 20 20 20 | (,method........,http-path...... | 
| 17820 | 20 20 2c 40 68 65 61 64 65 72 73 0a 20 20 20 20    20 20 20 28 62 6f 64 79 20 2e 20 2c 68 74 74 70 | ..,@headers........(body...,http | 
| 17840 | 2d 62 6f 64 79 29 29 29 29 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 2d 72 65 73 70 6f | -body)))))..(defun.elnode--respo | 
| 17860 | 6e 73 65 2d 68 65 61 64 65 72 2d 74 6f 2d 63 6f    6f 6b 69 65 2d 73 74 6f 72 65 20 28 72 65 73 70 | nse-header-to-cookie-store.(resp | 
| 17880 | 6f 6e 73 65 29 0a 20 20 22 41 64 64 20 53 65 74    2d 43 6f 6f 6b 69 65 20 68 65 61 64 65 72 73 20 | onse)..."Add.Set-Cookie.headers. | 
| 178a0 | 66 72 6f 6d 20 52 45 53 50 4f 4e 53 45 20 74 6f    20 74 68 65 20 63 6f 6f 6b 69 65 20 73 74 6f 72 | from.RESPONSE.to.the.cookie.stor | 
| 178c0 | 65 2e 22 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f    6b 69 65 2d 73 65 74 20 28 61 73 73 6f 63 20 22 | e."...(let.((cookie-set.(assoc." | 
| 178e0 | 53 65 74 2d 43 6f 6f 6b 69 65 22 20 72 65 73 70    6f 6e 73 65 29 29 29 0a 20 20 20 20 28 77 68 65 | Set-Cookie".response))).....(whe | 
| 17900 | 6e 20 63 6f 6f 6b 69 65 2d 73 65 74 0a 20 20 20    20 20 20 28 6c 65 74 2a 20 28 28 63 6f 6f 6b 69 | n.cookie-set.......(let*.((cooki | 
| 17920 | 65 2d 76 61 6c 75 65 20 28 63 61 72 20 28 73 70    6c 69 74 2d 73 74 72 69 6e 67 20 28 63 64 72 20 | e-value.(car.(split-string.(cdr. | 
| 17940 | 63 6f 6f 6b 69 65 2d 73 65 74 29 20 22 3b 22 29    29 29 29 0a 20 20 20 20 20 20 20 20 28 61 70 70 | cookie-set).";")))).........(app | 
| 17960 | 6c 79 0a 20 20 20 20 20 20 20 20 20 27 70 75 74    68 61 73 68 0a 20 20 20 20 20 20 20 20 20 28 61 | ly..........'puthash..........(a | 
| 17980 | 70 70 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20    28 73 70 6c 69 74 2d 73 74 72 69 6e 67 20 63 6f | ppend...........(split-string.co | 
| 179a0 | 6f 6b 69 65 2d 76 61 6c 75 65 20 22 3d 22 29 0a    20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 | okie-value."=")...........(list. | 
| 179c0 | 65 6c 6e 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73    74 6f 72 65 29 29 29 29 29 29 0a 20 20 65 6c 6e | elnode--cookie-store))))))...eln | 
| 179e0 | 6f 64 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72    65 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 | ode--cookie-store)..(defun.elnod | 
| 17a00 | 65 2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 2d    74 6f 2d 68 65 61 64 65 72 2d 76 61 6c 75 65 20 | e--cookie-store-to-header-value. | 
| 17a20 | 28 29 0a 20 20 22 54 75 72 6e 20 74 68 65 20 63    75 72 72 65 6e 74 20 63 6f 6f 6b 69 65 20 73 74 | ()..."Turn.the.current.cookie.st | 
| 17a40 | 6f 72 65 20 69 6e 74 6f 20 61 20 68 65 61 64 65    72 2e 0a 0a 54 68 65 20 63 6f 6f 6b 69 65 73 20 | ore.into.a.header...The.cookies. | 
| 17a60 | 69 6e 20 74 68 65 20 68 65 61 64 65 72 20 61 72    65 20 73 6f 72 74 65 64 20 61 6c 70 68 61 62 65 | in.the.header.are.sorted.alphabe | 
| 17a80 | 74 69 63 61 6c 6c 79 20 2d 20 6d 61 6b 65 73 0a    74 65 73 74 69 6e 67 20 65 61 73 69 65 72 2e 22 | tically.-.makes.testing.easier." | 
| 17aa0 | 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f 6b 69 65    2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 20 | ...(let.((cookie-value.......... | 
| 17ac0 | 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 20 20    20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 6f | (mapconcat...........(lambda.(co | 
| 17ae0 | 6f 6b 69 65 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 66 6f 72 6d 61 74 20 22 25 73 3d 25 73 | okie).............(format."%s=%s | 
| 17b00 | 22 20 28 63 61 72 20 63 6f 6f 6b 69 65 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ".(car.cookie).................. | 
| 17b20 | 20 20 20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73    74 72 69 6e 67 20 28 63 64 72 20 63 6f 6f 6b 69 | ...(url-hexify-string.(cdr.cooki | 
| 17b40 | 65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    28 6b 76 61 6c 69 73 74 2d 73 6f 72 74 0a 20 20 | e))))...........(kvalist-sort... | 
| 17b60 | 20 20 20 20 20 20 20 20 20 28 6b 76 68 61 73 68    2d 3e 61 6c 69 73 74 20 65 6c 6e 6f 64 65 2d 2d | .........(kvhash->alist.elnode-- | 
| 17b80 | 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 29 0a 20 20    20 20 20 20 20 20 20 20 20 27 73 74 72 69 6e 67 | cookie-store)............'string | 
| 17ba0 | 2d 6c 65 73 73 70 29 0a 20 20 20 20 20 20 20 20    20 20 22 3b 20 22 29 29 29 0a 20 20 20 20 28 75 | -lessp)...........";."))).....(u | 
| 17bc0 | 6e 6c 65 73 73 20 28 65 71 75 61 6c 20 22 22 20    63 6f 6f 6b 69 65 2d 76 61 6c 75 65 29 0a 20 20 | nless.(equal."".cookie-value)... | 
| 17be0 | 20 20 20 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65    29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e | ....cookie-value)))..(defun*.eln | 
| 17c00 | 6f 64 65 2d 74 65 73 74 2d 63 61 6c 6c 20 28 70    61 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ode-test-call.(path............. | 
| 17c20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 6b    65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..............&key.............. | 
| 17c40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d 65    74 68 6f 64 20 22 47 45 54 22 29 0a 20 20 20 20 | .............(method."GET")..... | 
| 17c60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 70 61 72 61 6d 65 74 65 72 | ......................(parameter | 
| 17c80 | 73 20 27 28 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | s.'()).......................... | 
| 17ca0 | 20 28 68 65 61 64 65 72 73 20 27 28 29 29 29 0a    20 20 22 46 61 6b 65 20 61 20 63 61 6c 6c 20 74 | .(headers.'()))..."Fake.a.call.t | 
| 17cc0 | 6f 20 65 6c 6e 6f 64 65 20 77 69 74 68 20 74 68    65 20 50 41 54 48 2e 0a 0a 49 6e 20 61 64 64 69 | o.elnode.with.the.PATH...In.addi | 
| 17ce0 | 74 69 6f 6e 20 79 6f 75 20 63 61 6e 20 73 70 65    63 69 66 79 20 73 6f 6d 65 20 65 78 74 72 61 20 | tion.you.can.specify.some.extra. | 
| 17d00 | 48 54 54 50 20 73 74 75 66 66 3a 0a 0a 20 3a 6d    65 74 68 6f 64 20 20 6f 6e 65 20 6f 66 20 47 45 | HTTP.stuff:...:method..one.of.GE | 
| 17d20 | 54 2c 20 50 4f 53 54 2c 20 44 45 4c 45 54 45 2c    20 65 74 63 2e 2e 2e 0a 20 3a 70 61 72 61 6d 65 | T,.POST,.DELETE,.etc.....:parame | 
| 17d40 | 74 65 72 73 20 50 4f 53 54 20 70 61 72 61 6d 65    74 65 72 73 2c 20 77 69 6c 6c 20 62 65 20 74 75 | ters.POST.parameters,.will.be.tu | 
| 17d60 | 72 6e 65 64 20 69 6e 74 6f 20 61 20 50 4f 53 54    20 62 6f 64 79 0a 20 3a 68 65 61 64 65 72 73 20 | rned.into.a.POST.body..:headers. | 
| 17d80 | 61 6e 79 20 73 70 65 63 69 66 69 63 20 68 65 61    64 65 72 73 20 79 6f 75 20 72 65 71 75 69 72 65 | any.specific.headers.you.require | 
| 17da0 | 2c 20 79 6f 75 20 6d 61 79 20 6f 76 65 72 72 69    64 65 0a 20 20 20 74 65 73 74 2d 63 61 6c 6c 20 | ,.you.may.override....test-call. | 
| 17dc0 | 68 65 61 64 65 72 73 2e 0a 0a 46 6f 72 20 65 78    61 6d 70 6c 65 3a 0a 0a 20 28 65 6c 6e 6f 64 65 | headers...For.example:...(elnode | 
| 17de0 | 2d 74 65 73 74 2d 63 61 6c 6c 20 5c 22 2f 77 69    6b 69 2f 74 65 73 74 5c 22 29 0a 0a 6f 72 3a 0a | -test-call.\"/wiki/test\")..or:. | 
| 17e00 | 0a 20 28 65 6c 6e 6f 64 65 2d 74 65 73 74 2d 63    61 6c 6c 20 5c 22 2f 77 69 6b 69 2f 74 65 73 74 | ..(elnode-test-call.\"/wiki/test | 
| 17e20 | 5c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3a 6d 65 74 68 6f 64 20 5c 22 | \"....................:method.\" | 
| 17e40 | 50 4f 53 54 5c 22 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 3a 70 61 72 61 6d | POST\"....................:param | 
| 17e60 | 65 74 65 72 73 20 27 28 28 5c 22 61 5c 22 20 2e    20 31 30 29 29 29 0a 0a 46 6f 72 20 68 65 61 64 | eters.'((\"a\"...10)))..For.head | 
| 17e80 | 65 72 20 61 6e 64 20 70 61 72 61 6d 65 74 65 72    20 6e 61 6d 65 73 2c 20 73 74 72 69 6e 67 73 20 | er.and.parameter.names,.strings. | 
| 17ea0 | 4d 55 53 54 20 62 65 20 75 73 65 64 20 63 75 72    72 65 6e 74 6c 79 2e 0a 0a 44 75 72 69 6e 67 20 | MUST.be.used.currently...During. | 
| 17ec0 | 74 68 65 20 74 65 73 74 20 74 68 65 20 76 61 72    69 61 62 6c 65 20 60 65 6c 6e 6f 64 65 2d 77 65 | the.test.the.variable.`elnode-we | 
| 17ee0 | 62 73 65 72 76 65 72 2d 76 69 73 69 74 2d 66 69    6c 65 27 20 69 73 20 73 65 74 0a 74 6f 20 60 74 | bserver-visit-file'.is.set.to.`t | 
| 17f00 | 27 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74    20 45 6c 6e 6f 64 65 20 64 6f 65 73 20 6e 6f 74 | '.to.ensure.that.Elnode.does.not | 
| 17f20 | 20 70 61 73 73 20 66 61 6b 65 20 48 54 54 50 20    63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 74 6f 20 65 | .pass.fake.HTTP.connections.to.e | 
| 17f40 | 78 74 65 72 6e 61 6c 20 70 72 6f 63 65 73 73 65    73 2e 22 0a 20 20 28 6c 65 74 20 28 72 65 73 75 | xternal.processes."...(let.(resu | 
| 17f60 | 6c 74 0a 20 20 20 20 20 20 20 20 28 66 61 6b 69    72 2d 6d 6f 63 6b 2d 70 72 6f 63 65 73 73 2d 72 | lt.........(fakir-mock-process-r | 
| 17f80 | 65 71 75 69 72 65 2d 73 70 65 63 69 66 69 65 64    2d 62 75 66 66 65 72 20 74 29 29 0a 20 20 20 20 | equire-specified-buffer.t))..... | 
| 17fa0 | 28 66 61 6b 69 72 2d 6d 6f 63 6b 2d 70 72 6f 63    65 73 73 20 3a 68 74 74 70 63 6f 6e 20 28 29 0a | (fakir-mock-process.:httpcon.(). | 
| 17fc0 | 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 71    20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 74 | ......(let.((req.(elnode--make-t | 
| 17fe0 | 65 73 74 2d 63 61 6c 6c 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20 | est-call...................path. | 
| 18000 | 6d 65 74 68 6f 64 20 70 61 72 61 6d 65 74 65 72    73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | method.parameters............... | 
| 18020 | 20 20 20 20 28 61 70 70 65 6e 64 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 | ....(append....................h | 
| 18040 | 65 61 64 65 72 73 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 | eaders....................(let.( | 
| 18060 | 28 63 6f 6f 6b 69 65 73 20 28 65 6c 6e 6f 64 65    2d 2d 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 2d 74 | (cookies.(elnode--cookie-store-t | 
| 18080 | 6f 2d 68 65 61 64 65 72 2d 76 61 6c 75 65 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | o-header-value)))............... | 
| 180a0 | 20 20 20 20 20 20 20 28 77 68 65 6e 20 63 6f 6f    6b 69 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 | .......(when.cookies............ | 
| 180c0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73    74 20 28 63 6f 6e 73 20 22 43 6f 6f 6b 69 65 22 | ............(list.(cons."Cookie" | 
| 180e0 | 20 63 6f 6f 6b 69 65 73 29 29 29 29 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 68 74 74 | .cookies))))))).............(htt | 
| 18100 | 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 3a 68 74    74 70 63 6f 6e 29 29 0a 20 20 20 20 20 20 20 20 | p-connection.:httpcon))......... | 
| 18120 | 3b 3b 20 43 61 70 74 75 72 65 20 74 68 65 20 72    65 61 6c 20 65 6f 66 2d 66 75 6e 63 20 61 6e 64 | ;;.Capture.the.real.eof-func.and | 
| 18140 | 20 74 68 65 6e 20 6f 76 65 72 72 69 64 65 20 69    74 20 74 6f 20 64 6f 20 66 61 6b 65 20 65 6e 64 | .then.override.it.to.do.fake.end | 
| 18160 | 69 6e 67 2e 0a 20 20 20 20 20 20 20 20 28 6c 65    74 20 28 28 65 6f 66 2d 66 75 6e 63 20 28 65 6c | ing..........(let.((eof-func.(el | 
| 18180 | 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 73 65 6e 64 2d    65 6f 66 29 29 0a 20 20 20 20 20 20 20 20 20 20 | node--make-send-eof))........... | 
| 181a0 | 20 20 20 20 28 6d 61 69 6e 2d 73 65 6e 64 2d 73    74 72 69 6e 67 20 28 73 79 6d 62 6f 6c 2d 66 75 | ....(main-send-string.(symbol-fu | 
| 181c0 | 6e 63 74 69 6f 6e 20 27 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 29 | nction.'elnode-http-send-string) | 
| 181e0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 73 65 6e 64 2d 73 74 72 69 6e 67 2d 66 75 6e | )...............(send-string-fun | 
| 18200 | 63 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 6b 65 2d    73 65 6e 64 2d 73 74 72 69 6e 67 29 29 0a 20 20 | c.(elnode--make-send-string))... | 
| 18220 | 20 20 20 20 20 20 20 20 20 20 20 20 28 74 68 65    2d 65 6e 64 20 30 29 0a 20 20 20 20 20 20 20 20 | ............(the-end.0)......... | 
| 18240 | 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 77 65    62 73 65 72 76 65 72 2d 76 69 73 69 74 2d 66 69 | ......(elnode-webserver-visit-fi | 
| 18260 | 6c 65 20 74 29 29 0a 20 20 20 20 20 20 20 20 20    20 28 6e 6f 66 6c 65 74 0a 20 20 20 20 20 20 20 | le.t))...........(noflet........ | 
| 18280 | 20 20 20 20 20 20 20 28 28 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 | .......((elnode-http-send-string | 
| 182a0 | 20 28 68 74 74 70 63 6f 6e 20 73 74 72 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(httpcon.str).................. | 
| 182c0 | 28 66 75 6e 63 61 6c 6c 20 6d 61 69 6e 2d 73 65    6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f | (funcall.main-send-string.httpco | 
| 182e0 | 6e 20 73 74 72 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d | n.str))................(elnode-- | 
| 18300 | 6d 61 6b 65 2d 73 65 6e 64 2d 73 74 72 69 6e 67    20 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | make-send-string.()............. | 
| 18320 | 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 68 74    74 70 63 6f 6e 20 73 74 72 29 0a 20 20 20 20 20 | .....(lambda.(httpcon.str)...... | 
| 18340 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66    75 6e 63 61 6c 6c 20 73 65 6e 64 2d 73 74 72 69 | ..............(funcall.send-stri | 
| 18360 | 6e 67 2d 66 75 6e 63 20 68 74 74 70 63 6f 6e 20    73 74 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 | ng-func.httpcon.str))).......... | 
| 18380 | 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 6d    61 6b 65 2d 73 65 6e 64 2d 65 6f 66 20 28 29 0a | ......(elnode--make-send-eof.(). | 
| 183a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6c 61 6d 62 64 61 20 28 68 74 74 70 63 6f | .................(lambda.(httpco | 
| 183c0 | 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3b 3b 20 46 6c 65 74 20 65 76 | n)....................;;.Flet.ev | 
| 183e0 | 65 72 79 74 68 69 6e 67 20 69 6e 20 65 6c 6e 6f    64 65 2d 2d 68 74 74 70 2d 65 6e 64 0a 20 20 20 | erything.in.elnode--http-end.... | 
| 18400 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3b 3b 20 2e 2e 2e 20 66 69 72 73 74 20 73 69 67 | ................;;.....first.sig | 
| 18420 | 6e 61 6c 69 6e 67 20 74 68 65 20 65 6e 64 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | naling.the.end.................. | 
| 18440 | 20 20 28 6e 6f 66 6c 65 74 20 28 28 70 72 6f 63    65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 28 70 72 | ..(noflet.((process-send-eof.(pr | 
| 18460 | 6f 63 29 20 28 73 65 74 71 20 74 68 65 2d 65 6e    64 20 27 74 29 29 0a 20 20 20 20 20 20 20 20 20 | oc).(setq.the-end.'t)).......... | 
| 18480 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 3b 3b 20 44 6f 20 6e 6f 74 68 69 6e 67 | ...................;;.Do.nothing | 
| 184a0 | 20 2d 20 77 65 20 77 61 6e 74 20 74 68 65 20 74    65 73 74 20 70 72 6f 63 0a 20 20 20 20 20 20 20 | .-.we.want.the.test.proc........ | 
| 184c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f | .....................(delete-pro | 
| 184e0 | 63 65 73 73 20 28 70 72 6f 63 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | cess.(proc)).................... | 
| 18500 | 20 20 20 20 20 20 20 20 20 3b 3b 20 41 67 61 69    6e 2c 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 77 | .........;;.Again,.do.nothing,.w | 
| 18520 | 65 20 77 61 6e 74 20 74 68 69 73 20 62 75 66 66    65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | e.want.this.buffer.............. | 
| 18540 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 62 75 66 | ...............(kill-buffer.(buf | 
| 18560 | 66 65 72 29 20 74 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b | fer).t))......................;; | 
| 18580 | 20 4e 6f 77 20 63 61 6c 6c 20 74 68 65 20 63 61    70 74 75 72 65 64 20 65 6f 66 2d 66 75 6e 63 0a | .Now.call.the.captured.eof-func. | 
| 185a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 65 6f | .....................(funcall.eo | 
| 185c0 | 66 2d 66 75 6e 63 20 68 74 74 70 63 6f 6e 29 29    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | f-func.httpcon)))))............. | 
| 185e0 | 3b 3b 20 46 49 58 4d 45 20 2d 20 77 65 20 73 68    6f 75 6c 64 20 75 6e 77 69 6e 64 20 70 72 6f 74 | ;;.FIXME.-.we.should.unwind.prot | 
| 18600 | 65 63 74 20 74 68 69 73 3f 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 66 | ect.this?.............(elnode--f | 
| 18620 | 69 6c 74 65 72 20 68 74 74 70 2d 63 6f 6e 6e 65    63 74 69 6f 6e 20 72 65 71 29 0a 20 20 20 20 20 | ilter.http-connection.req)...... | 
| 18640 | 20 20 20 20 20 20 20 3b 3b 20 4e 6f 77 20 77 65    20 73 6c 65 65 70 20 74 69 6c 6c 20 74 68 65 2d | .......;;.Now.we.sleep.till.the- | 
| 18660 | 65 6e 64 20 69 73 20 74 72 75 65 0a 20 20 20 20    20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 | end.is.true.............(while.( | 
| 18680 | 6e 6f 74 20 74 68 65 2d 65 6e 64 29 20 28 73 69    74 2d 66 6f 72 20 30 2e 31 29 29 0a 20 20 20 20 | not.the-end).(sit-for.0.1))..... | 
| 186a0 | 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 74 68    65 2d 65 6e 64 0a 20 20 20 20 20 20 20 20 20 20 | ........(when.the-end........... | 
| 186c0 | 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 72 65 73    70 6f 6e 73 65 2d 68 65 61 64 65 72 2d 74 6f 2d | ....(elnode--response-header-to- | 
| 186e0 | 63 6f 6f 6b 69 65 2d 73 74 6f 72 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f | cookie-store................(pro | 
| 18700 | 63 65 73 73 2d 67 65 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 68 74 74 70 2d 63 6f | cess-get.................http-co | 
| 18720 | 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 | nnection.................:elnode | 
| 18740 | 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 2d 68 65    61 64 65 72 29 29 0a 20 20 20 20 20 20 20 20 20 | -httpresponse-header)).......... | 
| 18760 | 20 20 20 20 20 3b 3b 20 41 64 64 20 74 6f 20 74    68 65 20 63 6f 6f 6b 69 65 20 73 74 6f 72 65 3f | .....;;.Add.to.the.cookie.store? | 
| 18780 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    73 65 74 71 20 72 65 73 75 6c 74 0a 20 20 20 20 | ...............(setq.result..... | 
| 187a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 | ................(list........... | 
| 187c0 | 20 20 20 20 20 20 20 20 20 20 20 3a 72 65 73 75    6c 74 2d 73 74 72 69 6e 67 0a 20 20 20 20 20 20 | ...........:result-string....... | 
| 187e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    77 69 74 68 2d 63 75 72 72 65 6e 74 2d 62 75 66 | ...............(with-current-buf | 
| 18800 | 66 65 72 20 28 66 61 6b 69 72 2d 67 65 74 2d 6f    75 74 70 75 74 2d 62 75 66 66 65 72 29 0a 20 20 | fer.(fakir-get-output-buffer)... | 
| 18820 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 62 75 66 66 65 72 2d 73 75 62 | .....................(buffer-sub | 
| 18840 | 73 74 72 69 6e 67 2d 6e 6f 2d 70 72 6f 70 65 72    74 69 65 73 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 | string-no-properties.(point-min) | 
| 18860 | 20 28 70 6f 69 6e 74 2d 6d 61 78 29 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(point-max))).................. | 
| 18880 | 20 20 20 20 3a 62 75 66 66 65 72 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....:buffer..................... | 
| 188a0 | 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66 65 72    20 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e | .(process-buffer.http-connection | 
| 188c0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 3b 3b 20 54 68 65 73 65 20 | )......................;;.These. | 
| 188e0 | 70 72 6f 70 65 72 74 69 65 73 20 61 72 65 20 73    65 74 20 62 79 20 65 6c 6e 6f 64 65 2d 68 74 74 | properties.are.set.by.elnode-htt | 
| 18900 | 70 2d 73 74 61 72 74 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73 74 | p-start......................:st | 
| 18920 | 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 | atus......................(proce | 
| 18940 | 73 73 2d 67 65 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 | ss-get.......................htt | 
| 18960 | 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | p-connection.................... | 
| 18980 | 20 20 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 72    65 73 70 6f 6e 73 65 2d 73 74 61 74 75 73 29 0a | ...:elnode-httpresponse-status). | 
| 189a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 3a 68 65 61 64 65 72 0a 20 20 20 | .....................:header.... | 
| 189c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 0a 20 | ..................(process-get.. | 
| 189e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 68 74 74 70 2d 63 6f 6e 6e 65 63 | .....................http-connec | 
| 18a00 | 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3a 65 6c 6e 6f | tion.......................:elno | 
| 18a20 | 64 65 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 2d    68 65 61 64 65 72 29 29 29 29 29 29 29 29 0a 20 | de-httpresponse-header)))))))).. | 
| 18a40 | 20 20 20 3b 3b 20 46 69 6e 61 6c 6c 79 20 72 65    74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 0a | ...;;.Finally.return.the.result. | 
| 18a60 | 20 20 20 20 72 65 73 75 6c 74 29 29 0a 0a 28 64    65 66 6d 61 63 72 6f 2a 20 73 68 6f 75 6c 64 2d | ....result))..(defmacro*.should- | 
| 18a80 | 65 6c 6e 6f 64 65 2d 72 65 73 70 6f 6e 73 65 20    28 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 20 20 | elnode-response.(call........... | 
| 18aa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 | .........................&key... | 
| 18ac0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 18ae0 | 20 73 74 61 74 75 73 2d 63 6f 64 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .status-code.................... | 
| 18b00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    68 65 61 64 65 72 2d 6e 61 6d 65 0a 20 20 20 20 | ................header-name..... | 
| 18b20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 | ...............................h | 
| 18b40 | 65 61 64 65 72 2d 76 61 6c 75 65 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | eader-value..................... | 
| 18b60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68    65 61 64 65 72 2d 6c 69 73 74 0a 20 20 20 20 20 | ...............header-list...... | 
| 18b80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 65 | ..............................he | 
| 18ba0 | 61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ader-list-match................. | 
| 18bc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 62 6f 64 79 2d 6d 61 74 63 68 29 0a 20 | ...................body-match).. | 
| 18be0 | 20 22 41 73 73 65 72 74 20 6f 6e 20 74 68 65 20    73 75 70 70 6c 69 65 64 20 52 45 53 50 4f 4e 53 | ."Assert.on.the.supplied.RESPONS | 
| 18c00 | 45 2e 0a 0a 43 41 4c 4c 20 73 68 6f 75 6c 64 20    62 65 20 61 6e 20 60 65 6c 6e 6f 64 65 2d 74 65 | E...CALL.should.be.an.`elnode-te | 
| 18c20 | 73 74 2d 63 61 6c 6c 27 2c 20 73 6f 6d 65 74 68    69 6e 67 20 74 68 61 74 20 63 61 6e 20 6d 61 6b | st-call',.something.that.can.mak | 
| 18c40 | 65 20 61 0a 72 65 73 70 6f 6e 73 65 2e 20 20 41    73 73 65 72 74 69 6f 6e 73 20 61 72 65 20 64 6f | e.a.response...Assertions.are.do | 
| 18c60 | 6e 65 20 62 79 20 63 68 65 63 6b 69 6e 67 20 74    68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 6c | ne.by.checking.the.specified.val | 
| 18c80 | 75 65 73 0a 6f 66 20 74 68 65 20 6f 74 68 65 72    20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 | ues.of.the.other.parameters.to.t | 
| 18ca0 | 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 0a 0a 49    66 20 53 54 41 54 55 53 2d 43 4f 44 45 20 69 73 | his.function...If.STATUS-CODE.is | 
| 18cc0 | 20 6e 6f 74 20 6e 69 6c 20 77 65 20 61 73 73 65    72 74 20 74 68 61 74 20 74 68 65 20 52 45 53 50 | .not.nil.we.assert.that.the.RESP | 
| 18ce0 | 4f 4e 53 45 20 73 74 61 74 75 73 2d 63 6f 64 65    0a 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 | ONSE.status-code.is.equal.to.the | 
| 18d00 | 20 53 54 41 54 55 53 2d 43 4f 44 45 2e 0a 0a 49    66 20 48 45 41 44 45 52 2d 4e 41 4d 45 20 69 73 | .STATUS-CODE...If.HEADER-NAME.is | 
| 18d20 | 20 70 72 65 73 65 6e 74 20 74 68 65 6e 20 77 65    20 61 73 73 65 72 74 20 74 68 61 74 20 74 68 65 | .present.then.we.assert.that.the | 
| 18d40 | 20 52 45 53 50 4f 4e 53 45 20 68 61 73 0a 74 68    65 20 68 65 61 64 65 72 20 61 6e 64 20 74 68 61 | .RESPONSE.has.the.header.and.tha | 
| 18d60 | 74 20 69 74 73 20 76 61 6c 75 65 20 69 73 20 74    68 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 48 | t.its.value.is.the.same.as.the.H | 
| 18d80 | 45 41 44 45 52 2d 56 41 4c 55 45 2e 0a 49 66 20    48 45 41 44 45 52 2d 56 41 4c 55 45 20 69 73 20 | EADER-VALUE..If.HEADER-VALUE.is. | 
| 18da0 | 60 6e 69 6c 27 20 74 68 65 6e 20 77 65 20 61 73    73 65 72 74 20 74 68 61 74 20 74 68 65 20 48 45 | `nil'.then.we.assert.that.the.HE | 
| 18dc0 | 41 44 45 52 2d 4e 41 4d 45 20 69 73 0a 4e 4f 54    20 70 72 65 73 65 6e 74 2e 0a 0a 49 66 20 48 45 | ADER-NAME.is.NOT.present...If.HE | 
| 18de0 | 41 44 45 52 2d 4c 49 53 54 20 69 73 20 70 72 65    73 65 6e 74 20 74 68 65 6e 20 77 65 20 61 73 73 | ADER-LIST.is.present.then.we.ass | 
| 18e00 | 65 72 74 20 74 68 61 74 20 61 6c 6c 20 74 68 6f    73 65 20 68 65 61 64 65 72 73 0a 61 72 65 20 70 | ert.that.all.those.headers.are.p | 
| 18e20 | 72 65 73 65 6e 74 20 61 6e 64 20 60 65 71 75 61    6c 27 20 74 6f 20 74 68 65 20 76 61 6c 75 65 2e | resent.and.`equal'.to.the.value. | 
| 18e40 | 0a 0a 49 66 20 48 45 41 44 45 52 2d 4c 49 53 54    2d 4d 41 54 43 48 20 69 73 20 70 72 65 73 65 6e | ..If.HEADER-LIST-MATCH.is.presen | 
| 18e60 | 74 20 74 68 65 6e 20 77 65 20 61 73 73 65 72 74    20 74 68 61 74 20 61 6c 6c 20 74 68 6f 73 65 0a | t.then.we.assert.that.all.those. | 
| 18e80 | 68 65 61 64 65 72 73 20 61 72 65 20 70 72 65 73    65 6e 74 20 61 6e 64 20 60 65 71 75 61 6c 27 20 | headers.are.present.and.`equal'. | 
| 18ea0 | 74 6f 20 74 68 65 20 76 61 6c 75 65 2e 0a 0a 49    66 20 42 4f 44 59 2d 4d 41 54 43 48 20 69 73 20 | to.the.value...If.BODY-MATCH.is. | 
| 18ec0 | 70 72 65 73 65 6e 74 20 74 68 65 6e 20 69 74 20    69 73 20 61 20 72 65 67 65 78 20 75 73 65 64 20 | present.then.it.is.a.regex.used. | 
| 18ee0 | 74 6f 20 6d 61 74 63 68 20 74 68 65 0a 77 68 6f    6c 65 20 62 6f 64 79 20 6f 66 20 74 68 65 20 52 | to.match.the.whole.body.of.the.R | 
| 18f00 | 45 53 50 4f 4e 53 45 2e 22 0a 20 20 28 6c 65 74    20 28 28 73 74 61 74 75 73 2d 63 6f 64 65 76 20 | ESPONSE."...(let.((status-codev. | 
| 18f20 | 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 73 74    61 74 75 73 2d 63 6f 64 65 76 22 29 29 0a 20 20 | (make-symbol."status-codev"))... | 
| 18f40 | 20 20 20 20 20 20 28 68 65 61 64 65 72 2d 6e 61    6d 65 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c | ......(header-namev.(make-symbol | 
| 18f60 | 20 22 68 65 61 64 65 72 2d 6e 61 6d 65 76 22 29    29 0a 20 20 20 20 20 20 20 20 28 68 65 61 64 65 | ."header-namev")).........(heade | 
| 18f80 | 72 2d 76 61 6c 75 65 76 20 28 6d 61 6b 65 2d 73    79 6d 62 6f 6c 20 22 68 65 61 64 65 72 2d 76 61 | r-valuev.(make-symbol."header-va | 
| 18fa0 | 6c 75 65 76 22 29 29 0a 20 20 20 20 20 20 20 20    28 68 65 61 64 65 72 2d 6c 69 73 74 76 20 28 6d | luev")).........(header-listv.(m | 
| 18fc0 | 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 65 61 64    65 72 2d 6c 69 73 74 76 22 29 29 0a 20 20 20 20 | ake-symbol."header-listv"))..... | 
| 18fe0 | 20 20 20 20 28 68 65 61 64 65 72 2d 6c 69 73 74    2d 6d 61 74 63 68 76 20 28 6d 61 6b 65 2d 73 79 | ....(header-list-matchv.(make-sy | 
| 19000 | 6d 62 6f 6c 20 22 68 65 61 64 65 72 2d 6c 69 73    74 2d 6d 61 74 63 68 22 29 29 0a 20 20 20 20 20 | mbol."header-list-match"))...... | 
| 19020 | 20 20 20 28 62 6f 64 79 2d 6d 61 74 63 68 76 20    28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 62 6f | ...(body-matchv.(make-symbol."bo | 
| 19040 | 64 79 2d 6d 61 74 63 68 76 22 29 29 0a 20 20 20    20 20 20 20 20 28 72 65 73 70 6f 6e 73 65 76 20 | dy-matchv")).........(responsev. | 
| 19060 | 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 72 65    73 70 6f 6e 73 65 76 22 29 29 29 0a 20 20 20 20 | (make-symbol."responsev")))..... | 
| 19080 | 60 28 6c 65 74 20 28 28 2c 72 65 73 70 6f 6e 73    65 76 20 2c 63 61 6c 6c 29 0a 20 20 20 20 20 20 | `(let.((,responsev.,call)....... | 
| 190a0 | 20 20 20 20 20 28 2c 73 74 61 74 75 73 2d 63 6f    64 65 76 20 2c 73 74 61 74 75 73 2d 63 6f 64 65 | .....(,status-codev.,status-code | 
| 190c0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 2c 68    65 61 64 65 72 2d 6e 61 6d 65 76 20 2c 68 65 61 | )............(,header-namev.,hea | 
| 190e0 | 64 65 72 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20    20 20 20 20 20 28 2c 68 65 61 64 65 72 2d 76 61 | der-name)............(,header-va | 
| 19100 | 6c 75 65 76 20 2c 68 65 61 64 65 72 2d 76 61 6c    75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 | luev.,header-value)............( | 
| 19120 | 2c 68 65 61 64 65 72 2d 6c 69 73 74 76 20 2c 68    65 61 64 65 72 2d 6c 69 73 74 29 0a 20 20 20 20 | ,header-listv.,header-list)..... | 
| 19140 | 20 20 20 20 20 20 20 28 2c 68 65 61 64 65 72 2d    6c 69 73 74 2d 6d 61 74 63 68 76 20 2c 68 65 61 | .......(,header-list-matchv.,hea | 
| 19160 | 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 29 0a    20 20 20 20 20 20 20 20 20 20 20 28 2c 62 6f 64 | der-list-match)............(,bod | 
| 19180 | 79 2d 6d 61 74 63 68 76 20 2c 62 6f 64 79 2d 6d    61 74 63 68 29 29 0a 20 20 20 20 20 20 20 28 77 | y-matchv.,body-match))........(w | 
| 191a0 | 68 65 6e 20 2c 73 74 61 74 75 73 2d 63 6f 64 65    76 0a 20 20 20 20 20 20 20 20 20 28 73 68 6f 75 | hen.,status-codev..........(shou | 
| 191c0 | 6c 64 0a 20 20 20 20 20 20 20 20 20 20 28 65 71    75 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 2c | ld...........(equal............, | 
| 191e0 | 73 74 61 74 75 73 2d 63 6f 64 65 76 0a 20 20 20    20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 | status-codev............(plist-g | 
| 19200 | 65 74 20 2c 72 65 73 70 6f 6e 73 65 76 20 3a 73    74 61 74 75 73 29 29 29 29 0a 20 20 20 20 20 20 | et.,responsev.:status))))....... | 
| 19220 | 20 28 77 68 65 6e 20 28 6f 72 20 2c 68 65 61 64    65 72 2d 6e 61 6d 65 76 20 2c 68 65 61 64 65 72 | .(when.(or.,header-namev.,header | 
| 19240 | 2d 6c 69 73 74 76 20 2c 68 65 61 64 65 72 2d 6c    69 73 74 2d 6d 61 74 63 68 76 29 0a 20 20 20 20 | -listv.,header-list-matchv)..... | 
| 19260 | 20 20 20 20 20 28 6c 65 74 20 28 28 68 64 72 20    28 70 6c 69 73 74 2d 67 65 74 20 2c 72 65 73 70 | .....(let.((hdr.(plist-get.,resp | 
| 19280 | 6f 6e 73 65 76 20 3a 68 65 61 64 65 72 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 28 77 68 65 | onsev.:header)))............(whe | 
| 192a0 | 6e 20 2c 68 65 61 64 65 72 2d 6e 61 6d 65 76 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 | n.,header-namev..............(if | 
| 192c0 | 20 2c 68 65 61 64 65 72 2d 76 61 6c 75 65 76 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .,header-valuev................. | 
| 192e0 | 20 28 73 68 6f 75 6c 64 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 65 71 75 61 | .(should...................(equa | 
| 19300 | 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 2c 68 65 61 64 65 72 2d 76 61 6c | l....................,header-val | 
| 19320 | 75 65 76 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 61 73 73 6f 63 2d 64 65 | uev....................(assoc-de | 
| 19340 | 66 61 75 6c 74 20 2c 68 65 61 64 65 72 2d 6e 61    6d 65 76 20 68 64 72 29 29 29 0a 20 20 20 20 20 | fault.,header-namev.hdr)))...... | 
| 19360 | 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 45    6c 73 65 20 77 65 20 77 61 6e 74 20 74 6f 20 65 | ............;;.Else.we.want.to.e | 
| 19380 | 6e 73 75 72 65 20 74 68 65 20 68 65 61 64 65 72    20 69 73 6e 27 74 20 74 68 65 72 65 0a 20 20 20 | nsure.the.header.isn't.there.... | 
| 193a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73    68 6f 75 6c 64 0a 20 20 20 20 20 20 20 20 20 20 | ..............(should........... | 
| 193c0 | 20 20 20 20 20 20 20 20 28 65 71 20 6e 69 6c 20    28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 2c | ........(eq.nil.(assoc-default., | 
| 193e0 | 68 65 61 64 65 72 2d 6e 61 6d 65 76 20 68 64 72    29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | header-namev.hdr)))))........... | 
| 19400 | 20 28 77 68 65 6e 20 2c 68 65 61 64 65 72 2d 6c    69 73 74 76 0a 20 20 20 20 20 20 20 20 20 20 20 | .(when.,header-listv............ | 
| 19420 | 20 20 28 6c 6f 6f 70 20 66 6f 72 20 72 65 71 64    2d 68 64 72 20 69 6e 20 2c 68 65 61 64 65 72 2d | ..(loop.for.reqd-hdr.in.,header- | 
| 19440 | 6c 69 73 74 76 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 64 6f 20 28 73 68 6f 75 6c 64 | listv.................do.(should | 
| 19460 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 65 71 75 61 6c 0a 20 20 20 20 | .....................(equal..... | 
| 19480 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c 74 20 | .................(assoc-default. | 
| 194a0 | 28 63 61 72 20 72 65 71 64 2d 68 64 72 29 20 68    64 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | (car.reqd-hdr).hdr)............. | 
| 194c0 | 20 20 20 20 20 20 20 20 20 28 63 64 72 20 72 65    71 64 2d 68 64 72 29 29 29 29 29 0a 20 20 20 20 | .........(cdr.reqd-hdr)))))..... | 
| 194e0 | 20 20 20 20 20 20 20 28 77 68 65 6e 20 2c 68 65    61 64 65 72 2d 6c 69 73 74 2d 6d 61 74 63 68 76 | .......(when.,header-list-matchv | 
| 19500 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    6f 6f 70 20 66 6f 72 20 72 65 71 64 2d 68 64 72 | ..............(loop.for.reqd-hdr | 
| 19520 | 20 69 6e 20 2c 68 65 61 64 65 72 2d 6c 69 73 74    2d 6d 61 74 63 68 76 0a 20 20 20 20 20 20 20 20 | .in.,header-list-matchv......... | 
| 19540 | 20 20 20 20 20 20 20 20 64 6f 20 28 73 68 6f 75    6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ........do.(should.............. | 
| 19560 | 20 20 20 20 20 20 20 28 3e 3d 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .......(>=...................... | 
| 19580 | 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (string-match................... | 
| 195a0 | 20 20 20 20 28 63 64 72 20 72 65 71 64 2d 68 64    72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....(cdr.reqd-hdr).............. | 
| 195c0 | 20 20 20 20 20 20 20 20 20 28 61 73 73 6f 63 2d    64 65 66 61 75 6c 74 20 28 63 61 72 20 72 65 71 | .........(assoc-default.(car.req | 
| 195e0 | 64 2d 68 64 72 29 20 68 64 72 29 29 20 30 29 29    29 29 29 29 0a 20 20 20 20 20 20 20 28 77 68 65 | d-hdr).hdr)).0))))))........(whe | 
| 19600 | 6e 20 2c 62 6f 64 79 2d 6d 61 74 63 68 76 0a 20    20 20 20 20 20 20 20 20 28 73 68 6f 75 6c 64 2d | n.,body-matchv..........(should- | 
| 19620 | 6d 61 74 63 68 0a 20 20 20 20 20 20 20 20 20 20    2c 62 6f 64 79 2d 6d 61 74 63 68 76 0a 20 20 20 | match...........,body-matchv.... | 
| 19640 | 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 65    74 20 2c 72 65 73 70 6f 6e 73 65 76 20 3a 72 65 | .......(plist-get.,responsev.:re | 
| 19660 | 73 75 6c 74 2d 73 74 72 69 6e 67 29 29 29 29 29    29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | sult-string))))))..(defun.elnode | 
| 19680 | 2d 2d 6c 6f 67 2d 66 6e 20 28 73 65 72 76 65 72    20 63 6f 6e 20 6d 73 67 29 0a 20 20 22 4c 6f 67 | --log-fn.(server.con.msg)..."Log | 
| 196a0 | 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 65 6c    6e 6f 64 65 2e 0a 0a 53 65 72 76 65 73 20 6f 6e | .function.for.elnode...Serves.on | 
| 196c0 | 6c 79 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 68    65 20 73 65 72 76 65 72 20 70 72 6f 63 65 73 73 | ly.to.connect.the.server.process | 
| 196e0 | 20 74 6f 20 74 68 65 20 63 6c 69 65 6e 74 20 70    72 6f 63 65 73 73 65 73 22 0a 20 20 28 70 72 6f | .to.the.client.processes"...(pro | 
| 19700 | 63 65 73 73 2d 70 75 74 20 63 6f 6e 20 3a 73 65    72 76 65 72 20 73 65 72 76 65 72 29 29 0a 0a 28 | cess-put.con.:server.server))..( | 
| 19720 | 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 68 61    6e 64 6c 65 72 2d 68 69 73 74 6f 72 79 20 27 28 | defvar.elnode-handler-history.'( | 
| 19740 | 29 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79    20 6f 66 20 68 61 6e 64 6c 65 72 73 20 62 6f 75 | )..."The.history.of.handlers.bou | 
| 19760 | 6e 64 20 74 6f 20 73 65 72 76 65 72 73 2e 22 29    0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 | nd.to.servers.")..(defvar.elnode | 
| 19780 | 2d 70 6f 72 74 2d 68 69 73 74 6f 72 79 20 27 28    29 0a 20 20 22 54 68 65 20 68 69 73 74 6f 72 79 | -port-history.'()..."The.history | 
| 197a0 | 20 6f 66 20 70 6f 72 74 73 20 74 68 61 74 20 73    65 72 76 65 72 73 20 61 72 65 20 73 74 61 72 74 | .of.ports.that.servers.are.start | 
| 197c0 | 65 64 20 6f 6e 2e 22 29 0a 0a 28 64 65 66 76 61    72 20 65 6c 6e 6f 64 65 2d 68 6f 73 74 2d 68 69 | ed.on.")..(defvar.elnode-host-hi | 
| 197e0 | 73 74 6f 72 79 20 27 28 29 0a 20 20 22 54 68 65    20 68 69 73 74 6f 72 79 20 6f 66 20 68 6f 73 74 | story.'()..."The.history.of.host | 
| 19800 | 73 20 74 68 61 74 20 73 65 72 76 65 72 73 20 61    72 65 20 73 74 61 72 74 65 64 20 6f 6e 2e 22 29 | s.that.servers.are.started.on.") | 
| 19820 | 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d    70 6f 72 74 73 20 28 29 0a 20 20 22 4c 69 73 74 | ..(defun.elnode-ports.()..."List | 
| 19840 | 20 6f 66 20 61 6c 6c 20 70 6f 72 74 73 20 63 75    72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 62 | .of.all.ports.currently.in.use.b | 
| 19860 | 79 20 65 6c 6e 6f 64 65 2e 22 0a 20 20 28 6d 61    70 63 61 72 20 27 63 61 72 20 65 6c 6e 6f 64 65 | y.elnode."...(mapcar.'car.elnode | 
| 19880 | 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 29    0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2f | -server-socket))..(defun.elnode/ | 
| 198a0 | 6d 61 6b 65 2d 73 65 72 76 69 63 65 20 28 68 6f    73 74 20 70 6f 72 74 20 73 65 72 76 69 63 65 2d | make-service.(host.port.service- | 
| 198c0 | 6d 61 70 70 69 6e 67 73 20 72 65 71 75 65 73 74    2d 68 61 6e 64 6c 65 72 20 64 65 66 65 72 2d 6d | mappings.request-handler.defer-m | 
| 198e0 | 6f 64 65 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20    61 63 74 75 61 6c 20 54 43 50 20 73 65 72 76 65 | ode)..."Make.an.actual.TCP.serve | 
| 19900 | 72 2e 22 0a 20 20 28 6c 65 74 20 28 28 61 6e 2d    62 75 66 20 28 67 65 74 2d 62 75 66 66 65 72 2d | r."...(let.((an-buf.(get-buffer- | 
| 19920 | 63 72 65 61 74 65 20 22 2a 65 6c 6e 6f 64 65 2d    77 65 62 73 65 72 76 65 72 2a 22 29 29 29 0a 20 | create."*elnode-webserver*"))).. | 
| 19940 | 20 20 20 28 6d 61 6b 65 2d 6e 65 74 77 6f 72 6b    2d 70 72 6f 63 65 73 73 0a 20 20 20 20 20 3a 6e | ...(make-network-process......:n | 
| 19960 | 61 6d 65 20 22 2a 65 6c 6e 6f 64 65 2d 77 65 62    73 65 72 76 65 72 2d 70 72 6f 63 2a 22 0a 20 20 | ame."*elnode-webserver-proc*"... | 
| 19980 | 20 20 20 3a 62 75 66 66 65 72 20 61 6e 2d 62 75    66 0a 20 20 20 20 20 3a 73 65 72 76 65 72 20 74 | ...:buffer.an-buf......:server.t | 
| 199a0 | 0a 20 20 20 20 20 3a 6e 6f 77 61 69 74 20 28 3c    20 65 6d 61 63 73 2d 6d 61 6a 6f 72 2d 76 65 72 | ......:nowait.(<.emacs-major-ver | 
| 199c0 | 73 69 6f 6e 20 32 36 29 0a 20 20 20 20 20 3a 68    6f 73 74 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 | sion.26)......:host.(cond....... | 
| 199e0 | 20 20 20 20 20 20 20 28 28 65 71 75 61 6c 20 68    6f 73 74 20 22 6c 6f 63 61 6c 68 6f 73 74 22 29 | .......((equal.host."localhost") | 
| 19a00 | 20 27 6c 6f 63 61 6c 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 28 28 65 71 75 61 6c 20 68 6f | .'local)..............((equal.ho | 
| 19a20 | 73 74 20 22 2a 22 29 20 6e 69 6c 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 28 74 20 68 6f 73 | st."*").nil)..............(t.hos | 
| 19a40 | 74 29 29 0a 20 20 20 20 20 3a 73 65 72 76 69 63    65 20 70 6f 72 74 0a 20 20 20 20 20 3a 63 6f 64 | t))......:service.port......:cod | 
| 19a60 | 69 6e 67 20 27 28 72 61 77 2d 74 65 78 74 2d 75    6e 69 78 20 2e 20 72 61 77 2d 74 65 78 74 2d 75 | ing.'(raw-text-unix...raw-text-u | 
| 19a80 | 6e 69 78 29 0a 20 20 20 20 20 3a 66 61 6d 69 6c    79 20 27 69 70 76 34 0a 20 20 20 20 20 3a 66 69 | nix)......:family.'ipv4......:fi | 
| 19aa0 | 6c 74 65 72 20 27 65 6c 6e 6f 64 65 2d 2d 66 69    6c 74 65 72 0a 20 20 20 20 20 3a 73 65 6e 74 69 | lter.'elnode--filter......:senti | 
| 19ac0 | 6e 65 6c 20 27 65 6c 6e 6f 64 65 2d 2d 73 65 6e    74 69 6e 65 6c 0a 20 20 20 20 20 3a 6c 6f 67 20 | nel.'elnode--sentinel......:log. | 
| 19ae0 | 27 65 6c 6e 6f 64 65 2d 2d 6c 6f 67 2d 66 6e 0a    20 20 20 20 20 3a 70 6c 69 73 74 20 28 6c 69 73 | 'elnode--log-fn......:plist.(lis | 
| 19b00 | 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    65 6c 6e 6f 64 65 2d 73 65 72 76 69 63 65 2d 6d | t..............:elnode-service-m | 
| 19b20 | 61 70 20 73 65 72 76 69 63 65 2d 6d 61 70 70 69    6e 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ap.service-mappings............. | 
| 19b40 | 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 61    6e 64 6c 65 72 20 72 65 71 75 65 73 74 2d 68 61 | .:elnode-http-handler.request-ha | 
| 19b60 | 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 3a 65 6c 6e 6f 64 65 2d 64 65 66 65 72 | ndler..............:elnode-defer | 
| 19b80 | 2d 6d 6f 64 65 20 64 65 66 65 72 2d 6d 6f 64 65    29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f | -mode.defer-mode))))..;;;###auto | 
| 19ba0 | 6c 6f 61 64 0a 28 64 65 66 75 6e 2a 20 65 6c 6e    6f 64 65 2d 73 74 61 72 74 20 28 72 65 71 75 65 | load.(defun*.elnode-start.(reque | 
| 19bc0 | 73 74 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | st-handler...................... | 
| 19be0 | 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 70 6f 72 74 | .&key.......................port | 
| 19c00 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 68 6f 73 74 20 22 6c 6f | .......................(host."lo | 
| 19c20 | 63 61 6c 68 6f 73 74 22 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | calhost")....................... | 
| 19c40 | 28 64 65 66 65 72 2d 6d 6f 64 65 20 3a 6d 61 6e    61 67 65 64 29 0a 20 20 20 20 20 20 20 20 20 20 | (defer-mode.:managed)........... | 
| 19c60 | 20 20 20 20 20 20 20 20 20 20 20 20 73 65 72 76    69 63 65 2d 6d 61 70 70 69 6e 67 73 29 0a 20 20 | ............service-mappings)... | 
| 19c80 | 22 53 74 61 72 74 20 61 20 73 65 72 76 65 72 20    75 73 69 6e 67 20 52 45 51 55 45 53 54 2d 48 41 | "Start.a.server.using.REQUEST-HA | 
| 19ca0 | 4e 44 4c 45 52 2e 0a 0a 52 45 51 55 45 53 54 2d    48 41 4e 44 4c 45 52 20 77 69 6c 6c 20 68 61 6e | NDLER...REQUEST-HANDLER.will.han | 
| 19cc0 | 64 6c 65 20 72 65 71 75 65 73 74 73 20 6f 6e 20    50 4f 52 54 20 6f 6e 20 48 4f 53 54 20 28 77 68 | dle.requests.on.PORT.on.HOST.(wh | 
| 19ce0 | 69 63 68 20 69 73 0a 27 6c 6f 63 61 6c 68 6f 73    74 27 20 62 79 20 64 65 66 61 75 6c 74 29 2e 0a | ich.is.'localhost'.by.default).. | 
| 19d00 | 0a 52 45 51 55 45 53 54 2d 48 41 4e 44 4c 45 52    20 69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 | .REQUEST-HANDLER.is.a.function.w | 
| 19d20 | 68 69 63 68 20 69 73 20 63 61 6c 6c 65 64 20 77    69 74 68 20 74 68 65 20 72 65 71 75 65 73 74 2e | hich.is.called.with.the.request. | 
| 19d40 | 0a 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73    20 63 61 6c 6c 65 64 20 77 69 74 68 20 6f 6e 65 | .The.function.is.called.with.one | 
| 19d60 | 20 61 72 67 75 6d 65 6e 74 2c 20 77 68 69 63 68    20 69 73 20 74 68 65 0a 68 74 74 70 2d 63 6f 6e | .argument,.which.is.the.http-con | 
| 19d80 | 6e 65 63 74 69 6f 6e 2e 0a 0a 59 6f 75 20 63 61    6e 20 75 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 | nection...You.can.use.functions. | 
| 19da0 | 73 75 63 68 20 61 73 20 60 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 73 74 61 72 74 27 20 61 6e 64 0a | such.as.`elnode-http-start'.and. | 
| 19dc0 | 60 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e    64 2d 62 6f 64 79 27 20 74 6f 20 73 65 6e 64 20 | `elnode-http-send-body'.to.send. | 
| 19de0 | 74 68 65 20 68 74 74 70 20 72 65 73 70 6f 6e 73    65 2e 0a 0a 45 78 61 6d 70 6c 65 3a 0a 0a 20 20 | the.http.response...Example:.... | 
| 19e00 | 28 64 65 66 75 6e 20 6e 69 63 2d 73 65 72 76 65    72 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 | (defun.nic-server.(httpcon)..... | 
| 19e20 | 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61    72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 20 27 | (elnode-http-start.httpcon.200.' | 
| 19e40 | 28 5c 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 5c    22 20 2e 20 5c 22 74 65 78 74 2f 68 74 6d 6c 5c | (\"Content-Type\"...\"text/html\ | 
| 19e60 | 22 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70 | ")).....(elnode-http-return.http | 
| 19e80 | 63 6f 6e 20 5c 22 3c 68 74 6d 6c 3e 3c 62 3e 42    49 47 21 3c 2f 62 3e 3c 2f 68 74 6d 6c 3e 5c 22 | con.\"<html><b>BIG!</b></html>\" | 
| 19ea0 | 29 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 74 61    72 74 20 27 6e 69 63 2d 73 65 72 76 65 72 29 0a | ))...(elnode-start.'nic-server). | 
| 19ec0 | 0a 4e 6f 77 20 76 69 73 69 74 20 68 74 74 70 3a    2f 2f 31 32 37 2e 30 2e 30 2e 31 3a 38 30 30 30 | .Now.visit.http://127.0.0.1:8000 | 
| 19ee0 | 0a 0a 49 66 20 50 4f 52 54 20 69 73 20 6e 6f 6e    2d 6e 69 6c 2c 20 74 68 65 6e 20 72 75 6e 20 73 | ..If.PORT.is.non-nil,.then.run.s | 
| 19f00 | 65 72 76 65 72 20 6f 6e 20 50 4f 52 54 2c 20 6f    74 68 65 72 77 69 73 65 20 64 65 66 61 75 6c 74 | erver.on.PORT,.otherwise.default | 
| 19f20 | 20 74 6f 0a 38 30 30 30 2e 0a 0a 49 66 20 48 4f    53 54 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 74 | .to.8000...If.HOST.is.non-nil,.t | 
| 19f40 | 68 65 6e 20 72 75 6e 20 74 68 65 20 73 65 72 76    65 72 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 | hen.run.the.server.on.the.specif | 
| 19f60 | 69 65 64 20 6c 6f 63 61 6c 20 49 50 0a 61 64 64    72 65 73 73 2c 20 6f 74 68 65 72 77 69 73 65 20 | ied.local.IP.address,.otherwise. | 
| 19f80 | 75 73 65 20 6c 6f 63 61 6c 68 6f 73 74 2e 20 20    41 20 66 65 77 20 6e 61 6d 65 73 20 61 72 65 20 | use.localhost...A.few.names.are. | 
| 19fa0 | 70 72 65 64 65 66 69 6e 65 64 3a 0a 0a 20 20 5c    22 6c 6f 63 61 6c 68 6f 73 74 5c 22 20 69 73 20 | predefined:....\"localhost\".is. | 
| 19fc0 | 31 32 37 2e 30 2e 30 2e 31 0a 20 20 5c 22 2a 5c    22 20 69 73 20 30 2e 30 2e 30 2e 30 0a 0a 41 64 | 127.0.0.1...\"*\".is.0.0.0.0..Ad | 
| 19fe0 | 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 79 6f 75 20    6d 61 79 20 73 70 65 63 69 66 69 79 20 61 6e 20 | ditionally,.you.may.specifiy.an. | 
| 1a000 | 49 50 20 61 64 64 72 65 73 73 2c 20 65 2e 67 20    5c 22 31 2e 32 2e 33 2e 34 5c 22 0a 0a 4e 6f 74 | IP.address,.e.g.\"1.2.3.4\"..Not | 
| 1a020 | 65 20 74 68 61 74 20 61 6c 74 68 6f 75 67 68 20    48 4f 53 54 20 6d 61 79 20 62 65 20 73 70 65 63 | e.that.although.HOST.may.be.spec | 
| 1a040 | 69 66 69 65 64 2c 20 65 6c 6e 6f 64 65 20 64 6f    65 73 20 6e 6f 74 0a 64 69 73 61 6d 62 69 67 75 | ified,.elnode.does.not.disambigu | 
| 1a060 | 61 74 65 20 6f 6e 20 72 75 6e 6e 69 6e 67 20 73    65 72 76 65 72 73 20 62 79 20 48 4f 53 54 2e 20 | ate.on.running.servers.by.HOST.. | 
| 1a080 | 20 53 6f 20 79 6f 75 20 63 61 6e 6e 6f 74 20 73    74 61 72 74 20 74 77 6f 0a 65 6c 6e 6f 64 65 20 | .So.you.cannot.start.two.elnode. | 
| 1a0a0 | 73 65 72 76 65 72 73 20 6f 6e 20 74 68 65 20 73    61 6d 65 20 70 6f 72 74 20 6f 6e 20 64 69 66 66 | servers.on.the.same.port.on.diff | 
| 1a0c0 | 65 72 65 6e 74 20 68 6f 73 74 73 2e 0a 0a 44 45    46 45 52 2d 4d 4f 44 45 20 6d 61 79 20 62 65 20 | erent.hosts...DEFER-MODE.may.be. | 
| 1a0e0 | 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20    68 6f 77 20 64 65 66 65 72 72 65 64 20 68 61 6e | used.to.control.how.deferred.han | 
| 1a100 | 64 6c 65 72 73 20 61 72 65 0a 6d 61 6e 61 67 65    64 20 66 6f 72 20 74 68 69 73 20 73 65 72 76 65 | dlers.are.managed.for.this.serve | 
| 1a120 | 72 2e 0a 0a 53 45 52 56 49 43 45 2d 4d 41 50 50    49 4e 47 53 20 69 73 20 61 6e 20 61 6c 69 73 74 | r...SERVICE-MAPPINGS.is.an.alist | 
| 1a140 | 20 6f 66 20 73 65 72 76 69 63 65 20 72 65 73 6f    75 72 63 65 20 73 79 6d 62 6f 6c 73 20 6d 61 70 | .of.service.resource.symbols.map | 
| 1a160 | 70 65 64 0a 74 6f 20 69 6e 74 65 67 65 72 20 70    6f 72 74 20 6e 75 6d 62 65 72 73 2e 20 20 54 68 | ped.to.integer.port.numbers...Th | 
| 1a180 | 69 73 20 63 61 6e 20 62 65 20 73 75 70 70 6c 69    65 64 20 74 6f 20 65 6c 6e 6f 64 65 2d 73 74 61 | is.can.be.supplied.to.elnode-sta | 
| 1a1a0 | 72 74 20 74 6f 0a 61 6c 6c 6f 77 20 69 74 20 74    6f 20 6d 61 70 20 73 65 72 76 69 63 65 20 72 65 | rt.to.allow.it.to.map.service.re | 
| 1a1c0 | 73 6f 75 72 63 65 73 20 64 65 66 69 6e 65 64 20    62 79 20 68 61 6e 64 6c 65 72 73 20 74 6f 0a 64 | sources.defined.by.handlers.to.d | 
| 1a1e0 | 69 66 66 65 72 65 6e 74 20 54 43 50 20 70 6f 72    74 73 20 61 6e 64 20 74 68 65 72 65 66 6f 72 65 | ifferent.TCP.ports.and.therefore | 
| 1a200 | 20 64 69 66 66 65 72 65 6e 74 20 45 6d 61 63 73    20 69 6e 73 74 61 6e 63 65 73 2e 0a 0a 54 68 65 | .different.Emacs.instances...The | 
| 1a220 | 20 6c 69 73 74 20 6f 66 20 53 45 52 56 49 43 45    2d 4d 41 50 50 49 4e 47 53 20 69 73 20 61 6c 73 | .list.of.SERVICE-MAPPINGS.is.als | 
| 1a240 | 6f 20 75 73 65 64 20 74 6f 20 73 74 61 72 74 20    61 6e 63 69 6c 6c 69 61 72 79 0a 70 6f 72 74 20 | o.used.to.start.ancilliary.port. | 
| 1a260 | 73 65 72 76 65 72 73 2e 20 20 41 6e 63 69 6c 6c    69 61 72 79 20 70 6f 72 74 20 73 65 72 76 65 72 | servers...Ancilliary.port.server | 
| 1a280 | 73 20 73 68 6f 75 6c 64 20 62 65 20 61 75 74 6f    6d 61 74 69 63 61 6c 6c 79 0a 73 74 6f 70 70 65 | s.should.be.automatically.stoppe | 
| 1a2a0 | 64 20 77 68 65 6e 20 74 68 65 20 6d 61 69 6e 20    73 65 72 76 65 72 20 69 73 20 73 74 6f 70 70 65 | d.when.the.main.server.is.stoppe | 
| 1a2c0 | 64 2e 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69    76 65 0a 20 20 20 28 6c 65 74 20 28 28 68 61 6e | d."...(interactive....(let.((han | 
| 1a2e0 | 64 6c 65 72 20 28 63 6f 6d 70 6c 65 74 69 6e 67    2d 72 65 61 64 20 22 48 61 6e 64 6c 65 72 20 66 | dler.(completing-read."Handler.f | 
| 1a300 | 75 6e 63 74 69 6f 6e 3a 20 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | unction:."...................... | 
| 1a320 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62    61 72 72 61 79 20 27 66 62 6f 75 6e 64 70 20 74 | ..............obarray.'fboundp.t | 
| 1a340 | 20 6e 69 6c 20 6e 69 6c 29 29 0a 20 20 20 20 20    20 20 20 20 28 70 6f 72 74 20 28 72 65 61 64 2d | .nil.nil))..........(port.(read- | 
| 1a360 | 6e 75 6d 62 65 72 20 22 50 6f 72 74 3a 20 22 20    38 30 30 30 29 29 0a 20 20 20 20 20 20 20 20 20 | number."Port:.".8000)).......... | 
| 1a380 | 28 68 6f 73 74 20 28 72 65 61 64 2d 73 74 72 69    6e 67 20 22 48 6f 73 74 3a 20 22 20 22 6c 6f 63 | (host.(read-string."Host:."."loc | 
| 1a3a0 | 61 6c 68 6f 73 74 22 20 27 65 6c 6e 6f 64 65 2d    68 6f 73 74 2d 68 69 73 74 6f 72 79 29 29 29 0a | alhost".'elnode-host-history))). | 
| 1a3c0 | 20 20 20 20 20 28 6c 69 73 74 20 28 69 6e 74 65    72 6e 20 68 61 6e 64 6c 65 72 29 20 3a 70 6f 72 | .....(list.(intern.handler).:por | 
| 1a3e0 | 74 20 70 6f 72 74 20 3a 68 6f 73 74 20 68 6f 73    74 29 29 29 0a 20 20 28 6c 65 74 20 28 28 70 6f | t.port.:host.host)))...(let.((po | 
| 1a400 | 72 74 20 28 6f 72 20 70 6f 72 74 20 38 30 30 30    29 29 0a 20 20 20 20 20 20 20 20 28 68 6f 73 74 | rt.(or.port.8000)).........(host | 
| 1a420 | 20 28 6f 72 20 68 6f 73 74 20 22 6c 6f 63 61 6c    68 6f 73 74 22 29 29 29 0a 20 20 20 20 28 75 6e | .(or.host."localhost"))).....(un | 
| 1a440 | 6c 65 73 73 20 28 61 73 73 6f 63 20 70 6f 72 74    20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 | less.(assoc.port.elnode-server-s | 
| 1a460 | 6f 63 6b 65 74 29 0a 20 20 20 20 20 20 3b 3b 20    41 64 64 20 61 20 6e 65 77 20 73 65 72 76 65 72 | ocket).......;;.Add.a.new.server | 
| 1a480 | 20 73 6f 63 6b 65 74 20 74 6f 20 74 68 65 20 6c    69 73 74 0a 20 20 20 20 20 20 28 73 65 74 71 20 | .socket.to.the.list.......(setq. | 
| 1a4a0 | 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f    63 6b 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 | elnode-server-socket............ | 
| 1a4c0 | 20 28 63 6f 6e 73 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 73 20 70 6f 72 74 0a 20 | .(cons..............(cons.port.. | 
| 1a4e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6c 65 74 20 28 28 62 75 66 20 28 67 65 | ..................(let.((buf.(ge | 
| 1a500 | 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 20    22 2a 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 | t-buffer-create."*elnode-webserv | 
| 1a520 | 65 72 2a 22 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | er*")).......................... | 
| 1a540 | 28 61 6e 63 69 6c 6c 69 61 72 79 73 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (ancilliarys.................... | 
| 1a560 | 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72    20 28 72 65 73 6f 75 72 63 65 20 2e 20 70 6f 72 | .......(loop.for.(resource...por | 
| 1a580 | 74 29 20 69 6e 20 73 65 72 76 69 63 65 2d 6d 61    70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 20 20 | t).in.service-mappings.......... | 
| 1a5a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 63 6f 6c 6c 65 63 74 0a 20 20 20 20 | ....................collect..... | 
| 1a5c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f | ...........................(elno | 
| 1a5e0 | 64 65 2f 6d 61 6b 65 2d 73 65 72 76 69 63 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | de/make-service................. | 
| 1a600 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    68 6f 73 74 20 70 6f 72 74 20 73 65 72 76 69 63 | ................host.port.servic | 
| 1a620 | 65 2d 6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e-mappings...................... | 
| 1a640 | 20 20 20 20 20 20 20 20 20 20 20 72 65 71 75 65    73 74 2d 68 61 6e 64 6c 65 72 20 64 65 66 65 72 | ...........request-handler.defer | 
| 1a660 | 2d 6d 6f 64 65 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | -mode)))........................ | 
| 1a680 | 20 20 28 6d 61 69 6e 20 28 65 6c 6e 6f 64 65 2f    6d 61 6b 65 2d 73 65 72 76 69 63 65 0a 20 20 20 | ..(main.(elnode/make-service.... | 
| 1a6a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 68 6f 73 | .............................hos | 
| 1a6c0 | 74 20 70 6f 72 74 20 73 65 72 76 69 63 65 2d 6d    61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 20 | t.port.service-mappings......... | 
| 1a6e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 72 65 71 75 65 73 74 2d | ........................request- | 
| 1a700 | 68 61 6e 64 6c 65 72 20 64 65 66 65 72 2d 6d 6f    64 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | handler.defer-mode)))........... | 
| 1a720 | 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 41 64    64 20 74 68 65 20 6c 69 6e 6b 20 62 65 74 77 65 | ...........;;.Add.the.link.betwe | 
| 1a740 | 65 6e 20 74 68 65 20 6d 61 69 6e 20 61 6e 64 20    74 68 65 20 61 6e 63 69 6c 6c 69 61 72 79 73 0a | en.the.main.and.the.ancilliarys. | 
| 1a760 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 75 | .....................(process-pu | 
| 1a780 | 74 20 6d 61 69 6e 20 3a 65 6c 6e 6f 64 65 2d 61    6e 63 69 6c 6c 69 61 72 79 73 20 61 6e 63 69 6c | t.main.:elnode-ancilliarys.ancil | 
| 1a7a0 | 6c 69 61 72 79 73 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 69 | liarys)......................mai | 
| 1a7c0 | 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 65 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 | n))..............elnode-server-s | 
| 1a7e0 | 6f 63 6b 65 74 29 29 29 29 29 0a 0a 3b 3b 20 54    4f 44 4f 3a 20 6d 61 6b 65 20 74 68 69 73 20 74 | ocket)))))..;;.TODO:.make.this.t | 
| 1a800 | 61 6b 65 20 61 6e 20 61 72 67 75 6d 65 6e 74 20    66 6f 72 20 74 68 65 0a 28 64 65 66 75 6e 20 65 | ake.an.argument.for.the.(defun.e | 
| 1a820 | 6c 6e 6f 64 65 2d 73 74 6f 70 20 28 70 6f 72 74    29 0a 20 20 22 53 74 6f 70 20 74 68 65 20 65 6c | lnode-stop.(port)..."Stop.the.el | 
| 1a840 | 6e 6f 64 65 20 73 65 72 76 65 72 20 61 74 74 61    63 68 65 64 20 74 6f 20 50 4f 52 54 2e 22 0a 20 | node.server.attached.to.PORT.".. | 
| 1a860 | 20 28 69 6e 74 65 72 61 63 74 69 76 65 0a 20 20    20 28 6c 65 74 20 28 28 70 72 74 0a 20 20 20 20 | .(interactive....(let.((prt..... | 
| 1a880 | 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 74 6f    2d 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 | ......(string-to-number......... | 
| 1a8a0 | 20 20 20 28 63 6f 6d 70 6c 65 74 69 6e 67 2d 72    65 61 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ...(completing-read............. | 
| 1a8c0 | 22 50 6f 72 74 3a 20 22 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 6d 61 70 63 61 72 20 28 6c 61 | "Port:.".............(mapcar.(la | 
| 1a8e0 | 6d 62 64 61 20 28 6e 29 20 28 66 6f 72 6d 61 74    20 22 25 73 22 20 6e 29 29 0a 20 20 20 20 20 20 | mbda.(n).(format."%s".n))....... | 
| 1a900 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65    6c 6e 6f 64 65 2d 70 6f 72 74 73 29 29 29 29 29 | ..............(elnode-ports))))) | 
| 1a920 | 29 0a 20 20 20 20 20 28 6c 69 73 74 20 70 72 74    29 29 29 0a 20 20 28 6c 65 74 2a 20 28 28 73 65 | )......(list.prt)))...(let*.((se | 
| 1a940 | 72 76 65 72 0a 20 20 20 20 20 20 20 20 20 20 28    6f 72 20 28 61 73 73 6f 63 20 70 6f 72 74 20 65 | rver...........(or.(assoc.port.e | 
| 1a960 | 6c 6e 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63    6b 65 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 | lnode-server-socket)............ | 
| 1a980 | 20 20 20 28 61 73 73 6f 63 20 28 66 6f 72 6d 61    74 20 22 25 64 22 20 70 6f 72 74 29 20 65 6c 6e | ...(assoc.(format."%d".port).eln | 
| 1a9a0 | 6f 64 65 2d 73 65 72 76 65 72 2d 73 6f 63 6b 65    74 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 | ode-server-socket)))..........(p | 
| 1a9c0 | 6f 72 74 2d 74 6f 2d 6b 69 6c 6c 20 28 63 61 72    2d 73 61 66 65 20 73 65 72 76 65 72 29 29 29 0a | ort-to-kill.(car-safe.server))). | 
| 1a9e0 | 20 20 20 20 28 77 68 65 6e 20 73 65 72 76 65 72    0a 20 20 20 20 20 20 28 6d 65 73 73 61 67 65 20 | ....(when.server.......(message. | 
| 1aa00 | 22 64 65 6c 65 74 69 6e 67 20 73 65 72 76 65 72    20 70 72 6f 63 65 73 73 22 29 0a 20 20 20 20 20 | "deleting.server.process")...... | 
| 1aa20 | 20 28 6c 6f 6f 70 20 66 6f 72 20 61 6e 63 69 6c    6c 69 61 72 79 0a 20 20 20 20 20 20 20 20 20 69 | .(loop.for.ancilliary..........i | 
| 1aa40 | 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 28    63 64 72 20 73 65 72 76 65 72 29 20 3a 65 6c 6e | n.(process-get.(cdr.server).:eln | 
| 1aa60 | 6f 64 65 2d 61 6e 63 69 6c 6c 69 61 72 79 73 29    0a 20 20 20 20 20 20 20 20 20 64 6f 20 28 64 65 | ode-ancilliarys)..........do.(de | 
| 1aa80 | 6c 65 74 65 2d 70 72 6f 63 65 73 73 20 61 6e 63    69 6c 6c 69 61 72 79 29 29 0a 20 20 20 20 20 20 | lete-process.ancilliary))....... | 
| 1aaa0 | 3b 3b 20 4e 6f 77 20 74 68 65 20 6d 61 69 6e 20    6f 6e 65 0a 20 20 20 20 20 20 28 64 65 6c 65 74 | ;;.Now.the.main.one.......(delet | 
| 1aac0 | 65 2d 70 72 6f 63 65 73 73 20 28 63 64 72 20 73    65 72 76 65 72 29 29 0a 20 20 20 20 20 20 28 73 | e-process.(cdr.server)).......(s | 
| 1aae0 | 65 74 71 20 65 6c 6e 6f 64 65 2d 73 65 72 76 65    72 2d 73 6f 63 6b 65 74 0a 20 20 20 20 20 20 20 | etq.elnode-server-socket........ | 
| 1ab00 | 20 20 20 20 20 3b 3b 20 72 65 6d 6f 76 65 2d 69    66 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c | .....;;.remove-if.............(l | 
| 1ab20 | 65 74 20 28 28 74 65 73 74 20 28 6c 61 6d 62 64    61 20 28 65 6c 65 6d 29 0a 20 20 20 20 20 20 20 | et.((test.(lambda.(elem)........ | 
| 1ab40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 65 71 75 61 6c 20 28 63 61 72 20 65 | ...................(equal.(car.e | 
| 1ab60 | 6c 65 6d 29 20 70 6f 72 74 2d 74 6f 2d 6b 69 6c    6c 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | lem).port-to-kill)))............ | 
| 1ab80 | 20 20 20 20 20 20 20 28 6c 20 65 6c 6e 6f 64 65    2d 73 65 72 76 65 72 2d 73 6f 63 6b 65 74 29 0a | .......(l.elnode-server-socket). | 
| 1aba0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 | ..................result)....... | 
| 1abc0 | 20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28    63 61 72 20 6c 29 0a 20 20 20 20 20 20 20 20 20 | ........(while.(car.l).......... | 
| 1abe0 | 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 20    28 70 6f 70 20 6c 29 29 0a 20 20 20 20 20 20 20 | .......(let.((p.(pop.l))........ | 
| 1ac00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    72 20 28 63 64 72 20 6c 29 29 29 0a 20 20 20 20 | ...............(r.(cdr.l)))..... | 
| 1ac20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69    66 20 28 6e 6f 74 20 28 66 75 6e 63 61 6c 6c 20 | ..............(if.(not.(funcall. | 
| 1ac40 | 74 65 73 74 20 70 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | test.p)).......................( | 
| 1ac60 | 73 65 74 71 20 72 65 73 75 6c 74 20 28 63 6f 6e    73 20 70 20 72 65 73 75 6c 74 29 29 29 29 29 0a | setq.result.(cons.p.result))))). | 
| 1ac80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65    73 75 6c 74 29 29 29 29 29 0a 0a 28 64 65 66 75 | ..............result)))))..(defu | 
| 1aca0 | 6e 20 65 6c 6e 6f 64 65 2d 66 69 6e 64 2d 66 72    65 65 2d 73 65 72 76 69 63 65 20 28 29 0a 20 20 | n.elnode-find-free-service.()... | 
| 1acc0 | 22 52 65 74 75 72 6e 20 61 20 66 72 65 65 20 28    75 6e 75 73 65 64 29 20 54 43 50 20 70 6f 72 74 | "Return.a.free.(unused).TCP.port | 
| 1ace0 | 2e 0a 0a 54 68 65 20 70 6f 72 74 20 69 73 20 63    68 6f 73 65 6e 20 72 61 6e 64 6f 6d 6c 79 20 66 | ...The.port.is.chosen.randomly.f | 
| 1ad00 | 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61    6c 20 70 6f 72 74 73 2e 20 22 0a 20 20 28 6c 65 | rom.the.ephemeral.ports.."...(le | 
| 1ad20 | 74 20 28 6d 79 73 65 72 76 65 72 0a 20 20 20 20    20 20 20 20 28 70 6f 72 74 20 35 30 30 30 30 29 | t.(myserver.........(port.50000) | 
| 1ad40 | 29 20 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20    62 65 20 65 70 68 65 6d 65 72 61 6c 20 62 61 73 | ).;.this.should.be.ephemeral.bas | 
| 1ad60 | 65 0a 20 20 20 20 28 77 68 69 6c 65 0a 20 20 20    20 20 20 20 20 28 6e 6f 74 0a 20 20 20 20 20 20 | e.....(while.........(not....... | 
| 1ad80 | 20 20 20 28 70 72 6f 63 65 73 73 70 0a 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 6f | ...(processp...........(conditio | 
| 1ada0 | 6e 2d 63 61 73 65 20 73 69 67 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 6d | n-case.sig...............(setq.m | 
| 1adc0 | 79 73 65 72 76 65 72 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 6b | yserver.....................(mak | 
| 1ade0 | 65 2d 6e 65 74 77 6f 72 6b 2d 70 72 6f 63 65 73    73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e-network-process............... | 
| 1ae00 | 20 20 20 20 20 20 20 3a 6e 61 6d 65 20 22 2a 74    65 73 74 2d 70 72 6f 63 2a 22 0a 20 20 20 20 20 | .......:name."*test-proc*"...... | 
| 1ae20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3a 73 65 72 76 65 72 20 74 0a 20 20 20 20 20 20 | ................:server.t....... | 
| 1ae40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    6e 6f 77 61 69 74 20 28 3c 20 65 6d 61 63 73 2d | ...............:nowait.(<.emacs- | 
| 1ae60 | 6d 61 6a 6f 72 2d 76 65 72 73 69 6f 6e 20 32 36    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | major-version.26)............... | 
| 1ae80 | 20 20 20 20 20 20 20 3a 68 6f 73 74 20 27 6c 6f    63 61 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 | .......:host.'local............. | 
| 1aea0 | 20 20 20 20 20 20 20 20 20 3a 73 65 72 76 69 63    65 20 70 6f 72 74 0a 20 20 20 20 20 20 20 20 20 | .........:service.port.......... | 
| 1aec0 | 20 20 20 20 20 20 20 20 20 20 20 20 3a 66 61 6d    69 6c 79 20 27 69 70 76 34 29 29 0a 20 20 20 20 | ............:family.'ipv4))..... | 
| 1aee0 | 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 65 72    72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ........(file-error............. | 
| 1af00 | 20 28 69 66 20 28 65 71 75 61 6c 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 | .(if.(equal..................."C | 
| 1af20 | 61 6e 6e 6f 74 20 62 69 6e 64 20 73 65 72 76 65    72 20 73 6f 63 6b 65 74 20 61 64 64 72 65 73 73 | annot.bind.server.socket.address | 
| 1af40 | 20 61 6c 72 65 61 64 79 20 69 6e 20 75 73 65 22    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .already.in.use"................ | 
| 1af60 | 20 20 20 28 6d 61 70 63 6f 6e 63 61 74 20 27 69    64 65 6e 74 69 74 79 20 28 63 64 72 20 73 69 67 | ...(mapconcat.'identity.(cdr.sig | 
| 1af80 | 29 20 22 20 22 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 73 65 74 71 20 70 | )."."))..................(setq.p | 
| 1afa0 | 6f 72 74 20 28 2b 20 35 30 30 30 30 20 28 72 61    6e 64 6f 6d 20 35 30 30 30 29 29 29 29 29 29 29 | ort.(+.50000.(random.5000))))))) | 
| 1afc0 | 29 29 0a 20 20 20 20 28 64 65 6c 65 74 65 2d 70    72 6f 63 65 73 73 20 6d 79 73 65 72 76 65 72 29 | )).....(delete-process.myserver) | 
| 1afe0 | 0a 20 20 20 20 70 6f 72 74 29 29 0a 0a 0a 28 64    65 66 75 6e 20 65 6c 6e 6f 64 65 2d 6c 69 73 74 | .....port))...(defun.elnode-list | 
| 1b000 | 2d 62 75 66 66 65 72 73 20 28 29 0a 20 20 22 4c    69 73 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 | -buffers.()..."List.the.current. | 
| 1b020 | 62 75 66 66 65 72 73 20 62 65 69 6e 67 20 6d 61    6e 61 67 65 64 20 62 79 20 45 6c 6e 6f 64 65 2e | buffers.being.managed.by.Elnode. | 
| 1b040 | 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 76 65    29 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e | "...(interactive)...(with-curren | 
| 1b060 | 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75    66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 65 6c | t-buffer.(get-buffer-create."*el | 
| 1b080 | 6e 6f 64 65 2d 62 75 66 66 65 72 73 2a 22 29 0a    20 20 20 20 28 65 72 61 73 65 2d 62 75 66 66 65 | node-buffers*").....(erase-buffe | 
| 1b0a0 | 72 29 0a 20 20 20 20 28 6d 61 70 63 0a 20 20 20    20 20 28 6c 61 6d 62 64 61 20 28 62 29 0a 20 20 | r).....(mapc......(lambda.(b)... | 
| 1b0c0 | 20 20 20 20 20 28 73 61 76 65 2d 65 78 63 75 72    73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 28 69 | .....(save-excursion..........(i | 
| 1b0e0 | 66 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20    22 20 5c 5c 2a 65 6c 6e 6f 64 65 2d 2e 2a 22 20 | f.(string-match.".\\*elnode-.*". | 
| 1b100 | 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 62 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 | (buffer-name.b))..............(i | 
| 1b120 | 6e 73 65 72 74 20 28 66 6f 72 6d 61 74 20 22 25    73 5c 6e 22 20 62 29 29 29 0a 20 20 20 20 20 20 | nsert.(format."%s\n".b)))....... | 
| 1b140 | 20 29 29 0a 20 20 20 20 20 28 73 6f 72 74 20 28    62 75 66 66 65 72 2d 6c 69 73 74 29 0a 20 20 20 | .))......(sort.(buffer-list).... | 
| 1b160 | 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20    28 61 20 62 29 0a 20 20 20 20 20 20 20 20 20 20 | ........(lambda.(a.b)........... | 
| 1b180 | 20 20 20 28 73 74 72 69 6e 67 2d 6c 65 73 73 70    20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 62 29 | ...(string-lessp.(buffer-name.b) | 
| 1b1a0 | 20 28 62 75 66 66 65 72 2d 6e 61 6d 65 20 61 29    29 29 29 29 29 0a 20 20 28 64 69 73 70 6c 61 79 | .(buffer-name.a))))))...(display | 
| 1b1c0 | 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75 66    66 65 72 20 22 2a 65 6c 6e 6f 64 65 2d 62 75 66 | -buffer.(get-buffer."*elnode-buf | 
| 1b1e0 | 66 65 72 73 2a 22 29 29 29 0a 0a 28 64 65 66 75    6e 20 65 6c 6e 6f 64 65 2d 74 69 6d 65 2d 65 6e | fers*")))..(defun.elnode-time-en | 
| 1b200 | 63 6f 64 65 20 28 74 69 6d 65 2d 73 74 72 29 0a    20 20 22 42 61 73 69 63 20 54 49 4d 45 2d 53 54 | code.(time-str)..."Basic.TIME-ST | 
| 1b220 | 52 20 74 6f 20 74 69 6d 65 20 65 6e 63 6f 64 69    6e 67 2e 22 0a 20 20 28 61 70 70 6c 79 20 27 65 | R.to.time.encoding."...(apply.'e | 
| 1b240 | 6e 63 6f 64 65 2d 74 69 6d 65 20 28 70 61 72 73    65 2d 74 69 6d 65 2d 73 74 72 69 6e 67 20 74 69 | ncode-time.(parse-time-string.ti | 
| 1b260 | 6d 65 2d 73 74 72 29 29 29 0a 0a 0a 3b 3b 20 48    54 54 50 20 41 50 49 20 6d 65 74 68 6f 64 73 0a | me-str)))...;;.HTTP.API.methods. | 
| 1b280 | 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d    68 74 74 70 2d 68 64 72 20 28 68 74 74 70 63 6f | .(defun.elnode--http-hdr.(httpco | 
| 1b2a0 | 6e 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68 65    20 68 65 61 64 65 72 20 63 6f 6e 73 20 66 6f 72 | n)..."Return.the.header.cons.for | 
| 1b2c0 | 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 54    68 65 20 73 74 61 74 75 73 2d 6c 69 6e 65 20 61 | .the.HTTPCON...The.status-line.a | 
| 1b2e0 | 6e 64 20 74 68 65 20 68 65 61 64 65 72 20 61 6c    69 73 74 2e 22 0a 20 20 28 63 6f 6e 73 0a 20 20 | nd.the.header.alist."...(cons... | 
| 1b300 | 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74    74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 | .(process-get.httpcon.:elnode-ht | 
| 1b320 | 74 70 2d 73 74 61 74 75 73 29 0a 20 20 20 28 70    72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 | tp-status)....(process-get.httpc | 
| 1b340 | 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d    68 65 61 64 65 72 29 29 29 0a 0a 28 64 65 66 75 | on.:elnode-http-header)))..(defu | 
| 1b360 | 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65    61 64 65 72 73 20 28 68 74 74 70 63 6f 6e 29 0a | n.elnode-http-headers.(httpcon). | 
| 1b380 | 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 61 6c    69 73 74 20 6f 66 20 68 65 61 64 65 72 73 20 66 | .."Return.the.alist.of.headers.f | 
| 1b3a0 | 72 6f 6d 20 48 54 54 50 43 4f 4e 2e 22 0a 20 20    28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 | rom.HTTPCON."...(process-get.htt | 
| 1b3c0 | 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 68 65 61 64 65 72 29 29 0a 0a 28 64 65 66 | pcon.:elnode-http-header))..(def | 
| 1b3e0 | 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68    65 61 64 65 72 20 28 68 74 74 70 63 6f 6e 20 6e | un.elnode-http-header.(httpcon.n | 
| 1b400 | 61 6d 65 20 26 6f 70 74 69 6f 6e 61 6c 20 63 6f    6e 76 65 72 74 29 0a 20 20 22 47 65 74 20 74 68 | ame.&optional.convert)..."Get.th | 
| 1b420 | 65 20 68 65 61 64 65 72 20 73 70 65 63 69 66 69    65 64 20 62 79 20 4e 41 4d 45 20 66 72 6f 6d 20 | e.header.specified.by.NAME.from. | 
| 1b440 | 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 48 45    41 44 45 52 20 6d 61 79 20 62 65 20 61 20 73 74 | the.HTTPCON...HEADER.may.be.a.st | 
| 1b460 | 72 69 6e 67 20 6f 72 20 61 20 73 79 6d 62 6f 6c    2e 20 20 49 66 20 4e 41 4d 45 20 69 73 20 61 20 | ring.or.a.symbol...If.NAME.is.a. | 
| 1b480 | 73 79 6d 62 6f 6c 20 69 74 20 69 73 0a 63 61 73    65 20 69 6e 73 65 6e 73 69 74 76 65 2e 0a 0a 49 | symbol.it.is.case.insensitve...I | 
| 1b4a0 | 66 20 6f 70 74 69 6f 6e 61 6c 20 43 4f 4e 56 45    52 54 20 69 73 20 73 70 65 63 69 66 69 65 64 20 | f.optional.CONVERT.is.specified. | 
| 1b4c0 | 69 74 20 6d 61 79 20 73 70 65 63 69 66 79 20 61    20 63 6f 6e 76 65 72 73 69 6f 6e 2c 0a 63 75 72 | it.may.specify.a.conversion,.cur | 
| 1b4e0 | 72 65 6e 74 6c 79 20 73 75 70 70 6f 72 74 65 64    20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 | rently.supported.conversions.are | 
| 1b500 | 3a 0a 0a 20 3a 74 69 6d 65 20 2d 20 74 6f 20 63    6f 6e 76 65 72 74 20 61 20 74 69 6d 65 20 76 61 | :...:time.-.to.convert.a.time.va | 
| 1b520 | 6c 75 65 20 70 72 6f 70 65 72 6c 79 22 0a 20 20    28 6c 65 74 2a 20 28 28 6b 65 79 20 28 69 66 20 | lue.properly"...(let*.((key.(if. | 
| 1b540 | 28 73 79 6d 62 6f 6c 70 20 6e 61 6d 65 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (symbolp.name).................. | 
| 1b560 | 20 28 69 6e 74 65 72 6e 20 28 64 6f 77 6e 63 61    73 65 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65 20 | .(intern.(downcase.(symbol-name. | 
| 1b580 | 6e 61 6d 65 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 6e 61 6d 65 29 29 0a 20 | name))).................name)).. | 
| 1b5a0 | 20 20 20 20 20 20 20 20 28 68 64 72 20 28 70 72    6f 63 65 73 73 2d 67 65 74 0a 20 20 20 20 20 20 | ........(hdr.(process-get....... | 
| 1b5c0 | 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .........httpcon................ | 
| 1b5e0 | 28 69 66 20 28 73 79 6d 62 6f 6c 70 20 6b 65 79    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (if.(symbolp.key)............... | 
| 1b600 | 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 68 65 61 64 65 72 2d 73 79 6d 73 0a 20 20 | .....:elnode-http-header-syms... | 
| 1b620 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 | ...............:elnode-http-head | 
| 1b640 | 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 28    76 61 6c 20 28 63 64 72 20 28 61 73 73 6f 63 20 | er)))..........(val.(cdr.(assoc. | 
| 1b660 | 6b 65 79 20 68 64 72 29 29 29 29 0a 20 20 20 20    28 63 61 73 65 20 63 6f 6e 76 65 72 74 0a 20 20 | key.hdr)))).....(case.convert... | 
| 1b680 | 20 20 20 20 28 3a 74 69 6d 65 0a 20 20 20 20 20    20 20 28 77 68 65 6e 20 76 61 6c 0a 20 20 20 20 | ....(:time........(when.val..... | 
| 1b6a0 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 74 69 6d    65 2d 65 6e 63 6f 64 65 20 76 61 6c 29 29 29 0a | .....(elnode-time-encode.val))). | 
| 1b6c0 | 20 20 20 20 20 20 28 74 0a 20 20 20 20 20 20 20    76 61 6c 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a | ......(t........val))))..(defun* | 
| 1b6e0 | 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 6f 73    74 20 28 68 74 74 70 63 6f 6e 20 26 6b 65 79 20 | .elnode-http-host.(httpcon.&key. | 
| 1b700 | 73 70 6c 69 74 20 6a 75 73 74 2d 68 6f 73 74 29    0a 20 20 22 52 65 74 75 72 6e 20 74 68 65 20 48 | split.just-host)..."Return.the.H | 
| 1b720 | 54 54 50 20 60 68 6f 73 74 27 20 6e 61 6d 65 20    68 65 61 64 65 72 2e 0a 0a 57 69 74 68 20 53 50 | TTP.`host'.name.header...With.SP | 
| 1b740 | 4c 49 54 20 72 65 74 75 72 6e 20 61 20 6c 69 73    74 20 6f 66 20 74 68 65 20 68 6f 73 74 6e 61 6d | LIT.return.a.list.of.the.hostnam | 
| 1b760 | 65 20 61 6e 64 20 61 6e 79 20 70 6f 72 74 20 70    61 72 74 20 28 74 68 65 0a 70 6f 72 74 20 70 61 | e.and.any.port.part.(the.port.pa | 
| 1b780 | 72 74 20 6d 69 67 68 74 20 62 65 20 65 6d 70 74    79 20 69 66 20 6e 6f 74 20 73 70 65 63 69 66 69 | rt.might.be.empty.if.not.specifi | 
| 1b7a0 | 63 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 29    2e 20 20 57 69 74 68 0a 4a 55 53 54 2d 48 4f 53 | cally.specified)...With.JUST-HOS | 
| 1b7c0 | 54 20 72 65 74 75 72 6e 20 6a 75 73 74 20 74 68    65 20 68 6f 73 74 2d 6e 61 6d 65 20 70 61 72 74 | T.return.just.the.host-name.part | 
| 1b7e0 | 2c 20 64 72 6f 70 70 69 6e 67 20 61 6e 79 20 70    6f 72 74 20 65 6e 74 69 72 65 6c 79 2e 22 0a 20 | ,.dropping.any.port.entirely.".. | 
| 1b800 | 20 28 6c 65 74 20 28 28 68 6f 73 74 20 28 65 6c    6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 | .(let.((host.(elnode-http-header | 
| 1b820 | 20 68 74 74 70 63 6f 6e 20 22 48 6f 73 74 22 29    29 29 0a 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 | .httpcon."Host"))).....(cond.... | 
| 1b840 | 20 20 20 28 73 70 6c 69 74 0a 20 20 20 20 20 20    20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 | ...(split........(string-match." | 
| 1b860 | 5c 5c 28 5b 5e 3a 5d 2b 5c 5c 29 5c 5c 28 3a 5c    5c 28 5b 30 2d 39 5d 2b 5c 5c 29 5c 5c 29 2a 22 | \\([^:]+\\)\\(:\\([0-9]+\\)\\)*" | 
| 1b880 | 20 68 6f 73 74 29 0a 20 20 20 20 20 20 20 28 6c    69 73 74 20 28 6d 61 74 63 68 2d 73 74 72 69 6e | .host)........(list.(match-strin | 
| 1b8a0 | 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20    31 20 68 6f 73 74 29 0a 20 20 20 20 20 20 20 20 | g-no-properties.1.host)......... | 
| 1b8c0 | 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69    6e 67 2d 6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 | .....(match-string-no-properties | 
| 1b8e0 | 20 33 20 68 6f 73 74 29 29 29 0a 20 20 20 20 20    20 28 6a 75 73 74 2d 68 6f 73 74 0a 20 20 20 20 | .3.host))).......(just-host..... | 
| 1b900 | 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68    20 22 5c 5c 28 5b 5e 3a 5d 2b 5c 5c 29 5c 5c 28 | ...(string-match."\\([^:]+\\)\\( | 
| 1b920 | 3a 5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29 5c 5c 29    2a 22 20 68 6f 73 74 29 0a 20 20 20 20 20 20 20 | :\\([0-9]+\\)\\)*".host)........ | 
| 1b940 | 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 2d 6e 6f    2d 70 72 6f 70 65 72 74 69 65 73 20 31 20 68 6f | (match-string-no-properties.1.ho | 
| 1b960 | 73 74 29 29 0a 20 20 20 20 20 20 28 74 0a 20 20    20 20 20 20 20 68 6f 73 74 29 29 29 29 0a 0a 28 | st)).......(t........host))))..( | 
| 1b980 | 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 63 6f 6f 6b 69 65 73 20 28 68 74 74 70 63 | defun.elnode-http-cookies.(httpc | 
| 1b9a0 | 6f 6e 29 0a 20 20 22 52 65 74 75 72 6e 20 74 68    65 20 6c 69 73 74 20 6f 66 20 63 6f 6f 6b 69 65 | on)..."Return.the.list.of.cookie | 
| 1b9c0 | 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68    69 73 20 48 54 54 50 43 4f 4e 2e 0a 0a 54 68 65 | s.attached.to.this.HTTPCON...The | 
| 1b9e0 | 20 6c 69 73 74 20 6f 66 20 63 6f 6f 6b 69 65 73    20 69 73 20 61 6e 20 61 6c 69 73 74 2e 22 0a 20 | .list.of.cookies.is.an.alist.".. | 
| 1ba00 | 20 28 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73    2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c | .(or....(process-get.httpcon.:el | 
| 1ba20 | 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65    2d 6c 69 73 74 29 0a 20 20 20 28 6c 65 74 2a 20 | node-http-cookie-list)....(let*. | 
| 1ba40 | 28 28 63 6f 6f 6b 69 65 2d 68 64 72 20 28 65 6c    6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 | ((cookie-hdr.(elnode-http-header | 
| 1ba60 | 20 68 74 74 70 63 6f 6e 20 22 43 6f 6f 6b 69 65    22 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 6c | .httpcon."Cookie"))...........(l | 
| 1ba80 | 73 74 20 28 77 68 65 6e 20 63 6f 6f 6b 69 65 2d    68 64 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 | st.(when.cookie-hdr............. | 
| 1baa0 | 20 20 20 20 20 28 6b 76 61 6c 69 73 74 2d 73 6f    72 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | .....(kvalist-sort.............. | 
| 1bac0 | 20 20 20 20 20 28 6d 61 70 63 61 72 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .....(mapcar.................... | 
| 1bae0 | 28 6c 61 6d 62 64 61 20 28 70 61 69 72 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (lambda.(pair).................. | 
| 1bb00 | 20 20 20 20 28 63 6f 6e 73 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....(cons....................... | 
| 1bb20 | 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69 6e    67 20 28 63 61 72 20 70 61 69 72 29 29 0a 20 20 | (url-unhex-string.(car.pair))... | 
| 1bb40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 | ....................(url-unhex-s | 
| 1bb60 | 74 72 69 6e 67 20 28 63 64 72 20 70 61 69 72 29    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | tring.(cdr.pair))))............. | 
| 1bb80 | 20 20 20 20 20 20 20 28 75 72 6c 2d 70 61 72 73    65 2d 61 72 67 73 20 63 6f 6f 6b 69 65 2d 68 64 | .......(url-parse-args.cookie-hd | 
| 1bba0 | 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 27 73 74 72 69 6e 67 2d 6c 65 | r))...................'string-le | 
| 1bbc0 | 73 73 70 29 29 29 29 0a 20 20 20 20 20 28 70 72    6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f | ssp))))......(process-put.httpco | 
| 1bbe0 | 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63    6f 6f 6b 69 65 2d 6c 69 73 74 20 6c 73 74 29 0a | n.:elnode-http-cookie-list.lst). | 
| 1bc00 | 20 20 20 20 20 6c 73 74 29 29 29 0a 0a 28 64 65    66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | .....lst)))..(defun.elnode-http- | 
| 1bc20 | 63 6f 6f 6b 69 65 20 28 68 74 74 70 63 6f 6e 20    6e 61 6d 65 20 26 6f 70 74 69 6f 6e 61 6c 20 63 | cookie.(httpcon.name.&optional.c | 
| 1bc40 | 6f 6f 6b 69 65 2d 6b 65 79 29 0a 20 20 22 52 65    74 75 72 6e 20 74 68 65 20 63 6f 6f 6b 69 65 20 | ookie-key)..."Return.the.cookie. | 
| 1bc60 | 76 61 6c 75 65 20 66 6f 72 20 48 54 54 50 43 4f    4e 20 73 70 65 63 69 66 69 65 64 20 62 79 20 4e | value.for.HTTPCON.specified.by.N | 
| 1bc80 | 41 4d 45 2e 0a 0a 54 68 65 20 63 6f 6f 6b 69 65    20 69 73 20 61 20 63 6f 6e 73 3a 0a 0a 20 20 6e | AME...The.cookie.is.a.cons:....n | 
| 1bca0 | 61 6d 65 20 2e 20 76 61 6c 75 65 0a 0a 49 66 20    43 4f 4f 4b 49 45 2d 4b 45 59 20 69 73 20 60 74 | ame...value..If.COOKIE-KEY.is.`t | 
| 1bcc0 | 27 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20    76 61 6c 75 65 20 69 73 20 72 65 74 75 72 6e 65 | '.then.only.the.value.is.returne | 
| 1bce0 | 64 2c 20 65 6c 73 65 20 74 68 65 0a 63 6f 6e 73    20 69 73 20 72 65 74 75 72 6e 65 64 2e 22 0a 20 | d,.else.the.cons.is.returned.".. | 
| 1bd00 | 20 28 6c 65 74 2a 20 28 28 63 6f 6f 6b 69 65 2d    6c 69 73 74 20 28 65 6c 6e 6f 64 65 2d 68 74 74 | .(let*.((cookie-list.(elnode-htt | 
| 1bd20 | 70 2d 63 6f 6f 6b 69 65 73 20 68 74 74 70 63 6f    6e 29 29 0a 20 20 20 20 20 20 20 20 20 28 63 6f | p-cookies.httpcon))..........(co | 
| 1bd40 | 6f 6b 69 65 20 28 61 73 73 6f 63 2d 73 74 72 69    6e 67 20 6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6c | okie.(assoc-string.name.cookie-l | 
| 1bd60 | 69 73 74 29 29 29 0a 20 20 20 20 28 69 66 20 63    6f 6f 6b 69 65 2d 6b 65 79 0a 20 20 20 20 20 20 | ist))).....(if.cookie-key....... | 
| 1bd80 | 20 20 28 63 64 72 20 63 6f 6f 6b 69 65 29 0a 20    20 20 20 20 20 20 20 63 6f 6f 6b 69 65 29 29 29 | ..(cdr.cookie).........cookie))) | 
| 1bda0 | 0a 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 73 74 61 | ...(defun.elnode--http-parse-sta | 
| 1bdc0 | 74 75 73 20 28 68 74 74 70 63 6f 6e 20 26 6f 70    74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 29 | tus.(httpcon.&optional.property) | 
| 1bde0 | 0a 20 20 22 50 61 72 73 65 20 74 68 65 20 73 74    61 74 75 73 20 6c 69 6e 65 20 6f 66 20 48 54 54 | ..."Parse.the.status.line.of.HTT | 
| 1be00 | 50 43 4f 4e 2e 0a 0a 49 66 20 50 52 4f 50 45 52    54 59 20 69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 74 | PCON...If.PROPERTY.is.non-nil,.t | 
| 1be20 | 68 65 6e 20 72 65 74 75 72 6e 20 74 68 61 74 20    70 72 6f 70 65 72 74 79 2e 22 0a 20 20 28 6c 65 | hen.return.that.property."...(le | 
| 1be40 | 74 2a 20 28 28 68 74 74 70 2d 6c 69 6e 65 20 28    70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 | t*.((http-line.(process-get.http | 
| 1be60 | 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 73 74 61 74 75 73 29 29 0a 20 20 20 20 20 20 | con.:elnode-http-status))....... | 
| 1be80 | 20 20 20 28 6d 65 74 68 6f 64 2d 72 65 67 65 78    20 28 6d 61 70 63 6f 6e 63 61 74 0a 20 20 20 20 | ...(method-regex.(mapconcat..... | 
| 1bea0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 27 69 64 65 6e 74 69 74 79 0a 20 20 | ....................'identity... | 
| 1bec0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 6c 69 73 74 20 22 47 45 54 | ......................(list."GET | 
| 1bee0 | 22 20 22 50 4f 53 54 22 20 22 48 45 41 44 22 20    22 44 45 4c 45 54 45 22 20 22 50 55 54 22 29 0a | "."POST"."HEAD"."DELETE"."PUT"). | 
| 1bf00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 22 5c 5c 7c 22 29 29 29 | ........................"\\|"))) | 
| 1bf20 | 0a 20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68    2d 64 61 74 61 0a 20 20 20 20 20 20 28 73 74 72 | .....(save-match-data.......(str | 
| 1bf40 | 69 6e 67 2d 6d 61 74 63 68 20 28 66 6f 72 6d 61    74 20 22 5c 5c 28 25 73 5c 5c 29 20 5c 5c 28 2e | ing-match.(format."\\(%s\\).\\(. | 
| 1bf60 | 2a 5c 5c 29 20 48 54 54 50 2f 5c 5c 28 31 2e 5b    30 31 5d 5c 5c 29 22 0a 20 20 20 20 20 20 20 20 | *\\).HTTP/\\(1.[01]\\)"......... | 
| 1bf80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 6d 65 74 68 6f 64 2d 72 65 67 65 78 | ....................method-regex | 
| 1bfa0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 68 74 74 70 2d 6c 69 6e 65 29 | ).....................http-line) | 
| 1bfc0 | 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d    70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e | .......(process-put.httpcon.:eln | 
| 1bfe0 | 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 20    28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 | ode-http-method.(match-string.1. | 
| 1c000 | 68 74 74 70 2d 6c 69 6e 65 29 29 0a 20 20 20 20    20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 | http-line)).......(process-put.h | 
| 1c020 | 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 72 65 73 6f 75 72 63 65 20 28 6d 61 | ttpcon.:elnode-http-resource.(ma | 
| 1c040 | 74 63 68 2d 73 74 72 69 6e 67 20 32 20 68 74 74    70 2d 6c 69 6e 65 29 29 0a 20 20 20 20 20 20 28 | tch-string.2.http-line)).......( | 
| 1c060 | 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70    63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 | process-put.httpcon.:elnode-http | 
| 1c080 | 2d 76 65 72 73 69 6f 6e 20 28 6d 61 74 63 68 2d    73 74 72 69 6e 67 20 33 20 68 74 74 70 2d 6c 69 | -version.(match-string.3.http-li | 
| 1c0a0 | 6e 65 29 29 29 0a 20 20 20 20 28 69 66 20 70 72    6f 70 65 72 74 79 0a 20 20 20 20 20 20 20 20 28 | ne))).....(if.property.........( | 
| 1c0c0 | 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70    63 6f 6e 20 70 72 6f 70 65 72 74 79 29 29 29 29 | process-get.httpcon.property)))) | 
| 1c0e0 | 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d    2d 68 74 74 70 2d 70 61 72 73 65 2d 72 65 73 6f | ..(defun.elnode--http-parse-reso | 
| 1c100 | 75 72 63 65 20 28 68 74 74 70 63 6f 6e 20 26 6f    70 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 | urce.(httpcon.&optional.property | 
| 1c120 | 29 0a 20 20 22 43 6f 6e 76 65 72 74 20 74 68 65    20 73 70 65 63 69 66 69 65 64 20 72 65 73 6f 75 | )..."Convert.the.specified.resou | 
| 1c140 | 72 63 65 20 74 6f 20 61 20 70 61 74 68 20 61 6e    64 20 61 20 71 75 65 72 79 2e 22 0a 20 20 28 6c | rce.to.a.path.and.a.query."...(l | 
| 1c160 | 65 74 20 28 28 72 65 73 6f 75 72 63 65 0a 20 20    20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20 20 | et.((resource..........(or...... | 
| 1c180 | 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65    74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 | .....(process-get.httpcon.:elnod | 
| 1c1a0 | 65 2d 68 74 74 70 2d 72 65 73 6f 75 72 63 65 29    0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f | e-http-resource)...........(elno | 
| 1c1c0 | 64 65 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 73    74 61 74 75 73 0a 20 20 20 20 20 20 20 20 20 20 | de--http-parse-status........... | 
| 1c1e0 | 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65    2d 68 74 74 70 2d 72 65 73 6f 75 72 63 65 29 29 | .httpcon.:elnode-http-resource)) | 
| 1c200 | 29 29 0a 20 20 20 20 28 73 61 76 65 2d 6d 61 74    63 68 2d 64 61 74 61 0a 20 20 20 20 20 20 28 69 | )).....(save-match-data.......(i | 
| 1c220 | 66 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20    20 3b 3b 20 72 6f 6f 74 20 70 61 74 74 65 72 6e | f.(or............;;.root.pattern | 
| 1c240 | 20 77 69 74 68 20 0a 20 20 20 20 20 20 20 20 20    20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 | .with.............(string-match. | 
| 1c260 | 22 5e 5c 5c 28 2f 5c 5c 29 5c 5c 28 5c 5c 3f 2e    2a 5c 5c 29 2a 24 22 20 72 65 73 6f 75 72 63 65 | "^\\(/\\)\\(\\?.*\\)*$".resource | 
| 1c280 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    2f 73 6f 6d 65 70 61 74 68 20 6f 72 20 2f 73 6f | )............;;./somepath.or./so | 
| 1c2a0 | 6d 65 70 61 74 68 2f 73 6f 6d 65 70 61 74 68 0a    20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 | mepath/somepath............(stri | 
| 1c2c0 | 6e 67 2d 6d 61 74 63 68 20 22 5e 5c 5c 28 2f 5b    5e 3f 5d 2b 5c 5c 29 5c 5c 28 5c 5c 3f 2e 2a 5c | ng-match."^\\(/[^?]+\\)\\(\\?.*\ | 
| 1c2e0 | 5c 29 2a 24 22 20 72 65 73 6f 75 72 63 65 29 29    0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 | \)*$".resource))...........(let. | 
| 1c300 | 28 28 70 61 74 68 20 28 75 72 6c 2d 75 6e 68 65    78 2d 73 74 72 69 6e 67 20 28 6d 61 74 63 68 2d | ((path.(url-unhex-string.(match- | 
| 1c320 | 73 74 72 69 6e 67 20 31 20 72 65 73 6f 75 72 63    65 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | string.1.resource))))........... | 
| 1c340 | 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68    74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 | ..(process-put.httpcon.:elnode-h | 
| 1c360 | 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 70 61 74    68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 | ttp-pathinfo.path).............( | 
| 1c380 | 77 68 65 6e 20 28 6d 61 74 63 68 2d 73 74 72 69    6e 67 20 32 20 72 65 73 6f 75 72 63 65 29 0a 20 | when.(match-string.2.resource).. | 
| 1c3a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65    74 20 28 28 71 75 65 72 79 20 28 6d 61 74 63 68 | .............(let.((query.(match | 
| 1c3c0 | 2d 73 74 72 69 6e 67 20 32 20 72 65 73 6f 75 72    63 65 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | -string.2.resource)))........... | 
| 1c3e0 | 20 20 20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61    74 63 68 20 22 5c 5c 3f 5c 5c 28 2e 2b 5c 5c 29 | ......(string-match."\\?\\(.+\\) | 
| 1c400 | 22 20 71 75 65 72 79 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 69 66 20 28 6d 61 | ".query).................(if.(ma | 
| 1c420 | 74 63 68 2d 73 74 72 69 6e 67 20 31 20 71 75 65    72 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | tch-string.1.query)............. | 
| 1c440 | 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73    2d 70 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 | ........(process-put............ | 
| 1c460 | 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f    6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..........httpcon............... | 
| 1c480 | 20 20 20 20 20 20 20 3a 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 71 75 65 72 79 0a 20 20 20 20 20 20 | .......:elnode-http-query....... | 
| 1c4a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 71 | ...............(match-string.1.q | 
| 1c4c0 | 75 65 72 79 29 29 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 3b 3b 20 45 6c 73 65 20 69 74 20 | uery))))))...........;;.Else.it. | 
| 1c4e0 | 6d 69 67 68 74 20 62 65 20 61 20 6d 6f 72 65 20    65 78 6f 74 69 63 20 70 61 74 68 0a 20 20 20 20 | might.be.a.more.exotic.path..... | 
| 1c500 | 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70    75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f | ......(process-put.httpcon.:elno | 
| 1c520 | 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f    20 72 65 73 6f 75 72 63 65 29 29 29 29 0a 20 20 | de-http-pathinfo.resource))))... | 
| 1c540 | 28 69 66 20 70 72 6f 70 65 72 74 79 0a 20 20 20    20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 | (if.property.......(process-get. | 
| 1c560 | 68 74 74 70 63 6f 6e 20 70 72 6f 70 65 72 74 79    29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f | httpcon.property)))..(defun.elno | 
| 1c580 | 64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f    20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47 65 | de-http-pathinfo.(httpcon)..."Ge | 
| 1c5a0 | 74 20 74 68 65 20 50 41 54 48 49 4e 46 4f 20 6f    66 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a | t.the.PATHINFO.of.the.request... | 
| 1c5c0 | 54 68 65 20 50 41 54 48 49 4e 46 4f 20 69 73 20    74 68 65 20 43 47 49 20 74 65 72 6d 20 66 6f 72 | The.PATHINFO.is.the.CGI.term.for | 
| 1c5e0 | 20 74 68 65 20 70 61 72 74 20 6f 66 20 74 68 65    20 70 61 74 68 20 74 68 61 74 20 69 73 20 6e 6f | .the.part.of.the.path.that.is.no | 
| 1c600 | 74 0a 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 6f    72 20 74 68 65 20 71 75 65 72 79 3b 20 74 68 65 | t.the.hostname.or.the.query;.the | 
| 1c620 | 20 70 61 72 74 20 74 68 61 74 20 72 65 6c 61 74    65 73 20 74 6f 20 74 68 65 20 70 61 74 68 2e 22 | .part.that.relates.to.the.path." | 
| 1c640 | 0a 20 20 28 6f 72 0a 20 20 20 28 70 72 6f 63 65    73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a | ...(or....(process-get.httpcon.: | 
| 1c660 | 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68    69 6e 66 6f 29 0a 20 20 20 28 65 6c 6e 6f 64 65 | elnode-http-pathinfo)....(elnode | 
| 1c680 | 2d 2d 68 74 74 70 2d 70 61 72 73 65 2d 72 65 73    6f 75 72 63 65 20 68 74 74 70 63 6f 6e 20 3a 65 | --http-parse-resource.httpcon.:e | 
| 1c6a0 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69    6e 66 6f 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 | lnode-http-pathinfo)))..(defun.e | 
| 1c6c0 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 71 75 65 72 79    20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47 65 | lnode-http-query.(httpcon)..."Ge | 
| 1c6e0 | 74 20 74 68 65 20 51 55 45 52 59 20 6f 66 20 74    68 65 20 72 65 71 75 65 73 74 2e 22 0a 20 20 28 | t.the.QUERY.of.the.request."...( | 
| 1c700 | 6f 72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67    65 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f | or....(process-get.httpcon.:elno | 
| 1c720 | 64 65 2d 68 74 74 70 2d 71 75 65 72 79 29 0a 20    20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d | de-http-query)....(elnode--http- | 
| 1c740 | 70 61 72 73 65 2d 72 65 73 6f 75 72 63 65 20 68    74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 | parse-resource.httpcon.:elnode-h | 
| 1c760 | 74 74 70 2d 71 75 65 72 79 29 29 29 0a 0a 28 64    65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 | ttp-query)))..(defun.elnode--htt | 
| 1c780 | 70 2d 70 61 72 61 6d 2d 70 61 72 74 2d 64 65 63    6f 64 65 20 28 70 61 72 61 6d 2d 74 68 69 6e 67 | p-param-part-decode.(param-thing | 
| 1c7a0 | 29 0a 20 20 22 44 65 63 6f 64 65 20 61 6e 20 48    54 54 50 20 55 52 4c 20 70 61 72 61 6d 65 74 65 | )..."Decode.an.HTTP.URL.paramete | 
| 1c7c0 | 72 20 70 61 72 74 2e 0a 0a 46 6f 72 20 65 78 61    6d 70 6c 65 20 69 6e 3a 0a 0a 20 68 74 74 70 3a | r.part...For.example.in:...http: | 
| 1c7e0 | 2f 2f 6e 69 63 2e 66 65 72 72 69 65 72 2e 6d 65    2e 75 6b 2f 62 6c 6f 67 2f 65 6c 6e 6f 64 65 2f | //nic.ferrier.me.uk/blog/elnode/ | 
| 1c800 | 3f 70 3d 31 30 26 61 2b 63 3d 32 30 26 64 3d 78    2b 79 26 7a 3d 74 68 69 73 25 32 30 69 73 25 30 | ?p=10&a+c=20&d=x+y&z=this%20is%0 | 
| 1c820 | 39 6d 65 2b 61 6e 64 25 32 30 74 68 69 73 0a 0a    54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 | 9me+and%20this..The.following.ar | 
| 1c840 | 65 20 70 61 72 61 6d 20 70 61 72 74 73 20 61 6e    64 20 74 68 65 20 64 65 63 6f 64 69 6e 67 20 74 | e.param.parts.and.the.decoding.t | 
| 1c860 | 68 61 74 20 74 68 69 73 20 66 75 6e 63 74 69 6f    6e 0a 77 69 6c 6c 20 64 6f 3a 0a 0a 20 5c 22 70 | hat.this.function.will.do:...\"p | 
| 1c880 | 5c 22 20 2d 3e 20 20 5c 22 70 5c 22 0a 0a 20 5c    22 31 30 5c 22 20 2d 3e 20 5c 22 31 30 5c 22 0a | \".->..\"p\"...\"10\".->.\"10\". | 
| 1c8a0 | 0a 20 5c 22 61 2b 63 5c 22 20 2d 3e 20 5c 22 61    20 63 5c 22 20 2d 20 61 6e 20 65 78 61 6d 70 6c | ..\"a+c\".->.\"a.c\".-.an.exampl | 
| 1c8c0 | 65 20 6f 66 20 2b 20 65 6e 63 6f 64 69 6e 67 0a    0a 20 5c 22 64 5c 22 20 2d 3e 20 5c 22 64 5c 22 | e.of.+.encoding...\"d\".->.\"d\" | 
| 1c8e0 | 0a 0a 20 5c 22 78 2b 79 5c 22 20 2d 3e 20 5c 22    78 20 79 5c 22 20 2d 20 61 6e 6f 74 68 65 72 20 | ...\"x+y\".->.\"x.y\".-.another. | 
| 1c900 | 65 78 61 6d 70 6c 65 20 6f 66 20 2b 20 65 6e 63    6f 64 69 6e 67 2c 20 69 6e 20 61 20 70 61 72 61 | example.of.+.encoding,.in.a.para | 
| 1c920 | 6d 65 74 65 72 20 6e 61 6d 65 0a 0a 20 5c 22 7a    5c 22 20 2d 3e 20 5c 22 7a 5c 22 0a 0a 20 5c 22 | meter.name...\"z\".->.\"z\"...\" | 
| 1c940 | 74 68 69 73 25 32 30 69 73 25 30 39 6d 65 2b 61    6e 64 25 32 30 74 68 69 73 5c 22 20 2d 3e 20 5c | this%20is%09me+and%20this\".->.\ | 
| 1c960 | 22 74 68 69 73 20 69 73 5c 74 6d 65 20 61 6e 64    20 74 68 69 73 5c 22 20 2d 0a 20 70 65 72 63 65 | "this.is\tme.and.this\".-..perce | 
| 1c980 | 6e 74 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64 20    70 6c 75 73 20 65 6e 63 6f 64 69 6e 67 22 0a 20 | nt.encoding.and.plus.encoding".. | 
| 1c9a0 | 20 28 75 72 6c 2d 75 6e 68 65 78 2d 73 74 72 69    6e 67 20 28 72 65 70 6c 61 63 65 2d 72 65 67 65 | .(url-unhex-string.(replace-rege | 
| 1c9c0 | 78 70 2d 69 6e 2d 73 74 72 69 6e 67 20 22 5c 5c    2b 22 20 22 20 22 20 70 61 72 61 6d 2d 74 68 69 | xp-in-string."\\+".".".param-thi | 
| 1c9e0 | 6e 67 29 20 27 74 29 0a 20 20 29 0a 0a 28 64 65    66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 | ng).'t)...)..(defun.elnode--http | 
| 1ca00 | 2d 71 75 65 72 79 2d 74 6f 2d 61 6c 69 73 74 20    28 71 75 65 72 79 29 0a 20 20 22 43 72 61 70 20 | -query-to-alist.(query)..."Crap. | 
| 1ca20 | 70 61 72 73 65 72 20 66 6f 72 20 48 54 54 50 20    51 55 45 52 59 20 64 61 74 61 2e 0a 0a 52 65 74 | parser.for.HTTP.QUERY.data...Ret | 
| 1ca40 | 75 72 6e 73 20 61 6e 20 61 73 73 6f 63 69 61 74    69 6f 6e 20 6c 69 73 74 2e 22 0a 20 20 28 6c 65 | urns.an.association.list."...(le | 
| 1ca60 | 74 20 28 28 61 6c 69 73 74 20 28 6d 61 70 63 61    72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | t.((alist.(mapcar............... | 
| 1ca80 | 20 20 28 6c 61 6d 62 64 61 20 28 6e 76 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..(lambda.(nv).................. | 
| 1caa0 | 20 28 69 66 20 28 73 74 72 69 6e 67 2d 6d 61 74    63 68 20 22 5c 5c 28 5b 5e 3d 5d 2b 5c 5c 29 5c | .(if.(string-match."\\([^=]+\\)\ | 
| 1cac0 | 5c 28 3d 5c 5c 28 2e 2a 5c 5c 29 5c 5c 29 2a 22    20 6e 76 29 0a 20 20 20 20 20 20 20 20 20 20 20 | \(=\\(.*\\)\\)*".nv)............ | 
| 1cae0 | 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........(cons................ | 
| 1cb00 | 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d    2d 68 74 74 70 2d 70 61 72 61 6d 2d 70 61 72 74 | ........(elnode--http-param-part | 
| 1cb20 | 2d 64 65 63 6f 64 65 20 28 6d 61 74 63 68 2d 73    74 72 69 6e 67 20 31 20 6e 76 29 29 0a 20 20 20 | -decode.(match-string.1.nv)).... | 
| 1cb40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 69 66 20 28 6d 61 74 63 68 2d 73 | ....................(if.(match-s | 
| 1cb60 | 74 72 69 6e 67 20 32 20 6e 76 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | tring.2.nv)..................... | 
| 1cb80 | 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d    68 74 74 70 2d 70 61 72 61 6d 2d 70 61 72 74 2d | .......(elnode--http-param-part- | 
| 1cba0 | 64 65 63 6f 64 65 20 28 6d 61 74 63 68 2d 73 74    72 69 6e 67 20 33 20 6e 76 29 29 0a 20 20 20 20 | decode.(match-string.3.nv))..... | 
| 1cbc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 6e 69 6c 29 29 29 29 0a 20 20 20 | .....................nil)))).... | 
| 1cbe0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 70    6c 69 74 2d 73 74 72 69 6e 67 20 71 75 65 72 79 | .............(split-string.query | 
| 1cc00 | 20 22 26 22 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 29 29 0a 20 20 20 20 61 6c 69 | ."&"))................)).....ali | 
| 1cc20 | 73 74 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e    6f 64 65 2d 2d 61 6c 69 73 74 2d 6d 65 72 67 65 | st))..(defun.elnode--alist-merge | 
| 1cc40 | 20 28 61 20 62 20 26 6f 70 74 69 6f 6e 61 6c 20    6f 70 65 72 61 74 6f 72 29 0a 20 20 22 4d 65 72 | .(a.b.&optional.operator)..."Mer | 
| 1cc60 | 67 65 20 74 77 6f 20 61 73 73 6f 63 69 61 74 69    6f 6e 20 6c 69 73 74 73 20 6e 6f 6e 2d 64 65 73 | ge.two.association.lists.non-des | 
| 1cc80 | 74 72 75 63 74 69 76 65 6c 79 2e 0a 0a 41 20 69    73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 | tructively...A.is.considered.the | 
| 1cca0 | 20 70 72 69 6f 72 69 74 79 20 28 69 74 73 20 65    6c 65 6d 65 6e 74 73 20 67 6f 20 69 6e 20 66 69 | .priority.(its.elements.go.in.fi | 
| 1ccc0 | 72 73 74 29 2e 22 0a 20 20 28 69 66 20 28 6e 6f    74 20 6f 70 65 72 61 74 6f 72 29 0a 20 20 20 20 | rst)."...(if.(not.operator)..... | 
| 1cce0 | 20 20 28 73 65 74 71 20 6f 70 65 72 61 74 6f 72    20 27 61 73 73 71 29 29 0a 20 20 28 6c 65 74 2a | ..(setq.operator.'assq))...(let* | 
| 1cd00 | 20 28 28 72 65 73 20 27 28 29 29 29 0a 20 20 20    20 28 6c 65 74 20 28 28 6c 73 74 20 28 61 70 70 | .((res.'())).....(let.((lst.(app | 
| 1cd20 | 65 6e 64 20 61 20 62 29 29 29 0a 20 20 20 20 20    20 28 77 68 69 6c 65 20 6c 73 74 0a 20 20 20 20 | end.a.b))).......(while.lst..... | 
| 1cd40 | 20 20 20 20 28 6c 65 74 20 28 28 69 74 65 6d 20    28 63 61 72 2d 73 61 66 65 20 6c 73 74 29 29 29 | ....(let.((item.(car-safe.lst))) | 
| 1cd60 | 0a 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71    20 6c 73 74 20 28 63 64 72 2d 73 61 66 65 20 6c | ...........(setq.lst.(cdr-safe.l | 
| 1cd80 | 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    6c 65 74 2a 20 28 28 6b 65 79 20 28 63 61 72 20 | st))...........(let*.((key.(car. | 
| 1cda0 | 69 74 65 6d 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 61 76 61 6c 20 28 66 | item))..................(aval.(f | 
| 1cdc0 | 75 6e 63 61 6c 6c 20 6f 70 65 72 61 74 6f 72 20    6b 65 79 20 61 29 29 0a 20 20 20 20 20 20 20 20 | uncall.operator.key.a))......... | 
| 1cde0 | 20 20 20 20 20 20 20 20 20 28 62 76 61 6c 20 28    66 75 6e 63 61 6c 6c 20 6f 70 65 72 61 74 6f 72 | .........(bval.(funcall.operator | 
| 1ce00 | 20 6b 65 79 20 62 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 | .key.b))).............(if.(not.( | 
| 1ce20 | 66 75 6e 63 61 6c 6c 20 6f 70 65 72 61 74 6f 72    20 6b 65 79 20 72 65 73 29 29 0a 20 20 20 20 20 | funcall.operator.key.res))...... | 
| 1ce40 | 20 20 20 20 20 20 20 20 20 20 20 28 73 65 74 71    20 72 65 73 20 28 63 6f 6e 73 0a 20 20 20 20 20 | ...........(setq.res.(cons...... | 
| 1ce60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 61 | ......................(if.(and.a | 
| 1ce80 | 76 61 6c 20 62 76 61 6c 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | val.bval)....................... | 
| 1cea0 | 20 20 20 20 20 20 20 20 20 3b 3b 20 74 68 65 20    69 74 65 6d 20 69 73 20 69 6e 20 62 6f 74 68 20 | .........;;.the.item.is.in.both. | 
| 1cec0 | 6c 69 73 74 73 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | lists........................... | 
| 1cee0 | 20 20 20 20 20 28 63 6f 6e 73 20 28 63 61 72 20    69 74 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 | .....(cons.(car.item)........... | 
| 1cf00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 | ...........................(list | 
| 1cf20 | 20 28 63 64 72 20 61 76 61 6c 29 20 28 63 64 72    20 62 76 61 6c 29 29 29 0a 20 20 20 20 20 20 20 | .(cdr.aval).(cdr.bval)))........ | 
| 1cf40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 69 74 65 6d 29 0a 20 20 20 20 | ......................item)..... | 
| 1cf60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 72 65 73 29 29 29 29 29 29 | .......................res)))))) | 
| 1cf80 | 0a 20 20 20 20 20 20 20 20 72 65 73 29 29 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d | .........res)))..(defun.elnode-- | 
| 1cfa0 | 68 74 74 70 2d 6d 70 2d 66 69 6e 64 2d 62 6f 75    6e 64 61 72 79 20 28 62 6f 75 6e 64 61 72 79 29 | http-mp-find-boundary.(boundary) | 
| 1cfc0 | 0a 20 20 22 46 69 6e 64 20 74 68 65 20 62 6f 75    6e 64 61 72 79 20 73 74 72 69 6e 67 20 66 72 6f | ..."Find.the.boundary.string.fro | 
| 1cfe0 | 6d 20 70 6f 69 6e 74 2e 22 0a 20 20 28 6c 65 74    20 28 28 62 6f 75 6e 64 61 72 79 2d 72 78 0a 20 | m.point."...(let.((boundary-rx.. | 
| 1d000 | 20 20 20 20 20 20 20 20 28 72 78 2d 74 6f 2d 73    74 72 69 6e 67 20 60 28 73 65 71 20 22 5c 72 5c | ........(rx-to-string.`(seq."\r\ | 
| 1d020 | 6e 2d 2d 22 20 2c 62 6f 75 6e 64 61 72 79 29 29    29 29 0a 20 20 20 20 28 73 61 76 65 2d 6d 61 74 | n--".,boundary)))).....(save-mat | 
| 1d040 | 63 68 2d 64 61 74 61 0a 20 20 20 20 20 20 28 77    68 65 6e 20 28 72 65 2d 73 65 61 72 63 68 2d 66 | ch-data.......(when.(re-search-f | 
| 1d060 | 6f 72 77 61 72 64 20 62 6f 75 6e 64 61 72 79 2d    72 78 20 6e 69 6c 20 74 29 0a 20 20 20 20 20 20 | orward.boundary-rx.nil.t)....... | 
| 1d080 | 20 20 28 6c 65 74 20 28 28 6d 70 74 20 28 6d 61    74 63 68 2d 62 65 67 69 6e 6e 69 6e 67 20 30 29 | ..(let.((mpt.(match-beginning.0) | 
| 1d0a0 | 29 29 0a 20 20 20 20 20 20 20 20 20 20 3b 3b 20    52 65 74 75 72 6e 20 73 74 61 74 75 73 20 69 6e | ))...........;;.Return.status.in | 
| 1d0c0 | 64 69 63 61 74 6f 72 20 61 6e 64 20 74 68 65 20    73 74 61 72 74 20 6d 61 74 63 68 20 70 6f 69 6e | dicator.and.the.start.match.poin | 
| 1d0e0 | 74 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73    74 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 66 | t...........(list............(if | 
| 1d100 | 20 28 73 61 76 65 2d 65 78 63 75 72 73 69 6f 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(save-excursion................ | 
| 1d120 | 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28 6c 69    6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d 70 6f 73 | ..(goto-char.(line-beginning-pos | 
| 1d140 | 69 74 69 6f 6e 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6c 6f 6f 6b 69 6e | ition))..................(lookin | 
| 1d160 | 67 2d 61 74 20 28 72 78 2d 74 6f 2d 73 74 72 69    6e 67 20 60 28 73 65 71 20 62 6f 6c 20 22 2d 2d | g-at.(rx-to-string.`(seq.bol."-- | 
| 1d180 | 22 20 2c 62 6f 75 6e 64 61 72 79 20 22 2d 2d 22    29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | ".,boundary."--"))))............ | 
| 1d1a0 | 20 20 20 20 3a 64 6f 6e 65 20 3a 63 6f 6e 74 69    6e 75 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 | ....:done.:continue)............ | 
| 1d1c0 | 28 70 72 6f 67 6e 20 28 67 6f 74 6f 2d 63 68 61    72 20 6d 70 74 29 20 6d 70 74 29 29 29 29 29 29 | (progn.(goto-char.mpt).mpt)))))) | 
| 1d1e0 | 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 2d 68 74 74 70 2d 6d 70 2d 64 65 63 6f 64 65 | )..(defun.elnode--http-mp-decode | 
| 1d200 | 20 28 62 75 66 66 65 72 20 68 65 61 64 65 72 2d    65 6e 64 2d 70 74 20 62 6f 75 6e 64 61 72 79 29 | .(buffer.header-end-pt.boundary) | 
| 1d220 | 0a 20 20 22 44 65 63 6f 64 65 20 61 20 6d 75 6c    74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 61 74 61 | ..."Decode.a.multipart/form-data | 
| 1d240 | 20 75 70 6c 6f 61 64 20 77 69 74 68 20 42 4f 55    4e 44 41 52 59 20 69 6e 20 42 55 46 46 45 52 2e | .upload.with.BOUNDARY.in.BUFFER. | 
| 1d260 | 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e    74 2d 62 75 66 66 65 72 20 62 75 66 66 65 72 0a | "...(with-current-buffer.buffer. | 
| 1d280 | 20 20 20 20 28 67 6f 74 6f 2d 63 68 61 72 20 28    2d 20 68 65 61 64 65 72 2d 65 6e 64 2d 70 74 20 | ....(goto-char.(-.header-end-pt. | 
| 1d2a0 | 32 29 29 20 3b 20 6d 6f 76 65 73 20 62 61 63 6b    20 6f 76 65 72 20 74 68 65 20 5c 72 5c 6e 0a 20 | 2)).;.moves.back.over.the.\r\n.. | 
| 1d2c0 | 20 20 20 28 6c 6f 6f 70 20 77 68 69 6c 65 20 28    65 71 20 28 63 61 72 20 6e 65 78 74 2d 62 6f 75 | ...(loop.while.(eq.(car.next-bou | 
| 1d2e0 | 6e 64 61 72 79 29 20 3a 63 6f 6e 74 69 6e 75 65    29 0a 20 20 20 20 20 20 20 77 69 74 68 20 6e 65 | ndary).:continue)........with.ne | 
| 1d300 | 78 74 2d 62 6f 75 6e 64 61 72 79 20 3d 20 28 65    6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70 2d 66 | xt-boundary.=.(elnode--http-mp-f | 
| 1d320 | 69 6e 64 2d 62 6f 75 6e 64 61 72 79 20 62 6f 75    6e 64 61 72 79 29 0a 20 20 20 20 20 20 20 63 6f | ind-boundary.boundary)........co | 
| 1d340 | 6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 28    64 65 73 74 72 75 63 74 75 72 69 6e 67 2d 62 69 | llect..........(destructuring-bi | 
| 1d360 | 6e 64 20 28 6c 65 61 64 65 72 20 61 6c 69 73 74    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | nd.(leader.alist)..............( | 
| 1d380 | 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72    73 65 2d 68 65 61 64 65 72 20 28 63 75 72 72 65 | elnode--http-parse-header.(curre | 
| 1d3a0 | 6e 74 2d 62 75 66 66 65 72 29 20 28 70 6f 69 6e    74 29 20 74 29 0a 20 20 20 20 20 20 20 20 20 20 | nt-buffer).(point).t)........... | 
| 1d3c0 | 20 28 6c 65 74 2a 20 28 28 63 64 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(let*.((cde.................... | 
| 1d3e0 | 28 6d 61 69 6c 2d 68 65 61 64 65 72 2d 70 61 72    73 65 2d 63 6f 6e 74 65 6e 74 2d 64 69 73 70 6f | (mail-header-parse-content-dispo | 
| 1d400 | 73 69 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 6b 76 61 20 | sition.....................(kva. | 
| 1d420 | 22 63 6f 6e 74 65 6e 74 2d 64 69 73 70 6f 73 69    74 69 6f 6e 22 20 61 6c 69 73 74 29 29 29 0a 20 | "content-disposition".alist))).. | 
| 1d440 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6e 61 6d 65 20 28 61 6c 69 73 74 2d 67 65 | .................(name.(alist-ge | 
| 1d460 | 74 20 27 6e 61 6d 65 20 28 63 64 72 20 63 64 65    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | t.'name.(cdr.cde)))............. | 
| 1d480 | 20 20 20 20 20 20 28 66 69 6c 65 6e 61 6d 65 20    28 61 6c 69 73 74 2d 67 65 74 20 27 66 69 6c 65 | ......(filename.(alist-get.'file | 
| 1d4a0 | 6e 61 6d 65 20 28 63 64 72 20 63 64 65 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | name.(cdr.cde)))................ | 
| 1d4c0 | 20 20 20 28 70 74 20 28 70 6f 69 6e 74 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b | ...(pt.(point)))..............;; | 
| 1d4e0 | 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 65    6e 64 20 70 6f 69 6e 74 0a 20 20 20 20 20 20 20 | .Find.the.next.end.point........ | 
| 1d500 | 20 20 20 20 20 20 28 73 65 74 71 20 6e 65 78 74    2d 62 6f 75 6e 64 61 72 79 0a 20 20 20 20 20 20 | ......(setq.next-boundary....... | 
| 1d520 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c    6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70 2d 66 69 | .............(elnode--http-mp-fi | 
| 1d540 | 6e 64 2d 62 6f 75 6e 64 61 72 79 20 62 6f 75 6e    64 61 72 79 29 29 0a 20 20 20 20 20 20 20 20 20 | nd-boundary.boundary)).......... | 
| 1d560 | 20 20 20 20 28 6c 65 74 2a 20 28 28 6c 62 70 20    28 6c 69 6e 65 2d 62 65 67 69 6e 6e 69 6e 67 2d | ....(let*.((lbp.(line-beginning- | 
| 1d580 | 70 6f 73 69 74 69 6f 6e 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | position)).....................( | 
| 1d5a0 | 63 6f 6e 74 65 6e 74 20 28 62 75 66 66 65 72 2d    73 75 62 73 74 72 69 6e 67 20 70 74 20 28 63 61 | content.(buffer-substring.pt.(ca | 
| 1d5c0 | 64 72 20 6e 65 78 74 2d 62 6f 75 6e 64 61 72 79    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | dr.next-boundary)))............. | 
| 1d5e0 | 20 20 20 20 20 20 20 20 28 63 6f 6e 74 65 6e 74    2d 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 | ........(content-data........... | 
| 1d600 | 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........(cond................ | 
| 1d620 | 20 20 20 20 20 20 20 20 28 28 6e 6f 74 20 66 69    6c 65 6e 61 6d 65 29 20 63 6f 6e 74 65 6e 74 29 | ........((not.filename).content) | 
| 1d640 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 74 20 28 70 72 6f 70 | ........................(t.(prop | 
| 1d660 | 65 72 74 69 7a 65 20 63 6f 6e 74 65 6e 74 20 3a    65 6c 6e 6f 64 65 2d 66 69 6c 65 6e 61 6d 65 20 | ertize.content.:elnode-filename. | 
| 1d680 | 66 69 6c 65 6e 61 6d 65 29 29 29 29 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f | filename)))))................(co | 
| 1d6a0 | 6e 73 20 6e 61 6d 65 20 63 6f 6e 74 65 6e 74 2d    64 61 74 61 29 29 29 29 29 29 29 0a 0a 28 64 65 | ns.name.content-data)))))))..(de | 
| 1d6c0 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 68 74 74 70    2d 70 6f 73 74 2d 6d 70 2d 64 65 63 6f 64 65 20 | fun.elnode--http-post-mp-decode. | 
| 1d6e0 | 28 68 74 74 70 63 6f 6e 20 70 61 72 73 65 64 2d    63 6f 6e 74 65 6e 74 2d 74 79 70 65 29 0a 20 20 | (httpcon.parsed-content-type)... | 
| 1d700 | 22 44 65 63 6f 64 65 20 74 68 65 20 48 54 54 50    20 50 4f 53 54 20 6d 75 6c 74 69 70 61 72 74 20 | "Decode.the.HTTP.POST.multipart. | 
| 1d720 | 74 68 69 6e 67 20 6f 6e 20 48 54 54 50 43 4f 4e    2e 22 0a 20 20 28 6c 65 74 20 28 28 62 6f 75 6e | thing.on.HTTPCON."...(let.((boun | 
| 1d740 | 64 61 72 79 20 28 61 6c 69 73 74 2d 67 65 74 20    27 62 6f 75 6e 64 61 72 79 20 28 63 64 72 20 70 | dary.(alist-get.'boundary.(cdr.p | 
| 1d760 | 61 72 73 65 64 2d 63 6f 6e 74 65 6e 74 2d 74 79    70 65 29 29 29 0a 20 20 20 20 20 20 20 20 28 62 | arsed-content-type))).........(b | 
| 1d780 | 75 66 20 28 70 72 6f 63 65 73 73 2d 62 75 66 66    65 72 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 | uf.(process-buffer.httpcon)).... | 
| 1d7a0 | 20 20 20 20 20 28 68 64 72 2d 65 6e 64 2d 70 74    20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 | .....(hdr-end-pt.(process-get.ht | 
| 1d7c0 | 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 65    61 64 65 72 2d 65 6e 64 29 29 29 0a 20 20 20 20 | tpcon.:elnode-header-end)))..... | 
| 1d7e0 | 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d 70    2d 64 65 63 6f 64 65 20 62 75 66 20 68 64 72 2d | (elnode--http-mp-decode.buf.hdr- | 
| 1d800 | 65 6e 64 2d 70 74 20 62 6f 75 6e 64 61 72 79 29    29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 | end-pt.boundary)))..(defun.elnod | 
| 1d820 | 65 2d 2d 68 74 74 70 2d 70 6f 73 74 2d 74 6f 2d    61 6c 69 73 74 20 28 68 74 74 70 63 6f 6e 29 0a | e--http-post-to-alist.(httpcon). | 
| 1d840 | 20 20 22 50 61 72 73 65 20 74 68 65 20 50 4f 53    54 20 62 6f 64 79 2e 22 0a 20 20 3b 3b 20 46 49 | .."Parse.the.POST.body."...;;.FI | 
| 1d860 | 58 4d 45 3a 20 74 68 69 73 20 69 73 20 4f 4e 4c    59 20 61 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 | XME:.this.is.ONLY.a.content.leng | 
| 1d880 | 74 68 20 68 65 61 64 65 72 20 70 61 72 73 65 72    20 2d 2d 20 69 74 20 73 68 6f 75 6c 64 0a 20 20 | th.header.parser.--.it.should... | 
| 1d8a0 | 3b 3b 20 61 6c 73 6f 20 63 6f 70 65 20 77 69 74    68 20 74 72 61 6e 73 66 65 72 20 65 6e 63 6f 64 | ;;.also.cope.with.transfer.encod | 
| 1d8c0 | 69 6e 67 73 2e 0a 20 20 28 6c 65 74 2a 20 28 28    63 6f 6e 74 65 6e 74 2d 74 79 70 65 20 28 65 6c | ings....(let*.((content-type.(el | 
| 1d8e0 | 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72    20 68 74 74 70 63 6f 6e 20 27 63 6f 6e 74 65 6e | node-http-header.httpcon.'conten | 
| 1d900 | 74 2d 74 79 70 65 29 29 0a 20 20 20 20 20 20 20    20 20 28 70 61 72 73 65 64 2d 74 79 70 65 0a 20 | t-type))..........(parsed-type.. | 
| 1d920 | 20 20 20 20 20 20 20 20 20 28 77 68 65 6e 20 63    6f 6e 74 65 6e 74 2d 74 79 70 65 0a 20 20 20 20 | .........(when.content-type..... | 
| 1d940 | 20 20 20 20 20 20 20 20 28 6d 61 69 6c 2d 68 65    61 64 65 72 2d 70 61 72 73 65 2d 63 6f 6e 74 65 | ........(mail-header-parse-conte | 
| 1d960 | 6e 74 2d 74 79 70 65 20 63 6f 6e 74 65 6e 74 2d    74 79 70 65 29 29 29 29 0a 20 20 20 20 28 69 66 | nt-type.content-type)))).....(if | 
| 1d980 | 20 28 65 71 75 61 6c 20 22 6d 75 6c 74 69 70 61    72 74 2f 66 6f 72 6d 2d 64 61 74 61 22 20 28 63 | .(equal."multipart/form-data".(c | 
| 1d9a0 | 61 72 20 70 61 72 73 65 64 2d 74 79 70 65 29 29    0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | ar.parsed-type)).........(elnode | 
| 1d9c0 | 2d 2d 68 74 74 70 2d 70 6f 73 74 2d 6d 70 2d 64    65 63 6f 64 65 20 68 74 74 70 63 6f 6e 20 70 61 | --http-post-mp-decode.httpcon.pa | 
| 1d9e0 | 72 73 65 64 2d 74 79 70 65 29 0a 20 20 20 20 20    20 20 20 3b 3b 20 45 6c 73 65 20 69 74 27 73 20 | rsed-type).........;;.Else.it's. | 
| 1da00 | 61 20 6e 6f 6e 2d 6d 75 6c 74 69 70 61 72 74 20    72 65 71 75 65 73 74 0a 20 20 20 20 20 20 20 20 | a.non-multipart.request......... | 
| 1da20 | 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 71 75    65 72 79 2d 74 6f 2d 61 6c 69 73 74 0a 20 20 20 | (elnode--http-query-to-alist.... | 
| 1da40 | 20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72    65 6e 74 2d 62 75 66 66 65 72 20 28 70 72 6f 63 | ......(with-current-buffer.(proc | 
| 1da60 | 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 70 63    6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 3b | ess-buffer.httpcon)............; | 
| 1da80 | 3b 20 28 62 75 66 66 65 72 2d 73 75 62 73 74 72    69 6e 67 20 28 70 6f 69 6e 74 2d 6d 69 6e 29 20 | ;.(buffer-substring.(point-min). | 
| 1daa0 | 28 70 6f 69 6e 74 2d 6d 61 78 29 29 20 3b 64 65    62 75 67 0a 20 20 20 20 20 20 20 20 20 20 20 28 | (point-max)).;debug............( | 
| 1dac0 | 62 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67    0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 | buffer-substring.............;;. | 
| 1dae0 | 77 65 20 6d 69 67 68 74 20 68 61 76 65 20 74 6f    20 61 64 64 20 32 20 74 6f 20 74 68 69 73 20 62 | we.might.have.to.add.2.to.this.b | 
| 1db00 | 65 63 61 75 73 65 20 6f 66 20 74 72 61 69 6c 69    6e 67 20 5c 72 5c 6e 0a 20 20 20 20 20 20 20 20 | ecause.of.trailing.\r\n......... | 
| 1db20 | 20 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 74    20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 | ....(process-get.httpcon.:elnode | 
| 1db40 | 2d 68 65 61 64 65 72 2d 65 6e 64 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 70 6f 69 6e 74 2d | -header-end).............(point- | 
| 1db60 | 6d 61 78 29 29 29 29 29 29 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 | max)))))))..(defun.elnode-http-p | 
| 1db80 | 61 72 61 6d 73 20 28 68 74 74 70 63 6f 6e 20 26    72 65 73 74 20 6e 61 6d 65 73 29 0a 20 20 22 47 | arams.(httpcon.&rest.names)..."G | 
| 1dba0 | 65 74 20 61 6e 20 61 6c 69 73 74 20 6f 66 20 74    68 65 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e | et.an.alist.of.the.parameters.in | 
| 1dbc0 | 20 74 68 65 20 72 65 71 75 65 73 74 2e 0a 0a 49    66 20 74 68 65 20 6d 65 74 68 6f 64 20 69 73 20 | .the.request...If.the.method.is. | 
| 1dbe0 | 61 20 47 45 54 20 74 68 65 6e 20 74 68 65 20 70    61 72 61 6d 65 74 65 72 73 20 61 72 65 20 66 72 | a.GET.then.the.parameters.are.fr | 
| 1dc00 | 6f 6d 20 74 68 65 20 75 72 6c 2e 20 20 49 66 0a    74 68 65 20 6d 65 74 68 6f 64 20 69 73 20 61 20 | om.the.url...If.the.method.is.a. | 
| 1dc20 | 50 4f 53 54 20 74 68 65 6e 20 74 68 65 20 70 61    72 61 6d 65 74 65 72 73 20 6d 61 79 20 63 6f 6d | POST.then.the.parameters.may.com | 
| 1dc40 | 65 20 66 72 6f 6d 20 65 69 74 68 65 72 20 74 68    65 0a 75 72 6c 20 6f 72 20 74 68 65 20 50 4f 53 | e.from.either.the.url.or.the.POS | 
| 1dc60 | 54 20 62 6f 64 79 20 6f 72 20 62 6f 74 68 3a 0a    0a 20 50 4f 53 54 20 2f 70 61 74 68 3f 61 3d 62 | T.body.or.both:...POST./path?a=b | 
| 1dc80 | 26 78 3d 79 0a 20 61 3d 63 0a 0a 77 6f 75 6c 64    20 72 65 73 75 6c 74 20 69 6e 3a 0a 0a 20 27 28 | &x=y..a=c..would.result.in:...'( | 
| 1dca0 | 28 5c 22 61 5c 22 20 5c 22 62 5c 22 20 5c 22 63    5c 22 29 28 5c 22 78 5c 22 20 2e 20 5c 22 79 5c | (\"a\".\"b\".\"c\")(\"x\"...\"y\ | 
| 1dcc0 | 22 29 29 0a 0a 49 66 20 4e 41 4d 45 53 20 61 72    65 20 73 70 65 63 69 66 69 65 64 20 69 74 20 69 | "))..If.NAMES.are.specified.it.i | 
| 1dce0 | 73 20 61 20 66 69 6c 74 65 72 20 6c 69 73 74 20    6f 66 20 73 79 6d 62 6f 6c 73 20 6f 72 20 73 74 | s.a.filter.list.of.symbols.or.st | 
| 1dd00 | 72 69 6e 67 73 0a 77 68 69 63 68 20 77 69 6c 6c    20 62 65 20 72 65 74 75 72 6e 65 64 2e 0a 0a 46 | rings.which.will.be.returned...F | 
| 1dd20 | 69 6c 65 20 75 70 6c 6f 61 64 20 77 69 74 68 20    4d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 | ile.upload.with.Multipart/form-d | 
| 1dd40 | 61 74 61 20 69 73 20 73 75 70 70 6f 72 74 65 64    20 62 79 20 45 6c 6e 6f 64 65 2e 0a 55 70 6c 6f | ata.is.supported.by.Elnode..Uplo | 
| 1dd60 | 61 64 65 64 20 66 69 6c 65 73 20 61 72 65 20 70    72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 70 61 | aded.files.are.present.in.the.pa | 
| 1dd80 | 72 61 6d 73 20 74 68 65 20 73 61 6d 65 20 61 73    20 61 6e 79 20 6f 74 68 65 72 0a 70 61 72 61 6d | rams.the.same.as.any.other.param | 
| 1dda0 | 20 65 78 63 65 70 74 20 66 6f 72 20 74 68 65 20    66 61 63 74 20 74 68 61 74 20 75 70 6c 6f 61 64 | .except.for.the.fact.that.upload | 
| 1ddc0 | 65 64 20 66 69 6c 65 20 70 61 72 61 6d 73 20 68    61 76 65 20 61 20 74 65 78 74 0a 70 72 6f 70 65 | ed.file.params.have.a.text.prope | 
| 1dde0 | 72 74 79 20 3a 65 6c 6e 6f 64 65 2d 66 69 6c 65    6e 61 6d 65 20 6f 6e 20 74 68 65 6d 3a 0a 0a 20 | rty.:elnode-filename.on.them:... | 
| 1de00 | 20 28 67 65 74 2d 74 65 78 74 2d 70 72 6f 70 65    72 74 79 20 30 20 3a 65 6c 6e 6f 64 65 2d 66 69 | .(get-text-property.0.:elnode-fi | 
| 1de20 | 6c 65 6e 61 6d 65 0a 20 20 20 20 28 65 6c 6e 6f    64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 | lename.....(elnode-http-param.ht | 
| 1de40 | 74 70 63 6f 6e 20 5c 22 6d 79 66 69 6c 65 5c 22    29 29 20 3d 3e 20 27 2f 73 6f 6d 65 66 69 6c 65 | tpcon.\"myfile\")).=>.'/somefile | 
| 1de60 | 2e 74 78 74 27 0a 0a 54 68 65 20 76 61 6c 75 65    20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 | .txt'..The.value.comes.from.the. | 
| 1de80 | 5c 22 43 6f 6e 74 65 6e 74 2d 44 69 73 70 6f 73    69 74 69 6f 6e 5c 22 20 68 65 61 64 65 72 20 69 | \"Content-Disposition\".header.i | 
| 1dea0 | 6e 20 74 68 65 0a 6d 75 6c 74 69 70 61 72 74 20    75 70 6c 6f 61 64 2e 22 0a 20 20 28 6c 6f 6f 70 | n.the.multipart.upload."...(loop | 
| 1dec0 | 20 66 6f 72 20 70 61 69 72 20 69 6e 0a 20 20 20    20 20 20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 | .for.pair.in........(or......... | 
| 1dee0 | 28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74    70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 | (process-get.httpcon.:elnode-htt | 
| 1df00 | 70 2d 70 61 72 61 6d 73 29 0a 20 20 20 20 20 20    20 20 28 6c 65 74 20 28 28 71 75 65 72 79 20 28 | p-params).........(let.((query.( | 
| 1df20 | 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 71 75 65 72    79 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 | elnode-http-query.httpcon))).... | 
| 1df40 | 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 61 6c    69 73 74 20 28 69 66 20 71 75 65 72 79 0a 20 20 | .......(let.((alist.(if.query... | 
| 1df60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | .........................(elnode | 
| 1df80 | 2d 2d 68 74 74 70 2d 71 75 65 72 79 2d 74 6f 2d    61 6c 69 73 74 20 71 75 65 72 79 29 0a 20 20 20 | --http-query-to-alist.query).... | 
| 1dfa0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 27 28 29 29 29 29 0a 20 | ........................'()))).. | 
| 1dfc0 | 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28    65 71 75 61 6c 20 22 50 4f 53 54 22 20 28 65 6c | ...........(if.(equal."POST".(el | 
| 1dfe0 | 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64    20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20 | node-http-method.httpcon))...... | 
| 1e000 | 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 49 66    20 77 65 27 72 65 20 61 20 50 4f 53 54 20 77 65 | ...........;;.If.we're.a.POST.we | 
| 1e020 | 20 68 61 76 65 20 74 6f 20 6d 65 72 67 65 20 74    68 65 20 70 61 72 61 6d 73 0a 20 20 20 20 20 20 | .have.to.merge.the.params....... | 
| 1e040 | 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..........(progn................ | 
| 1e060 | 20 20 20 28 73 65 74 71 20 61 6c 69 73 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...(setq.alist.................. | 
| 1e080 | 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d    61 6c 69 73 74 2d 6d 65 72 67 65 0a 20 20 20 20 | .......(elnode--alist-merge..... | 
| 1e0a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 61 6c 69 73 74 0a 20 20 20 20 20 | .....................alist...... | 
| 1e0c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 | ....................(elnode--htt | 
| 1e0e0 | 70 2d 70 6f 73 74 2d 74 6f 2d 61 6c 69 73 74 20    68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20 20 | p-post-to-alist.httpcon)........ | 
| 1e100 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 27 61 73 73 6f 63 29 29 0a 20 20 20 20 20 | ..................'assoc))...... | 
| 1e120 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72    6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f | .............(process-put.httpco | 
| 1e140 | 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70    61 72 61 6d 73 20 61 6c 69 73 74 29 0a 20 20 20 | n.:elnode-http-params.alist).... | 
| 1e160 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61    6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 | ...............alist)........... | 
| 1e180 | 20 20 20 20 20 20 3b 3b 20 45 6c 73 65 20 6a 75    73 74 20 72 65 74 75 72 6e 20 74 68 65 20 71 75 | ......;;.Else.just.return.the.qu | 
| 1e1a0 | 65 72 79 20 70 61 72 61 6d 73 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 | ery.params.................(proc | 
| 1e1c0 | 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20    3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 | ess-put.httpcon.:elnode-http-par | 
| 1e1e0 | 61 6d 73 20 61 6c 69 73 74 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 61 6c 69 73 74 | ams.alist).................alist | 
| 1e200 | 29 29 29 29 0a 20 20 20 20 20 69 66 20 28 6f 72    20 28 6e 6f 74 20 6e 61 6d 65 73 29 0a 20 20 20 | ))))......if.(or.(not.names).... | 
| 1e220 | 20 20 20 20 20 20 20 20 20 28 6d 65 6d 71 20 28    69 6e 74 65 72 6e 20 28 63 61 72 20 70 61 69 72 | .........(memq.(intern.(car.pair | 
| 1e240 | 29 29 20 6e 61 6d 65 73 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 28 6d 65 6d 62 65 72 20 28 63 | )).names).............(member.(c | 
| 1e260 | 61 72 20 70 61 69 72 29 20 6e 61 6d 65 73 29 29    0a 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 70 61 | ar.pair).names))......collect.pa | 
| 1e280 | 69 72 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e    6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 28 | ir))..(defun.elnode-http-param.( | 
| 1e2a0 | 68 74 74 70 63 6f 6e 20 6e 61 6d 65 20 26 6f 70    74 69 6f 6e 61 6c 20 64 65 66 61 75 6c 74 29 0a | httpcon.name.&optional.default). | 
| 1e2c0 | 20 20 22 47 65 74 20 74 68 65 20 70 61 72 61 6d    65 74 65 72 20 6e 61 6d 65 64 20 4e 41 4d 45 20 | .."Get.the.parameter.named.NAME. | 
| 1e2e0 | 66 72 6f 6d 20 74 68 65 20 72 65 71 75 65 73 74    2e 0a 0a 49 66 20 74 68 65 20 70 61 72 61 6d 65 | from.the.request...If.the.parame | 
| 1e300 | 74 65 72 20 63 61 6d 65 20 66 72 6f 6d 20 61 20    66 69 6c 65 20 75 70 6c 6f 61 64 20 69 74 20 68 | ter.came.from.a.file.upload.it.h | 
| 1e320 | 61 73 20 61 20 74 65 78 74 20 70 72 6f 70 65 72    74 79 0a 69 6e 64 69 63 61 74 69 6e 67 20 74 68 | as.a.text.property.indicating.th | 
| 1e340 | 65 20 66 69 6c 65 6e 61 6d 65 3a 0a 0a 20 20 28    67 65 74 2d 74 65 78 74 2d 70 72 6f 70 65 72 74 | e.filename:....(get-text-propert | 
| 1e360 | 79 20 30 20 3a 65 6c 6e 6f 64 65 2d 66 69 6c 65    6e 61 6d 65 0a 20 20 20 20 28 65 6c 6e 6f 64 65 | y.0.:elnode-filename.....(elnode | 
| 1e380 | 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70    63 6f 6e 20 5c 22 6d 79 66 69 6c 65 5c 22 29 29 | -http-param.httpcon.\"myfile\")) | 
| 1e3a0 | 20 3d 3e 20 27 2f 73 6f 6d 65 66 69 6c 65 2e 74    78 74 27 0a 0a 49 66 20 74 68 65 20 70 61 72 61 | .=>.'/somefile.txt'..If.the.para | 
| 1e3c0 | 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 70 72 65    73 65 6e 74 20 61 6e 64 20 44 45 46 41 55 4c 54 | meter.is.not.present.and.DEFAULT | 
| 1e3e0 | 20 69 73 20 70 72 65 73 65 6e 74 20 74 68 65 6e    0a 72 65 74 75 72 6e 20 44 45 46 41 55 4c 54 20 | .is.present.then.return.DEFAULT. | 
| 1e400 | 69 6e 73 74 65 61 64 20 6f 66 20 60 6e 69 6c 27    2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 70 61 72 | instead.of.`nil'."...(let*.((par | 
| 1e420 | 61 6d 73 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 70 61 72 61 6d 73 20 68 74 74 70 63 6f 6e 29 | ams.(elnode-http-params.httpcon) | 
| 1e440 | 29 0a 20 20 20 20 20 20 20 20 20 28 70 61 72 61    6d 2d 70 61 69 72 0a 20 20 20 20 20 20 20 20 20 | )..........(param-pair.......... | 
| 1e460 | 20 28 61 73 73 6f 63 0a 20 20 20 20 20 20 20 20    20 20 20 28 69 66 20 28 73 79 6d 62 6f 6c 70 20 | .(assoc............(if.(symbolp. | 
| 1e480 | 6e 61 6d 65 29 20 28 73 79 6d 62 6f 6c 2d 6e 61    6d 65 20 6e 61 6d 65 29 20 6e 61 6d 65 29 0a 20 | name).(symbol-name.name).name).. | 
| 1e4a0 | 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d 73    29 29 29 0a 20 20 20 20 3b 3b 20 53 68 6f 75 6c | ..........params))).....;;.Shoul | 
| 1e4c0 | 64 20 77 65 20 73 69 67 6e 61 6c 20 77 68 65 6e    20 77 65 20 64 6f 6e 27 74 20 68 61 76 65 20 61 | d.we.signal.when.we.don't.have.a | 
| 1e4e0 | 20 70 61 72 61 6d 3f 0a 20 20 20 20 28 69 66 20    70 61 72 61 6d 2d 70 61 69 72 0a 20 20 20 20 20 | .param?.....(if.param-pair...... | 
| 1e500 | 20 20 20 28 63 64 72 20 70 61 72 61 6d 2d 70 61    69 72 29 0a 20 20 20 20 20 20 20 20 64 65 66 61 | ...(cdr.param-pair).........defa | 
| 1e520 | 75 6c 74 29 29 29 0a 0a 28 64 65 66 75 6e 20 65    6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 65 74 68 6f | ult)))..(defun.elnode-http-metho | 
| 1e540 | 64 20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 47    65 74 20 74 68 65 20 48 54 54 50 20 72 65 71 75 | d.(httpcon)..."Get.the.HTTP.requ | 
| 1e560 | 65 73 74 20 6d 65 74 68 6f 64 20 28 47 45 54 2c    20 50 55 54 2c 20 65 74 63 2e 2e 2e 29 20 61 73 | est.method.(GET,.PUT,.etc...).as | 
| 1e580 | 20 61 20 73 74 72 69 6e 67 2e 22 0a 20 20 28 6f    72 0a 20 20 20 28 70 72 6f 63 65 73 73 2d 67 65 | .a.string."...(or....(process-ge | 
| 1e5a0 | 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64    65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 29 0a 20 | t.httpcon.:elnode-http-method).. | 
| 1e5c0 | 20 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d    70 61 72 73 65 2d 73 74 61 74 75 73 20 68 74 74 | ..(elnode--http-parse-status.htt | 
| 1e5e0 | 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 6d 65 74 68 6f 64 29 29 29 0a 0a 28 64 65 | pcon.:elnode-http-method)))..(de | 
| 1e600 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d    76 65 72 73 69 6f 6e 20 28 68 74 74 70 63 6f 6e | fun.elnode-http-version.(httpcon | 
| 1e620 | 29 0a 20 20 22 47 65 74 20 74 68 65 20 50 41 54    48 49 4e 46 4f 20 6f 66 20 74 68 65 20 72 65 71 | )..."Get.the.PATHINFO.of.the.req | 
| 1e640 | 75 65 73 74 2e 22 0a 20 20 28 6f 72 0a 20 20 20    28 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 | uest."...(or....(process-get.htt | 
| 1e660 | 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 76 65 72 73 69 6f 6e 29 0a 20 20 20 28 65 | pcon.:elnode-http-version)....(e | 
| 1e680 | 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 70 61 72 73    65 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e | lnode--http-parse-status.httpcon | 
| 1e6a0 | 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 76 65    72 73 69 6f 6e 29 29 29 0a 0a 28 64 65 66 75 6e | .:elnode-http-version)))..(defun | 
| 1e6c0 | 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e    64 2d 73 74 72 69 6e 67 20 28 68 74 74 70 63 6f | .elnode-http-send-string.(httpco | 
| 1e6e0 | 6e 20 73 74 72 29 0a 20 20 22 53 65 6e 64 20 53    54 52 20 74 6f 20 48 54 54 50 43 4f 4e 2c 20 64 | n.str)..."Send.STR.to.HTTPCON,.d | 
| 1e700 | 6f 69 6e 67 20 63 68 75 6e 6b 65 64 20 65 6e 63    6f 64 69 6e 67 2e 22 0a 20 20 28 69 66 20 65 6c | oing.chunked.encoding."...(if.el | 
| 1e720 | 6e 6f 64 65 2d 2d 68 74 74 70 2d 73 65 6e 64 2d    73 74 72 69 6e 67 2d 64 65 62 75 67 0a 20 20 20 | node--http-send-string-debug.... | 
| 1e740 | 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72    0a 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d | ...(elnode-error........"elnode- | 
| 1e760 | 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67    20 25 73 20 5b 5b 25 73 5d 5d 22 0a 20 20 20 20 | http-send-string.%s.[[%s]]"..... | 
| 1e780 | 20 20 20 68 74 74 70 63 6f 6e 20 28 65 6c 6e 6f    64 65 2d 74 72 75 6e 63 20 73 74 72 29 29 29 0a | ...httpcon.(elnode-trunc.str))). | 
| 1e7a0 | 20 20 28 6c 65 74 20 28 28 6c 65 6e 20 28 73 74    72 69 6e 67 2d 62 79 74 65 73 20 73 74 72 29 29 | ..(let.((len.(string-bytes.str)) | 
| 1e7c0 | 29 0a 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70    75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f | ).....(process-put.httpcon.:elno | 
| 1e7e0 | 64 65 2d 62 79 74 65 73 2d 77 72 69 74 74 65 6e    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | de-bytes-written................ | 
| 1e800 | 20 20 28 2b 20 6c 65 6e 20 28 6f 72 20 28 70 72    6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63 6f | ..(+.len.(or.(process-get.httpco | 
| 1e820 | 6e 20 3a 65 6c 6e 6f 64 65 2d 62 79 74 65 73 2d    77 72 69 74 74 65 6e 29 20 30 29 29 29 0a 20 20 | n.:elnode-bytes-written).0)))... | 
| 1e840 | 20 20 3b 3b 20 46 49 58 4d 45 20 45 72 72 6f 72    73 20 63 61 6e 20 68 61 70 70 65 6e 20 68 65 72 | ..;;.FIXME.Errors.can.happen.her | 
| 1e860 | 65 2c 20 62 65 63 61 75 73 65 20 74 68 65 20 73    6f 63 6b 65 74 20 67 6f 65 73 20 61 77 61 79 2e | e,.because.the.socket.goes.away. | 
| 1e880 | 2e 20 69 74 0a 20 20 20 20 3b 3b 20 77 6f 75 6c    64 20 62 65 20 6e 69 63 65 20 74 6f 20 74 72 61 | ..it.....;;.would.be.nice.to.tra | 
| 1e8a0 | 70 20 74 68 65 6d 20 61 6e 64 20 72 65 70 6f 72    74 20 61 6e 64 20 74 68 65 6e 20 72 65 2d 72 61 | p.them.and.report.and.then.re-ra | 
| 1e8c0 | 69 73 65 20 74 68 65 6d 2e 0a 20 20 20 20 28 70    72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 69 | ise.them......(process-send-stri | 
| 1e8e0 | 6e 67 20 68 74 74 70 63 6f 6e 20 28 66 6f 72 6d    61 74 20 22 25 78 5c 72 5c 6e 25 73 5c 72 5c 6e | ng.httpcon.(format."%x\r\n%s\r\n | 
| 1e900 | 22 20 6c 65 6e 20 28 6f 72 20 73 74 72 20 22 22    29 29 29 29 29 0a 0a 28 64 65 66 63 6f 6e 73 74 | ".len.(or.str."")))))..(defconst | 
| 1e920 | 20 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 64    65 73 2d 61 6c 69 73 74 0a 20 20 28 6c 6f 6f 70 | .elnode-http-codes-alist...(loop | 
| 1e940 | 20 66 6f 72 20 70 20 69 6e 20 27 28 28 32 30 30    20 2e 20 22 4f 6b 22 29 0a 20 20 20 20 20 20 20 | .for.p.in.'((200..."Ok")........ | 
| 1e960 | 20 20 20 20 20 20 20 20 20 20 20 20 28 32 30 31    20 2e 20 22 43 72 65 61 74 65 64 22 29 0a 20 20 | ............(201..."Created")... | 
| 1e980 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 33 30 32 20 2e 20 22 52 65 64 69 72 65 63 | .................(302..."Redirec | 
| 1e9a0 | 74 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 34 30 30 20 2e 20 22 42 | t")....................(400..."B | 
| 1e9c0 | 61 64 20 52 65 71 75 65 73 74 22 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ad.Request").................... | 
| 1e9e0 | 28 34 30 31 20 2e 20 22 41 75 74 68 65 6e 74 69    63 61 74 65 22 29 0a 20 20 20 20 20 20 20 20 20 | (401..."Authenticate").......... | 
| 1ea00 | 20 20 20 20 20 20 20 20 20 20 28 34 30 34 20 2e    20 22 4e 6f 74 20 46 6f 75 6e 64 22 29 0a 20 20 | ..........(404..."Not.Found")... | 
| 1ea20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 35 30 30 20 2e 20 22 53 65 72 76 65 72 20 | .................(500..."Server. | 
| 1ea40 | 45 72 72 6f 72 22 29 29 0a 20 20 20 20 20 3b 3b    20 61 64 64 20 61 6e 20 61 6c 69 73 74 20 65 6e | Error"))......;;.add.an.alist.en | 
| 1ea60 | 74 72 79 20 77 69 74 68 20 61 6e 20 69 6e 74 65    67 65 72 20 6b 65 79 0a 20 20 20 20 20 63 6f 6c | try.with.an.integer.key......col | 
| 1ea80 | 6c 65 63 74 20 70 0a 20 20 20 20 20 3b 3b 20 61    64 64 20 61 6e 20 61 6c 69 73 74 20 65 6e 74 72 | lect.p......;;.add.an.alist.entr | 
| 1eaa0 | 79 20 77 69 74 68 20 61 20 73 74 72 69 6e 67 20    6b 65 79 0a 20 20 20 20 20 63 6f 6c 6c 65 63 74 | y.with.a.string.key......collect | 
| 1eac0 | 0a 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 6e    75 6d 62 65 72 2d 74 6f 2d 73 74 72 69 6e 67 20 | ........(cons.(number-to-string. | 
| 1eae0 | 28 63 61 72 20 70 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 28 63 64 72 20 70 29 29 29 0a | (car.p))..............(cdr.p))). | 
| 1eb00 | 20 20 22 48 54 54 50 20 63 6f 64 65 73 20 77 69    74 68 20 73 74 72 69 6e 67 20 6b 65 79 73 20 61 | .."HTTP.codes.with.string.keys.a | 
| 1eb20 | 6e 64 20 69 6e 74 65 67 65 72 20 6b 65 79 73 2e    22 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f | nd.integer.keys.")..(defun*.elno | 
| 1eb40 | 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6d    61 6b 65 20 28 6e 61 6d 65 20 64 61 74 61 20 26 | de-http-cookie-make.(name.data.& | 
| 1eb60 | 6b 65 79 20 65 78 70 69 72 79 20 70 61 74 68 29    0a 20 20 22 4d 61 6b 65 20 61 20 73 65 74 2d 63 | key.expiry.path)..."Make.a.set-c | 
| 1eb80 | 6f 6f 6b 69 65 20 68 65 61 64 65 72 20 70 61 69    72 20 66 72 6f 6d 20 4e 41 4d 45 20 61 6e 64 20 | ookie.header.pair.from.NAME.and. | 
| 1eba0 | 44 41 54 41 2e 0a 0a 44 41 54 41 20 73 68 6f 75    6c 64 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 | DATA...DATA.should.be.a.string.t | 
| 1ebc0 | 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65    20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f | o.be.used.as.the.value.of.the.co | 
| 1ebe0 | 6f 6b 69 65 2e 0a 0a 4f 74 68 65 72 20 6b 65 79    20 76 61 6c 75 65 73 20 61 72 65 20 73 74 61 6e | okie...Other.key.values.are.stan | 
| 1ec00 | 64 61 72 64 20 63 6f 6f 6b 69 65 20 61 74 74 72    69 62 75 74 65 73 2e 0a 0a 55 73 65 20 74 68 69 | dard.cookie.attributes...Use.thi | 
| 1ec20 | 73 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 73 74 61 72 74 27 20 74 6f 20 6d 61 | s.with.`elnode-http-start'.to.ma | 
| 1ec40 | 6b 65 20 63 6f 6f 6b 69 65 20 68 65 61 64 65 72    73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d 68 74 74 | ke.cookie.headers:...(elnode-htt | 
| 1ec60 | 70 2d 73 74 61 72 74 0a 20 20 20 20 68 74 74 70    63 6f 6e 20 32 30 30 0a 20 20 20 20 27 28 63 6f | p-start.....httpcon.200.....'(co | 
| 1ec80 | 6e 74 65 6e 74 2d 74 79 70 65 20 2e 20 5c 22 74    65 78 74 2f 68 74 6d 6c 5c 22 29 0a 20 20 20 20 | ntent-type...\"text/html\")..... | 
| 1eca0 | 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f    6b 69 65 2d 6d 61 6b 65 20 5c 22 70 69 5c 22 20 | (elnode-http-cookie-make.\"pi\". | 
| 1ecc0 | 33 2e 31 34 35 37 39 29 0a 20 20 20 20 28 65 6c    6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 | 3.14579).....(elnode-http-cookie | 
| 1ece0 | 2d 6d 61 6b 65 20 5c 22 65 5c 22 20 31 2e 35 39    0a 20 20 20 20 20 20 20 3a 65 78 70 69 72 79 20 | -make.\"e\".1.59........:expiry. | 
| 1ed00 | 5c 22 4d 6f 6e 2c 20 46 65 62 20 32 37 20 32 30    31 32 20 32 32 3a 31 30 3a 32 31 20 47 4d 54 3b | \"Mon,.Feb.27.2012.22:10:21.GMT; | 
| 1ed20 | 5c 22 29 0a 0a 54 68 69 73 20 77 69 6c 6c 20 73    65 6e 64 20 74 77 6f 20 53 65 74 2d 43 6f 6f 6b | \")..This.will.send.two.Set-Cook | 
| 1ed40 | 69 65 20 68 65 61 64 65 72 73 20 73 65 74 74 69    6e 67 20 74 68 65 20 63 6f 6f 6b 69 65 73 20 27 | ie.headers.setting.the.cookies.' | 
| 1ed60 | 70 69 27 0a 61 6e 64 20 27 65 27 2e 0a 0a 54 68    65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 | pi'.and.'e'...The.return.value.i | 
| 1ed80 | 73 20 61 20 63 6f 6e 73 20 70 61 69 72 2e 22 0a    20 20 28 63 6f 6e 73 0a 20 20 20 22 53 65 74 2d | s.a.cons.pair."...(cons...."Set- | 
| 1eda0 | 43 6f 6f 6b 69 65 22 0a 20 20 20 28 66 6f 72 6d    61 74 20 22 25 73 3d 25 73 3b 25 73 22 0a 20 20 | Cookie"....(format."%s=%s;%s"... | 
| 1edc0 | 20 20 20 20 20 20 20 20 20 6e 61 6d 65 0a 20 20    20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 | .........name............data... | 
| 1ede0 | 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f    74 20 28 6f 72 20 65 78 70 69 72 79 0a 20 20 20 | .........(if.(not.(or.expiry.... | 
| 1ee00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 70 61 74 68 29 29 0a 20 20 20 20 | .....................path))..... | 
| 1ee20 | 20 20 20 20 20 20 20 20 20 20 20 22 22 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f | ...........""................(lo | 
| 1ee40 | 6f 70 20 66 6f 72 20 70 20 69 6e 20 60 28 28 65    78 70 69 72 65 73 20 2e 20 2c 65 78 70 69 72 79 | op.for.p.in.`((expires...,expiry | 
| 1ee60 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | )............................... | 
| 1ee80 | 20 20 28 70 61 74 68 20 2e 20 2c 70 61 74 68 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..(path...,path))............... | 
| 1eea0 | 20 20 20 20 69 66 20 28 63 64 72 20 70 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ....if.(cdr.p).................. | 
| 1eec0 | 20 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 | .concat.....................(for | 
| 1eee0 | 6d 61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 22 20 25 73 3d 25 73 | mat......................".%s=%s | 
| 1ef00 | 3b 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 63 61 70 69 74 61 6c | ;"......................(capital | 
| 1ef20 | 69 7a 65 20 28 73 79 6d 62 6f 6c 2d 6e 61 6d 65    20 28 63 61 72 20 70 29 29 29 0a 20 20 20 20 20 | ize.(symbol-name.(car.p)))...... | 
| 1ef40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 63 64 72 20 70 29 29 29 29 29 29 29 0a 0a 28 | ................(cdr.p)))))))..( | 
| 1ef60 | 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 68 65 61 64 65 72 2d 73 65 74 20 28 68 74 | defun.elnode-http-header-set.(ht | 
| 1ef80 | 74 70 63 6f 6e 20 68 65 61 64 65 72 20 26 6f 70    74 69 6f 6e 61 6c 20 76 61 6c 75 65 29 0a 20 20 | tpcon.header.&optional.value)... | 
| 1efa0 | 22 53 65 74 73 20 74 68 65 20 48 45 41 44 45 52    20 66 6f 72 20 6c 61 74 65 72 20 70 72 6f 63 65 | "Sets.the.HEADER.for.later.proce | 
| 1efc0 | 73 73 69 6e 67 2e 0a 0a 48 45 41 44 45 52 20 6d    61 79 20 62 65 20 61 20 70 61 69 72 20 6f 66 20 | ssing...HEADER.may.be.a.pair.of. | 
| 1efe0 | 60 6e 61 6d 65 27 20 61 6e 64 20 60 76 61 6c 75    65 27 20 6f 72 20 69 74 20 6d 61 79 20 6a 75 73 | `name'.and.`value'.or.it.may.jus | 
| 1f000 | 74 20 62 65 20 61 0a 53 74 72 69 6e 67 2c 20 6f    72 20 61 20 53 79 6d 62 6f 6c 20 69 6e 20 77 68 | t.be.a.String,.or.a.Symbol.in.wh | 
| 1f020 | 69 63 68 20 63 61 73 65 20 74 68 65 20 56 41 4c    55 45 20 6d 75 73 74 20 62 65 20 73 70 65 63 69 | ich.case.the.VALUE.must.be.speci | 
| 1f040 | 66 69 65 64 2e 0a 0a 49 66 20 48 45 41 44 45 52    20 69 73 20 61 20 70 61 69 72 20 61 6e 64 20 56 | fied...If.HEADER.is.a.pair.and.V | 
| 1f060 | 41 4c 55 45 20 69 73 20 61 6c 73 6f 20 73 70 65    63 69 66 69 65 64 20 74 68 65 6e 20 56 41 4c 55 | ALUE.is.also.specified.then.VALU | 
| 1f080 | 45 20 69 73 0a 69 67 6e 6f 72 65 64 2e 0a 0a 57    68 65 6e 20 74 68 65 20 48 54 54 50 20 72 65 73 | E.is.ignored...When.the.HTTP.res | 
| 1f0a0 | 70 6f 6e 73 65 20 69 73 20 73 74 61 72 74 65 64    20 61 6e 79 20 73 65 74 20 68 65 61 64 65 72 73 | ponse.is.started.any.set.headers | 
| 1f0c0 | 20 77 69 6c 6c 20 62 65 20 6d 65 72 67 65 64 0a    77 69 74 68 20 61 6e 79 20 72 65 71 75 65 73 74 | .will.be.merged.with.any.request | 
| 1f0e0 | 65 64 20 68 65 61 64 65 72 73 20 61 6e 64 20 73    65 6e 74 2e 0a 0a 49 66 20 74 68 65 20 72 65 73 | ed.headers.and.sent...If.the.res | 
| 1f100 | 70 6f 6e 73 65 20 68 61 73 20 62 65 65 6e 20 73    74 61 72 74 65 64 20 69 74 20 69 73 20 61 6e 20 | ponse.has.been.started.it.is.an. | 
| 1f120 | 65 72 72 6f 72 20 74 6f 20 74 72 79 20 74 6f 20    73 65 74 20 61 0a 68 65 61 64 65 72 2e 20 20 54 | error.to.try.to.set.a.header...T | 
| 1f140 | 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c    6c 20 6c 6f 67 20 74 68 65 20 65 72 72 6f 72 20 | his.function.will.log.the.error. | 
| 1f160 | 61 6e 64 20 72 65 74 75 72 6e 20 60 6e 69 6c 27    2e 0a 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 68 | and.return.`nil'...See.`elnode-h | 
| 1f180 | 74 74 70 2d 73 74 61 72 74 27 2e 22 0a 20 20 28    69 66 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 | ttp-start'."...(if.(process-get. | 
| 1f1a0 | 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 73 74 61 72 74 65 64 29 0a 20 20 | httpcon.:elnode-http-started)... | 
| 1f1c0 | 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f    72 20 22 63 61 6e 27 74 20 73 65 74 20 68 65 61 | ....(elnode-error."can't.set.hea | 
| 1f1e0 | 64 65 72 2c 20 48 54 54 50 20 61 6c 72 65 61 64    79 20 73 74 61 72 74 65 64 20 6f 6e 20 25 73 22 | der,.HTTP.already.started.on.%s" | 
| 1f200 | 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20 20    28 6c 65 74 20 28 28 68 65 61 64 65 72 73 20 28 | .httpcon).......(let.((headers.( | 
| 1f220 | 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70    63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 65 61 64 | process-get.httpcon.:elnode-head | 
| 1f240 | 65 72 73 2d 74 6f 2d 73 65 74 29 29 29 0a 20 20    20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 70 | ers-to-set))).........(process-p | 
| 1f260 | 75 74 0a 20 20 20 20 20 20 20 20 20 68 74 74 70    63 6f 6e 0a 20 20 20 20 20 20 20 20 20 3a 65 6c | ut..........httpcon..........:el | 
| 1f280 | 6e 6f 64 65 2d 68 65 61 64 65 72 73 2d 74 6f 2d    73 65 74 0a 20 20 20 20 20 20 20 20 20 28 61 70 | node-headers-to-set..........(ap | 
| 1f2a0 | 70 65 6e 64 20 68 65 61 64 65 72 73 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c | pend.headers..................(l | 
| 1f2c0 | 69 73 74 20 28 69 66 20 28 63 6f 6e 73 70 20 68    65 61 64 65 72 29 0a 20 20 20 20 20 20 20 20 20 | ist.(if.(consp.header).......... | 
| 1f2e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 | ..................header........ | 
| 1f300 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 63 6f 6e 73 20 68 65 61 64 65 72 | ....................(cons.header | 
| 1f320 | 20 76 61 6c 75 65 29 29 29 29 29 29 29 29 0a 0a    28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 68 | .value))))))))..(defun*.elnode-h | 
| 1f340 | 74 74 70 2d 63 6f 6f 6b 69 65 2d 73 65 74 20 28    68 74 74 70 63 6f 6e 20 6e 61 6d 65 20 64 61 74 | ttp-cookie-set.(httpcon.name.dat | 
| 1f360 | 61 20 26 6b 65 79 20 65 78 70 69 72 79 20 70 61    74 68 29 0a 20 20 22 4d 61 6b 65 20 61 20 63 6f | a.&key.expiry.path)..."Make.a.co | 
| 1f380 | 6f 6b 69 65 20 61 6e 64 20 73 65 74 20 69 74 20    6f 6e 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 0a | okie.and.set.it.on.the.HTTPCON.. | 
| 1f3a0 | 0a 53 65 65 20 60 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 63 6f 6f 6b 69 65 2d 6d 61 6b 65 27 20 66 | .See.`elnode-http-cookie-make'.f | 
| 1f3c0 | 6f 72 20 64 65 74 61 69 6c 73 20 61 62 6f 75 74    20 63 6f 6f 6b 69 65 20 6d 61 6b 69 6e 67 2e 22 | or.details.about.cookie.making." | 
| 1f3e0 | 0a 20 20 28 6c 65 74 20 28 28 63 6f 6f 6b 69 65    2d 63 6f 6e 73 20 28 65 6c 6e 6f 64 65 2d 68 74 | ...(let.((cookie-cons.(elnode-ht | 
| 1f400 | 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 6b 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | tp-cookie-make.................. | 
| 1f420 | 20 20 20 20 20 6e 61 6d 65 20 64 61 74 61 20 3a    65 78 70 69 72 79 20 65 78 70 69 72 79 20 3a 70 | .....name.data.:expiry.expiry.:p | 
| 1f440 | 61 74 68 20 70 61 74 68 29 29 29 0a 20 20 20 20    28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61 | ath.path))).....(elnode-http-hea | 
| 1f460 | 64 65 72 2d 73 65 74 20 68 74 74 70 63 6f 6e 20    28 63 61 72 20 63 6f 6f 6b 69 65 2d 63 6f 6e 73 | der-set.httpcon.(car.cookie-cons | 
| 1f480 | 29 20 28 63 64 72 20 63 6f 6f 6b 69 65 2d 63 6f    6e 73 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 | ).(cdr.cookie-cons))))..(defun.e | 
| 1f4a0 | 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 72 65 73 75    6c 74 2d 68 65 61 64 65 72 20 28 68 64 72 2d 61 | lnode--http-result-header.(hdr-a | 
| 1f4c0 | 6c 69 73 74 29 0a 20 20 22 54 75 72 6e 20 74 68    65 20 48 44 52 2d 41 4c 49 53 54 20 69 6e 74 6f | list)..."Turn.the.HDR-ALIST.into | 
| 1f4e0 | 20 61 20 72 65 73 75 6c 74 20 68 65 61 64 65 72    20 73 74 72 69 6e 67 2e 0a 0a 54 68 65 20 48 44 | .a.result.header.string...The.HD | 
| 1f500 | 52 2d 41 4c 49 53 54 20 69 73 20 61 6e 20 61 6c    69 73 74 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 72 | R-ALIST.is.an.alist.of.symbol.or | 
| 1f520 | 20 73 74 72 69 6e 67 20 6b 65 79 73 20 77 68 69    63 68 20 61 72 65 0a 68 65 61 64 65 72 20 6e 61 | .string.keys.which.are.header.na | 
| 1f540 | 6d 65 73 2c 20 61 67 61 69 6e 73 74 20 76 61 6c    75 65 73 20 77 68 69 63 68 20 73 68 6f 75 6c 64 | mes,.against.values.which.should | 
| 1f560 | 20 62 65 20 73 74 72 69 6e 67 73 2e 22 0a 20 20    28 6c 65 74 20 28 28 68 64 72 2d 70 61 69 72 73 | .be.strings."...(let.((hdr-pairs | 
| 1f580 | 0a 20 20 20 20 20 20 20 20 20 28 61 70 70 65 6e    64 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 | ..........(append...........(lis | 
| 1f5a0 | 74 20 28 63 6f 6e 73 20 27 74 72 61 6e 73 66 65    72 2d 65 6e 63 6f 64 69 6e 67 20 22 63 68 75 6e | t.(cons.'transfer-encoding."chun | 
| 1f5c0 | 6b 65 64 22 29 29 0a 20 20 20 20 20 20 20 20 20    20 68 64 72 2d 61 6c 69 73 74 29 29 29 0a 20 20 | ked"))...........hdr-alist)))... | 
| 1f5e0 | 20 20 28 6c 6f 6f 70 20 66 6f 72 20 70 20 69 6e    20 68 64 72 2d 70 61 69 72 73 0a 20 20 20 20 20 | ..(loop.for.p.in.hdr-pairs...... | 
| 1f600 | 20 20 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20    20 20 28 66 6f 72 6d 61 74 0a 20 20 20 20 20 20 | ..concat..........(format....... | 
| 1f620 | 20 20 20 20 22 25 73 3a 20 25 73 5c 72 5c 6e 22    0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 | ...."%s:.%s\r\n"...........(let. | 
| 1f640 | 28 28 68 6e 61 6d 65 20 28 63 61 72 20 70 29 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 | ((hname.(car.p))).............(c | 
| 1f660 | 61 70 69 74 61 6c 69 7a 65 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 | apitalize..............(cond.... | 
| 1f680 | 20 20 20 20 20 20 20 20 20 20 20 20 28 28 73 79    6d 62 6f 6c 70 20 68 6e 61 6d 65 29 0a 20 20 20 | ............((symbolp.hname).... | 
| 1f6a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79    6d 62 6f 6c 2d 6e 61 6d 65 20 68 6e 61 6d 65 29 | .............(symbol-name.hname) | 
| 1f6c0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 28 73 74 72 69 6e 67 70 20 68 6e 61 6d 65 | )................((stringp.hname | 
| 1f6e0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 68 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 | ).................hname)........ | 
| 1f700 | 20 20 20 20 20 20 20 20 28 74 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 65 72 72 6f | ........(t.................(erro | 
| 1f720 | 72 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 68    65 61 64 65 72 20 74 79 70 65 22 29 29 29 29 29 | r."unsupported.header.type"))))) | 
| 1f740 | 0a 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20    70 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 | ...........(cdr.p)))))..(defun.e | 
| 1f760 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74    20 28 68 74 74 70 63 6f 6e 20 73 74 61 74 75 73 | lnode-http-start.(httpcon.status | 
| 1f780 | 20 26 72 65 73 74 20 68 65 61 64 65 72 29 0a 20    20 22 53 74 61 72 74 20 74 68 65 20 68 74 74 70 | .&rest.header)..."Start.the.http | 
| 1f7a0 | 20 72 65 73 70 6f 6e 73 65 20 6f 6e 20 74 68 65    20 73 70 65 63 69 66 69 65 64 20 68 74 74 70 20 | .response.on.the.specified.http. | 
| 1f7c0 | 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 48 54 54    50 43 4f 4e 20 69 73 20 74 68 65 20 48 54 54 50 | connection...HTTPCON.is.the.HTTP | 
| 1f7e0 | 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 62 65 69 6e    67 20 68 61 6e 64 6c 65 64 2e 0a 0a 53 54 41 54 | .connection.being.handled...STAT | 
| 1f800 | 55 53 20 69 73 20 74 68 65 20 48 54 54 50 20 73    74 61 74 75 73 2c 20 65 67 3a 20 32 30 30 20 6f | US.is.the.HTTP.status,.eg:.200.o | 
| 1f820 | 72 20 34 30 34 3b 20 69 6e 74 65 67 65 72 73 20    6f 72 20 73 74 72 69 6e 67 73 0a 61 72 65 20 61 | r.404;.integers.or.strings.are.a | 
| 1f840 | 63 63 65 70 74 61 62 6c 65 20 74 79 70 65 73 2e    0a 0a 48 45 41 44 45 52 20 69 73 20 61 20 73 65 | cceptable.types...HEADER.is.a.se | 
| 1f860 | 71 75 65 6e 63 65 20 6f 66 20 28 60 68 65 61 64    65 72 2d 6e 61 6d 65 27 20 2e 20 60 76 61 6c 75 | quence.of.(`header-name'...`valu | 
| 1f880 | 65 27 29 20 70 61 69 72 73 2e 0a 0a 46 6f 72 20    65 78 61 6d 70 6c 65 3a 0a 0a 20 28 65 6c 6e 6f | e').pairs...For.example:...(elno | 
| 1f8a0 | 64 65 2d 68 74 74 70 2d 73 74 61 72 74 20 68 74    74 70 63 6f 6e 20 5c 22 32 30 30 5c 22 20 27 28 | de-http-start.httpcon.\"200\".'( | 
| 1f8c0 | 5c 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 5c 22    20 2e 20 5c 22 74 65 78 74 2f 68 74 6d 6c 5c 22 | \"Content-type\"...\"text/html\" | 
| 1f8e0 | 29 29 0a 0a 54 68 65 20 73 74 61 74 75 73 20 61    6e 64 20 74 68 65 20 68 65 61 64 65 72 20 61 72 | ))..The.status.and.the.header.ar | 
| 1f900 | 65 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 6f 6e    20 74 68 65 20 70 72 6f 63 65 73 73 20 61 73 20 | e.also.stored.on.the.process.as. | 
| 1f920 | 6d 65 74 61 0a 64 61 74 61 2e 20 20 54 68 69 73    20 69 73 20 64 6f 6e 65 20 6d 61 69 6e 6c 79 20 | meta.data...This.is.done.mainly. | 
| 1f940 | 66 6f 72 20 74 65 73 74 69 6e 67 20 69 6e 66 72    61 73 74 72 75 63 74 75 72 65 2e 22 0a 20 20 28 | for.testing.infrastructure."...( | 
| 1f960 | 69 66 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20    68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d | if.(process-get.httpcon.:elnode- | 
| 1f980 | 68 74 74 70 2d 73 74 61 72 74 65 64 29 0a 20 20    20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f | http-started).......(elnode-erro | 
| 1f9a0 | 72 20 22 48 74 74 70 20 61 6c 72 65 61 64 79 20    73 74 61 72 74 65 64 20 6f 6e 20 25 73 22 20 68 | r."Http.already.started.on.%s".h | 
| 1f9c0 | 74 74 70 63 6f 6e 29 0a 20 20 20 20 3b 3b 20 53    65 6e 64 20 74 68 65 20 68 65 61 64 65 72 0a 20 | ttpcon).....;;.Send.the.header.. | 
| 1f9e0 | 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72    20 22 73 74 61 72 74 69 6e 67 20 48 54 54 50 20 | ...(elnode-error."starting.HTTP. | 
| 1fa00 | 72 65 73 70 6f 6e 73 65 20 6f 6e 20 25 73 22 20    68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 6c 65 | response.on.%s".httpcon).....(le | 
| 1fa20 | 74 20 28 28 68 65 61 64 65 72 2d 61 6c 69 73 74    0a 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70 | t.((header-alist............(app | 
| 1fa40 | 65 6e 64 20 28 70 72 6f 63 65 73 73 2d 67 65 74    20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 | end.(process-get.httpcon.:elnode | 
| 1fa60 | 2d 68 65 61 64 65 72 73 2d 74 6f 2d 73 65 74 29    20 68 65 61 64 65 72 29 29 0a 20 20 20 20 20 20 | -headers-to-set).header))....... | 
| 1fa80 | 20 20 20 20 28 73 74 61 74 75 73 2d 63 6f 64 65    20 28 69 66 20 28 73 74 72 69 6e 67 70 20 73 74 | ....(status-code.(if.(stringp.st | 
| 1faa0 | 61 74 75 73 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | atus)........................... | 
| 1fac0 | 20 28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62    65 72 20 73 74 61 74 75 73 29 0a 20 20 20 20 20 | .(string-to-number.status)...... | 
| 1fae0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 73 74 61 74 75 73 29 29 29 0a | ......................status))). | 
| 1fb00 | 20 20 20 20 20 20 3b 3b 20 53 74 6f 72 65 20 74    68 65 20 6d 65 74 61 20 64 61 74 61 20 61 62 6f | ......;;.Store.the.meta.data.abo | 
| 1fb20 | 75 74 20 74 68 65 20 72 65 73 70 6f 6e 73 65 2e    0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d | ut.the.response........(process- | 
| 1fb40 | 70 75 74 20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e    6f 64 65 2d 68 74 74 70 72 65 73 70 6f 6e 73 65 | put.httpcon.:elnode-httpresponse | 
| 1fb60 | 2d 73 74 61 74 75 73 20 73 74 61 74 75 73 2d 63    6f 64 65 29 0a 20 20 20 20 20 20 28 70 72 6f 63 | -status.status-code).......(proc | 
| 1fb80 | 65 73 73 2d 70 75 74 20 68 74 74 70 63 6f 6e 20    3a 65 6c 6e 6f 64 65 2d 68 74 74 70 72 65 73 70 | ess-put.httpcon.:elnode-httpresp | 
| 1fba0 | 6f 6e 73 65 2d 68 65 61 64 65 72 20 68 65 61 64    65 72 2d 61 6c 69 73 74 29 0a 20 20 20 20 20 20 | onse-header.header-alist)....... | 
| 1fbc0 | 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74    72 69 6e 67 0a 20 20 20 20 20 20 20 68 74 74 70 | (process-send-string........http | 
| 1fbe0 | 63 6f 6e 0a 20 20 20 20 20 20 20 28 66 6f 72 6d    61 74 0a 20 20 20 20 20 20 20 20 22 48 54 54 50 | con........(format........."HTTP | 
| 1fc00 | 2f 31 2e 31 20 25 64 20 25 73 5c 72 5c 6e 25 73    5c 72 5c 6e 22 0a 20 20 20 20 20 20 20 20 73 74 | /1.1.%d.%s\r\n%s\r\n".........st | 
| 1fc20 | 61 74 75 73 2d 63 6f 64 65 0a 20 20 20 20 20 20    20 20 3b 3b 20 54 68 65 20 73 74 61 74 75 73 20 | atus-code.........;;.The.status. | 
| 1fc40 | 74 65 78 74 0a 20 20 20 20 20 20 20 20 28 61 73    73 6f 63 2d 64 65 66 61 75 6c 74 20 73 74 61 74 | text.........(assoc-default.stat | 
| 1fc60 | 75 73 2d 63 6f 64 65 20 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 63 6f 64 65 73 2d 61 6c 69 73 74 29 | us-code.elnode-http-codes-alist) | 
| 1fc80 | 0a 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65 20    68 65 61 64 65 72 0a 20 20 20 20 20 20 20 20 28 | .........;;.The.header.........( | 
| 1fca0 | 6f 72 0a 20 20 20 20 20 20 20 20 20 28 65 6c 6e    6f 64 65 2d 2d 68 74 74 70 2d 72 65 73 75 6c 74 | or..........(elnode--http-result | 
| 1fcc0 | 2d 68 65 61 64 65 72 20 68 65 61 64 65 72 2d 61    6c 69 73 74 29 0a 20 20 20 20 20 20 20 20 20 22 | -header.header-alist).........." | 
| 1fce0 | 5c 72 5c 6e 22 29 29 29 0a 20 20 20 20 20 20 28    70 72 6f 63 65 73 73 2d 70 75 74 20 68 74 74 70 | \r\n"))).......(process-put.http | 
| 1fd00 | 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 73 74 61 72 74 65 64 20 27 74 29 29 29 29 0a | con.:elnode-http-started.'t)))). | 
| 1fd20 | 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d    68 74 74 70 2d 65 6e 64 20 28 68 74 74 70 63 6f | .(defun.elnode--http-end.(httpco | 
| 1fd40 | 6e 29 0a 20 20 22 57 65 20 6e 65 65 64 20 61 20    73 70 65 63 69 61 6c 20 65 6e 64 20 66 75 6e 63 | n)..."We.need.a.special.end.func | 
| 1fd60 | 74 69 6f 6e 20 74 6f 20 64 6f 20 74 68 65 20 65    6d 61 63 73 20 63 6c 65 61 72 20 75 70 2e 0a 0a | tion.to.do.the.emacs.clear.up... | 
| 1fd80 | 54 68 69 73 20 6d 61 6b 65 73 20 61 63 63 65 73    73 20 6c 6f 67 20 66 69 6c 65 20 63 61 6c 6c 73 | This.makes.access.log.file.calls | 
| 1fda0 | 20 69 66 20 74 68 65 20 73 6f 63 6b 65 74 20 68    61 73 20 61 20 70 72 6f 70 65 72 74 79 0a 60 3a | .if.the.socket.has.a.property.`: | 
| 1fdc0 | 65 6c 6e 6f 64 65 2d 61 63 63 65 73 73 2d 6c 6f    67 2d 6e 61 6d 65 27 2e 20 20 54 68 65 20 70 72 | elnode-access-log-name'...The.pr | 
| 1fde0 | 6f 70 65 72 74 79 20 69 73 20 74 61 6b 65 6e 20    74 6f 20 62 65 20 74 68 65 20 6e 61 6d 65 0a 6f | operty.is.taken.to.be.the.name.o | 
| 1fe00 | 66 20 61 20 62 75 66 66 65 72 2e 22 0a 20 20 28    65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 65 6c | f.a.buffer."...(elnode-error."el | 
| 1fe20 | 6e 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 65    6e 64 69 6e 67 20 73 6f 63 6b 65 74 20 25 73 22 | node--http-end.ending.socket.%s" | 
| 1fe40 | 20 68 74 74 70 63 6f 6e 29 0a 20 20 28 6c 65 74    20 28 28 61 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 | .httpcon)...(let.((access-log-na | 
| 1fe60 | 6d 65 20 28 70 72 6f 63 65 73 73 2d 67 65 74 20    68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d | me.(process-get.httpcon.:elnode- | 
| 1fe80 | 61 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 29    29 29 0a 20 20 20 20 28 77 68 65 6e 20 61 63 63 | access-log-name))).....(when.acc | 
| 1fea0 | 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 0a 20 20 20    20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 | ess-log-name.......(condition-ca | 
| 1fec0 | 73 65 20 65 72 72 0a 20 20 20 20 20 20 20 20 20    20 28 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 61 63 63 | se.err...........(elnode-log-acc | 
| 1fee0 | 65 73 73 20 61 63 63 65 73 73 2d 6c 6f 67 2d 6e    61 6d 65 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 | ess.access-log-name.httpcon).... | 
| 1ff00 | 20 20 20 20 20 28 65 72 72 6f 72 0a 20 20 20 20    20 20 20 20 20 28 6d 65 73 73 61 67 65 0a 20 20 | .....(error..........(message... | 
| 1ff20 | 20 20 20 20 20 20 20 20 28 63 6f 6e 63 61 74 0a    20 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f | ........(concat............"elno | 
| 1ff40 | 64 65 2d 2d 68 74 74 70 2d 65 6e 64 3a 20 61 6e    20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 | de--http-end:.an.error.occurred. | 
| 1ff60 | 22 0a 20 20 20 20 20 20 20 20 20 20 20 22 70 72    6f 63 65 73 73 69 6e 67 20 74 68 65 20 61 63 63 | "............"processing.the.acc | 
| 1ff80 | 65 73 73 20 6c 6f 67 22 29 29 29 29 29 29 0a 20    20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65 | ess.log"))))))...(condition-case | 
| 1ffa0 | 20 6e 69 6c 0a 20 20 20 20 20 20 28 70 72 6f 63    65 73 73 2d 73 65 6e 64 2d 65 6f 66 20 68 74 74 | .nil.......(process-send-eof.htt | 
| 1ffc0 | 70 63 6f 6e 29 0a 20 20 20 20 28 65 72 72 6f 72    20 28 6d 65 73 73 61 67 65 20 22 65 6c 6e 6f 64 | pcon).....(error.(message."elnod | 
| 1ffe0 | 65 2d 2d 68 74 74 70 2d 65 6e 64 20 63 6f 75 6c    64 20 6e 6f 74 20 73 65 6e 64 20 45 4f 46 22 29 | e--http-end.could.not.send.EOF") | 
| 20000 | 29 29 0a 20 20 28 64 65 6c 65 74 65 2d 70 72 6f    63 65 73 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 | ))...(delete-process.httpcon)... | 
| 20020 | 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28 70 72    6f 63 65 73 73 2d 62 75 66 66 65 72 20 68 74 74 | (kill-buffer.(process-buffer.htt | 
| 20040 | 70 63 6f 6e 29 29 29 0a 0a 28 64 65 66 75 6e 20    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 74 75 | pcon)))..(defun.elnode-http-retu | 
| 20060 | 72 6e 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74    69 6f 6e 61 6c 20 64 61 74 61 29 0a 20 20 22 45 | rn.(httpcon.&optional.data)..."E | 
| 20080 | 6e 64 20 74 68 65 20 72 65 73 70 6f 6e 73 65 20    6f 6e 20 48 54 54 50 43 4f 4e 20 6f 70 74 69 6f | nd.the.response.on.HTTPCON.optio | 
| 200a0 | 6e 61 6c 6c 79 20 73 65 6e 64 69 6e 67 20 44 41    54 41 20 66 69 72 73 74 2e 0a 0a 48 54 54 50 43 | nally.sending.DATA.first...HTTPC | 
| 200c0 | 4f 4e 20 69 73 20 74 68 65 20 68 74 74 70 20 63    6f 6e 6e 65 63 74 69 6f 6e 20 77 68 69 63 68 20 | ON.is.the.http.connection.which. | 
| 200e0 | 6d 75 73 74 20 68 61 76 65 20 68 61 64 20 74 68    65 20 68 65 61 64 65 72 73 0a 73 65 6e 74 20 77 | must.have.had.the.headers.sent.w | 
| 20100 | 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 73 74 61 72 74 27 0a 0a 44 41 54 41 20 6d 75 | ith.`elnode-http-start'..DATA.mu | 
| 20120 | 73 74 20 62 65 20 61 20 73 74 72 69 6e 67 2c 20    69 74 27 73 20 6a 75 73 74 20 70 61 73 73 65 64 | st.be.a.string,.it's.just.passed | 
| 20140 | 20 74 6f 20 60 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 73 65 6e 64 27 2e 22 0a 20 20 28 69 66 20 28 | .to.`elnode-http-send'."...(if.( | 
| 20160 | 6e 6f 74 20 28 70 72 6f 63 65 73 73 2d 67 65 74    20 68 74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 | not.(process-get.httpcon.:elnode | 
| 20180 | 2d 68 74 74 70 2d 73 74 61 72 74 65 64 29 29 0a    20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 | -http-started)).......(elnode-er | 
| 201a0 | 72 6f 72 20 22 48 74 74 70 20 6e 6f 74 20 73 74    61 72 74 65 64 22 29 0a 20 20 20 20 28 70 72 6f | ror."Http.not.started").....(pro | 
| 201c0 | 67 6e 0a 20 20 20 20 20 20 28 69 66 20 64 61 74    61 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | gn.......(if.data...........(eln | 
| 201e0 | 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74    72 69 6e 67 20 68 74 74 70 63 6f 6e 20 64 61 74 | ode-http-send-string.httpcon.dat | 
| 20200 | 61 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28    28 65 6f 66 2d 66 75 6e 63 20 28 70 72 6f 63 65 | a)).......(let.((eof-func.(proce | 
| 20220 | 73 73 2d 67 65 74 20 68 74 74 70 63 6f 6e 20 3a    73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f | ss-get.httpcon.:send-eof-functio | 
| 20240 | 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 69 66    20 28 66 75 6e 63 74 69 6f 6e 70 20 65 6f 66 2d | n))).........(if.(functionp.eof- | 
| 20260 | 66 75 6e 63 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 66 75 6e 63 61 6c 6c 20 65 6f 66 2d 66 | func).............(funcall.eof-f | 
| 20280 | 75 6e 63 20 68 74 74 70 63 6f 6e 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 3b 3b 20 4e 65 65 64 | unc.httpcon).............;;.Need | 
| 202a0 | 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 63 68    75 6e 6b 65 64 20 65 6e 63 6f 64 69 6e 67 20 68 | .to.close.the.chunked.encoding.h | 
| 202c0 | 65 72 65 0a 20 20 20 20 20 20 20 20 20 20 20 20    28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e | ere.............(elnode-http-sen | 
| 202e0 | 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e    20 22 22 29 29 29 29 29 29 0a 0a 28 64 65 66 75 | d-string.httpcon.""))))))..(defu | 
| 20300 | 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 68 74    6d 6c 20 28 68 74 74 70 63 6f 6e 20 68 74 6d 6c | n.elnode-send-html.(httpcon.html | 
| 20320 | 29 0a 20 20 22 53 69 6d 70 6c 65 20 73 65 6e 64    20 66 6f 72 20 48 54 4d 4c 2e 0a 0a 55 73 65 20 | )..."Simple.send.for.HTML...Use. | 
| 20340 | 74 68 69 73 20 66 6f 72 20 73 69 6d 70 6c 65 20    73 65 6e 64 69 6e 67 20 6f 66 20 61 20 66 75 6c | this.for.simple.sending.of.a.ful | 
| 20360 | 6c 20 48 54 4d 4c 20 72 65 73 70 6f 6e 73 65 3a    0a 0a 20 28 64 65 66 75 6e 20 6d 79 2d 68 61 6e | l.HTML.response:...(defun.my-han | 
| 20380 | 64 6c 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20    20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 68 | dler.(httpcon)....(elnode-send-h | 
| 203a0 | 74 6d 6c 20 68 74 74 70 63 6f 6e 20 5c 22 3c 68    74 6d 6c 3e 3c 68 31 3e 48 65 6c 6c 6f 21 3c 2f | tml.httpcon.\"<html><h1>Hello!</ | 
| 203c0 | 68 31 3e 3c 2f 68 74 6d 6c 3e 5c 22 29 29 0a 0a    54 68 65 20 64 61 74 61 20 69 73 20 73 65 6e 74 | h1></html>\"))..The.data.is.sent | 
| 203e0 | 20 77 69 74 68 20 63 6f 6e 74 65 6e 74 20 74 79    70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 2e 22 0a | .with.content.type:.text/html.". | 
| 20400 | 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73    74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30 | ..(elnode-http-start.httpcon.200 | 
| 20420 | 20 27 28 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65    22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 22 29 | .'("Content-Type"..."text/html") | 
| 20440 | 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 72 65 74 75 72 6e 20 68 74 74 70 63 6f 6e 20 | )...(elnode-http-return.httpcon. | 
| 20460 | 68 74 6d 6c 29 29 0a 0a 28 64 65 66 75 6e 20 65    6c 6e 6f 64 65 2d 6a 73 6f 6e 2d 66 69 78 20 28 | html))..(defun.elnode-json-fix.( | 
| 20480 | 64 61 74 61 29 0a 20 20 22 46 69 78 20 4a 53 4f    4e 20 22 0a 20 20 28 6c 65 74 20 28 28 6a 73 6f | data)..."Fix.JSON."...(let.((jso | 
| 204a0 | 6e 2d 74 6f 2d 73 65 6e 64 0a 20 20 20 20 20 20    20 20 20 28 6e 6f 66 6c 65 74 0a 20 20 20 20 20 | n-to-send..........(noflet...... | 
| 204c0 | 20 20 20 20 20 20 20 20 28 28 6a 73 6f 6e 2d 61    6c 69 73 74 2d 70 20 28 6c 69 73 74 29 0a 20 20 | ........((json-alist-p.(list)... | 
| 204e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50    72 6f 70 65 72 20 63 68 65 63 6b 20 66 6f 72 20 | .............."Proper.check.for. | 
| 20500 | 41 4c 49 53 54 2e 22 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 77 68 69 6c 65 20 28 | ALIST.".................(while.( | 
| 20520 | 63 6f 6e 73 70 20 6c 69 73 74 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 | consp.list)...................(s | 
| 20540 | 65 74 71 20 6c 69 73 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | etq.list........................ | 
| 20560 | 20 28 69 66 20 28 61 6e 64 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(if.(and....................... | 
| 20580 | 20 20 20 20 20 20 20 28 63 6f 6e 73 70 20 28 63    61 72 20 6c 69 73 74 29 29 0a 20 20 20 20 20 20 | .......(consp.(car.list))....... | 
| 205a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 6e 6f 74 20 28 63 6f 6e | .......................(not.(con | 
| 205c0 | 73 70 20 28 63 61 61 72 20 6c 69 73 74 29 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | sp.(caar.list)))................ | 
| 205e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e    6f 74 20 28 76 65 63 74 6f 72 70 20 28 63 61 61 | ..............(not.(vectorp.(caa | 
| 20600 | 72 20 6c 69 73 74 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | r.list))))...................... | 
| 20620 | 20 20 20 20 20 20 20 28 63 64 72 20 6c 69 73 74    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .......(cdr.list)............... | 
| 20640 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 6e    6f 74 2d 61 6c 69 73 74 29 29 29 0a 20 20 20 20 | ..............'not-alist)))..... | 
| 20660 | 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 75 6c    6c 20 6c 69 73 74 29 29 29 0a 20 20 20 20 20 20 | ............(null.list)))....... | 
| 20680 | 20 20 20 20 20 28 6a 73 6f 6e 2d 65 6e 63 6f 64    65 20 64 61 74 61 29 29 29 29 20 6a 73 6f 6e 2d | .....(json-encode.data)))).json- | 
| 206a0 | 74 6f 2d 73 65 6e 64 29 29 0a 0a 28 64 65 66 75    6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 | to-send))..(defun.elnode-send-re | 
| 206c0 | 70 6f 72 74 20 28 68 74 74 70 63 6f 6e 29 0a 20    20 22 53 65 6e 64 20 62 61 63 6b 20 61 6e 20 48 | port.(httpcon)..."Send.back.an.H | 
| 206e0 | 54 4d 4c 20 72 65 70 6f 72 74 20 6f 6e 20 74 68    65 20 72 65 71 75 65 73 74 2e 0a 0a 54 68 69 73 | TML.report.on.the.request...This | 
| 20700 | 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c    20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 22 | .is.often.useful.for.debugging." | 
| 20720 | 0a 20 20 28 6e 6f 66 6c 65 74 20 28 28 61 6c 69    73 74 2d 3e 68 74 6d 6c 20 28 61 6c 69 73 74 29 | ...(noflet.((alist->html.(alist) | 
| 20740 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6d    61 70 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 | ..............(mapconcat........ | 
| 20760 | 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28    68 64 72 2d 70 61 69 72 29 0a 20 20 20 20 20 20 | .......(lambda.(hdr-pair)....... | 
| 20780 | 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61    74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..........(format............... | 
| 207a0 | 20 20 20 22 25 73 20 25 73 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 | ..."%s.%s"..................(car | 
| 207c0 | 20 68 64 72 2d 70 61 69 72 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 | .hdr-pair)..................(let | 
| 207e0 | 20 28 28 76 20 28 63 64 72 20 68 64 72 2d 70 61    69 72 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | .((v.(cdr.hdr-pair)))........... | 
| 20800 | 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 6e    64 20 76 20 28 6e 6f 74 20 28 65 71 75 61 6c 20 | .........(if.(and.v.(not.(equal. | 
| 20820 | 76 20 22 22 29 29 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | v."")))........................( | 
| 20840 | 66 6f 72 6d 61 74 20 22 25 53 22 20 76 29 20 22    22 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 | format."%S".v).""))))........... | 
| 20860 | 20 20 20 20 61 6c 69 73 74 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 22 5c 6e 22 29 29 29 0a | ....alist..............."\n"))). | 
| 20880 | 20 20 20 20 28 6c 65 74 2a 20 28 28 6d 65 74 68    6f 64 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | ....(let*.((method.(elnode-http- | 
| 208a0 | 6d 65 74 68 6f 64 20 68 74 74 70 63 6f 6e 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 28 70 61 72 | method.httpcon))............(par | 
| 208c0 | 61 6d 74 65 72 73 20 28 61 6c 69 73 74 2d 3e 68    74 6d 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 | amters.(alist->html............. | 
| 208e0 | 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 | ...........(or.(elnode-http-para | 
| 20900 | 6d 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ms.httpcon)..................... | 
| 20920 | 20 20 20 20 20 20 20 27 28 28 22 4e 6f 6e 65 22    2e 20 22 22 29 29 29 29 29 0a 20 20 20 20 20 20 | .......'(("None".."")))))....... | 
| 20940 | 20 20 20 20 20 28 68 65 61 64 65 72 73 20 28 61    6c 69 73 74 2d 3e 68 74 6d 6c 20 28 65 6c 6e 6f | .....(headers.(alist->html.(elno | 
| 20960 | 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 73 20    68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 | de-http-headers.httpcon)))...... | 
| 20980 | 20 20 20 20 20 20 28 70 61 67 65 20 28 73 2d 6c    65 78 2d 66 6f 72 6d 61 74 20 22 3c 68 74 6d 6c | ......(page.(s-lex-format."<html | 
| 209a0 | 3e 0a 3c 73 74 79 6c 65 3e 0a 62 6f 64 79 20 7b    20 66 6f 6e 74 2d 66 61 6d 69 6c 79 3a 20 73 61 | >.<style>.body.{.font-family:.sa | 
| 209c0 | 6e 73 2d 73 65 72 69 66 3b 7d 0a 74 64 20 7b 0a    76 65 72 74 69 63 61 6c 2d 61 6c 69 67 6e 3a 20 | ns-serif;}.td.{.vertical-align:. | 
| 209e0 | 74 6f 70 3b 0a 7d 0a 3c 2f 73 74 79 6c 65 3e 0a    3c 62 6f 64 79 3e 0a 3c 74 61 62 6c 65 3e 0a 3c | top;.}.</style>.<body>.<table>.< | 
| 20a00 | 74 72 3e 3c 74 64 3e 6d 65 74 68 6f 64 3a 3c 2f    74 64 3e 3c 74 64 3e 24 7b 6d 65 74 68 6f 64 7d | tr><td>method:</td><td>${method} | 
| 20a20 | 3c 2f 74 64 3e 3c 2f 74 72 3e 0a 3c 74 72 3e 3c    74 64 3e 70 61 72 61 6d 65 74 65 72 73 3a 3c 2f | </td></tr>.<tr><td>parameters:</ | 
| 20a40 | 74 64 3e 3c 74 64 3e 3c 70 72 65 3e 24 7b 70 61    72 61 6d 74 65 72 73 7d 3c 2f 70 72 65 3e 3c 2f | td><td><pre>${paramters}</pre></ | 
| 20a60 | 74 64 3e 3c 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e    68 65 61 64 65 72 73 3a 3c 2f 74 64 3e 3c 74 64 | td><tr>.<tr><td>headers:</td><td | 
| 20a80 | 3e 3c 70 72 65 3e 24 7b 68 65 61 64 65 72 73 7d    3c 2f 70 72 65 3e 3c 2f 74 64 3e 3c 74 72 3e 0a | ><pre>${headers}</pre></td><tr>. | 
| 20aa0 | 3c 2f 74 61 62 6c 65 3e 0a 3c 2f 62 6f 64 79 3e    0a 3c 2f 68 74 6d 6c 3e 22 29 29 29 0a 20 20 20 | </table>.</body>.</html>"))).... | 
| 20ac0 | 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d    68 74 6d 6c 20 68 74 74 70 63 6f 6e 20 70 61 67 | ...(elnode-send-html.httpcon.pag | 
| 20ae0 | 65 29 29 29 29 0a 0a 0a 28 64 65 66 75 6e 2a 20    65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 6a 73 6f 6e | e))))...(defun*.elnode-send-json | 
| 20b00 | 20 28 68 74 74 70 63 6f 6e 20 64 61 74 61 20 26    6b 65 79 20 63 6f 6e 74 65 6e 74 2d 74 79 70 65 | .(httpcon.data.&key.content-type | 
| 20b20 | 20 6a 73 6f 6e 70 29 0a 20 20 22 43 6f 6e 76 65    72 74 20 44 41 54 41 20 74 6f 20 4a 53 4f 4e 20 | .jsonp)..."Convert.DATA.to.JSON. | 
| 20b40 | 61 6e 64 20 73 65 6e 64 20 74 6f 20 74 68 65 20    48 54 54 50 43 4f 4e 20 77 69 74 68 20 61 20 32 | and.send.to.the.HTTPCON.with.a.2 | 
| 20b60 | 30 30 20 5c 22 4f 6b 5c 22 2e 0a 0a 44 41 54 41    20 69 73 20 73 6f 6d 65 20 6c 69 73 70 20 6f 62 | 00.\"Ok\"...DATA.is.some.lisp.ob | 
| 20b80 | 6a 65 63 74 2e 0a 0a 49 66 20 43 4f 4e 54 45 4e    54 2d 54 59 50 45 20 69 73 20 73 70 65 63 69 66 | ject...If.CONTENT-TYPE.is.specif | 
| 20ba0 | 69 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 75    73 65 64 20 61 73 20 74 68 65 20 48 54 54 50 20 | ied.then.it.is.used.as.the.HTTP. | 
| 20bc0 | 43 6f 6e 74 65 6e 74 0a 54 79 70 65 20 6f 66 20    74 68 65 20 72 65 73 70 6f 6e 73 65 2e 0a 0a 49 | Content.Type.of.the.response...I | 
| 20be0 | 66 20 4a 53 4f 4e 50 20 69 73 20 73 70 65 63 69    66 69 65 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 | f.JSONP.is.specified.the.content | 
| 20c00 | 20 69 73 20 73 65 6e 74 20 61 73 20 61 20 4a 53    4f 4e 2d 50 20 72 65 73 70 6f 6e 73 65 2e 0a 49 | .is.sent.as.a.JSON-P.response..I | 
| 20c20 | 66 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73    70 65 63 69 66 69 65 73 20 61 20 6e 61 6d 65 20 | f.the.variable.specifies.a.name. | 
| 20c40 | 66 6f 72 20 74 68 65 20 4a 53 4f 4e 2d 50 20 63    61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e | for.the.JSON-P.callback.function | 
| 20c60 | 0a 74 68 61 74 20 74 68 61 74 20 69 73 20 75 73    65 64 2e 20 20 41 6c 74 65 72 6e 61 74 65 6c 79 | .that.that.is.used...Alternately | 
| 20c80 | 2c 20 69 66 20 74 68 65 20 4a 53 4f 4e 50 20 70    61 72 61 6d 65 74 65 72 20 64 6f 65 73 20 6e 6f | ,.if.the.JSONP.parameter.does.no | 
| 20ca0 | 74 0a 73 70 65 63 69 66 79 20 61 20 6e 61 6d 65    2c 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 | t.specify.a.name,.the.parameter. | 
| 20cc0 | 60 63 61 6c 6c 62 61 63 6b 27 20 69 73 20 6c 6f    6f 6b 65 64 20 75 70 20 6f 6e 20 74 68 65 0a 48 | `callback'.is.looked.up.on.the.H | 
| 20ce0 | 54 54 50 43 4f 4e 20 61 6e 64 20 74 68 65 20 76    61 6c 75 65 20 6f 66 20 74 68 61 74 20 75 73 65 | TTPCON.and.the.value.of.that.use | 
| 20d00 | 64 2e 20 20 49 66 20 6e 65 69 74 68 65 72 20 74    68 65 20 4a 53 4f 4e 50 0a 70 61 72 61 6d 65 74 | d...If.neither.the.JSONP.paramet | 
| 20d20 | 65 72 2c 20 6e 6f 74 20 74 68 65 20 48 54 54 50    20 70 61 72 61 6d 65 74 65 72 20 60 63 61 6c 6c | er,.not.the.HTTP.parameter.`call | 
| 20d40 | 62 61 63 6b 27 20 69 73 20 70 72 65 73 65 6e 74    20 74 68 61 74 20 74 68 65 0a 6e 61 6d 65 20 5c | back'.is.present.that.the.name.\ | 
| 20d60 | 22 63 61 6c 6c 62 61 63 6b 5c 22 20 69 73 20 75    73 65 64 2e 22 0a 20 20 28 6c 65 74 20 28 28 6a | "callback\".is.used."...(let.((j | 
| 20d80 | 73 6f 6e 2d 74 6f 2d 73 65 6e 64 20 28 65 6c 6e    6f 64 65 2d 6a 73 6f 6e 2d 66 69 78 20 64 61 74 | son-to-send.(elnode-json-fix.dat | 
| 20da0 | 61 29 29 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65    2d 68 74 74 70 2d 73 74 61 72 74 0a 20 20 20 20 | a))).....(elnode-http-start..... | 
| 20dc0 | 20 68 74 74 70 63 6f 6e 20 32 30 30 0a 20 20 20    20 20 60 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 | .httpcon.200......`("Content-typ | 
| 20de0 | 65 22 20 2e 20 2c 28 6f 72 20 63 6f 6e 74 65 6e    74 2d 74 79 70 65 20 22 61 70 70 6c 69 63 61 74 | e"...,(or.content-type."applicat | 
| 20e00 | 69 6f 6e 2f 6a 73 6f 6e 22 29 29 29 0a 20 20 20    20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72 65 | ion/json"))).....(elnode-http-re | 
| 20e20 | 74 75 72 6e 0a 20 20 20 20 20 68 74 74 70 63 6f    6e 0a 20 20 20 20 20 28 69 66 20 6a 73 6f 6e 70 | turn......httpcon......(if.jsonp | 
| 20e40 | 0a 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61    74 0a 20 20 20 20 20 20 20 20 20 20 22 25 73 28 | ..........(format..........."%s( | 
| 20e60 | 25 73 29 3b 22 0a 20 20 20 20 20 20 20 20 20 20    28 6f 72 20 28 77 68 65 6e 20 28 73 74 72 69 6e | %s);"...........(or.(when.(strin | 
| 20e80 | 67 70 20 6a 73 6f 6e 70 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 6a 73 6f 6e 70 29 | gp.jsonp).................jsonp) | 
| 20ea0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 72 61 | ...............(elnode-http-para | 
| 20ec0 | 6d 20 68 74 74 70 63 6f 6e 20 22 63 61 6c 6c 62    61 63 6b 22 29 0a 20 20 20 20 20 20 20 20 20 20 | m.httpcon."callback")........... | 
| 20ee0 | 20 20 20 20 22 63 61 6c 6c 62 61 63 6b 22 29 0a    20 20 20 20 20 20 20 20 20 20 6a 73 6f 6e 2d 74 | ...."callback")...........json-t | 
| 20f00 | 6f 2d 73 65 6e 64 29 0a 20 20 20 20 20 20 20 20    20 6a 73 6f 6e 2d 74 6f 2d 73 65 6e 64 29 29 29 | o-send)..........json-to-send))) | 
| 20f20 | 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 73 65 6e 64 2d 73 74 61 74 75 73 20 28 68 74 | )..(defun.elnode-send-status.(ht | 
| 20f40 | 74 70 63 6f 6e 20 73 74 61 74 75 73 20 26 6f 70    74 69 6f 6e 61 6c 20 6d 73 67 29 0a 20 20 22 41 | tpcon.status.&optional.msg)..."A | 
| 20f60 | 20 67 65 6e 65 72 69 63 20 68 61 6e 64 6c 65 72    20 74 6f 20 73 65 6e 64 20 53 54 41 54 55 53 20 | .generic.handler.to.send.STATUS. | 
| 20f80 | 74 6f 20 48 54 54 50 43 4f 4e 2e 0a 0a 53 65 6e    64 73 20 61 6e 20 48 54 54 50 20 72 65 73 70 6f | to.HTTPCON...Sends.an.HTTP.respo | 
| 20fa0 | 6e 73 65 20 77 69 74 68 20 53 54 41 54 55 53 20    74 6f 20 74 68 65 20 48 54 54 50 43 4f 4e 2e 20 | nse.with.STATUS.to.the.HTTPCON.. | 
| 20fc0 | 20 41 6e 20 48 54 4d 4c 20 62 6f 64 79 0a 69 73    20 73 65 6e 74 20 62 79 20 6c 6f 6f 6b 69 6e 67 | .An.HTML.body.is.sent.by.looking | 
| 20fe0 | 20 75 70 20 74 68 65 20 53 54 41 54 55 53 20 69    6e 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 64 65 | .up.the.STATUS.in.the.`elnode-de | 
| 21000 | 66 61 75 6c 74 2d 72 65 73 70 6f 6e 73 65 27 0a    74 61 62 6c 65 2e 0a 0a 4f 70 74 69 6f 6e 61 6c | fault-response'.table...Optional | 
| 21020 | 6c 79 20 69 6e 63 6c 75 64 65 20 4d 53 47 2e 22    0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | ly.include.MSG."...(elnode-http- | 
| 21040 | 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 73 74    61 74 75 73 20 27 28 22 43 6f 6e 74 65 6e 74 2d | start.httpcon.status.'("Content- | 
| 21060 | 74 79 70 65 22 20 2e 20 22 74 65 78 74 2f 68 74    6d 6c 22 29 29 0a 20 20 28 65 6c 6e 6f 64 65 2d | type"..."text/html"))...(elnode- | 
| 21080 | 68 74 74 70 2d 72 65 74 75 72 6e 20 68 74 74 70    63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 | http-return.httpcon............. | 
| 210a0 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 2d 66 6f 72 6d 61 74 2d 72 65 73 70 6f 6e | ..........(elnode--format-respon | 
| 210c0 | 73 65 20 73 74 61 74 75 73 20 6d 73 67 29 29 29    0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d | se.status.msg)))..(defun.elnode- | 
| 210e0 | 73 65 6e 64 2d 34 30 34 20 28 68 74 74 70 63 6f    6e 20 26 6f 70 74 69 6f 6e 61 6c 20 6d 73 67 29 | send-404.(httpcon.&optional.msg) | 
| 21100 | 0a 20 20 22 53 65 6e 64 73 20 61 20 4e 6f 74 20    46 6f 75 6e 64 20 65 72 72 6f 72 20 74 6f 20 74 | ..."Sends.a.Not.Found.error.to.t | 
| 21120 | 68 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 4f 70 74    69 6f 6e 61 6c 6c 79 20 69 6e 63 6c 75 64 65 20 | he.HTTPCON...Optionally.include. | 
| 21140 | 4d 53 47 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d    73 65 6e 64 2d 73 74 61 74 75 73 20 68 74 74 70 | MSG."...(elnode-send-status.http | 
| 21160 | 63 6f 6e 20 34 30 34 20 6d 73 67 29 29 0a 0a 28    64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e | con.404.msg))..(defun.elnode-sen | 
| 21180 | 64 2d 34 30 30 20 28 68 74 74 70 63 6f 6e 20 26    6f 70 74 69 6f 6e 61 6c 20 6d 73 67 29 0a 20 20 | d-400.(httpcon.&optional.msg)... | 
| 211a0 | 22 53 65 6e 64 73 20 61 20 42 61 64 20 52 65 71    75 65 73 74 20 65 72 72 6f 72 20 74 6f 20 74 68 | "Sends.a.Bad.Request.error.to.th | 
| 211c0 | 65 20 48 54 54 50 43 4f 4e 2e 0a 0a 4f 70 74 69    6f 6e 61 6c 6c 79 20 69 6e 63 6c 75 64 65 20 4d | e.HTTPCON...Optionally.include.M | 
| 211e0 | 53 47 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 73    65 6e 64 2d 73 74 61 74 75 73 20 68 74 74 70 63 | SG."...(elnode-send-status.httpc | 
| 21200 | 6f 6e 20 34 30 30 20 6d 73 67 29 29 0a 0a 28 64    65 66 75 6e 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 | on.400.msg))..(defun.elnode-send | 
| 21220 | 2d 35 30 30 20 28 68 74 74 70 63 6f 6e 20 26 6f    70 74 69 6f 6e 61 6c 20 6d 73 67 29 0a 20 20 22 | -500.(httpcon.&optional.msg)..." | 
| 21240 | 53 65 6e 64 73 20 61 20 53 65 72 76 65 72 20 45    72 72 6f 72 20 74 6f 20 74 68 65 20 48 54 54 50 | Sends.a.Server.Error.to.the.HTTP | 
| 21260 | 43 4f 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79    20 69 6e 63 6c 75 64 65 20 4d 53 47 2e 22 0a 20 | CON...Optionally.include.MSG.".. | 
| 21280 | 20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74    61 74 75 73 20 68 74 74 70 63 6f 6e 20 35 30 30 | .(elnode-send-status.httpcon.500 | 
| 212a0 | 20 6d 73 67 29 29 0a 0a 28 64 65 66 75 6e 20 65    6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72 | .msg))..(defun.elnode-send-redir | 
| 212c0 | 65 63 74 20 28 68 74 74 70 63 6f 6e 20 6c 6f 63    61 74 69 6f 6e 20 26 6f 70 74 69 6f 6e 61 6c 20 | ect.(httpcon.location.&optional. | 
| 212e0 | 74 79 70 65 29 0a 20 20 22 53 65 6e 64 73 20 61    20 72 65 64 69 72 65 63 74 20 74 6f 20 4c 4f 43 | type)..."Sends.a.redirect.to.LOC | 
| 21300 | 41 54 49 4f 4e 2e 0a 0a 49 66 20 54 59 50 45 20    69 73 20 6e 6f 6e 2d 6e 69 6c 2c 20 75 73 65 20 | ATION...If.TYPE.is.non-nil,.use. | 
| 21320 | 69 74 20 61 73 20 61 20 73 74 61 74 75 73 20 63    6f 64 65 2e 20 20 44 65 66 61 75 6c 74 73 20 74 | it.as.a.status.code...Defaults.t | 
| 21340 | 6f 20 33 30 32 20 2d 0a 70 65 72 6d 61 6e 65 6e    74 20 72 65 64 69 72 65 63 74 2e 22 0a 20 20 28 | o.302.-.permanent.redirect."...( | 
| 21360 | 6c 65 74 20 28 28 73 74 61 74 75 73 2d 63 6f 64    65 20 28 6f 72 20 74 79 70 65 20 33 30 32 29 29 | let.((status-code.(or.type.302)) | 
| 21380 | 29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74    74 70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e | ).....(elnode-http-start.httpcon | 
| 213a0 | 20 73 74 61 74 75 73 2d 63 6f 64 65 20 60 28 22    4c 6f 63 61 74 69 6f 6e 22 20 2e 20 2c 6c 6f 63 | .status-code.`("Location"...,loc | 
| 213c0 | 61 74 69 6f 6e 29 29 0a 20 20 20 20 28 65 6c 6e    6f 64 65 2d 68 74 74 70 2d 72 65 74 75 72 6e 0a | ation)).....(elnode-http-return. | 
| 213e0 | 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20    20 20 28 66 6f 72 6d 61 74 20 22 3c 68 31 3e 72 | .....httpcon......(format."<h1>r | 
| 21400 | 65 64 69 72 65 63 74 69 6e 67 20 79 6f 75 20 74    6f 20 25 73 3c 2f 68 31 3e 5c 72 5c 6e 22 20 6c | edirecting.you.to.%s</h1>\r\n".l | 
| 21420 | 6f 63 61 74 69 6f 6e 29 29 29 29 0a 0a 28 64 65    66 75 6e 20 65 6c 6e 6f 64 65 2d 6e 6f 72 6d 61 | ocation))))..(defun.elnode-norma | 
| 21440 | 6c 69 7a 65 2d 70 61 74 68 20 28 68 74 74 70 63    6f 6e 20 68 61 6e 64 6c 65 72 29 0a 20 20 22 41 | lize-path.(httpcon.handler)..."A | 
| 21460 | 20 64 65 63 6f 72 61 74 6f 72 20 66 6f 72 20 48    41 4e 44 4c 45 52 20 74 68 61 74 20 6e 6f 72 6d | .decorator.for.HANDLER.that.norm | 
| 21480 | 61 6c 69 7a 65 73 20 70 61 74 68 73 20 74 6f 20    68 61 76 65 20 61 20 74 72 61 69 6c 69 6e 67 20 | alizes.paths.to.have.a.trailing. | 
| 214a0 | 73 6c 61 73 68 2e 0a 0a 54 68 69 73 20 63 68 65    63 6b 73 20 74 68 65 20 48 54 54 50 43 4f 4e 20 | slash...This.checks.the.HTTPCON. | 
| 214c0 | 70 61 74 68 20 66 6f 72 20 61 20 74 72 61 69 6c    69 6e 67 20 73 6c 61 73 68 20 61 6e 64 20 73 65 | path.for.a.trailing.slash.and.se | 
| 214e0 | 6e 64 73 20 61 20 33 30 32 0a 74 6f 20 74 68 65    20 73 6c 61 73 68 20 74 72 61 69 6c 65 64 20 75 | nds.a.302.to.the.slash.trailed.u | 
| 21500 | 72 6c 20 69 66 20 74 68 65 72 65 20 69 73 20 6e    6f 6e 65 2e 0a 0a 4f 74 68 65 72 77 69 73 65 20 | rl.if.there.is.none...Otherwise. | 
| 21520 | 69 74 20 63 61 6c 6c 73 20 48 41 4e 44 4c 45 52    2e 22 0a 20 20 28 6c 65 74 20 28 28 65 6e 64 73 | it.calls.HANDLER."...(let.((ends | 
| 21540 | 2d 69 6e 2d 73 6c 61 73 68 2d 6f 72 2d 65 78 74    65 6e 73 69 6f 6e 2d 72 65 67 65 78 20 22 2e 2a | -in-slash-or-extension-regex.".* | 
| 21560 | 5c 5c 28 2f 5c 5c 7c 2e 2a 5c 5c 2e 5b 5e 2f 5d    2a 5c 5c 29 24 22 29 0a 20 20 20 20 20 20 20 20 | \\(/\\|.*\\.[^/]*\\)$")......... | 
| 21580 | 28 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d 68 74    74 70 2d 70 61 74 68 69 6e 66 6f 20 68 74 74 70 | (path.(elnode-http-pathinfo.http | 
| 215a0 | 63 6f 6e 29 29 29 0a 20 20 20 20 28 69 66 20 28    6e 6f 74 20 28 73 61 76 65 2d 6d 61 74 63 68 2d | con))).....(if.(not.(save-match- | 
| 215c0 | 64 61 74 61 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 73 74 72 69 6e 67 2d 6d 61 74 63 | data................(string-matc | 
| 215e0 | 68 20 65 6e 64 73 2d 69 6e 2d 73 6c 61 73 68 2d    6f 72 2d 65 78 74 65 6e 73 69 6f 6e 2d 72 65 67 | h.ends-in-slash-or-extension-reg | 
| 21600 | 65 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ex.............................. | 
| 21620 | 70 61 74 68 29 29 29 0a 20 20 20 20 20 20 20 20    28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 | path))).........(elnode-send-red | 
| 21640 | 69 72 65 63 74 0a 20 20 20 20 20 20 20 20 20 68    74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 | irect..........httpcon.......... | 
| 21660 | 28 66 6f 72 6d 61 74 20 22 25 73 2f 22 20 70 61    74 68 29 29 0a 20 20 20 20 20 20 28 66 75 6e 63 | (format."%s/".path)).......(func | 
| 21680 | 61 6c 6c 20 68 61 6e 64 6c 65 72 20 68 74 74 70    63 6f 6e 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 | all.handler.httpcon))))..(defun. | 
| 216a0 | 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66    69 6e 64 2d 6d 61 74 63 68 2d 66 75 6e 63 20 28 | elnode--mapper-find-match-func.( | 
| 216c0 | 6d 61 74 63 68 2d 70 61 74 68 20 6d 61 74 63 68    2d 70 61 69 72 29 0a 20 20 22 46 75 6e 74 69 6f | match-path.match-pair)..."Funtio | 
| 216e0 | 6e 20 74 6f 20 74 65 73 74 20 4d 41 54 43 48 2d    50 41 54 48 20 61 67 61 69 6e 73 74 20 4d 41 54 | n.to.test.MATCH-PATH.against.MAT | 
| 21700 | 43 48 2d 50 41 49 52 2e 22 0a 20 20 28 6c 65 74    20 28 28 6d 20 28 73 74 72 69 6e 67 2d 6d 61 74 | CH-PAIR."...(let.((m.(string-mat | 
| 21720 | 63 68 20 28 63 61 72 20 6d 61 74 63 68 2d 70 61    69 72 29 20 6d 61 74 63 68 2d 70 61 74 68 29 29 | ch.(car.match-pair).match-path)) | 
| 21740 | 29 0a 20 20 20 20 28 61 6e 64 20 6d 0a 20 20 20    20 20 20 20 20 20 28 6e 75 6d 62 65 72 70 20 6d | ).....(and.m..........(numberp.m | 
| 21760 | 29 0a 20 20 20 20 20 20 20 20 20 28 3e 3d 20 6d    20 30 29 0a 20 20 20 20 20 20 20 20 20 6d 61 74 | )..........(>=.m.0)..........mat | 
| 21780 | 63 68 2d 70 61 69 72 29 29 29 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 | ch-pair)))..(defun.elnode--mappe | 
| 217a0 | 72 2d 66 69 6e 64 2d 6d 61 70 70 69 6e 67 20 28    6d 61 74 63 68 2d 70 61 74 68 20 6d 61 70 70 69 | r-find-mapping.(match-path.mappi | 
| 217c0 | 6e 67 2d 74 61 62 6c 65 29 0a 20 20 22 52 65 74    75 72 6e 20 74 68 65 20 6d 61 70 70 69 6e 67 20 | ng-table)..."Return.the.mapping. | 
| 217e0 | 74 68 61 74 20 6d 61 74 63 68 65 73 20 4d 41 54    43 48 2d 50 41 54 48 20 69 6e 20 4d 41 50 50 49 | that.matches.MATCH-PATH.in.MAPPI | 
| 21800 | 4e 47 2d 54 41 42 4c 45 2e 22 0a 20 20 28 6c 6f    6f 70 20 66 6f 72 20 6d 61 70 70 69 6e 67 20 69 | NG-TABLE."...(loop.for.mapping.i | 
| 21820 | 6e 20 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a    20 20 20 20 20 69 66 20 28 65 6c 6e 6f 64 65 2d | n.mapping-table......if.(elnode- | 
| 21840 | 2d 6d 61 70 70 65 72 2d 66 69 6e 64 2d 6d 61 74    63 68 2d 66 75 6e 63 20 6d 61 74 63 68 2d 70 61 | -mapper-find-match-func.match-pa | 
| 21860 | 74 68 20 6d 61 70 70 69 6e 67 29 0a 20 20 20 20    20 72 65 74 75 72 6e 20 6d 61 70 70 69 6e 67 29 | th.mapping)......return.mapping) | 
| 21880 | 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65    2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 20 28 68 | )..(defun.elnode--mapper-find.(h | 
| 218a0 | 74 74 70 63 6f 6e 20 70 61 74 68 20 6d 61 70 70    69 6e 67 2d 74 61 62 6c 65 29 0a 20 20 22 54 72 | ttpcon.path.mapping-table)..."Tr | 
| 218c0 | 79 20 61 6e 64 20 66 69 6e 64 20 74 68 65 20 50    41 54 48 20 69 6e 73 69 64 65 20 74 68 65 20 4d | y.and.find.the.PATH.inside.the.M | 
| 218e0 | 41 50 50 49 4e 47 2d 54 41 42 4c 45 2e 0a 0a 54    68 69 73 20 66 75 6e 63 74 69 6f 6e 20 65 78 70 | APPING-TABLE...This.function.exp | 
| 21900 | 6f 73 65 73 20 69 74 73 20 60 6d 61 74 63 68 2d    64 61 74 61 27 20 6f 6e 20 74 68 65 20 27 70 61 | oses.its.`match-data'.on.the.'pa | 
| 21920 | 74 68 27 20 76 61 72 69 61 62 6c 65 20 73 6f 0a    74 68 61 74 20 79 6f 75 20 63 61 6e 20 61 63 63 | th'.variable.so.that.you.can.acc | 
| 21940 | 65 73 73 20 74 68 61 74 20 69 6e 20 79 6f 75 72    20 68 61 6e 64 6c 65 72 20 77 69 74 68 20 73 6f | ess.that.in.your.handler.with.so | 
| 21960 | 6d 65 74 68 69 6e 67 20 6c 69 6b 65 3a 0a 0a 20    28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 | mething.like:...(match-string.1. | 
| 21980 | 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74    68 69 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a | (elnode-http-pathinfo.httpcon)). | 
| 219a0 | 0a 52 65 74 75 72 6e 73 20 74 68 65 20 68 61 6e    64 6c 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 68 | .Returns.the.handler.function.th | 
| 219c0 | 61 74 20 6d 61 70 70 65 64 2c 20 6f 72 20 60 6e    69 6c 27 2e 0a 0a 54 68 69 73 20 66 75 6e 63 74 | at.mapped,.or.`nil'...This.funct | 
| 219e0 | 69 6f 6e 20 61 6c 73 6f 20 65 73 74 61 62 6c 69    73 68 65 73 20 74 68 65 20 60 3a 65 6c 6e 6f 64 | ion.also.establishes.the.`:elnod | 
| 21a00 | 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 27 0a    70 72 6f 70 65 72 74 79 2c 20 61 64 64 69 6e 67 | e-http-mapping'.property,.adding | 
| 21a20 | 20 69 74 20 74 6f 20 74 68 65 20 48 54 54 50 43    4f 4e 20 73 6f 20 69 74 20 63 61 6e 20 62 65 20 | .it.to.the.HTTPCON.so.it.can.be. | 
| 21a40 | 61 63 63 65 73 73 65 64 20 66 72 6f 6d 0a 69 6e    73 69 64 65 20 79 6f 75 72 20 68 61 6e 64 6c 65 | accessed.from.inside.your.handle | 
| 21a60 | 72 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 68    74 74 70 2d 6d 61 70 70 69 6e 67 27 2e 22 0a 20 | r.with.`elnode-http-mapping'.".. | 
| 21a80 | 20 3b 3b 20 46 69 72 73 74 20 66 69 6e 64 20 74    68 65 20 6d 61 70 70 69 6e 67 20 69 6e 20 74 68 | .;;.First.find.the.mapping.in.th | 
| 21aa0 | 65 20 6d 61 70 70 69 6e 67 20 74 61 62 6c 65 0a    20 20 28 6c 65 74 2a 20 28 28 70 61 69 72 20 28 | e.mapping.table...(let*.((pair.( | 
| 21ac0 | 65 6c 6e 6f 64 65 2d 2d 6d 61 70 70 65 72 2d 66    69 6e 64 2d 6d 61 70 70 69 6e 67 20 70 61 74 68 | elnode--mapper-find-mapping.path | 
| 21ae0 | 20 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 29 29    0a 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 2d | .mapping-table))..........(func- | 
| 21b00 | 69 74 65 6d 20 28 61 6e 64 20 70 61 69 72 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | item.(and.pair.................. | 
| 21b20 | 20 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28 28    76 20 28 63 64 72 20 70 61 69 72 29 29 29 0a 20 | ........(let*.((v.(cdr.pair))).. | 
| 21b40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 61 | ..........................(or.(a | 
| 21b60 | 6e 64 20 28 61 74 6f 6d 20 76 29 20 76 29 20 28    63 61 72 20 76 29 29 29 29 29 29 0a 20 20 20 20 | nd.(atom.v).v).(car.v))))))..... | 
| 21b80 | 3b 3b 20 4e 6f 77 20 77 6f 72 6b 20 6f 75 74 20    69 66 20 77 65 20 66 6f 75 6e 64 20 6f 6e 65 20 | ;;.Now.work.out.if.we.found.one. | 
| 21ba0 | 61 6e 64 20 77 68 61 74 20 69 74 20 77 61 73 20    6d 61 70 70 65 64 20 74 6f 0a 20 20 20 20 28 77 | and.what.it.was.mapped.to.....(w | 
| 21bc0 | 68 65 6e 20 28 6f 72 20 28 66 75 6e 63 74 69 6f    6e 70 20 66 75 6e 63 2d 69 74 65 6d 29 0a 20 20 | hen.(or.(functionp.func-item)... | 
| 21be0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e    63 74 69 6f 6e 70 20 28 61 6e 64 20 28 73 79 6d | ............(functionp.(and.(sym | 
| 21c00 | 62 6f 6c 70 20 66 75 6e 63 2d 69 74 65 6d 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | bolp.func-item)................. | 
| 21c20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73    79 6d 62 6f 6c 2d 76 61 6c 75 65 20 66 75 6e 63 | ..............(symbol-value.func | 
| 21c40 | 2d 69 74 65 6d 29 29 29 29 0a 20 20 20 20 20 20    3b 3b 20 4d 61 6b 65 20 74 68 65 20 6d 61 74 63 | -item)))).......;;.Make.the.matc | 
| 21c60 | 68 20 70 61 72 74 73 20 61 63 63 65 73 73 69 62    6c 65 0a 20 20 20 20 20 20 28 70 72 6f 63 65 73 | h.parts.accessible.......(proces | 
| 21c80 | 73 2d 70 75 74 0a 20 20 20 20 20 20 20 68 74 74    70 63 6f 6e 0a 20 20 20 20 20 20 20 3a 65 6c 6e | s-put........httpcon........:eln | 
| 21ca0 | 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67    0a 20 20 20 20 20 20 20 28 77 68 65 6e 20 28 73 | ode-http-mapping........(when.(s | 
| 21cc0 | 74 72 69 6e 67 2d 6d 61 74 63 68 20 28 63 61 72    20 70 61 69 72 29 20 70 61 74 68 29 0a 20 20 20 | tring-match.(car.pair).path).... | 
| 21ce0 | 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72 20    69 20 66 72 6f 6d 20 30 20 74 6f 20 28 2d 20 28 | ......(loop.for.i.from.0.to.(-.( | 
| 21d00 | 2f 20 28 6c 65 6e 67 74 68 20 28 6d 61 74 63 68    2d 64 61 74 61 20 70 61 74 68 29 29 20 32 29 20 | /.(length.(match-data.path)).2). | 
| 21d20 | 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 63 6f 6c 6c 65 63 74 20 28 6d 61 74 63 68 | 1)................collect.(match | 
| 21d40 | 2d 73 74 72 69 6e 67 20 69 20 70 61 74 68 29 29    29 29 0a 20 20 20 20 20 20 3b 3b 20 52 65 74 75 | -string.i.path)))).......;;.Retu | 
| 21d60 | 72 6e 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 0a    20 20 20 20 20 20 66 75 6e 63 2d 69 74 65 6d 29 | rn.the.function.......func-item) | 
| 21d80 | 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64    65 2d 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 2d | ))..(defun.elnode--http-mapping- | 
| 21da0 | 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 28    68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f 6e 61 | implementation.(httpcon.&optiona | 
| 21dc0 | 6c 20 70 61 72 74 29 0a 20 20 22 54 68 65 20 61    63 74 75 61 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 | l.part)..."The.actual.implementa | 
| 21de0 | 74 69 6f 6e 20 6f 66 20 60 65 6c 6e 6f 64 65 2d    68 74 74 70 2d 6d 61 70 70 69 6e 67 2e 27 0a 0a | tion.of.`elnode-http-mapping.'.. | 
| 21e00 | 54 68 69 73 20 69 73 20 68 65 72 65 20 73 6f 20    74 68 61 74 20 79 6f 75 20 66 6c 65 74 20 60 65 | This.is.here.so.that.you.flet.`e | 
| 21e20 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69    6e 67 27 20 61 6e 64 20 73 74 69 6c 6c 20 67 65 | lnode-http-mapping'.and.still.ge | 
| 21e40 | 74 0a 61 74 20 74 68 65 20 72 65 61 6c 20 66 75    6e 63 74 69 6f 6e 61 6c 69 74 79 2e 22 0a 20 20 | t.at.the.real.functionality."... | 
| 21e60 | 28 69 66 20 28 65 71 20 70 61 72 74 20 74 29 0a    20 20 20 20 20 20 28 6c 65 6e 67 74 68 20 28 70 | (if.(eq.part.t).......(length.(p | 
| 21e80 | 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70 63    6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | rocess-get.httpcon.:elnode-http- | 
| 21ea0 | 6d 61 70 70 69 6e 67 29 29 0a 20 20 20 20 20 20    3b 3b 20 45 6c 73 65 20 69 74 27 73 20 61 20 73 | mapping)).......;;.Else.it's.a.s | 
| 21ec0 | 70 65 63 69 66 69 63 20 70 61 72 74 0a 20 20 20    20 20 20 28 65 6c 74 0a 20 20 20 20 20 20 20 28 | pecific.part.......(elt........( | 
| 21ee0 | 70 72 6f 63 65 73 73 2d 67 65 74 20 68 74 74 70    63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 68 74 74 70 | process-get.httpcon.:elnode-http | 
| 21f00 | 2d 6d 61 70 70 69 6e 67 29 0a 20 20 20 20 20 20    20 28 69 66 20 70 61 72 74 20 70 61 72 74 20 30 | -mapping)........(if.part.part.0 | 
| 21f20 | 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e    6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 | ))))..(defun.elnode-http-mapping | 
| 21f40 | 20 28 68 74 74 70 63 6f 6e 20 26 6f 70 74 69 6f    6e 61 6c 20 70 61 72 74 29 0a 20 20 22 52 65 74 | .(httpcon.&optional.part)..."Ret | 
| 21f60 | 75 72 6e 20 74 68 65 20 6d 61 74 63 68 20 6f 6e    20 74 68 65 20 48 54 54 50 43 4f 4e 20 74 68 61 | urn.the.match.on.the.HTTPCON.tha | 
| 21f80 | 74 20 72 65 73 75 6c 74 65 64 20 69 6e 20 74 68    65 20 63 75 72 72 65 6e 74 20 68 61 6e 64 6c 65 | t.resulted.in.the.current.handle | 
| 21fa0 | 72 2e 0a 0a 57 69 74 68 20 50 41 52 54 20 69 74    20 72 65 74 75 72 6e 73 20 61 20 73 70 65 63 69 | r...With.PART.it.returns.a.speci | 
| 21fc0 | 66 69 63 20 70 61 72 74 20 6f 66 20 74 68 65 20    6d 61 74 63 68 2c 20 62 79 20 64 65 66 61 75 6c | fic.part.of.the.match,.by.defaul | 
| 21fe0 | 74 0a 50 41 52 54 20 69 73 20 30 2e 20 20 49 66    20 50 41 52 54 20 69 73 20 73 70 65 63 69 66 69 | t.PART.is.0...If.PART.is.specifi | 
| 22000 | 65 64 20 61 73 20 60 74 27 20 74 68 65 6e 20 74    68 65 20 63 6f 75 6e 74 20 6f 66 20 70 61 72 74 | ed.as.`t'.then.the.count.of.part | 
| 22020 | 73 0a 69 73 20 72 65 74 75 72 6e 65 64 2e 0a 0a    54 68 69 73 20 72 65 73 75 6c 74 73 20 6f 6e 6c | s.is.returned...This.results.onl | 
| 22040 | 79 20 66 72 6f 6d 20 61 20 63 61 6c 6c 20 76 69    61 20 60 65 6c 6e 6f 64 65 2d 64 69 73 70 61 74 | y.from.a.call.via.`elnode-dispat | 
| 22060 | 63 68 65 72 27 2e 0a 0a 49 74 20 72 65 74 75 72    6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 77 68 | cher'...It.returns.the.string.wh | 
| 22080 | 69 63 68 20 6d 61 74 63 68 65 64 20 79 6f 75 72    20 75 72 6c 2d 6d 61 70 70 69 6e 67 2c 20 77 69 | ich.matched.your.url-mapping,.wi | 
| 220a0 | 74 68 20 74 68 65 0a 6d 61 74 63 68 2d 64 61 74    61 20 61 74 74 61 63 68 65 64 2e 20 53 6f 20 67 | th.the.match-data.attached..So.g | 
| 220c0 | 69 76 65 6e 20 74 68 65 20 6d 61 70 70 69 6e 67    3a 0a 0a 20 28 5c 22 2f 73 74 61 74 69 63 2f 5c | iven.the.mapping:...(\"/static/\ | 
| 220e0 | 5c 28 2e 2a 5c 5c 29 5c 22 20 2e 20 6d 79 2d 68    61 6e 64 6c 65 72 29 0a 0a 61 6e 64 20 74 68 65 | \(.*\\)\"...my-handler)..and.the | 
| 22100 | 20 72 65 71 75 65 73 74 3a 0a 0a 20 2f 73 74 61    74 69 63 2f 73 6f 6d 65 64 69 72 2f 73 6f 6d 65 | .request:.../static/somedir/some | 
| 22120 | 66 69 6c 65 2e 6a 70 67 0a 0a 54 68 65 20 66 6f    6c 6c 6f 77 69 6e 67 20 69 73 20 74 72 75 65 20 | file.jpg..The.following.is.true. | 
| 22140 | 69 6e 73 69 64 65 20 74 68 65 20 68 61 6e 64 6c    65 72 3a 0a 0a 20 28 65 71 75 61 6c 20 5c 22 2f | inside.the.handler:...(equal.\"/ | 
| 22160 | 73 6f 6d 65 64 69 72 2f 73 6f 6d 65 66 69 6c 65    2e 6a 70 67 5c 22 0a 20 20 20 20 20 20 20 20 28 | somedir/somefile.jpg\".........( | 
| 22180 | 6d 61 74 63 68 2d 73 74 72 69 6e 67 20 31 20 28    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 6d 61 70 70 | match-string.1.(elnode-http-mapp | 
| 221a0 | 69 6e 67 20 68 74 74 70 63 6f 6e 29 29 29 0a 0a    54 68 65 20 66 75 6e 63 74 69 6f 6e 20 60 65 6c | ing.httpcon)))..The.function.`el | 
| 221c0 | 6e 6f 64 65 2d 74 65 73 74 2d 70 61 74 68 27 20    75 73 65 73 20 74 68 69 73 20 66 61 63 69 6c 69 | node-test-path'.uses.this.facili | 
| 221e0 | 74 79 20 74 6f 20 77 6f 72 6b 20 6f 75 74 20 61    0a 74 61 72 67 65 74 20 70 61 74 68 2e 22 0a 20 | ty.to.work.out.a.target.path.".. | 
| 22200 | 20 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 6d    61 70 70 69 6e 67 2d 69 6d 70 6c 65 6d 65 6e 74 | .(elnode--http-mapping-implement | 
| 22220 | 61 74 69 6f 6e 20 68 74 74 70 63 6f 6e 20 70 61    72 74 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e | ation.httpcon.part))..(defun.eln | 
| 22240 | 6f 64 65 2d 2d 73 74 72 69 70 2d 6c 65 61 64 69    6e 67 2d 73 6c 61 73 68 20 28 73 74 72 29 0a 20 | ode--strip-leading-slash.(str).. | 
| 22260 | 20 22 53 74 72 69 70 20 61 6e 79 20 6c 65 61 64    69 6e 67 20 73 6c 61 73 68 20 66 72 6f 6d 20 53 | ."Strip.any.leading.slash.from.S | 
| 22280 | 54 52 2e 0a 0a 49 66 20 74 68 65 72 65 20 69 73    20 6e 6f 20 6c 65 61 64 69 6e 67 20 73 6c 61 73 | TR...If.there.is.no.leading.slas | 
| 222a0 | 68 20 74 68 65 6e 20 6a 75 73 74 20 72 65 74 75    72 6e 20 53 54 52 2e 22 0a 20 20 28 69 66 20 28 | h.then.just.return.STR."...(if.( | 
| 222c0 | 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5e 2f    5c 5c 28 2e 2a 5c 5c 29 22 20 73 74 72 29 0a 20 | string-match."^/\\(.*\\)".str).. | 
| 222e0 | 20 20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69    6e 67 20 31 20 73 74 72 29 0a 20 20 20 20 20 20 | .....(match-string.1.str)....... | 
| 22300 | 73 74 72 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c    6e 6f 64 65 2d 67 65 74 2d 74 61 72 67 65 74 66 | str))..(defun.elnode-get-targetf | 
| 22320 | 69 6c 65 20 28 68 74 74 70 63 6f 6e 20 64 6f 63    72 6f 6f 74 29 0a 20 20 22 47 65 74 20 74 68 65 | ile.(httpcon.docroot)..."Get.the | 
| 22340 | 20 74 61 72 67 65 74 65 64 20 66 69 6c 65 20 66    72 6f 6d 20 74 68 65 20 48 54 54 50 43 4f 4e 2e | .targeted.file.from.the.HTTPCON. | 
| 22360 | 0a 0a 41 74 74 65 6d 70 74 73 20 74 6f 20 72 65    73 6f 6c 76 65 20 74 68 65 20 6d 61 74 63 68 65 | ..Attempts.to.resolve.the.matche | 
| 22380 | 64 20 70 61 74 68 20 6f 66 20 74 68 65 20 48 54    54 50 43 4f 4e 20 61 67 61 69 6e 73 74 20 74 68 | d.path.of.the.HTTPCON.against.th | 
| 223a0 | 65 0a 44 4f 43 52 4f 4f 54 2e 20 20 49 66 20 74    68 61 74 20 64 6f 65 73 6e 27 74 20 77 6f 72 6b | e.DOCROOT...If.that.doesn't.work | 
| 223c0 | 20 74 68 65 6e 20 69 74 20 61 74 74 65 6d 70 74    73 20 74 6f 20 75 73 65 20 6a 75 73 74 20 74 68 | .then.it.attempts.to.use.just.th | 
| 223e0 | 65 0a 70 61 74 68 69 6e 66 6f 20 6f 66 20 74 68    65 20 72 65 71 75 65 73 74 2e 0a 0a 54 68 65 20 | e.pathinfo.of.the.request...The. | 
| 22400 | 72 65 73 75 6c 74 69 6e 67 20 66 69 6c 65 20 69    73 20 4e 4f 54 20 63 68 65 63 6b 65 64 20 66 6f | resulting.file.is.NOT.checked.fo | 
| 22420 | 72 20 65 78 69 73 74 65 6e 63 65 20 6f 72 20 73    61 66 65 74 79 2e 22 0a 20 20 28 6c 65 74 2a 20 | r.existence.or.safety."...(let*. | 
| 22440 | 28 28 70 61 74 68 69 6e 66 6f 20 28 65 6c 6e 6f    64 65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f | ((pathinfo.(elnode-http-pathinfo | 
| 22460 | 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 20 20 20    20 20 20 20 28 70 61 74 68 20 28 65 6c 6e 6f 64 | .httpcon))..........(path.(elnod | 
| 22480 | 65 2d 68 74 74 70 2d 6d 61 70 70 69 6e 67 20 68    74 74 70 63 6f 6e 20 31 29 29 0a 20 20 20 20 20 | e-http-mapping.httpcon.1))...... | 
| 224a0 | 20 20 20 20 28 74 61 72 67 65 74 66 69 6c 65 0a    20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 | ....(targetfile...........(elnod | 
| 224c0 | 65 2d 6a 6f 69 6e 0a 20 20 20 20 20 20 20 20 20    20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d 6e | e-join............(expand-file-n | 
| 224e0 | 61 6d 65 20 64 6f 63 72 6f 6f 74 29 0a 20 20 20    20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d | ame.docroot)............(elnode- | 
| 22500 | 2d 73 74 72 69 70 2d 6c 65 61 64 69 6e 67 2d 73    6c 61 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 | -strip-leading-slash............ | 
| 22520 | 20 28 6f 72 20 70 61 74 68 20 70 61 74 68 69 6e    66 6f 29 29 29 29 29 0a 20 20 20 20 74 61 72 67 | .(or.path.pathinfo))))).....targ | 
| 22540 | 65 74 66 69 6c 65 29 29 0a 0a 0a 3b 3b 20 57 65    20 6e 65 65 64 20 74 6f 20 64 65 63 6c 61 72 65 | etfile))...;;.We.need.to.declare | 
| 22560 | 20 74 68 69 73 20 62 65 66 6f 72 65 20 74 68 65    20 64 69 73 70 61 74 63 68 65 72 20 73 74 75 66 | .this.before.the.dispatcher.stuf | 
| 22580 | 66 2c 20 77 68 69 63 68 20 75 73 65 73 20 69 74    2e 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 | f,.which.uses.it..(defvar.elnode | 
| 225a0 | 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 68 65 6e    74 69 63 61 74 69 6f 6e 2d 73 63 68 65 6d 65 73 | --defined-authentication-schemes | 
| 225c0 | 0a 20 20 28 6d 61 6b 65 2d 68 61 73 68 2d 74 61    62 6c 65 20 3a 74 65 73 74 20 27 65 71 75 61 6c | ...(make-hash-table.:test.'equal | 
| 225e0 | 29 0a 20 20 22 54 68 65 20 68 61 73 68 20 6f 66    20 64 65 66 69 6e 65 64 20 61 75 74 68 65 6e 74 | )..."The.hash.of.defined.authent | 
| 22600 | 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 73 2e    22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f | ication.schemes.")..(defvar.elno | 
| 22620 | 64 65 2d 2d 64 6f 2d 61 63 63 65 73 73 2d 6c 6f    67 67 69 6e 67 2d 6f 6e 2d 64 69 73 70 61 74 63 | de--do-access-logging-on-dispatc | 
| 22640 | 68 20 74 0a 20 20 22 4e 65 65 64 65 64 20 74 6f    20 73 75 70 70 72 65 73 73 20 6c 6f 67 67 69 6e | h.t..."Needed.to.suppress.loggin | 
| 22660 | 67 20 69 6e 20 74 65 73 74 69 6e 67 2e 22 29 0a    0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d | g.in.testing.")..(defun.elnode-- | 
| 22680 | 61 75 74 68 2d 65 6e 74 72 79 2d 3e 64 69 73 70    61 74 63 68 2d 74 61 62 6c 65 20 28 61 75 74 68 | auth-entry->dispatch-table.(auth | 
| 226a0 | 2d 73 63 68 65 6d 65 20 26 6f 70 74 69 6f 6e 61    6c 20 68 6f 73 74 70 61 74 68 29 0a 20 20 22 4d | -scheme.&optional.hostpath)..."M | 
| 226c0 | 61 6b 65 20 61 20 64 69 73 70 61 74 63 68 20 74    61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20 41 55 | ake.a.dispatch.table.from.the.AU | 
| 226e0 | 54 48 2d 53 43 48 45 4d 45 2e 0a 0a 49 66 20 48    4f 53 54 50 41 54 48 20 69 73 20 73 70 65 63 69 | TH-SCHEME...If.HOSTPATH.is.speci | 
| 22700 | 66 69 65 64 20 74 68 65 6e 20 74 68 65 20 72 65    73 75 6c 74 69 6e 67 20 6d 61 74 63 68 20 73 70 | fied.then.the.resulting.match.sp | 
| 22720 | 65 63 20 69 73 20 6f 66 20 74 68 65 0a 60 68 6f    73 74 70 61 74 68 27 20 74 79 70 65 20 66 6f 72 | ec.is.of.the.`hostpath'.type.for | 
| 22740 | 20 75 73 65 20 77 69 74 68 20 60 65 6c 6e 6f 64    65 2d 68 6f 73 74 70 61 74 68 2d 64 69 73 70 61 | .use.with.`elnode-hostpath-dispa | 
| 22760 | 74 63 68 65 72 27 2e 22 0a 20 20 28 6c 65 74 2a    20 28 28 61 75 74 68 2d 73 63 68 65 6d 65 20 28 | tcher'."...(let*.((auth-scheme.( | 
| 22780 | 67 65 74 68 61 73 68 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 | gethash........................a | 
| 227a0 | 75 74 68 2d 73 63 68 65 6d 65 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | uth-scheme...................... | 
| 227c0 | 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 69 6e 65    64 2d 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e | ..elnode--defined-authentication | 
| 227e0 | 2d 73 63 68 65 6d 65 73 29 29 0a 20 20 20 20 20    20 20 20 20 28 72 65 64 69 72 65 63 74 20 28 70 | -schemes))..........(redirect.(p | 
| 22800 | 6c 69 73 74 2d 67 65 74 20 61 75 74 68 2d 73 63    68 65 6d 65 20 3a 72 65 64 69 72 65 63 74 29 29 | list-get.auth-scheme.:redirect)) | 
| 22820 | 0a 20 20 20 20 20 20 20 20 20 28 6c 6f 67 69 6e    2d 68 61 6e 64 6c 65 72 20 28 70 6c 69 73 74 2d | ..........(login-handler.(plist- | 
| 22840 | 67 65 74 20 61 75 74 68 2d 73 63 68 65 6d 65 20    3a 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72 29 29 | get.auth-scheme.:login-handler)) | 
| 22860 | 29 0a 20 20 20 20 28 77 68 65 6e 20 72 65 64 69    72 65 63 74 0a 20 20 20 20 20 20 28 6c 69 73 74 | ).....(when.redirect.......(list | 
| 22880 | 0a 20 20 20 20 20 20 20 28 63 6f 6e 73 0a 20 20    20 20 20 20 20 20 28 63 6f 6e 63 61 74 20 28 69 | ........(cons.........(concat.(i | 
| 228a0 | 66 20 68 6f 73 74 70 61 74 68 20 22 5e 2e 2a 2f    22 20 22 5e 22 29 20 72 65 64 69 72 65 63 74 20 | f.hostpath."^.*/"."^").redirect. | 
| 228c0 | 22 24 22 29 0a 20 20 20 20 20 20 20 20 6c 6f 67    69 6e 2d 68 61 6e 64 6c 65 72 29 29 29 29 29 0a | "$").........login-handler))))). | 
| 228e0 | 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d    2d 64 69 73 70 61 74 63 68 2d 70 72 6f 63 20 28 | .(defun*.elnode--dispatch-proc.( | 
| 22900 | 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | httpcon......................... | 
| 22920 | 20 20 20 20 20 20 70 61 74 68 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ......path...................... | 
| 22940 | 20 20 20 20 20 20 20 20 20 75 72 6c 2d 6d 61 70    70 69 6e 67 2d 74 61 62 6c 65 0a 20 20 20 20 20 | .........url-mapping-table...... | 
| 22960 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 | .........................&key... | 
| 22980 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e | ............................(fun | 
| 229a0 | 63 74 69 6f 6e 2d 34 30 34 20 27 65 6c 6e 6f 64    65 2d 73 65 6e 64 2d 34 30 34 29 0a 20 20 20 20 | ction-404.'elnode-send-404)..... | 
| 229c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6c 6f 67 2d 6e | ..........................(log-n | 
| 229e0 | 61 6d 65 20 22 65 6c 6e 6f 64 65 22 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ame."elnode")................... | 
| 22a00 | 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74 72    61 2d 74 61 62 6c 65 29 0a 20 20 22 44 69 73 70 | ............extra-table)..."Disp | 
| 22a20 | 61 74 63 68 20 74 6f 20 74 68 65 20 6d 61 74 63    68 65 64 20 68 61 6e 64 6c 65 72 20 66 6f 72 20 | atch.to.the.matched.handler.for. | 
| 22a40 | 74 68 65 20 50 41 54 48 20 6f 6e 20 74 68 65 20    48 54 54 50 43 4f 4e 2e 0a 54 68 65 20 68 61 6e | the.PATH.on.the.HTTPCON..The.han | 
| 22a60 | 64 6c 65 72 20 66 6f 72 20 50 41 54 48 20 69 73    20 6d 61 74 63 68 65 64 20 69 6e 20 74 68 65 20 | dler.for.PATH.is.matched.in.the. | 
| 22a80 | 55 52 4c 2d 4d 41 50 50 49 4e 47 2d 54 41 42 4c    45 20 76 69 61 0a 60 65 6c 6e 6f 64 65 2d 2d 6d | URL-MAPPING-TABLE.via.`elnode--m | 
| 22aa0 | 61 70 70 65 72 2d 66 69 6e 64 27 2e 0a 0a 49 66    20 6e 6f 20 68 61 6e 64 6c 65 72 20 69 73 20 66 | apper-find'...If.no.handler.is.f | 
| 22ac0 | 6f 75 6e 64 20 74 68 65 6e 20 61 20 34 30 34 20    69 73 20 61 74 74 65 6d 70 74 65 64 20 76 69 61 | ound.then.a.404.is.attempted.via | 
| 22ae0 | 20 46 55 4e 43 54 49 4f 4e 2d 34 30 34 2c 0a 69    66 20 69 74 27 73 20 66 6f 75 6e 64 20 74 6f 20 | .FUNCTION-404,.if.it's.found.to. | 
| 22b00 | 62 65 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 6f    72 20 61 73 20 61 20 6c 61 73 74 20 72 65 73 6f | be.a.function,.or.as.a.last.reso | 
| 22b20 | 72 74 0a 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d    34 30 34 27 2e 0a 0a 54 68 65 20 66 75 6e 63 74 | rt.`elnode-send-404'...The.funct | 
| 22b40 | 69 6f 6e 20 61 6c 73 6f 20 73 75 70 70 6f 72 74    73 20 74 68 65 20 73 65 61 72 63 68 69 6e 67 20 | ion.also.supports.the.searching. | 
| 22b60 | 6f 66 20 74 68 65 20 6d 61 70 20 70 72 6f 76 69    64 65 64 20 62 79 0a 61 6e 20 45 58 54 52 41 2d | of.the.map.provided.by.an.EXTRA- | 
| 22b80 | 54 41 42 4c 45 2e 20 20 54 68 69 73 20 69 73 20    75 73 65 66 75 6c 20 66 6f 72 20 61 75 74 68 65 | TABLE...This.is.useful.for.authe | 
| 22ba0 | 6e 74 69 63 61 74 69 6f 6e 20 61 6e 64 20 6f 74    68 65 72 0a 77 72 61 70 70 65 72 73 2e 20 20 49 | ntication.and.other.wrappers...I | 
| 22bc0 | 66 20 69 74 20 69 73 20 73 70 65 63 69 66 69 65    64 20 69 74 20 69 73 20 73 65 61 72 63 68 65 64 | f.it.is.specified.it.is.searched | 
| 22be0 | 20 66 69 72 73 74 2e 22 0a 20 20 28 6c 65 74 20    28 28 68 61 6e 64 6c 65 72 2d 66 75 6e 63 0a 20 | .first."...(let.((handler-func.. | 
| 22c00 | 20 20 20 20 20 20 20 20 28 6f 72 0a 20 20 20 20    20 20 20 20 20 20 3b 3b 20 45 69 74 68 65 72 20 | ........(or...........;;.Either. | 
| 22c20 | 61 20 6d 61 74 63 68 20 66 72 6f 6d 20 65 78 74    72 61 2d 74 61 62 6c 65 20 2e 2e 2e 0a 20 20 20 | a.match.from.extra-table........ | 
| 22c40 | 20 20 20 20 20 20 20 28 61 6e 64 20 65 78 74 72    61 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 | .......(and.extra-table......... | 
| 22c60 | 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d    6d 61 70 70 65 72 2d 66 69 6e 64 0a 20 20 20 20 | .......(elnode--mapper-find..... | 
| 22c80 | 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70    63 6f 6e 20 70 61 74 68 20 65 78 74 72 61 2d 74 | ............httpcon.path.extra-t | 
| 22ca0 | 61 62 6c 65 29 29 0a 20 20 20 20 20 20 20 20 20    20 3b 3b 20 2e 2e 2e 20 6f 72 20 66 72 6f 6d 20 | able))...........;;.....or.from. | 
| 22cc0 | 74 68 65 20 73 74 61 6e 64 61 72 64 20 75 72 6c    2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 | the.standard.url-mapping-table.. | 
| 22ce0 | 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65    2d 2d 6d 61 70 70 65 72 2d 66 69 6e 64 0a 20 20 | .........(elnode--mapper-find... | 
| 22d00 | 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e    20 70 61 74 68 20 75 72 6c 2d 6d 61 70 70 69 6e | .........httpcon.path.url-mappin | 
| 22d20 | 67 2d 74 61 62 6c 65 29 29 29 29 0a 20 20 20 20    28 77 68 65 6e 20 65 6c 6e 6f 64 65 2d 2d 64 6f | g-table)))).....(when.elnode--do | 
| 22d40 | 2d 61 63 63 65 73 73 2d 6c 6f 67 67 69 6e 67 2d    6f 6e 2d 64 69 73 70 61 74 63 68 0a 20 20 20 20 | -access-logging-on-dispatch..... | 
| 22d60 | 20 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68    74 74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 61 | ..(process-put.httpcon.:elnode-a | 
| 22d80 | 63 63 65 73 73 2d 6c 6f 67 2d 6e 61 6d 65 20 6c    6f 67 2d 6e 61 6d 65 29 29 0a 20 20 20 20 28 63 | ccess-log-name.log-name)).....(c | 
| 22da0 | 6f 6e 64 0a 20 20 20 20 20 3b 3b 20 49 66 20 77    65 20 68 61 76 65 20 61 20 68 61 6e 64 6c 65 72 | ond......;;.If.we.have.a.handler | 
| 22dc0 | 2c 20 75 73 65 20 69 74 2e 0a 20 20 20 20 20 28    28 66 75 6e 63 74 69 6f 6e 70 20 68 61 6e 64 6c | ,.use.it.......((functionp.handl | 
| 22de0 | 65 72 2d 66 75 6e 63 29 0a 20 20 20 20 20 20 28    66 75 6e 63 61 6c 6c 20 68 61 6e 64 6c 65 72 2d | er-func).......(funcall.handler- | 
| 22e00 | 66 75 6e 63 20 68 74 74 70 63 6f 6e 29 29 0a 20    20 20 20 20 28 74 0a 20 20 20 20 20 20 28 66 75 | func.httpcon))......(t.......(fu | 
| 22e20 | 6e 63 61 6c 6c 20 66 75 6e 63 74 69 6f 6e 2d 34    30 34 20 68 74 74 70 63 6f 6e 29 29 29 29 29 0a | ncall.function-404.httpcon))))). | 
| 22e40 | 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d    64 69 73 70 61 74 63 68 65 72 20 28 68 74 74 70 | .(defun*.elnode-dispatcher.(http | 
| 22e60 | 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 | con............................u | 
| 22e80 | 72 6c 2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | rl-mapping-table................ | 
| 22ea0 | 20 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ............&key................ | 
| 22ec0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e    63 74 69 6f 6e 2d 34 30 34 20 27 65 6c 6e 6f 64 | ............(function-404.'elnod | 
| 22ee0 | 65 2d 73 65 6e 64 2d 34 30 34 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | e-send-404)..................... | 
| 22f00 | 20 20 20 20 20 20 20 61 75 74 68 2d 73 63 68 65    6d 65 29 0a 20 20 22 44 69 73 70 61 74 63 68 20 | .......auth-scheme)..."Dispatch. | 
| 22f20 | 48 54 54 50 43 4f 4e 20 74 6f 20 74 68 65 20 66    75 6e 63 74 69 6f 6e 20 6d 61 70 70 65 64 20 69 | HTTPCON.to.the.function.mapped.i | 
| 22f40 | 6e 20 55 52 4c 2d 4d 41 50 50 49 4e 47 2d 54 41    42 4c 45 2e 0a 0a 55 52 4c 2d 4d 41 50 50 49 4e | n.URL-MAPPING-TABLE...URL-MAPPIN | 
| 22f60 | 47 2d 54 41 42 4c 45 20 69 73 20 61 6e 20 61 6c    69 73 74 20 6f 66 3a 0a 0a 20 28 75 72 6c 2d 72 | G-TABLE.is.an.alist.of:...(url-r | 
| 22f80 | 65 67 65 78 20 2e 20 66 75 6e 63 74 69 6f 6e 2d    74 6f 2d 64 69 73 70 61 74 63 68 29 0a 0a 54 6f | egex...function-to-dispatch)..To | 
| 22fa0 | 20 6d 61 70 20 74 68 65 20 72 6f 6f 74 20 75 72    6c 20 79 6f 75 20 73 68 6f 75 6c 64 20 75 73 65 | .map.the.root.url.you.should.use | 
| 22fc0 | 3a 0a 0a 20 20 5c 22 5e 2f 24 5c 22 0a 0a 54 6f    20 65 6e 73 75 72 65 20 70 61 74 68 73 20 65 6e | :....\"^/$\"..To.ensure.paths.en | 
| 22fe0 | 64 20 69 6e 20 2f 2c 20 60 65 6c 6e 6f 64 65 2d    64 69 73 70 61 74 63 68 65 72 27 20 75 73 65 73 | d.in./,.`elnode-dispatcher'.uses | 
| 23000 | 0a 60 65 6c 6e 6f 64 65 2d 6e 6f 72 6d 61 6c 69    7a 65 2d 70 61 74 68 27 2e 20 20 54 6f 20 6d 61 | .`elnode-normalize-path'...To.ma | 
| 23020 | 70 20 61 6e 6f 74 68 65 72 20 75 72 6c 20 79 6f    75 20 73 68 6f 75 6c 64 20 75 73 65 3a 0a 0a 20 | p.another.url.you.should.use:... | 
| 23040 | 20 5c 22 5e 2f 70 61 74 68 2f 24 5c 22 20 6f 72    20 5c 22 5e 2f 70 61 74 68 2f 73 75 62 2d 70 61 | .\"^/path/$\".or.\"^/path/sub-pa | 
| 23060 | 74 68 2f 24 5c 22 0a 0a 41 6e 20 65 78 61 6d 70    6c 65 20 73 65 72 76 65 72 20 73 65 74 75 70 3a | th/$\"..An.example.server.setup: | 
| 23080 | 0a 0a 20 20 28 64 65 66 75 6e 20 6d 79 2d 73 65    72 76 65 72 20 28 68 74 74 70 63 6f 6e 29 0a 20 | ....(defun.my-server.(httpcon).. | 
| 230a0 | 20 20 20 28 65 6c 6e 6f 64 65 2d 64 69 73 70 61    74 63 68 65 72 0a 20 20 20 20 20 68 74 74 70 63 | ...(elnode-dispatcher......httpc | 
| 230c0 | 6f 6e 0a 20 20 20 20 20 27 28 28 5c 22 5e 2f 24    5c 22 20 2e 20 72 6f 6f 74 2d 76 69 65 77 29 0a | on......'((\"^/$\"...root-view). | 
| 230e0 | 20 20 20 20 20 20 20 28 5c 22 5e 2f 31 2f 24 5c    22 20 2e 20 76 69 65 77 2d 31 29 29 29 29 0a 0a | .......(\"^/1/$\"...view-1)))).. | 
| 23100 | 49 66 20 46 55 4e 43 54 49 4f 4e 2d 34 30 34 20    69 73 20 73 70 65 63 69 66 69 65 64 20 69 74 20 | If.FUNCTION-404.is.specified.it. | 
| 23120 | 69 73 20 63 61 6c 6c 65 64 20 77 68 65 6e 20 6e    6f 20 72 65 67 65 78 70 20 69 73 0a 6d 61 74 63 | is.called.when.no.regexp.is.matc | 
| 23140 | 68 65 64 2c 20 6f 74 68 65 72 77 69 73 65 20 60    65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 27 | hed,.otherwise.`elnode-send-404' | 
| 23160 | 20 69 73 20 75 73 65 64 2e 0a 0a 41 55 54 48 2d    53 43 48 45 4d 45 20 69 73 20 61 6e 20 6f 70 74 | .is.used...AUTH-SCHEME.is.an.opt | 
| 23180 | 69 6f 6e 61 6c 20 61 75 74 68 65 6e 74 69 63 61    74 69 6f 6e 20 73 63 68 65 6d 65 2c 20 64 65 66 | ional.authentication.scheme,.def | 
| 231a0 | 69 6e 65 64 20 77 69 74 68 0a 60 65 6c 6e 6f 64    65 2d 64 65 66 61 75 74 68 27 2c 20 77 68 69 63 | ined.with.`elnode-defauth',.whic | 
| 231c0 | 68 20 73 70 65 63 69 66 69 65 73 20 61 20 72 65    64 69 72 65 63 74 20 6d 61 70 70 69 6e 67 20 66 | h.specifies.a.redirect.mapping.f | 
| 231e0 | 6f 72 0a 61 75 74 68 65 6e 74 69 63 61 74 69 6f    6e 73 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 6e | or.authentications."...(elnode-n | 
| 23200 | 6f 72 6d 61 6c 69 7a 65 2d 70 61 74 68 0a 20 20    20 68 74 74 70 63 6f 6e 0a 20 20 20 28 6c 61 6d | ormalize-path....httpcon....(lam | 
| 23220 | 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 20    20 20 20 3b 3b 20 47 65 74 20 70 61 74 68 69 6e | bda.(httpcon)......;;.Get.pathin | 
| 23240 | 66 6f 20 61 67 61 69 6e 20 62 65 63 61 75 73 65    20 77 65 20 6d 61 79 20 68 61 76 65 20 72 65 64 | fo.again.because.we.may.have.red | 
| 23260 | 69 72 65 63 74 65 64 2e 0a 20 20 20 20 20 28 6c    65 74 20 28 28 70 61 74 68 69 6e 66 6f 20 28 65 | irected.......(let.((pathinfo.(e | 
| 23280 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69    6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 0a 20 20 | lnode-http-pathinfo.httpcon))... | 
| 232a0 | 20 20 20 20 20 20 20 20 20 28 65 78 74 72 61 2d    74 61 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 | .........(extra-table........... | 
| 232c0 | 20 20 28 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d    65 6e 74 72 79 2d 3e 64 69 73 70 61 74 63 68 2d | ..(elnode--auth-entry->dispatch- | 
| 232e0 | 74 61 62 6c 65 20 61 75 74 68 2d 73 63 68 65 6d    65 29 29 29 0a 20 20 20 20 20 20 20 28 65 6c 6e | table.auth-scheme)))........(eln | 
| 23300 | 6f 64 65 2d 2d 64 69 73 70 61 74 63 68 2d 70 72    6f 63 0a 20 20 20 20 20 20 20 20 68 74 74 70 63 | ode--dispatch-proc.........httpc | 
| 23320 | 6f 6e 0a 20 20 20 20 20 20 20 20 70 61 74 68 69    6e 66 6f 0a 20 20 20 20 20 20 20 20 75 72 6c 2d | on.........pathinfo.........url- | 
| 23340 | 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 20    20 20 20 20 20 20 3a 66 75 6e 63 74 69 6f 6e 2d | mapping-table.........:function- | 
| 23360 | 34 30 34 20 66 75 6e 63 74 69 6f 6e 2d 34 30 34    0a 20 20 20 20 20 20 20 20 3a 65 78 74 72 61 2d | 404.function-404.........:extra- | 
| 23380 | 74 61 62 6c 65 20 65 78 74 72 61 2d 74 61 62 6c    65 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 | table.extra-table)))))..(defun.e | 
| 233a0 | 6c 6e 6f 64 65 2d 2d 68 6f 73 74 70 61 74 68 20    28 68 6f 73 74 20 70 61 74 68 29 0a 20 20 22 54 | lnode--hostpath.(host.path)..."T | 
| 233c0 | 75 72 6e 20 74 68 65 20 68 6f 73 74 20 61 6e 64    20 70 61 74 68 20 69 6e 74 6f 20 61 20 68 6f 73 | urn.the.host.and.path.into.a.hos | 
| 233e0 | 74 70 61 74 68 2e 22 0a 20 20 28 66 6f 72 6d 61    74 0a 20 20 20 22 25 73 2f 25 73 22 0a 20 20 20 | tpath."...(format...."%s/%s".... | 
| 23400 | 28 6c 65 74 20 28 28 68 6f 73 74 2d 6e 61 6d 65    20 28 6f 72 20 68 6f 73 74 20 22 22 29 29 29 0a | (let.((host-name.(or.host.""))). | 
| 23420 | 20 20 20 20 20 3b 3b 20 53 65 70 61 72 61 74 65    20 74 68 65 20 68 6f 73 74 6e 61 6d 65 20 66 72 | .....;;.Separate.the.hostname.fr | 
| 23440 | 6f 6d 20 61 6e 79 20 70 6f 72 74 20 69 6e 20 74    68 65 20 68 6f 73 74 20 68 65 61 64 65 72 0a 20 | om.any.port.in.the.host.header.. | 
| 23460 | 20 20 20 20 28 73 61 76 65 2d 6d 61 74 63 68 2d    64 61 74 61 0a 20 20 20 20 20 20 20 28 69 66 20 | ....(save-match-data........(if. | 
| 23480 | 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 5c    5c 28 5b 5e 3a 5d 2b 5c 5c 29 5c 5c 28 3a 5b 30 | (string-match."\\([^:]+\\)\\(:[0 | 
| 234a0 | 2d 39 5d 2b 2e 2a 5c 5c 29 2a 22 20 68 6f 73 74    2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20 20 | -9]+.*\\)*".host-name).......... | 
| 234c0 | 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 20    31 20 68 6f 73 74 2d 6e 61 6d 65 29 0a 20 20 20 | ..(match-string.1.host-name).... | 
| 234e0 | 20 20 20 20 20 20 20 20 22 22 29 29 29 0a 20 20    20 70 61 74 68 29 29 0a 0a 28 64 65 66 75 6e 2a | ........"")))....path))..(defun* | 
| 23500 | 20 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68    2d 64 69 73 70 61 74 63 68 65 72 20 28 68 74 74 | .elnode-hostpath-dispatcher.(htt | 
| 23520 | 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | pcon............................ | 
| 23540 | 20 20 20 20 20 20 20 20 68 6f 73 74 70 61 74 68    2d 6d 61 70 70 69 6e 67 2d 74 61 62 6c 65 0a 20 | ........hostpath-mapping-table.. | 
| 23560 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 23580 | 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..&key.......................... | 
| 235a0 | 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74    69 6f 6e 2d 34 30 34 20 27 65 6c 6e 6f 64 65 2d | ..........(function-404.'elnode- | 
| 235c0 | 73 65 6e 64 2d 34 30 34 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | send-404)....................... | 
| 235e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f    67 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 22 29 | .............(log-name."elnode") | 
| 23600 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 23620 | 20 20 20 20 61 75 74 68 2d 73 63 68 65 6d 65 29    0a 20 20 22 44 69 73 70 61 74 63 68 20 48 54 54 | ....auth-scheme)..."Dispatch.HTT | 
| 23640 | 50 43 4f 4e 20 74 6f 20 61 20 68 61 6e 64 6c 65    72 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 48 | PCON.to.a.handler.based.on.the.H | 
| 23660 | 4f 53 54 50 41 54 48 2d 4d 41 50 50 49 4e 47 2d    54 41 42 4c 45 2e 0a 0a 48 4f 53 54 50 41 54 48 | OSTPATH-MAPPING-TABLE...HOSTPATH | 
| 23680 | 2d 4d 41 50 50 49 4e 47 2d 54 41 42 4c 45 20 68    61 73 20 72 65 67 65 78 73 20 6f 66 20 74 68 65 | -MAPPING-TABLE.has.regexs.of.the | 
| 236a0 | 20 68 6f 73 74 20 61 6e 64 20 74 68 65 20 70 61    74 68 20 64 6f 75 62 6c 65 0a 73 6c 61 73 68 20 | .host.and.the.path.double.slash. | 
| 236c0 | 73 65 70 61 72 61 74 65 64 2c 20 74 68 75 73 3a    0a 0a 20 28 5c 22 5e 6c 6f 63 61 6c 68 6f 73 74 | separated,.thus:...(\"^localhost | 
| 236e0 | 2f 2f 70 61 73 74 65 62 69 6e 2e 2a 5c 22 20 2e    20 70 61 73 74 65 62 69 6e 2d 68 61 6e 64 6c 65 | //pastebin.*\"...pastebin-handle | 
| 23700 | 72 29 0a 0a 46 55 4e 43 54 49 4f 4e 2d 34 30 34    20 73 68 6f 75 6c 64 20 62 65 20 61 20 34 30 34 | r)..FUNCTION-404.should.be.a.404 | 
| 23720 | 20 68 61 6e 64 6c 69 6e 67 20 66 75 6e 63 74 69    6f 6e 2c 20 62 79 20 64 65 66 61 75 6c 74 20 69 | .handling.function,.by.default.i | 
| 23740 | 74 27 73 0a 60 65 6c 6e 6f 64 65 2d 73 65 6e 64    2d 34 30 34 27 2e 0a 0a 4c 4f 47 2d 4e 41 4d 45 | t's.`elnode-send-404'...LOG-NAME | 
| 23760 | 20 69 73 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20    6c 6f 67 2d 6e 61 6d 65 2e 0a 0a 41 55 54 48 2d | .is.an.optional.log-name...AUTH- | 
| 23780 | 53 43 48 45 4d 45 20 69 73 20 61 6e 20 6f 70 74    69 6f 6e 61 6c 20 61 75 74 68 65 6e 74 69 63 61 | SCHEME.is.an.optional.authentica | 
| 237a0 | 74 69 6f 6e 20 73 63 68 65 6d 65 2c 20 64 65 66    69 6e 65 64 20 77 69 74 68 0a 60 65 6c 6e 6f 64 | tion.scheme,.defined.with.`elnod | 
| 237c0 | 65 2d 64 65 66 61 75 74 68 27 2c 20 77 68 69 63    68 20 73 70 65 63 69 66 69 65 73 20 61 20 72 65 | e-defauth',.which.specifies.a.re | 
| 237e0 | 64 69 72 65 63 74 20 6d 61 70 70 69 6e 67 20 66    6f 72 0a 61 75 74 68 65 6e 74 69 63 61 74 69 6f | direct.mapping.for.authenticatio | 
| 23800 | 6e 73 2e 22 0a 20 20 28 6c 65 74 20 28 28 68 6f    73 74 70 61 74 68 20 28 65 6c 6e 6f 64 65 2d 2d | ns."...(let.((hostpath.(elnode-- | 
| 23820 | 68 6f 73 74 70 61 74 68 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | hostpath....................(eln | 
| 23840 | 6f 64 65 2d 68 74 74 70 2d 68 65 61 64 65 72 20    68 74 74 70 63 6f 6e 20 22 48 6f 73 74 22 29 0a | ode-http-header.httpcon."Host"). | 
| 23860 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d | ...................(elnode-http- | 
| 23880 | 70 61 74 68 69 6e 66 6f 20 68 74 74 70 63 6f 6e    29 29 29 0a 20 20 20 20 20 20 20 20 28 65 78 74 | pathinfo.httpcon))).........(ext | 
| 238a0 | 72 61 2d 74 61 62 6c 65 0a 20 20 20 20 20 20 20    20 20 3b 3b 20 4d 61 6b 65 20 73 75 72 65 20 69 | ra-table..........;;.Make.sure.i | 
| 238c0 | 74 27 73 20 61 20 68 6f 73 74 70 61 74 68 20 74    79 70 65 0a 20 20 20 20 20 20 20 20 20 28 65 6c | t's.a.hostpath.type..........(el | 
| 238e0 | 6e 6f 64 65 2d 2d 61 75 74 68 2d 65 6e 74 72 79    2d 3e 64 69 73 70 61 74 63 68 2d 74 61 62 6c 65 | node--auth-entry->dispatch-table | 
| 23900 | 20 61 75 74 68 2d 73 63 68 65 6d 65 20 74 29 29    29 0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 64 | .auth-scheme.t))).....(elnode--d | 
| 23920 | 69 73 70 61 74 63 68 2d 70 72 6f 63 0a 20 20 20    20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 68 | ispatch-proc......httpcon......h | 
| 23940 | 6f 73 74 70 61 74 68 0a 20 20 20 20 20 68 6f 73    74 70 61 74 68 2d 6d 61 70 70 69 6e 67 2d 74 61 | ostpath......hostpath-mapping-ta | 
| 23960 | 62 6c 65 0a 20 20 20 20 20 3a 66 75 6e 63 74 69    6f 6e 2d 34 30 34 20 66 75 6e 63 74 69 6f 6e 2d | ble......:function-404.function- | 
| 23980 | 34 30 34 0a 20 20 20 20 20 3a 6c 6f 67 2d 6e 61    6d 65 20 6c 6f 67 2d 6e 61 6d 65 0a 20 20 20 20 | 404......:log-name.log-name..... | 
| 239a0 | 20 3a 65 78 74 72 61 2d 74 61 62 6c 65 20 65 78    74 72 61 2d 74 61 62 6c 65 29 29 29 0a 0a 3b 3b | .:extra-table.extra-table)))..;; | 
| 239c0 | 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65    66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 68 | ;###autoload.(defcustom.elnode-h | 
| 239e0 | 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d    74 61 62 6c 65 0a 20 20 27 28 28 22 5b 5e 2f 5d | ostpath-default-table...'(("[^/] | 
| 23a00 | 2b 2f 2f 77 69 6b 69 2f 5c 5c 28 2e 2a 5c 5c 29    22 20 2e 20 65 6c 6e 6f 64 65 2d 77 69 6b 69 73 | +//wiki/\\(.*\\)"...elnode-wikis | 
| 23a20 | 65 72 76 65 72 29 0a 20 20 20 20 28 22 5b 5e 2f    5d 2b 2f 2f 5c 5c 28 2e 2a 5c 5c 29 22 20 2e 20 | erver).....("[^/]+//\\(.*\\)"... | 
| 23a40 | 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72    29 29 0a 20 20 22 44 65 66 69 6e 65 73 20 6d 61 | elnode-webserver))..."Defines.ma | 
| 23a60 | 70 70 69 6e 67 73 20 66 6f 72 20 60 65 6c 6e 6f    64 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 | ppings.for.`elnode-hostpath-defa | 
| 23a80 | 75 6c 74 2d 68 61 6e 64 6c 65 72 27 2e 0a 0a 54    68 69 73 20 69 73 20 74 68 65 20 64 65 66 61 75 | ult-handler'...This.is.the.defau | 
| 23aa0 | 6c 74 20 6d 61 70 70 69 6e 67 20 74 61 62 6c 65    20 66 6f 72 20 45 6c 6e 6f 64 65 2c 20 6f 75 74 | lt.mapping.table.for.Elnode,.out | 
| 23ac0 | 20 6f 66 20 74 68 65 20 62 6f 78 2e 20 49 66 0a    79 6f 75 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 | .of.the.box..If.you.customize.th | 
| 23ae0 | 69 73 20 74 68 65 6e 20 65 6c 6e 6f 64 65 20 77    69 6c 6c 20 73 65 72 76 65 20 74 68 65 73 65 20 | is.then.elnode.will.serve.these. | 
| 23b00 | 68 6f 73 74 70 61 74 68 20 6d 61 70 70 69 6e 67    73 0a 62 79 20 6a 75 73 74 20 6c 6f 61 64 69 6e | hostpath.mappings.by.just.loadin | 
| 23b20 | 67 20 45 6c 6e 6f 64 65 2e 0a 0a 42 79 20 64 65    66 61 75 6c 74 20 74 68 65 20 74 61 62 6c 65 20 | g.Elnode...By.default.the.table. | 
| 23b40 | 6d 61 70 73 20 65 76 65 72 79 74 68 69 6e 67 20    74 6f 0a 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65 | maps.everything.to.`elnode-webse | 
| 23b60 | 72 76 65 72 27 2e 20 55 6e 6c 65 73 73 20 79 6f    75 27 72 65 20 68 61 70 70 79 20 77 69 74 68 20 | rver'..Unless.you're.happy.with. | 
| 23b80 | 74 68 65 20 64 65 66 61 75 6c 74 20 79 6f 75 0a    73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 | the.default.you.should.probably. | 
| 23ba0 | 67 65 74 20 72 69 64 20 6f 66 20 74 68 65 20 65    76 65 72 79 74 68 69 6e 67 20 70 61 74 68 20 62 | get.rid.of.the.everything.path.b | 
| 23bc0 | 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c 0a 69    6e 74 65 72 66 65 72 65 20 77 69 74 68 20 61 6e | ecause.it.will.interfere.with.an | 
| 23be0 | 79 20 6f 74 68 65 72 20 6d 61 70 70 69 6e 67 73    20 79 6f 75 20 61 64 64 2e 22 0a 20 20 3a 67 72 | y.other.mappings.you.add."...:gr | 
| 23c00 | 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74    79 70 65 20 27 28 61 6c 69 73 74 20 3a 6b 65 79 | oup.'elnode...:type.'(alist.:key | 
| 23c20 | 2d 74 79 70 65 20 73 74 72 69 6e 67 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 3a 76 61 | -type.string.................:va | 
| 23c40 | 6c 75 65 2d 74 79 70 65 20 73 79 6d 62 6f 6c 29    29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | lue-type.symbol))..(defun.elnode | 
| 23c60 | 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c    74 2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 | -hostpath-default-handler.(httpc | 
| 23c80 | 6f 6e 29 0a 20 20 22 41 20 64 65 66 61 75 6c 74    20 68 6f 73 74 70 61 74 68 20 68 61 6e 64 6c 65 | on)..."A.default.hostpath.handle | 
| 23ca0 | 72 2e 0a 0a 54 68 69 73 20 75 73 65 73 20 74 68    65 20 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 | r...This.uses.the.`elnode-hostpa | 
| 23cc0 | 74 68 2d 64 65 66 61 75 6c 74 2d 74 61 62 6c 65    27 20 66 6f 72 20 74 68 65 20 6d 61 74 63 68 0a | th-default-table'.for.the.match. | 
| 23ce0 | 74 61 62 6c 65 2e 20 20 49 74 20 63 61 6c 6c 73    20 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 | table...It.calls.`elnode-hostpat | 
| 23d00 | 68 2d 64 69 73 70 61 74 63 68 65 72 27 20 77 69    74 68 0a 60 65 6c 6e 6f 64 65 2d 68 6f 73 74 70 | h-dispatcher'.with.`elnode-hostp | 
| 23d20 | 61 74 68 2d 64 65 66 61 75 6c 74 2d 74 61 62 6c    65 27 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 | ath-default-table'."...(elnode-h | 
| 23d40 | 6f 73 74 70 61 74 68 2d 64 69 73 70 61 74 63 68    65 72 20 68 74 74 70 63 6f 6e 20 65 6c 6e 6f 64 | ostpath-dispatcher.httpcon.elnod | 
| 23d60 | 65 2d 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75    6c 74 2d 74 61 62 6c 65 29 29 0a 0a 0a 3b 3b 20 | e-hostpath-default-table))...;;. | 
| 23d80 | 41 73 79 6e 63 20 68 61 6e 64 6c 69 6e 67 20 73    74 75 66 66 0a 0a 28 64 65 66 6d 61 63 72 6f 20 | Async.handling.stuff..(defmacro. | 
| 23da0 | 77 69 74 68 2d 73 74 64 6f 75 74 2d 74 6f 2d 65    6c 6e 6f 64 65 20 28 68 74 74 70 63 6f 6e 20 26 | with-stdout-to-elnode.(httpcon.& | 
| 23dc0 | 72 65 73 74 20 62 6f 64 79 29 0a 20 20 22 45 78    65 63 75 74 65 20 42 4f 44 59 20 73 6f 20 74 68 | rest.body)..."Execute.BODY.so.th | 
| 23de0 | 61 74 20 61 6e 79 20 6f 75 74 70 75 74 20 67 65    74 73 20 73 65 6e 74 20 74 6f 20 48 54 54 50 43 | at.any.output.gets.sent.to.HTTPC | 
| 23e00 | 4f 4e 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a    20 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 | ON."...(declare....(debug.(sexp. | 
| 23e20 | 26 72 65 73 74 20 66 6f 72 6d 29 29 0a 20 20 20    28 69 6e 64 65 6e 74 20 64 65 66 75 6e 29 29 0a | &rest.form))....(indent.defun)). | 
| 23e40 | 20 20 28 6c 65 74 20 28 28 68 76 20 28 6d 61 6b    65 2d 73 79 6d 62 6f 6c 20 22 68 74 74 70 63 6f | ..(let.((hv.(make-symbol."httpco | 
| 23e60 | 6e 76 61 72 22 29 29 0a 20 20 20 20 20 20 20 20    28 76 61 6c 20 28 6d 61 6b 65 2d 73 79 6d 62 6f | nvar")).........(val.(make-symbo | 
| 23e80 | 6c 20 22 76 61 6c 75 65 22 29 29 29 0a 20 20 20    20 60 28 77 69 74 68 2d 74 65 6d 70 2d 62 75 66 | l."value"))).....`(with-temp-buf | 
| 23ea0 | 66 65 72 0a 20 20 20 20 20 20 20 28 6c 65 74 20    28 28 2c 68 76 20 2c 68 74 74 70 63 6f 6e 29 0a | fer........(let.((,hv.,httpcon). | 
| 23ec0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74    61 6e 64 61 72 64 2d 6f 75 74 70 75 74 20 28 63 | .............(standard-output.(c | 
| 23ee0 | 75 72 72 65 6e 74 2d 62 75 66 66 65 72 29 29 29    0a 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 | urrent-buffer)))..........(let.( | 
| 23f00 | 28 2c 76 61 6c 20 28 70 72 6f 67 6e 20 2c 40 62    6f 64 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 | (,val.(progn.,@body))).......... | 
| 23f20 | 20 20 3b 3b 20 46 49 58 4d 45 20 2d 20 4e 65 65    64 20 61 20 6c 6f 6f 70 20 68 65 72 65 0a 20 20 | ..;;.FIXME.-.Need.a.loop.here... | 
| 23f40 | 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65    2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e | .........(elnode-http-send-strin | 
| 23f60 | 67 0a 20 20 20 20 20 20 20 20 20 20 20 20 2c 68    76 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 62 | g.............,hv.............(b | 
| 23f80 | 75 66 66 65 72 2d 73 75 62 73 74 72 69 6e 67 20    28 70 6f 69 6e 74 2d 6d 69 6e 29 20 28 70 6f 69 | uffer-substring.(point-min).(poi | 
| 23fa0 | 6e 74 2d 6d 61 78 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 | nt-max)))............(elnode-htt | 
| 23fc0 | 70 2d 72 65 74 75 72 6e 20 2c 68 76 29 29 29 29    29 29 0a 0a 0a 3b 3b 20 45 6c 6e 6f 64 65 20 63 | p-return.,hv))))))...;;.Elnode.c | 
| 23fe0 | 68 69 6c 64 20 70 72 6f 63 65 73 73 20 66 75 6e    63 74 69 6f 6e 73 0a 0a 28 64 65 66 63 75 73 74 | hild.process.functions..(defcust | 
| 24000 | 6f 6d 20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 6f    72 6b 65 72 2d 65 6c 69 73 70 20 6e 69 6c 0a 20 | om.elnode-log-worker-elisp.nil.. | 
| 24020 | 20 22 49 66 20 74 72 75 65 20 74 68 65 6e 20 77    6f 72 6b 65 72 20 45 6c 69 73 70 20 28 45 6c 69 | ."If.true.then.worker.Elisp.(Eli | 
| 24040 | 73 70 20 72 75 6e 20 69 6e 20 61 20 63 68 69 6c    64 2d 45 6d 61 63 73 20 70 72 6f 63 65 73 73 29 | sp.run.in.a.child-Emacs.process) | 
| 24060 | 20 69 73 20 6c 6f 67 67 65 64 2e 0a 0a 54 68 65    20 62 75 66 66 65 72 20 27 2a 20 65 6c 6e 6f 64 | .is.logged...The.buffer.'*.elnod | 
| 24080 | 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 2a    27 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 | e-worker-elisp.*'.is.used.for.th | 
| 240a0 | 65 20 6c 6f 67 2e 22 0a 20 20 3a 67 72 6f 75 70    20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74 79 70 65 | e.log."...:group.'elnode...:type | 
| 240c0 | 20 27 28 62 6f 6f 6c 65 61 6e 29 29 0a 0a 28 64    65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d | .'(boolean))..(defcustom.elnode- | 
| 240e0 | 6c 6f 67 2d 77 6f 72 6b 65 72 2d 72 65 73 70 6f    6e 73 65 73 20 6e 69 6c 0a 20 20 22 49 66 20 74 | log-worker-responses.nil..."If.t | 
| 24100 | 72 75 65 20 74 68 65 6e 20 77 6f 72 6b 65 72 20    45 6c 69 73 70 20 6c 6f 67 73 20 72 65 73 70 6f | rue.then.worker.Elisp.logs.respo | 
| 24120 | 6e 73 65 73 20 69 6e 20 61 20 62 75 66 66 65 72    2e 0a 0a 54 68 65 20 62 75 66 66 65 72 20 27 2a | nses.in.a.buffer...The.buffer.'* | 
| 24140 | 20 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 72    65 73 70 6f 6e 73 65 20 2a 27 20 69 73 20 75 73 | .elnode-worker-response.*'.is.us | 
| 24160 | 65 64 20 66 6f 72 20 74 68 65 20 6c 6f 67 2e 22    0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 | ed.for.the.log."...:group.'elnod | 
| 24180 | 65 0a 20 20 3a 74 79 70 65 20 27 28 62 6f 6f 6c    65 61 6e 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c | e...:type.'(boolean))..(defun.el | 
| 241a0 | 6e 6f 64 65 2d 2d 77 6f 72 6b 65 72 2d 66 69 6c    74 65 72 2d 68 65 6c 70 65 72 20 28 70 72 6f 63 | node--worker-filter-helper.(proc | 
| 241c0 | 65 73 73 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ess............................. | 
| 241e0 | 20 20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .........data................... | 
| 24200 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 63 68 69 6c 64 2d 6c 69 73 70 0a 20 20 | ...................child-lisp... | 
| 24220 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 24240 | 20 20 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a 20    20 22 41 20 68 65 6c 70 65 72 20 66 75 6e 63 74 | ...out-stream)..."A.helper.funct | 
| 24260 | 69 6f 6e 20 66 6f 72 20 60 65 6c 6e 6f 64 65 2d    77 6f 72 6b 65 72 2d 65 6c 69 73 70 27 2e 0a 0a | ion.for.`elnode-worker-elisp'... | 
| 24280 | 53 65 6e 64 73 20 44 41 54 41 20 62 65 69 6e 67    20 73 65 6e 74 20 66 72 6f 6d 20 50 52 4f 43 45 | Sends.DATA.being.sent.from.PROCE | 
| 242a0 | 53 53 20 74 6f 20 4f 55 54 2d 53 54 52 45 41 4d    2e 0a 0a 43 48 49 4c 44 2d 4c 49 53 50 20 69 73 | SS.to.OUT-STREAM...CHILD-LISP.is | 
| 242c0 | 20 73 65 6e 74 20 69 6e 20 72 65 73 70 6f 6e 73    65 20 74 6f 20 45 6d 61 63 73 27 20 71 75 65 72 | .sent.in.response.to.Emacs'.quer | 
| 242e0 | 79 20 66 6f 72 20 74 68 65 20 4c 69 73 70 20 6f    6e 20 73 74 64 69 6e 2e 22 0a 20 20 28 69 66 20 | y.for.the.Lisp.on.stdin."...(if. | 
| 24300 | 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 6f 72 6b 65    72 2d 72 65 73 70 6f 6e 73 65 73 0a 20 20 20 20 | elnode-log-worker-responses..... | 
| 24320 | 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e 74 2d    62 75 66 66 65 72 0a 20 20 20 20 20 20 20 20 20 | ..(with-current-buffer.......... | 
| 24340 | 20 28 67 65 74 2d 62 75 66 66 65 72 2d 63 72 65    61 74 65 20 22 2a 20 65 6c 6e 6f 64 65 2d 77 6f | .(get-buffer-create."*.elnode-wo | 
| 24360 | 72 6b 65 72 2d 72 65 73 70 6f 6e 73 65 20 2a 22    29 0a 20 20 20 20 20 20 20 20 28 67 6f 74 6f 2d | rker-response.*").........(goto- | 
| 24380 | 63 68 61 72 20 28 70 6f 69 6e 74 2d 6d 61 78 29    29 0a 20 20 20 20 20 20 20 20 28 69 6e 73 65 72 | char.(point-max)).........(inser | 
| 243a0 | 74 20 64 61 74 61 29 29 29 0a 0a 20 20 3b 3b 20    53 70 69 74 20 6f 75 74 20 61 20 62 69 74 20 6f | t.data)))....;;.Spit.out.a.bit.o | 
| 243c0 | 66 20 74 68 65 20 64 61 74 61 20 28 74 72 75 6e    63 61 74 65 64 29 0a 20 20 28 65 6c 6e 6f 64 65 | f.the.data.(truncated)...(elnode | 
| 243e0 | 2d 65 72 72 6f 72 0a 20 20 20 22 65 6c 6e 6f 64    65 2d 2d 77 6f 72 6b 65 72 2d 66 69 6c 74 65 72 | -error...."elnode--worker-filter | 
| 24400 | 2d 68 65 6c 70 65 72 20 64 61 74 61 20 25 73 2e    2e 2e 20 25 73 22 0a 20 20 20 28 65 6c 6e 6f 64 | -helper.data.%s....%s"....(elnod | 
| 24420 | 65 2d 74 72 75 6e 63 20 64 61 74 61 29 0a 20 20    20 6f 75 74 2d 73 74 72 65 61 6d 29 0a 0a 20 20 | e-trunc.data)....out-stream).... | 
| 24440 | 3b 3b 20 57 65 20 67 65 74 20 74 68 69 73 20 61    73 20 61 20 73 69 67 6e 61 6c 20 74 6f 20 72 65 | ;;.We.get.this.as.a.signal.to.re | 
| 24460 | 61 64 20 61 20 6c 69 73 70 20 65 78 70 72 65 73    73 69 6f 6e 0a 20 20 28 69 66 20 28 65 71 75 61 | ad.a.lisp.expression...(if.(equa | 
| 24480 | 6c 20 64 61 74 61 20 22 4c 69 73 70 20 65 78 70    72 65 73 73 69 6f 6e 3a 20 22 29 0a 20 20 20 20 | l.data."Lisp.expression:.")..... | 
| 244a0 | 20 20 28 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d    73 74 72 69 6e 67 20 70 72 6f 63 65 73 73 20 63 | ..(process-send-string.process.c | 
| 244c0 | 68 69 6c 64 2d 6c 69 73 70 29 0a 20 20 20 20 28    63 6f 6e 64 0a 20 20 20 20 20 28 28 62 75 66 66 | hild-lisp).....(cond......((buff | 
| 244e0 | 65 72 70 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a    20 20 20 20 20 20 28 77 69 74 68 2d 63 75 72 72 | erp.out-stream).......(with-curr | 
| 24500 | 65 6e 74 2d 62 75 66 66 65 72 20 6f 75 74 2d 73    74 72 65 61 6d 0a 20 20 20 20 20 20 20 20 28 69 | ent-buffer.out-stream.........(i | 
| 24520 | 6e 73 65 72 74 20 64 61 74 61 29 29 29 0a 20 20    20 20 20 28 28 66 75 6e 63 74 69 6f 6e 70 20 6f | nsert.data)))......((functionp.o | 
| 24540 | 75 74 2d 73 74 72 65 61 6d 29 0a 20 20 20 20 20    20 28 66 75 6e 63 61 6c 6c 20 6f 75 74 2d 73 74 | ut-stream).......(funcall.out-st | 
| 24560 | 72 65 61 6d 20 70 72 6f 63 65 73 73 20 64 61 74    61 29 29 0a 20 20 20 20 20 28 28 70 72 6f 63 65 | ream.process.data))......((proce | 
| 24580 | 73 73 70 20 6f 75 74 2d 73 74 72 65 61 6d 29 0a    20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 | ssp.out-stream).......(if.(not.( | 
| 245a0 | 65 71 75 61 6c 20 22 63 6c 6f 73 65 64 22 20 28    70 72 6f 63 65 73 73 2d 73 74 61 74 75 73 20 70 | equal."closed".(process-status.p | 
| 245c0 | 72 6f 63 65 73 73 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 28 66 75 6e 63 61 6c 6c 0a 20 20 20 | rocess)))...........(funcall.... | 
| 245e0 | 20 20 20 20 20 20 20 20 3b 3b 20 44 6f 65 73 20    74 68 65 20 6f 75 74 70 75 74 2d 73 74 72 65 61 | ........;;.Does.the.output-strea | 
| 24600 | 6d 20 68 61 76 65 20 61 20 73 70 65 63 69 66 69    63 20 66 75 6e 63 74 69 6f 6e 3f 0a 20 20 20 20 | m.have.a.specific.function?..... | 
| 24620 | 20 20 20 20 20 20 20 28 6f 72 20 28 70 72 6f 63    65 73 73 2d 67 65 74 20 6f 75 74 2d 73 74 72 65 | .......(or.(process-get.out-stre | 
| 24640 | 61 6d 20 3a 73 65 6e 64 2d 73 74 72 69 6e 67 2d    66 75 6e 63 74 69 6f 6e 29 0a 20 20 20 20 20 20 | am.:send-string-function)....... | 
| 24660 | 20 20 20 20 20 20 20 20 20 27 70 72 6f 63 65 73    73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 29 0a 20 | .........'process-send-string).. | 
| 24680 | 20 20 20 20 20 20 20 20 20 20 3b 3b 20 54 68 65    20 64 61 74 61 20 74 6f 20 73 65 6e 74 20 74 6f | ..........;;.The.data.to.sent.to | 
| 246a0 | 20 74 68 65 20 6f 75 74 70 75 74 2d 73 74 72 65    61 6d 20 70 72 6f 63 65 73 73 0a 20 20 20 20 20 | .the.output-stream.process...... | 
| 246c0 | 20 20 20 20 20 20 6f 75 74 2d 73 74 72 65 61 6d    20 64 61 74 61 29 29 29 29 29 29 0a 0a 28 64 65 | ......out-stream.data))))))..(de | 
| 246e0 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 77 6f 72 6b    65 72 2d 6c 69 73 70 2d 68 65 6c 70 65 72 20 28 | fun.elnode--worker-lisp-helper.( | 
| 24700 | 63 68 69 6c 64 2d 6c 69 73 70 29 0a 20 20 22 43    61 6c 6c 65 64 20 77 69 74 68 20 43 48 49 4c 44 | child-lisp)..."Called.with.CHILD | 
| 24720 | 2d 4c 49 53 50 20 69 74 20 72 65 74 75 72 6e 73    20 61 20 76 65 72 73 69 6f 6e 20 6f 66 20 43 48 | -LISP.it.returns.a.version.of.CH | 
| 24740 | 49 4c 44 2d 4c 49 53 50 2e 0a 0a 42 79 20 64 65    66 61 75 6c 74 20 74 68 69 73 20 66 75 6e 63 74 | ILD-LISP...By.default.this.funct | 
| 24760 | 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67    20 65 78 63 65 70 74 20 72 65 74 75 72 6e 20 69 | ion.does.nothing.except.return.i | 
| 24780 | 74 27 73 20 61 72 67 75 6d 65 6e 74 2e 0a 0a 54    68 65 20 66 75 6e 63 74 69 6f 6e 20 65 78 69 73 | t's.argument...The.function.exis | 
| 247a0 | 74 73 20 73 6f 20 74 68 61 74 20 6f 74 68 65 72    20 66 75 6e 63 74 69 6f 6e 73 20 43 41 4e 20 66 | ts.so.that.other.functions.CAN.f | 
| 247c0 | 6c 65 74 20 69 74 20 61 6e 64 20 74 68 75 73 0a    6f 76 65 72 72 69 64 65 20 74 68 65 20 4c 69 73 | let.it.and.thus.override.the.Lis | 
| 247e0 | 70 20 62 65 69 6e 67 20 70 61 73 73 65 64 20 74    6f 20 74 68 65 20 63 68 69 6c 64 20 45 6d 61 63 | p.being.passed.to.the.child.Emac | 
| 24800 | 73 2e 22 0a 20 20 63 68 69 6c 64 2d 6c 69 73 70    29 0a 0a 28 64 65 66 6d 61 63 72 6f 20 65 6c 6e | s."...child-lisp)..(defmacro.eln | 
| 24820 | 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70    20 28 6f 75 74 70 75 74 2d 73 74 72 65 61 6d 20 | ode-worker-elisp.(output-stream. | 
| 24840 | 62 69 6e 64 69 6e 67 73 20 26 72 65 73 74 20 62    6f 64 79 29 0a 20 20 22 45 76 61 6c 75 61 74 65 | bindings.&rest.body)..."Evaluate | 
| 24860 | 20 74 68 65 20 42 4f 44 59 20 69 6e 20 61 20 63    68 69 6c 64 20 45 6d 61 63 73 20 63 6f 6e 6e 65 | .the.BODY.in.a.child.Emacs.conne | 
| 24880 | 63 74 65 64 20 74 6f 20 4f 55 54 50 55 54 2d 53    54 52 45 41 4d 2e 0a 0a 54 68 65 20 42 49 4e 44 | cted.to.OUTPUT-STREAM...The.BIND | 
| 248a0 | 49 4e 47 53 20 61 72 65 20 6c 65 74 2d 66 6f 72    6d 20 76 61 72 69 61 62 6c 65 20 61 73 73 69 67 | INGS.are.let-form.variable.assig | 
| 248c0 | 6e 6d 65 6e 74 73 20 77 68 69 63 68 20 61 72 65    0a 73 65 72 69 61 6c 69 7a 65 64 20 66 6f 72 20 | nments.which.are.serialized.for. | 
| 248e0 | 74 68 65 20 63 68 69 6c 64 20 45 6d 61 63 73 2e    20 20 55 6e 6c 65 73 73 20 61 20 76 61 72 69 61 | the.child.Emacs...Unless.a.varia | 
| 24900 | 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 70 61 72    65 6e 74 20 69 73 20 65 78 70 6c 69 63 69 74 6c | ble.from.the.parent.is.explicitl | 
| 24920 | 79 20 73 74 61 74 65 64 20 68 65 72 65 20 69 74    20 77 69 6c 6c 20 4e 4f 54 20 62 65 20 61 63 63 | y.stated.here.it.will.NOT.be.acc | 
| 24940 | 65 73 73 69 62 6c 65 20 69 6e 20 74 68 65 0a 63    68 69 6c 64 20 45 6d 61 63 73 2e 0a 0a 54 68 65 | essible.in.the.child.Emacs...The | 
| 24960 | 20 63 68 69 6c 64 20 45 6d 61 63 73 20 68 61 73    20 61 20 60 6c 6f 61 64 2d 70 61 74 68 27 20 65 | .child.Emacs.has.a.`load-path'.e | 
| 24980 | 78 61 63 74 6c 79 20 61 73 20 74 68 65 20 60 6c    6f 61 64 2d 70 61 74 68 27 20 6f 66 0a 74 68 65 | xactly.as.the.`load-path'.of.the | 
| 249a0 | 20 70 61 72 65 6e 74 20 45 6d 61 63 73 20 61 74    20 65 78 65 63 75 74 69 6f 6e 2e 0a 0a 54 68 65 | .parent.Emacs.at.execution...The | 
| 249c0 | 20 63 72 65 61 74 65 64 20 63 68 69 6c 64 20 45    6d 61 63 73 20 70 72 6f 63 65 73 73 20 69 73 20 | .created.child.Emacs.process.is. | 
| 249e0 | 72 65 74 75 72 6e 65 64 2e 20 20 49 74 27 73 20    70 6f 73 73 69 62 6c 65 20 74 6f 0a 6b 69 6c 6c | returned...It's.possible.to.kill | 
| 24a00 | 20 74 68 65 20 63 68 69 6c 64 20 45 6d 61 63 73    20 70 72 6f 63 65 73 73 20 6f 72 20 64 6f 20 6f | .the.child.Emacs.process.or.do.o | 
| 24a20 | 74 68 65 72 20 74 68 69 6e 67 73 20 74 6f 20 69    74 20 64 69 72 65 63 74 6c 79 2e 0a 54 68 69 73 | ther.things.to.it.directly..This | 
| 24a40 | 20 63 6f 75 6c 64 20 62 65 20 76 65 72 79 20 64    61 6e 67 65 72 6f 75 73 20 68 6f 77 65 76 65 72 | .could.be.very.dangerous.however | 
| 24a60 | 2c 20 79 6f 75 20 73 68 6f 75 6c 64 20 6b 6e 6f    77 20 77 68 61 74 20 79 6f 75 0a 61 72 65 20 64 | ,.you.should.know.what.you.are.d | 
| 24a80 | 6f 69 6e 67 20 62 65 66 6f 72 65 20 61 74 74 65    6d 70 74 69 6e 67 20 69 74 2e 0a 0a 54 68 65 20 | oing.before.attempting.it...The. | 
| 24aa0 | 4f 55 54 50 55 54 2d 53 54 52 45 41 4d 20 63 6f    75 6c 64 20 62 65 20 61 20 62 75 66 66 65 72 2c | OUTPUT-STREAM.could.be.a.buffer, | 
| 24ac0 | 20 61 20 66 75 6e 63 74 69 6f 6e 20 6f 72 20 61    6e 6f 74 68 65 72 0a 70 72 6f 63 65 73 73 2e 0a | .a.function.or.another.process.. | 
| 24ae0 | 0a 49 66 20 74 68 65 20 4f 55 54 50 55 54 2d 53    54 52 45 41 4d 20 69 73 20 61 6e 6f 74 68 65 72 | .If.the.OUTPUT-STREAM.is.another | 
| 24b00 | 20 70 72 6f 63 65 73 73 20 69 74 20 6d 61 79 20    68 61 76 65 20 61 20 70 72 6f 63 65 73 73 0a 70 | .process.it.may.have.a.process.p | 
| 24b20 | 72 6f 70 65 72 74 79 20 60 3a 73 65 6e 64 2d 73    74 72 69 6e 67 2d 66 75 6e 63 74 69 6f 6e 27 20 | roperty.`:send-string-function'. | 
| 24b40 | 65 76 61 6c 75 61 74 69 6e 67 20 74 6f 20 61 20    66 75 6e 63 74 69 6f 6e 20 74 6f 20 73 65 6e 64 | evaluating.to.a.function.to.send | 
| 24b60 | 0a 64 61 74 61 20 74 6f 20 74 68 61 74 20 70 72    6f 63 65 73 73 2e 20 20 54 68 65 20 66 75 6e 63 | .data.to.that.process...The.func | 
| 24b80 | 74 69 6f 6e 20 73 68 6f 75 6c 64 20 74 61 6b 65    20 74 68 65 20 73 61 6d 65 0a 61 72 67 75 6d 65 | tion.should.take.the.same.argume | 
| 24ba0 | 6e 74 73 20 61 73 20 74 68 65 20 73 74 61 6e 64    61 72 64 20 45 6d 61 63 73 20 4c 69 73 70 20 60 | nts.as.the.standard.Emacs.Lisp.` | 
| 24bc0 | 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72    69 6e 67 27 2e 0a 0a 46 75 72 74 68 65 72 6d 6f | process-send-string'...Furthermo | 
| 24be0 | 72 65 2c 20 69 66 20 74 68 65 20 4f 55 54 50 55    54 2d 53 54 52 45 41 4d 20 69 73 20 61 6e 6f 74 | re,.if.the.OUTPUT-STREAM.is.anot | 
| 24c00 | 68 65 72 20 70 72 6f 63 65 73 73 2c 20 77 68 65    6e 20 74 68 65 0a 63 68 69 6c 64 20 45 6d 61 63 | her.process,.when.the.child.Emac | 
| 24c20 | 73 20 66 69 6e 69 73 68 65 73 20 61 6e 20 45 4f    46 20 69 73 20 73 65 6e 74 20 74 6f 20 74 68 61 | s.finishes.an.EOF.is.sent.to.tha | 
| 24c40 | 74 20 70 72 6f 63 65 73 73 2e 20 20 49 66 20 74    68 65 0a 4f 55 54 50 55 54 2d 53 54 52 45 41 4d | t.process...If.the.OUTPUT-STREAM | 
| 24c60 | 20 70 72 6f 63 65 73 73 20 68 61 73 20 61 20 70    72 6f 63 65 73 73 20 70 72 6f 70 65 72 74 79 20 | .process.has.a.process.property. | 
| 24c80 | 60 3a 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74    69 6f 6e 27 0a 74 68 65 6e 20 74 68 61 74 20 69 | `:send-eof-function'.then.that.i | 
| 24ca0 | 73 20 75 73 65 64 20 74 6f 20 73 65 6e 64 20 74    68 65 20 45 4f 46 2e 20 20 54 68 65 20 66 75 6e | s.used.to.send.the.EOF...The.fun | 
| 24cc0 | 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 74 61 6b    65 20 74 68 65 0a 73 61 6d 65 20 61 72 67 75 6d | ction.should.take.the.same.argum | 
| 24ce0 | 65 6e 74 73 20 61 73 20 74 68 65 20 73 74 61 6e    64 61 72 64 20 45 6d 61 63 73 20 4c 69 73 70 20 | ents.as.the.standard.Emacs.Lisp. | 
| 24d00 | 60 70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 65 6f    66 27 2e 0a 0a 41 6e 20 65 78 61 6d 70 6c 65 3a | `process-send-eof'...An.example: | 
| 24d20 | 0a 0a 20 28 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65    72 2d 65 6c 69 73 70 20 68 74 74 70 2d 63 6f 6e | ...(elnode-worker-elisp.http-con | 
| 24d40 | 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 28 | nection.......................(( | 
| 24d60 | 70 61 74 68 20 28 70 61 74 68 2d 66 75 6e 63 74    69 6f 6e 29 29 29 0a 20 20 20 28 72 65 71 75 69 | path.(path-function)))....(requi | 
| 24d80 | 72 65 20 27 63 72 65 6f 6c 65 29 0a 20 20 20 28    63 72 65 6f 6c 65 2d 77 69 6b 69 20 70 61 74 68 | re.'creole)....(creole-wiki.path | 
| 24da0 | 29 29 0a 0a 50 72 65 73 75 6d 69 6e 67 20 68 74    74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 | ))..Presuming.http-connection.is | 
| 24dc0 | 20 61 20 70 72 6f 63 65 73 73 20 28 69 6e 20 74    68 65 20 6d 61 6e 6e 65 72 20 6f 66 20 45 6c 6e | .a.process.(in.the.manner.of.Eln | 
| 24de0 | 6f 64 65 2c 0a 66 6f 72 20 65 78 61 6d 70 6c 65    29 20 74 68 69 73 20 77 69 6c 6c 20 63 61 75 73 | ode,.for.example).this.will.caus | 
| 24e00 | 65 20 61 20 63 68 69 6c 64 20 45 6d 61 63 73 20    74 6f 20 62 65 20 63 72 65 61 74 65 64 2c 20 77 | e.a.child.Emacs.to.be.created,.w | 
| 24e20 | 69 74 68 69 6e 0a 77 68 69 63 68 20 60 70 61 74    68 27 20 28 77 68 69 63 68 20 69 73 20 73 65 72 | ithin.which.`path'.(which.is.ser | 
| 24e40 | 69 61 6c 69 7a 65 64 20 66 72 6f 6d 20 74 68 65    20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 70 61 | ialized.from.the.value.of.the.pa | 
| 24e60 | 72 65 6e 74 0a 45 6d 61 63 73 27 20 60 70 61 74    68 2d 66 75 6e 63 74 69 6f 6e 27 29 20 77 69 6c | rent.Emacs'.`path-function').wil | 
| 24e80 | 6c 20 62 65 20 6c 6f 61 64 65 64 20 61 6e 64 20    63 6f 6e 76 65 72 74 65 64 20 66 72 6f 6d 0a 57 | l.be.loaded.and.converted.from.W | 
| 24ea0 | 69 6b 69 43 72 65 6f 6c 65 20 74 6f 20 48 54 4d    4c 20 61 6e 64 20 74 68 65 6e 20 73 65 6e 74 20 | ikiCreole.to.HTML.and.then.sent. | 
| 24ec0 | 74 6f 20 74 68 65 20 73 74 61 6e 64 61 72 64 20    6f 75 74 70 75 74 20 73 74 72 65 61 6d 2e 0a 54 | to.the.standard.output.stream..T | 
| 24ee0 | 68 65 20 63 68 69 6c 64 27 73 20 73 74 61 6e 64    61 72 64 20 6f 75 74 70 75 74 20 73 74 72 65 61 | he.child's.standard.output.strea | 
| 24f00 | 6d 20 69 73 20 63 6f 6e 6e 65 63 74 65 64 20 64    69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 0a 60 | m.is.connected.directly.to.the.` | 
| 24f20 | 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e 27    2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c | http-connection'...In.this.case, | 
| 24f40 | 20 70 72 65 73 75 6d 61 62 6c 79 20 74 68 65 0a    60 68 74 74 70 2d 63 6f 6e 6e 65 63 74 69 6f 6e | .presumably.the.`http-connection | 
| 24f60 | 27 20 77 6f 75 6c 64 20 68 61 76 65 20 66 75 6e    63 74 69 6f 6e 73 20 61 74 74 61 63 68 65 64 20 | '.would.have.functions.attached. | 
| 24f80 | 74 6f 20 74 68 65 20 70 72 6f 70 65 72 74 69 65    73 0a 60 3a 73 65 6e 64 2d 73 74 72 69 6e 67 2d | to.the.properties.`:send-string- | 
| 24fa0 | 66 75 6e 63 74 69 6f 6e 27 20 61 6e 64 20 60 3a    73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69 6f | function'.and.`:send-eof-functio | 
| 24fc0 | 6e 27 20 74 6f 20 64 6f 20 48 54 54 50 0a 63 68    75 6e 6b 20 65 6e 63 6f 64 69 6e 67 20 61 6e 64 | n'.to.do.HTTP.chunk.encoding.and | 
| 24fe0 | 20 74 6f 20 65 6e 64 20 74 68 65 20 48 54 54 50    20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 72 72 | .to.end.the.HTTP.connection.corr | 
| 25000 | 65 63 74 6c 79 2e 22 0a 20 20 28 64 65 63 6c 61    72 65 0a 20 20 20 28 69 6e 64 65 6e 74 20 32 29 | ectly."...(declare....(indent.2) | 
| 25020 | 0a 20 20 20 28 64 65 62 75 67 0a 20 20 20 20 28    73 65 78 70 0a 20 20 20 20 20 28 26 72 65 73 74 | ....(debug.....(sexp......(&rest | 
| 25040 | 0a 20 20 20 20 20 20 26 6f 72 20 73 79 6d 62 6f    6c 70 20 28 67 61 74 65 20 73 79 6d 62 6f 6c 70 | .......&or.symbolp.(gate.symbolp | 
| 25060 | 20 26 6f 70 74 69 6f 6e 61 6c 20 66 6f 72 6d 29    29 0a 20 20 20 20 20 26 72 65 73 74 20 66 6f 72 | .&optional.form))......&rest.for | 
| 25080 | 6d 29 29 29 0a 20 20 28 6c 65 74 20 28 28 6c 6f    61 64 70 61 74 68 76 61 72 20 28 6d 61 6b 65 2d | m)))...(let.((loadpathvar.(make- | 
| 250a0 | 73 79 6d 62 6f 6c 20 22 6c 6f 61 64 2d 70 61 74    68 2d 66 6f 72 6d 22 29 29 0a 20 20 20 20 20 20 | symbol."load-path-form"))....... | 
| 250c0 | 20 20 28 62 69 6e 64 69 6e 67 73 76 61 72 20 28    6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 62 69 6e | ..(bindingsvar.(make-symbol."bin | 
| 250e0 | 64 69 6e 67 73 22 29 29 0a 20 20 20 20 20 20 20    20 28 63 68 69 6c 64 6c 69 73 70 76 61 72 20 28 | dings")).........(childlispvar.( | 
| 25100 | 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 63 68 69    6c 64 2d 6c 69 73 70 22 29 29 0a 20 20 20 20 20 | make-symbol."child-lisp"))...... | 
| 25120 | 20 20 20 28 63 68 69 6c 64 6c 69 73 70 66 69 6c    65 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 | ...(childlispfile.(make-symbol." | 
| 25140 | 63 68 69 6c 64 2d 6c 69 73 70 2d 66 69 6c 65 22    29 29 0a 20 20 20 20 20 20 20 20 28 66 69 6c 74 | child-lisp-file")).........(filt | 
| 25160 | 65 72 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d 62    6f 6c 20 22 66 69 6c 74 65 72 2d 66 75 6e 63 74 | ervar.(make-symbol."filter-funct | 
| 25180 | 69 6f 6e 22 29 29 0a 20 20 20 20 20 20 20 20 28    63 6d 64 76 61 72 20 28 6d 61 6b 65 2d 73 79 6d | ion")).........(cmdvar.(make-sym | 
| 251a0 | 62 6f 6c 20 22 63 6f 6d 6d 61 6e 64 22 29 29 0a    20 20 20 20 20 20 20 20 28 70 72 6f 63 76 61 72 | bol."command")).........(procvar | 
| 251c0 | 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 70    72 6f 63 65 73 73 22 29 29 0a 20 20 20 20 20 20 | .(make-symbol."process"))....... | 
| 251e0 | 20 20 28 6e 61 6d 65 76 61 72 20 28 6d 61 6b 65    2d 73 79 6d 62 6f 6c 20 22 70 72 6f 63 65 73 73 | ..(namevar.(make-symbol."process | 
| 25200 | 2d 6e 61 6d 65 22 29 29 0a 20 20 20 20 20 20 20    20 28 62 75 66 76 61 72 20 28 6d 61 6b 65 2d 73 | -name")).........(bufvar.(make-s | 
| 25220 | 79 6d 62 6f 6c 20 22 62 75 66 66 65 72 22 29 29    0a 20 20 20 20 20 20 20 20 28 6f 75 74 76 61 72 | ymbol."buffer")).........(outvar | 
| 25240 | 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 6f    75 74 70 75 74 2d 73 74 72 65 61 6d 22 29 29 29 | .(make-symbol."output-stream"))) | 
| 25260 | 0a 20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c 6f    75 74 76 61 72 20 2c 6f 75 74 70 75 74 2d 73 74 | .....`(let*.((,outvar.,output-st | 
| 25280 | 72 65 61 6d 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 2c 63 68 69 6c 64 6c 69 73 70 76 61 72 | ream).............(,childlispvar | 
| 252a0 | 20 20 3b 20 74 68 65 20 6c 69 73 70 20 74 6f 20    72 75 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ..;.the.lisp.to.run............. | 
| 252c0 | 20 28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 3b 3b 20 54 68 65 72 65 20 | .(concat...............;;.There. | 
| 252e0 | 69 73 20 61 20 76 65 72 79 20 73 74 72 61 6e 67    65 20 74 68 69 6e 67 20 77 69 74 68 20 73 65 6e | is.a.very.strange.thing.with.sen | 
| 25300 | 64 69 6e 67 20 6c 69 73 70 20 74 6f 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 3b 3b 20 28 72 | ding.lisp.to...............;;.(r | 
| 25320 | 65 61 64 29 20 6f 76 65 72 20 61 20 70 69 70 65    64 20 73 74 72 65 61 6d 2e 2e 2e 20 28 72 65 61 | ead).over.a.piped.stream....(rea | 
| 25340 | 64 29 20 63 61 6e 27 74 20 63 6f 70 65 20 77 69    74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | d).can't.cope.with.............. | 
| 25360 | 20 3b 3b 20 6d 75 6c 74 69 70 6c 65 20 6c 69 6e    65 73 3b 20 73 6f 20 77 65 20 65 6e 63 6f 64 65 | .;;.multiple.lines;.so.we.encode | 
| 25380 | 20 6e 65 77 6c 69 6e 65 20 68 65 72 65 2e 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 | .newline.here................(re | 
| 253a0 | 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 6e 2d    73 74 72 69 6e 67 0a 20 20 20 20 20 20 20 20 20 | place-regexp-in-string.......... | 
| 253c0 | 20 20 20 20 20 20 22 5c 6e 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 22 5c 5c 5c 5c 6e | ......"\n"................"\\\\n | 
| 253e0 | 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 66 6f 72 6d 61 74 20 22 28 70 72 6f 67 6e | "................(format."(progn | 
| 25400 | 20 28 73 65 74 71 20 6c 6f 61 64 2d 70 61 74 68    20 28 71 75 6f 74 65 20 25 53 29 29 20 28 6c 65 | .(setq.load-path.(quote.%S)).(le | 
| 25420 | 74 20 25 53 20 25 53 29 29 22 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | t.%S.%S))"...................... | 
| 25440 | 20 20 6c 6f 61 64 2d 70 61 74 68 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ..load-path..................... | 
| 25460 | 20 20 20 28 6c 69 73 74 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...(list........................ | 
| 25480 | 20 2c 40 28 6c 6f 6f 70 0a 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .,@(loop........................ | 
| 254a0 | 20 20 20 20 66 6f 72 20 66 20 69 6e 20 62 69 6e    64 69 6e 67 73 20 63 6f 6c 6c 65 63 74 0a 20 20 | ....for.f.in.bindings.collect... | 
| 254c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 27 | .........................(list.' | 
| 254e0 | 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | list............................ | 
| 25500 | 20 20 20 20 20 20 60 28 71 75 6f 74 65 20 2c 28    63 61 72 20 66 29 29 0a 20 20 20 20 20 20 20 20 | ......`(quote.,(car.f))......... | 
| 25520 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 60 28 66 6f 72 6d 61 | .........................`(forma | 
| 25540 | 74 20 22 25 73 22 20 2c 28 63 61 64 72 20 66 29    29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | t."%s".,(cadr.f)))))............ | 
| 25560 | 20 20 20 20 20 20 20 20 20 20 20 20 27 28 70 72    6f 67 6e 20 2c 40 28 65 6c 6e 6f 64 65 2d 2d 77 | ............'(progn.,@(elnode--w | 
| 25580 | 6f 72 6b 65 72 2d 6c 69 73 70 2d 68 65 6c 70 65    72 20 62 6f 64 79 29 29 29 29 0a 20 20 20 20 20 | orker-lisp-helper.body))))...... | 
| 255a0 | 20 20 20 20 20 20 20 20 20 22 5c 6e 22 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 2c 63 68 | ........."\n")).............(,ch | 
| 255c0 | 69 6c 64 6c 69 73 70 66 69 6c 65 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 | ildlispfile..............(let.(( | 
| 255e0 | 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 20 28    6d 61 6b 65 2d 74 65 6d 70 2d 66 69 6c 65 20 22 | ,childlispfile.(make-temp-file." | 
| 25600 | 65 6c 6e 6f 64 65 22 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d | elnode")))................(with- | 
| 25620 | 74 65 6d 70 2d 66 69 6c 65 20 2c 63 68 69 6c 64    6c 69 73 70 66 69 6c 65 0a 20 20 20 20 20 20 20 | temp-file.,childlispfile........ | 
| 25640 | 20 20 20 20 20 20 20 20 20 20 28 69 6e 73 65 72    74 20 2c 63 68 69 6c 64 6c 69 73 70 76 61 72 29 | ..........(insert.,childlispvar) | 
| 25660 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 29 | )................,childlispfile) | 
| 25680 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c    63 6d 64 76 61 72 0a 20 20 20 20 20 20 20 20 20 | ).............(,cmdvar.......... | 
| 256a0 | 20 20 20 20 28 63 6f 6e 63 61 74 20 22 65 6d 61    63 73 20 2d 71 20 2d 62 61 74 63 68 20 22 0a 20 | ....(concat."emacs.-q.-batch.".. | 
| 256c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 22 2d 2d 73 63 72 69 70 74 20 22 20 | ...................."--script.". | 
| 256e0 | 2c 63 68 69 6c 64 6c 69 73 70 66 69 6c 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ,childlispfile.................. | 
| 25700 | 20 20 20 20 29 29 3b 3b 22 20 32 3e 20 2f 64 65    76 2f 6e 75 6c 6c 22 29 29 0a 20 20 20 20 20 20 | ....));;".2>./dev/null"))....... | 
| 25720 | 20 20 20 20 20 20 28 2c 6e 61 6d 65 76 61 72 20    28 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 | ......(,namevar.(concat......... | 
| 25740 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    6e 75 6d 62 65 72 2d 74 6f 2d 73 74 72 69 6e 67 | ...............(number-to-string | 
| 25760 | 20 28 72 61 6e 64 6f 6d 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .(random))...................... | 
| 25780 | 20 20 28 6e 75 6d 62 65 72 2d 74 6f 2d 73 74 72    69 6e 67 20 28 66 6c 6f 61 74 2d 74 69 6d 65 29 | ..(number-to-string.(float-time) | 
| 257a0 | 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    3b 3b 20 57 65 20 68 61 76 65 20 74 6f 20 6d 61 | ))).............;;.We.have.to.ma | 
| 257c0 | 6b 65 20 61 20 62 75 66 66 65 72 20 75 6e 6c 65    73 73 20 74 68 65 20 6f 75 74 70 75 74 2d 73 74 | ke.a.buffer.unless.the.output-st | 
| 257e0 | 72 65 61 6d 20 69 73 20 61 20 62 75 66 66 65 72    0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 62 | ream.is.a.buffer.............(,b | 
| 25800 | 75 66 76 61 72 20 28 63 6f 6e 64 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ufvar.(cond..................... | 
| 25820 | 20 20 28 28 62 75 66 66 65 72 70 20 2c 6f 75 74    76 61 72 29 20 2c 6f 75 74 76 61 72 29 0a 20 20 | ..((bufferp.,outvar).,outvar)... | 
| 25840 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 28 74 0a 20 20 20 20 20 20 20 20 20 | ....................(t.......... | 
| 25860 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 67    65 74 2d 62 75 66 66 65 72 2d 63 72 65 61 74 65 | ..............(get-buffer-create | 
| 25880 | 20 28 66 6f 72 6d 61 74 20 22 2a 20 25 73 20 2a    22 20 2c 6e 61 6d 65 76 61 72 29 29 29 29 29 0a | .(format."*.%s.*".,namevar))))). | 
| 258a0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 70 72    6f 63 76 61 72 20 28 73 74 61 72 74 2d 70 72 6f | ............(,procvar.(start-pro | 
| 258c0 | 63 65 73 73 2d 73 68 65 6c 6c 2d 63 6f 6d 6d 61    6e 64 20 2c 6e 61 6d 65 76 61 72 20 2c 62 75 66 | cess-shell-command.,namevar.,buf | 
| 258e0 | 76 61 72 20 2c 63 6d 64 76 61 72 29 29 29 0a 20    20 20 20 20 20 20 3b 3b 20 4c 6f 67 20 74 68 65 | var.,cmdvar)))........;;.Log.the | 
| 25900 | 20 6c 69 73 70 0a 20 20 20 20 20 20 20 28 69 66    20 65 6c 6e 6f 64 65 2d 6c 6f 67 2d 77 6f 72 6b | .lisp........(if.elnode-log-work | 
| 25920 | 65 72 2d 65 6c 69 73 70 0a 20 20 20 20 20 20 20    20 20 20 20 28 77 69 74 68 2d 63 75 72 72 65 6e | er-elisp............(with-curren | 
| 25940 | 74 2d 62 75 66 66 65 72 20 28 67 65 74 2d 62 75    66 66 65 72 2d 63 72 65 61 74 65 20 22 2a 20 65 | t-buffer.(get-buffer-create."*.e | 
| 25960 | 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65 6c 69    73 70 20 2a 22 29 0a 20 20 20 20 20 20 20 20 20 | lnode-worker-elisp.*").......... | 
| 25980 | 20 20 20 20 28 69 6e 73 65 72 74 20 2c 63 68 69    6c 64 6c 69 73 70 76 61 72 29 29 29 0a 20 20 20 | ....(insert.,childlispvar))).... | 
| 259a0 | 20 20 20 20 3b 3b 20 53 65 74 75 70 20 61 20 66    69 6c 74 65 72 20 66 75 6e 63 69 6f 6e 20 6f 6e | ....;;.Setup.a.filter.funcion.on | 
| 259c0 | 20 74 68 65 20 63 68 69 6c 64 20 6c 69 73 70 20    74 6f 20 6d 61 70 20 6f 75 74 70 75 74 20 62 61 | .the.child.lisp.to.map.output.ba | 
| 259e0 | 63 6b 0a 20 20 20 20 20 20 20 3b 3b 20 74 6f 20    77 68 61 74 65 76 65 72 20 74 68 65 20 6f 75 74 | ck........;;.to.whatever.the.out | 
| 25a00 | 70 75 74 20 69 73 0a 20 20 20 20 20 20 20 28 73    65 74 2d 70 72 6f 63 65 73 73 2d 66 69 6c 74 65 | put.is........(set-process-filte | 
| 25a20 | 72 0a 20 20 20 20 20 20 20 20 2c 70 72 6f 63 76    61 72 0a 20 20 20 20 20 20 20 20 28 6c 61 6d 62 | r.........,procvar.........(lamb | 
| 25a40 | 64 61 20 28 70 72 6f 63 65 73 73 20 64 61 74 61    29 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | da.(process.data)...........(eln | 
| 25a60 | 6f 64 65 2d 2d 77 6f 72 6b 65 72 2d 66 69 6c 74    65 72 2d 68 65 6c 70 65 72 0a 20 20 20 20 20 20 | ode--worker-filter-helper....... | 
| 25a80 | 20 20 20 20 20 70 72 6f 63 65 73 73 0a 20 20 20    20 20 20 20 20 20 20 20 64 61 74 61 0a 20 20 20 | .....process............data.... | 
| 25aa0 | 20 20 20 20 20 20 20 20 2c 63 68 69 6c 64 6c 69    73 70 76 61 72 0a 20 20 20 20 20 20 20 20 20 20 | ........,childlispvar........... | 
| 25ac0 | 20 2c 6f 75 74 76 61 72 29 29 29 0a 20 20 20 20    20 20 20 3b 3b 20 4e 6f 77 20 73 65 74 75 70 20 | .,outvar)))........;;.Now.setup. | 
| 25ae0 | 74 68 65 20 73 65 6e 74 69 6e 65 6c 0a 20 20 20    20 20 20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 | the.sentinel........(set-process | 
| 25b00 | 2d 73 65 6e 74 69 6e 65 6c 0a 20 20 20 20 20 20    20 20 2c 70 72 6f 63 76 61 72 0a 20 20 20 20 20 | -sentinel.........,procvar...... | 
| 25b20 | 20 20 20 28 6c 61 6d 62 64 61 20 28 70 72 6f 63    65 73 73 20 73 74 61 74 75 73 29 0a 20 20 20 20 | ...(lambda.(process.status)..... | 
| 25b40 | 20 20 20 20 20 20 3b 3b 20 43 68 6f 6f 73 65 20    6f 72 20 66 61 6b 65 20 61 20 73 65 6e 64 2d 65 | ......;;.Choose.or.fake.a.send-e | 
| 25b60 | 6f 66 20 66 75 6e 63 0a 20 20 20 20 20 20 20 20    20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 | of.func...........(elnode-error. | 
| 25b80 | 22 65 6c 6e 6f 64 65 2d 77 6f 72 6b 65 72 2d 65    6c 69 73 70 20 73 65 6e 74 69 6e 65 6c 20 66 6f | "elnode-worker-elisp.sentinel.fo | 
| 25ba0 | 72 20 25 73 22 20 2c 6e 61 6d 65 76 61 72 29 0a    20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 | r.%s".,namevar)...........(let.( | 
| 25bc0 | 28 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74 69    6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | (send-eof-function.............. | 
| 25be0 | 20 20 20 20 28 6f 72 20 28 61 6e 64 20 28 70 72    6f 63 65 73 73 70 20 2c 6f 75 74 76 61 72 29 0a | ....(or.(and.(processp.,outvar). | 
| 25c00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 6f 72 20 28 70 | ..........................(or.(p | 
| 25c20 | 72 6f 63 65 73 73 2d 67 65 74 20 2c 6f 75 74 76    61 72 20 3a 73 65 6e 64 2d 65 6f 66 2d 66 75 6e | rocess-get.,outvar.:send-eof-fun | 
| 25c40 | 63 74 69 6f 6e 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ction).......................... | 
| 25c60 | 20 20 20 20 20 27 70 72 6f 63 65 73 73 2d 73 65    6e 64 2d 65 6f 66 29 29 0a 20 20 20 20 20 20 20 | .....'process-send-eof))........ | 
| 25c80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    61 6d 62 64 61 20 28 63 6f 6e 29 0a 20 20 20 20 | ..............(lambda.(con)..... | 
| 25ca0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 | ...................(elnode-error | 
| 25cc0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 | ........................."elnode | 
| 25ce0 | 2d 77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 66 61    6b 65 20 65 6f 66 20 66 75 6e 63 20 25 73 22 0a | -worker-elisp.fake.eof.func.%s". | 
| 25d00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 2c 6e 61 6d 65 76 61 72 | ........................,namevar | 
| 25d20 | 29 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 | ))))).............(cond......... | 
| 25d40 | 20 20 20 20 20 3b 3b 20 4e 6f 72 6d 61 6c 20 65    6e 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | .....;;.Normal.end.............. | 
| 25d60 | 28 28 65 71 75 61 6c 20 73 74 61 74 75 73 20 22    66 69 6e 69 73 68 65 64 5c 6e 22 29 0a 20 20 20 | ((equal.status."finished\n").... | 
| 25d80 | 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f    64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 | ...........(elnode-error........ | 
| 25da0 | 20 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d    77 6f 72 6b 65 72 2d 65 6c 69 73 70 20 25 73 20 | ........"elnode-worker-elisp.%s. | 
| 25dc0 | 63 6f 6d 70 6c 65 74 65 64 20 25 73 22 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 2c 6e 61 | completed.%s"................,na | 
| 25de0 | 6d 65 76 61 72 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 2c 6f 75 74 76 61 72 29 0a 20 20 | mevar................,outvar)... | 
| 25e00 | 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e    63 61 6c 6c 20 73 65 6e 64 2d 65 6f 66 2d 66 75 | ............(funcall.send-eof-fu | 
| 25e20 | 6e 63 74 69 6f 6e 20 2c 6f 75 74 76 61 72 29 29    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b | nction.,outvar))..............;; | 
| 25e40 | 20 45 72 72 6f 72 20 65 6e 64 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 28 28 73 74 72 69 6e 67 | .Error.end..............((string | 
| 25e60 | 2d 6d 61 74 63 68 20 22 65 78 69 74 65 64 20 61    62 6e 6f 72 6d 61 6c 6c 79 20 77 69 74 68 20 63 | -match."exited.abnormally.with.c | 
| 25e80 | 6f 64 65 20 5c 5c 28 5b 30 2d 39 5d 2b 5c 5c 29    5c 6e 22 20 73 74 61 74 75 73 29 0a 20 20 20 20 | ode.\\([0-9]+\\)\n".status)..... | 
| 25ea0 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 65 72 72 6f 72 0a 20 20 20 20 20 20 20 20 | ..........(elnode-error......... | 
| 25ec0 | 20 20 20 20 20 20 20 22 65 6c 6e 6f 64 65 2d 77    6f 72 6b 65 72 2d 65 6c 69 73 70 20 25 73 20 63 | ......."elnode-worker-elisp.%s.c | 
| 25ee0 | 6f 6d 70 6c 65 74 65 64 20 77 69 74 68 20 61 6e    20 65 72 72 6f 72 3a 20 25 73 22 0a 20 20 20 20 | ompleted.with.an.error:.%s"..... | 
| 25f00 | 20 20 20 20 20 20 20 20 20 20 20 2c 6e 61 6d 65    76 61 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ...........,namevar............. | 
| 25f20 | 20 20 20 73 74 61 74 75 73 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c | ...status)...............(funcal | 
| 25f40 | 6c 20 73 65 6e 64 2d 65 6f 66 2d 66 75 6e 63 74    69 6f 6e 20 2c 6f 75 74 76 61 72 29 0a 20 20 20 | l.send-eof-function.,outvar).... | 
| 25f60 | 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65    74 65 2d 70 72 6f 63 65 73 73 20 70 72 6f 63 65 | ...........(delete-process.proce | 
| 25f80 | 73 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 75 6e 6c 65 73 73 20 28 62 75 66 66 65 | ss)...............(unless.(buffe | 
| 25fa0 | 72 70 20 2c 6f 75 74 76 61 72 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6b 69 6c | rp.,outvar).................(kil | 
| 25fc0 | 6c 2d 62 75 66 66 65 72 20 28 70 72 6f 63 65 73    73 2d 62 75 66 66 65 72 20 70 72 6f 63 65 73 73 | l-buffer.(process-buffer.process | 
| 25fe0 | 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 3b 3b 20 41 6e 79 20 6f 74 68 65 72 20 73 | ))))..............;;.Any.other.s | 
| 26000 | 69 67 6e 61 6c 20 73 74 61 74 75 73 20 69 73 20    69 67 6e 6f 72 65 64 0a 20 20 20 20 20 20 20 20 | ignal.status.is.ignored......... | 
| 26020 | 20 20 20 20 20 28 74 29 29 29 29 29 0a 20 20 20    20 20 20 20 2c 70 72 6f 63 76 61 72 29 29 29 0a | .....(t)))))........,procvar))). | 
| 26040 | 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 77    61 69 74 2d 66 6f 72 2d 65 78 69 74 20 28 70 72 | .(defun.elnode-wait-for-exit.(pr | 
| 26060 | 6f 63 65 73 73 29 0a 20 20 22 57 61 69 74 20 66    6f 72 20 50 52 4f 43 45 53 53 20 73 74 61 74 75 | ocess)..."Wait.for.PROCESS.statu | 
| 26080 | 73 20 74 6f 20 67 6f 20 74 6f 20 27 65 78 69 74    2e 22 0a 20 20 28 77 68 69 6c 65 20 28 6e 6f 74 | s.to.go.to.'exit."...(while.(not | 
| 260a0 | 20 28 65 71 20 28 70 72 6f 63 65 73 73 2d 73 74    61 74 75 73 20 70 72 6f 63 65 73 73 29 20 27 65 | .(eq.(process-status.process).'e | 
| 260c0 | 78 69 74 29 29 0a 20 20 20 20 28 73 6c 65 65 70    2d 66 6f 72 20 31 29 29 29 0a 0a 0a 3b 3b 20 54 | xit)).....(sleep-for.1)))...;;.T | 
| 260e0 | 4f 44 4f 3a 20 68 61 6e 64 6c 65 20 65 72 72 6f    72 73 20 62 65 74 74 65 72 20 74 68 61 6e 20 6d | ODO:.handle.errors.better.than.m | 
| 26100 | 65 73 73 61 67 69 6e 67 0a 28 64 65 66 75 6e 20    65 6c 6e 6f 64 65 2d 2d 63 68 69 6c 64 2d 70 72 | essaging.(defun.elnode--child-pr | 
| 26120 | 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 20 28    70 72 6f 63 65 73 73 20 73 74 61 74 75 73 29 0a | ocess-sentinel.(process.status). | 
| 26140 | 20 20 22 41 20 73 65 6e 74 69 6e 65 6c 20 66 6f    72 20 45 6c 6e 6f 64 65 20 63 68 69 6c 64 20 50 | .."A.sentinel.for.Elnode.child.P | 
| 26160 | 52 4f 43 45 53 53 2e 0a 0a 45 6c 6e 6f 64 65 20    63 68 69 6c 64 20 70 72 6f 63 65 73 73 65 73 20 | ROCESS...Elnode.child.processes. | 
| 26180 | 61 72 65 20 6a 75 73 74 20 45 6d 61 63 73 20 61    73 79 6e 63 68 72 6f 6e 6f 75 73 20 70 72 6f 63 | are.just.Emacs.asynchronous.proc | 
| 261a0 | 65 73 73 65 73 20 74 68 61 74 0a 73 65 6e 64 20    74 68 65 69 72 20 6f 75 74 70 75 74 20 74 6f 20 | esses.that.send.their.output.to. | 
| 261c0 | 61 6e 20 45 6c 6e 6f 64 65 20 48 54 54 50 20 63    6f 6e 6e 65 63 74 69 6f 6e 2e 0a 0a 54 68 65 20 | an.Elnode.HTTP.connection...The. | 
| 261e0 | 6d 61 69 6e 20 6a 6f 62 20 6f 66 20 74 68 69 73    20 73 65 6e 74 69 6e 65 6c 20 69 73 20 74 6f 20 | main.job.of.this.sentinel.is.to. | 
| 26200 | 6d 6f 6e 69 74 6f 72 20 77 68 65 6e 20 74 68 65    20 53 54 41 54 55 53 20 6f 66 0a 50 52 4f 43 45 | monitor.when.the.STATUS.of.PROCE | 
| 26220 | 53 53 20 69 6e 64 69 63 61 74 65 73 20 74 68 65    20 65 6e 64 20 6f 66 20 74 68 65 20 50 52 4f 43 | SS.indicates.the.end.of.the.PROC | 
| 26240 | 45 53 53 20 61 6e 64 20 74 6f 20 64 6f 0a 60 65    6c 6e 6f 64 65 2d 68 74 74 70 2d 65 6e 64 27 20 | ESS.and.to.do.`elnode-http-end'. | 
| 26260 | 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74 65    64 20 48 54 54 50 20 63 6f 6e 6e 65 63 74 69 6f | on.the.associated.HTTP.connectio | 
| 26280 | 6e 20 77 68 65 6e 20 74 68 61 74 0a 68 61 70 70    65 6e 73 2e 22 0a 20 20 28 63 6f 6e 64 0a 20 20 | n.when.that.happens."...(cond... | 
| 262a0 | 20 28 28 65 71 75 61 6c 20 73 74 61 74 75 73 20    22 66 69 6e 69 73 68 65 64 5c 6e 22 29 0a 20 20 | .((equal.status."finished\n")... | 
| 262c0 | 20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e    20 28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 | ..(let.((httpcon.(process-get.pr | 
| 262e0 | 6f 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74    74 70 63 6f 6e 29 29 29 0a 20 20 20 20 20 20 28 | ocess.:elnode-httpcon))).......( | 
| 26300 | 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20    20 20 20 20 22 45 6c 6e 6f 64 65 2d 63 68 69 6c | elnode-error........"Elnode-chil | 
| 26320 | 64 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e    65 6c 20 53 74 61 74 75 73 20 40 20 66 69 6e 69 | d-process-sentinel.Status.@.fini | 
| 26340 | 73 68 65 64 3a 20 25 73 20 2d 3e 20 25 73 20 6f    6e 20 25 73 22 0a 20 20 20 20 20 20 20 28 70 72 | shed:.%s.->.%s.on.%s"........(pr | 
| 26360 | 6f 63 65 73 73 2d 73 74 61 74 75 73 20 68 74 74    70 63 6f 6e 29 0a 20 20 20 20 20 20 20 28 70 72 | ocess-status.httpcon)........(pr | 
| 26380 | 6f 63 65 73 73 2d 73 74 61 74 75 73 20 70 72 6f    63 65 73 73 29 0a 20 20 20 20 20 20 20 68 74 74 | ocess-status.process)........htt | 
| 263a0 | 70 63 6f 6e 29 0a 20 20 20 20 20 20 28 69 66 20    28 6e 6f 74 20 28 65 71 20 27 63 6c 6f 73 65 64 | pcon).......(if.(not.(eq.'closed | 
| 263c0 | 20 28 70 72 6f 63 65 73 73 2d 73 74 61 74 75 73    20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 20 | .(process-status.httpcon)))..... | 
| 263e0 | 20 20 20 20 20 20 28 70 72 6f 67 6e 0a 20 20 20    20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | ......(progn.............(elnode | 
| 26400 | 2d 68 74 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e    67 20 68 74 74 70 63 6f 6e 20 20 22 22 29 0a 20 | -http-send-string.httpcon.."").. | 
| 26420 | 20 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63    65 73 73 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 | ...........(process-send-string. | 
| 26440 | 68 74 74 70 63 6f 6e 20 22 5c 72 5c 6e 22 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | httpcon."\r\n").............(eln | 
| 26460 | 6f 64 65 2d 2d 68 74 74 70 2d 65 6e 64 20 68 74    74 70 63 6f 6e 29 29 29 29 29 0a 20 20 20 28 28 | ode--http-end.httpcon)))))....(( | 
| 26480 | 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 65 78    69 74 65 64 20 61 62 6e 6f 72 6d 61 6c 6c 79 20 | string-match."exited.abnormally. | 
| 264a0 | 77 69 74 68 20 63 6f 64 65 20 5c 5c 28 5b 30 2d    39 5d 2b 5c 5c 29 5c 6e 22 20 73 74 61 74 75 73 | with.code.\\([0-9]+\\)\n".status | 
| 264c0 | 29 0a 20 20 20 20 28 6c 65 74 20 28 28 68 74 74    70 63 6f 6e 20 28 70 72 6f 63 65 73 73 2d 67 65 | ).....(let.((httpcon.(process-ge | 
| 264e0 | 74 20 70 72 6f 63 65 73 73 20 3a 65 6c 6e 6f 64    65 2d 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 | t.process.:elnode-httpcon))).... | 
| 26500 | 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72    20 22 45 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 | ...(elnode-error."Elnode-child-p | 
| 26520 | 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e 65 6c 3a    20 25 73 20 6f 6e 20 25 73 22 20 73 74 61 74 75 | rocess-sentinel:.%s.on.%s".statu | 
| 26540 | 73 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 20    20 28 69 66 20 28 6e 6f 74 20 28 65 71 20 27 63 | s.httpcon).......(if.(not.(eq.'c | 
| 26560 | 6c 6f 73 65 64 20 28 70 72 6f 63 65 73 73 2d 73    74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 29 29 | losed.(process-status.httpcon))) | 
| 26580 | 0a 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 67    6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | ...........(progn.............(e | 
| 265a0 | 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d    73 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 22 | lnode-http-send-string.httpcon." | 
| 265c0 | 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28    70 72 6f 63 65 73 73 2d 73 65 6e 64 2d 73 74 72 | ").............(process-send-str | 
| 265e0 | 69 6e 67 20 68 74 74 70 63 6f 6e 20 22 5c 72 5c    6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ing.httpcon."\r\n")............. | 
| 26600 | 28 65 6c 6e 6f 64 65 2d 2d 68 74 74 70 2d 65 6e    64 20 68 74 74 70 63 6f 6e 29 29 29 0a 20 20 20 | (elnode--http-end.httpcon))).... | 
| 26620 | 20 20 20 28 64 65 6c 65 74 65 2d 70 72 6f 63 65    73 73 20 70 72 6f 63 65 73 73 29 0a 20 20 20 20 | ...(delete-process.process)..... | 
| 26640 | 20 20 28 6b 69 6c 6c 2d 62 75 66 66 65 72 20 28    70 72 6f 63 65 73 73 2d 62 75 66 66 65 72 20 70 | ..(kill-buffer.(process-buffer.p | 
| 26660 | 72 6f 63 65 73 73 29 29 29 29 0a 20 20 20 28 74    0a 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 72 | rocess))))....(t.....(elnode-err | 
| 26680 | 6f 72 20 22 45 6c 6e 6f 64 65 2d 63 68 6c 69 6c    64 2d 70 72 6f 63 65 73 73 2d 73 65 6e 74 69 6e | or."Elnode-chlild-process-sentin | 
| 266a0 | 65 6c 3a 20 25 73 20 6f 6e 20 25 73 22 20 73 74    61 74 75 73 20 70 72 6f 63 65 73 73 29 29 29 29 | el:.%s.on.%s".status.process)))) | 
| 266c0 | 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d    2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 2d 66 | ..(defun.elnode--child-process-f | 
| 266e0 | 69 6c 74 65 72 20 28 70 72 6f 63 65 73 73 20 64    61 74 61 29 0a 20 20 22 41 20 67 65 6e 65 72 69 | ilter.(process.data)..."A.generi | 
| 26700 | 63 20 66 69 6c 74 65 72 20 66 75 6e 63 74 69 6f    6e 20 66 6f 72 20 65 6c 6e 6f 64 65 20 63 68 69 | c.filter.function.for.elnode.chi | 
| 26720 | 6c 64 20 70 72 6f 63 65 73 73 65 73 2e 0a 0a 65    6c 6e 6f 64 65 20 63 68 69 6c 64 20 70 72 6f 63 | ld.processes...elnode.child.proc | 
| 26740 | 65 73 73 65 73 20 61 72 65 20 6a 75 73 74 20 65    6d 61 63 73 20 61 73 79 6e 63 68 72 6f 6e 6f 75 | esses.are.just.emacs.asynchronou | 
| 26760 | 73 20 70 72 6f 63 65 73 73 65 73 20 74 68 61 74    0a 73 65 6e 64 20 74 68 65 69 72 20 6f 75 74 70 | s.processes.that.send.their.outp | 
| 26780 | 75 74 20 74 6f 20 61 6e 20 65 6c 6e 6f 64 65 20    68 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e | ut.to.an.elnode.http.connection. | 
| 267a0 | 0a 0a 54 68 69 73 20 66 69 6c 74 65 72 20 66 75    6e 63 74 69 6f 6e 20 64 6f 65 73 20 74 68 65 20 | ..This.filter.function.does.the. | 
| 267c0 | 6a 6f 62 20 6f 66 20 74 61 6b 69 6e 67 20 74 68    65 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 | job.of.taking.the.output.from.th | 
| 267e0 | 65 0a 61 73 79 6e 63 20 70 72 6f 63 65 73 73 20    61 6e 64 20 66 69 6e 64 69 6e 67 20 74 68 65 20 | e.async.process.and.finding.the. | 
| 26800 | 61 73 73 6f 63 69 61 74 65 64 20 65 6c 6e 6f 64    65 20 68 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f | associated.elnode.http.connectio | 
| 26820 | 6e 0a 61 6e 64 20 73 65 6e 64 69 6e 67 20 74 68    65 20 64 61 74 61 20 74 68 65 72 65 2e 22 0a 20 | n.and.sending.the.data.there.".. | 
| 26840 | 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e 20    28 70 72 6f 63 65 73 73 2d 67 65 74 20 70 72 6f | .(let.((httpcon.(process-get.pro | 
| 26860 | 63 65 73 73 20 3a 65 6c 6e 6f 64 65 2d 68 74 74    70 63 6f 6e 29 29 29 0a 20 20 20 20 28 65 6c 6e | cess.:elnode-httpcon))).....(eln | 
| 26880 | 6f 64 65 2d 65 72 72 6f 72 0a 20 20 20 20 20 22    45 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f | ode-error......"Elnode-child-pro | 
| 268a0 | 63 65 73 73 2d 66 69 6c 74 65 72 20 68 74 74 70    20 73 74 61 74 65 3a 20 25 73 20 64 61 74 61 20 | cess-filter.http.state:.%s.data. | 
| 268c0 | 6c 65 6e 67 74 68 3a 20 25 73 20 6f 6e 20 25 73    22 0a 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d | length:.%s.on.%s"......(process- | 
| 268e0 | 73 74 61 74 75 73 20 68 74 74 70 63 6f 6e 29 0a    20 20 20 20 20 28 6c 65 6e 67 74 68 20 64 61 74 | status.httpcon)......(length.dat | 
| 26900 | 61 29 0a 20 20 20 20 20 68 74 74 70 63 6f 6e 29    0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 65 | a)......httpcon).....(if.(not.(e | 
| 26920 | 71 20 27 63 6c 6f 73 65 64 20 28 70 72 6f 63 65    73 73 2d 73 74 61 74 75 73 20 68 74 74 70 63 6f | q.'closed.(process-status.httpco | 
| 26940 | 6e 29 29 29 0a 20 20 20 20 20 20 20 20 28 65 6c    6e 6f 64 65 2d 68 74 74 70 2d 73 65 6e 64 2d 73 | n))).........(elnode-http-send-s | 
| 26960 | 74 72 69 6e 67 20 68 74 74 70 63 6f 6e 20 64 61    74 61 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 | tring.httpcon.data))))..(defun.e | 
| 26980 | 6c 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63    65 73 73 20 28 68 74 74 70 63 6f 6e 20 70 72 6f | lnode-child-process.(httpcon.pro | 
| 269a0 | 67 72 61 6d 20 26 72 65 73 74 20 61 72 67 73 29    0a 20 20 22 52 75 6e 20 74 68 65 20 73 70 65 63 | gram.&rest.args)..."Run.the.spec | 
| 269c0 | 69 66 69 65 64 20 50 52 4f 47 52 41 4d 20 61 73    79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 73 65 6e | ified.PROGRAM.asynchronously.sen | 
| 269e0 | 64 69 6e 67 20 6f 75 74 70 75 74 20 74 6f 20 48    54 54 50 43 4f 4e 2e 0a 0a 50 52 4f 47 52 41 4d | ding.output.to.HTTPCON...PROGRAM | 
| 26a00 | 20 69 73 20 74 68 65 20 70 61 74 68 20 74 6f 20    74 68 65 20 70 72 6f 67 72 61 6d 20 74 6f 20 72 | .is.the.path.to.the.program.to.r | 
| 26a20 | 75 6e 2c 20 74 6f 20 62 65 20 72 65 73 6f 6c 76    65 64 20 62 79 0a 60 73 74 61 72 74 2d 70 72 6f | un,.to.be.resolved.by.`start-pro | 
| 26a40 | 63 65 73 73 27 20 69 6e 20 74 68 65 20 75 73 75    61 6c 20 77 61 79 2e 0a 0a 41 52 47 53 20 69 73 | cess'.in.the.usual.way...ARGS.is | 
| 26a60 | 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d    65 6e 74 73 20 74 6f 20 70 61 73 73 20 74 6f 20 | .a.list.of.arguments.to.pass.to. | 
| 26a80 | 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 0a 49 74    20 69 73 20 4e 4f 54 20 50 4f 53 53 49 42 4c 45 | the.program...It.is.NOT.POSSIBLE | 
| 26aa0 | 20 74 6f 20 72 75 6e 20 6d 6f 72 65 20 74 68 61    6e 20 6f 6e 65 20 70 72 6f 63 65 73 73 20 61 74 | .to.run.more.than.one.process.at | 
| 26ac0 | 20 61 20 74 69 6d 65 0a 64 69 72 65 63 74 65 64    20 61 74 20 74 68 65 20 73 61 6d 65 20 68 74 74 | .a.time.directed.at.the.same.htt | 
| 26ae0 | 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 0a 20    20 28 6c 65 74 2a 20 28 28 61 72 67 73 0a 20 20 | p.connection."...(let*.((args... | 
| 26b00 | 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 0a    20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 | ........(append............(list | 
| 26b20 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 6f    72 6d 61 74 20 22 25 73 2d 25 73 22 20 28 70 72 | .............(format."%s-%s".(pr | 
| 26b40 | 6f 63 65 73 73 2d 6e 61 6d 65 20 68 74 74 70 63    6f 6e 29 20 70 72 6f 67 72 61 6d 29 0a 20 20 20 | ocess-name.httpcon).program).... | 
| 26b60 | 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74    20 22 20 25 73 2d 25 73 22 20 28 70 72 6f 63 65 | .........(format.".%s-%s".(proce | 
| 26b80 | 73 73 2d 6e 61 6d 65 20 68 74 74 70 63 6f 6e 29    20 70 72 6f 67 72 61 6d 29 0a 20 20 20 20 20 20 | ss-name.httpcon).program)....... | 
| 26ba0 | 20 20 20 20 20 20 70 72 6f 67 72 61 6d 29 20 61    72 67 73 29 29 0a 20 20 20 20 20 20 20 20 20 28 | ......program).args))..........( | 
| 26bc0 | 70 20 28 6c 65 74 20 28 28 70 72 6f 63 65 73 73    2d 63 6f 6e 6e 65 63 74 69 6f 6e 2d 74 79 70 65 | p.(let.((process-connection-type | 
| 26be0 | 20 6e 69 6c 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 61 70 70 6c 79 20 27 73 74 61 | .nil))...............(apply.'sta | 
| 26c00 | 72 74 2d 70 72 6f 63 65 73 73 20 61 72 67 73 29    29 29 29 0a 20 20 20 20 28 73 65 74 2d 70 72 6f | rt-process.args)))).....(set-pro | 
| 26c20 | 63 65 73 73 2d 63 6f 64 69 6e 67 2d 73 79 73 74    65 6d 20 70 20 27 72 61 77 2d 74 65 78 74 2d 75 | cess-coding-system.p.'raw-text-u | 
| 26c40 | 6e 69 78 29 0a 20 20 20 20 3b 3b 20 42 69 6e 64    20 74 68 65 20 68 74 74 70 20 63 6f 6e 6e 65 63 | nix).....;;.Bind.the.http.connec | 
| 26c60 | 74 69 6f 6e 20 74 6f 20 74 68 65 20 70 72 6f 63    65 73 73 0a 20 20 20 20 28 70 72 6f 63 65 73 73 | tion.to.the.process.....(process | 
| 26c80 | 2d 70 75 74 20 70 20 3a 65 6c 6e 6f 64 65 2d 68    74 74 70 63 6f 6e 20 68 74 74 70 63 6f 6e 29 0a | -put.p.:elnode-httpcon.httpcon). | 
| 26ca0 | 20 20 20 20 3b 3b 20 42 69 6e 64 20 74 68 65 20    70 72 6f 63 65 73 73 20 74 6f 20 74 68 65 20 68 | ....;;.Bind.the.process.to.the.h | 
| 26cc0 | 74 74 70 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20    20 20 20 3b 3b 0a 20 20 20 20 3b 3b 20 57 41 52 | ttp.connection.....;;.....;;.WAR | 
| 26ce0 | 4e 49 4e 47 3a 20 74 68 69 73 20 6d 65 61 6e 73    20 79 6f 75 20 63 61 6e 20 6f 6e 6c 79 20 68 61 | NING:.this.means.you.can.only.ha | 
| 26d00 | 76 65 20 31 20 63 68 69 6c 64 20 70 72 6f 63 65    73 73 20 61 74 20 61 20 74 69 6d 65 0a 20 20 20 | ve.1.child.process.at.a.time.... | 
| 26d20 | 20 28 70 72 6f 63 65 73 73 2d 70 75 74 20 68 74    74 70 63 6f 6e 20 3a 65 6c 6e 6f 64 65 2d 63 68 | .(process-put.httpcon.:elnode-ch | 
| 26d40 | 69 6c 64 2d 70 72 6f 63 65 73 73 20 70 29 0a 20    20 20 20 3b 3b 20 53 65 74 75 70 20 74 68 65 20 | ild-process.p).....;;.Setup.the. | 
| 26d60 | 66 69 6c 74 65 72 20 61 6e 64 20 74 68 65 20 73    65 6e 74 69 6e 65 6c 20 74 6f 20 64 6f 20 74 68 | filter.and.the.sentinel.to.do.th | 
| 26d80 | 65 20 72 69 67 68 74 20 74 68 69 6e 67 20 77 69    74 68 0a 20 20 20 20 3b 3b 20 69 6e 63 6f 6d 6d | e.right.thing.with.....;;.incomm | 
| 26da0 | 69 6e 67 20 64 61 74 61 20 61 6e 64 20 73 69 67    6e 61 6c 73 0a 20 20 20 20 28 73 65 74 2d 70 72 | ing.data.and.signals.....(set-pr | 
| 26dc0 | 6f 63 65 73 73 2d 66 69 6c 74 65 72 20 70 20 27    65 6c 6e 6f 64 65 2d 2d 63 68 69 6c 64 2d 70 72 | ocess-filter.p.'elnode--child-pr | 
| 26de0 | 6f 63 65 73 73 2d 66 69 6c 74 65 72 29 0a 20 20    20 20 28 73 65 74 2d 70 72 6f 63 65 73 73 2d 73 | ocess-filter).....(set-process-s | 
| 26e00 | 65 6e 74 69 6e 65 6c 20 70 20 27 65 6c 6e 6f 64    65 2d 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 | entinel.p.'elnode--child-process | 
| 26e20 | 2d 73 65 6e 74 69 6e 65 6c 29 0a 20 20 20 20 28    65 6c 6e 6f 64 65 2d 65 72 72 6f 72 20 22 45 6c | -sentinel).....(elnode-error."El | 
| 26e40 | 6e 6f 64 65 2d 63 68 69 6c 64 2d 70 72 6f 63 65    73 73 20 69 6e 69 74 20 25 73 22 20 68 74 74 70 | node-child-process.init.%s".http | 
| 26e60 | 63 6f 6e 29 29 29 0a 0a 0a 3b 3b 20 46 69 6c 65    20 6d 61 6e 61 67 65 6d 65 6e 74 0a 0a 28 64 65 | con)))...;;.File.management..(de | 
| 26e80 | 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 73    65 6e 64 2d 66 69 6c 65 2d 70 72 6f 67 72 61 6d | fcustom.elnode-send-file-program | 
| 26ea0 | 20 22 2f 62 69 6e 2f 63 61 74 22 0a 20 20 22 54    68 65 20 70 72 6f 67 72 61 6d 20 74 6f 20 75 73 | ."/bin/cat"..."The.program.to.us | 
| 26ec0 | 65 20 66 6f 72 20 73 65 6e 64 69 6e 67 20 66 69    6c 65 73 2e 0a 0a 41 6c 74 65 72 69 6e 67 20 74 | e.for.sending.files...Altering.t | 
| 26ee0 | 68 69 73 20 69 73 20 6e 6f 74 20 72 65 63 6f 6d    65 6e 64 65 64 20 62 75 74 20 69 74 20 6d 61 79 | his.is.not.recomended.but.it.may | 
| 26f00 | 20 62 65 20 61 20 67 6f 6f 64 20 68 6f 6f 6b 20    66 6f 72 0a 63 65 72 74 61 69 6e 20 74 79 70 65 | .be.a.good.hook.for.certain.type | 
| 26f20 | 73 20 6f 66 20 64 65 62 75 67 67 69 6e 67 2e 22    0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 | s.of.debugging."...:group.'elnod | 
| 26f40 | 65 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69    6e 67 29 29 0a 0a 28 64 65 66 76 61 72 20 65 6c | e...:type.'(string))..(defvar.el | 
| 26f60 | 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74    73 2d 70 61 74 74 65 72 6e 20 22 3c 21 23 23 45 | node-replacements-pattern."<!##E | 
| 26f80 | 20 5c 5c 28 2e 2a 3f 5c 5c 29 20 45 23 23 21 3e    22 0a 20 20 22 54 68 65 20 72 65 67 65 78 20 75 | .\\(.*?\\).E##!>"..."The.regex.u | 
| 26fa0 | 73 65 64 20 66 6f 72 20 72 65 70 6c 61 63 69 6e    67 20 74 68 69 6e 67 73 2e 0a 0a 54 68 65 20 64 | sed.for.replacing.things...The.d | 
| 26fc0 | 65 66 61 75 6c 74 20 72 65 67 65 78 20 69 73 20    72 61 74 68 65 72 20 62 61 72 6f 71 75 65 2e 20 | efault.regex.is.rather.baroque.. | 
| 26fe0 | 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65    20 69 74 20 6e 65 65 64 73 20 74 6f 0a 62 65 20 | .This.is.because.it.needs.to.be. | 
| 27000 | 71 75 69 74 65 20 75 6e 69 71 75 65 20 61 6e 64    20 74 68 65 72 65 20 61 72 65 20 61 20 6c 6f 74 | quite.unique.and.there.are.a.lot | 
| 27020 | 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 73 6f    72 74 73 20 6f 66 20 74 68 69 6e 67 73 0a 6c 69 | .of.different.sorts.of.things.li | 
| 27040 | 6b 65 20 74 68 69 73 20 74 6f 20 62 65 20 75 6e    69 71 75 65 20 66 72 6f 6d 2e 22 29 0a 0a 28 64 | ke.this.to.be.unique.from.")..(d | 
| 27060 | 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 62 75 66    66 65 72 2d 74 65 6d 70 6c 61 74 65 20 28 66 69 | efun.elnode--buffer-template.(fi | 
| 27080 | 6c 65 2d 62 75 66 20 72 65 70 6c 61 63 65 6d 65    6e 74 73 29 0a 20 20 22 54 65 6d 70 6c 61 74 65 | le-buf.replacements)..."Template | 
| 270a0 | 20 72 65 6e 64 65 72 20 61 20 62 75 66 66 65 72    20 61 6e 64 20 72 65 74 75 72 6e 20 61 20 63 6f | .render.a.buffer.and.return.a.co | 
| 270c0 | 70 79 2e 0a 0a 46 49 4c 45 2d 42 55 46 20 69 73    20 74 68 65 20 73 6f 75 72 63 65 20 62 75 66 66 | py...FILE-BUF.is.the.source.buff | 
| 270e0 | 65 72 20 74 6f 20 75 73 65 2c 20 74 65 6d 70 6c    61 74 65 20 73 65 63 74 69 6f 6e 73 20 6d 61 72 | er.to.use,.template.sections.mar | 
| 27100 | 6b 65 64 20 75 70 20 6c 69 6b 65 3a 0a 0a 20 3c    21 23 23 45 20 5c 5c 28 2e 2a 3f 5c 5c 29 20 45 | ked.up.like:...<!##E.\\(.*?\\).E | 
| 27120 | 23 23 21 3e 0a 0a 77 69 6c 6c 20 62 65 20 72 65    70 6c 61 63 65 64 20 77 69 74 68 20 61 20 76 61 | ##!>..will.be.replaced.with.a.va | 
| 27140 | 6c 75 65 20 6c 6f 6f 6b 65 64 20 75 70 20 69 6e    20 52 45 50 4c 41 43 45 4d 45 4e 54 53 2e 0a 0a | lue.looked.up.in.REPLACEMENTS... | 
| 27160 | 52 45 50 4c 41 43 45 4d 45 4e 54 53 20 69 73 20    65 69 74 68 65 72 20 61 20 68 61 73 68 74 61 62 | REPLACEMENTS.is.either.a.hashtab | 
| 27180 | 6c 65 20 6f 72 20 61 6e 20 61 73 73 6f 63 69 61    74 69 6f 6e 20 6c 69 73 74 2e 0a 0a 46 6f 72 20 | le.or.an.association.list...For. | 
| 271a0 | 65 78 61 6d 70 6c 65 3a 0a 0a 20 3c 74 69 74 6c    65 3e 3c 21 23 23 45 20 6d 79 2d 74 69 74 6c 65 | example:...<title><!##E.my-title | 
| 271c0 | 20 45 23 23 21 3e 3c 2f 74 69 74 6c 65 3e 0a 20    3c 70 3e 42 79 20 3c 21 23 23 45 20 6d 79 2d 6e | .E##!></title>..<p>By.<!##E.my-n | 
| 271e0 | 61 6d 65 20 45 23 23 21 3e 2e 3c 2f 70 3e 0a 0a    77 69 74 68 20 74 68 65 20 52 45 50 4c 41 43 45 | ame.E##!>.</p>..with.the.REPLACE | 
| 27200 | 4d 45 4e 54 53 20 62 65 69 6e 67 3a 0a 0a 20 20    6d 79 2d 74 69 74 6c 65 20 3d 3e 20 41 6c 6c 20 | MENTS.being:....my-title.=>.All. | 
| 27220 | 74 68 69 6e 67 73 20 45 6c 6e 6f 64 65 21 0a 20    20 6d 79 2d 6e 61 6d 65 20 3d 3e 20 4e 69 63 20 | things.Elnode!...my-name.=>.Nic. | 
| 27240 | 46 65 72 72 69 65 72 0a 0a 77 6f 75 6c 64 20 72    65 73 75 6c 74 20 69 6e 20 74 68 65 20 73 74 72 | Ferrier..would.result.in.the.str | 
| 27260 | 69 6e 67 3a 0a 0a 20 20 3c 74 69 74 6c 65 3e 41    6c 6c 20 74 68 69 6e 67 73 20 45 6c 6e 6f 64 65 | ing:....<title>All.things.Elnode | 
| 27280 | 21 3c 2f 74 69 74 6c 65 3e 0a 20 20 3c 70 3e 42    79 20 4e 69 63 20 46 65 72 72 69 65 72 3c 2f 70 | !</title>...<p>By.Nic.Ferrier</p | 
| 272a0 | 3e 0a 0a 62 65 69 6e 67 20 72 65 74 75 72 6e 65    64 2e 22 0a 20 20 28 77 69 74 68 2d 63 75 72 72 | >..being.returned."...(with-curr | 
| 272c0 | 65 6e 74 2d 62 75 66 66 65 72 20 66 69 6c 65 2d    62 75 66 0a 20 20 20 20 28 72 65 70 6c 61 63 65 | ent-buffer.file-buf.....(replace | 
| 272e0 | 2d 72 65 67 65 78 70 2d 69 6e 2d 73 74 72 69 6e    67 0a 20 20 20 20 20 65 6c 6e 6f 64 65 2d 72 65 | -regexp-in-string......elnode-re | 
| 27300 | 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65    72 6e 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 | placements-pattern......(lambda. | 
| 27320 | 28 6d 61 74 63 68 65 64 29 0a 20 20 20 20 20 20    20 28 6c 65 74 20 28 28 6d 61 74 63 68 2d 76 61 | (matched)........(let.((match-va | 
| 27340 | 72 20 28 6d 61 74 63 68 2d 73 74 72 69 6e 67 2d    6e 6f 2d 70 72 6f 70 65 72 74 69 65 73 20 31 20 | r.(match-string-no-properties.1. | 
| 27360 | 6d 61 74 63 68 65 64 29 29 29 0a 20 20 20 20 20    20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 20 | matched)))..........(cond....... | 
| 27380 | 20 20 20 20 20 28 28 68 61 73 68 2d 74 61 62 6c    65 2d 70 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 | .....((hash-table-p.replacements | 
| 273a0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 67    65 74 68 61 73 68 20 6d 61 74 63 68 2d 76 61 72 | ).............(gethash.match-var | 
| 273c0 | 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 20 22 22    29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 74 | .replacements.""))............(t | 
| 273e0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b 20    50 72 65 73 75 6d 65 20 69 74 27 73 20 61 6e 20 | .............;;.Presume.it's.an. | 
| 27400 | 61 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20    20 20 28 6f 72 0a 20 20 20 20 20 20 20 20 20 20 | alist.............(or........... | 
| 27420 | 20 20 20 28 61 73 73 6f 63 2d 64 65 66 61 75 6c    74 20 6d 61 74 63 68 2d 76 61 72 20 72 65 70 6c | ...(assoc-default.match-var.repl | 
| 27440 | 61 63 65 6d 65 6e 74 73 20 6e 69 6c 20 74 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 22 22 29 | acements.nil.t).............."") | 
| 27460 | 29 29 29 29 0a 20 20 20 20 20 28 62 75 66 66 65    72 2d 73 75 62 73 74 72 69 6e 67 2d 6e 6f 2d 70 | ))))......(buffer-substring-no-p | 
| 27480 | 72 6f 70 65 72 74 69 65 73 20 28 70 6f 69 6e 74    2d 6d 69 6e 29 28 70 6f 69 6e 74 2d 6d 61 78 29 | roperties.(point-min)(point-max) | 
| 274a0 | 29 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d    20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 | ))))..(defcustom.elnode-webserve | 
| 274c0 | 72 2d 76 69 73 69 74 2d 66 69 6c 65 20 28 65 71    20 73 79 73 74 65 6d 2d 74 79 70 65 20 27 77 69 | r-visit-file.(eq.system-type.'wi | 
| 274e0 | 6e 64 6f 77 73 2d 6e 74 29 0a 20 20 22 57 68 65    74 68 65 72 20 74 68 65 20 77 65 62 73 65 72 76 | ndows-nt)..."Whether.the.webserv | 
| 27500 | 65 72 20 72 65 61 64 73 20 66 69 6c 65 73 20 62    79 20 76 69 73 69 74 69 6e 67 20 62 75 66 66 65 | er.reads.files.by.visiting.buffe | 
| 27520 | 72 73 20 6f 72 20 6e 6f 74 2e 0a 0a 57 68 65 6e    20 73 65 74 20 74 6f 20 60 74 27 20 66 69 6c 65 | rs.or.not...When.set.to.`t'.file | 
| 27540 | 73 20 74 6f 20 62 65 20 73 65 6e 74 20 77 69 74    68 20 74 68 65 20 60 65 6c 6e 6f 64 65 2d 73 65 | s.to.be.sent.with.the.`elnode-se | 
| 27560 | 6e 64 2d 66 69 6c 65 27 20 61 72 65 0a 72 65 61    64 20 69 6e 74 6f 20 45 6d 61 63 73 20 75 73 69 | nd-file'.are.read.into.Emacs.usi | 
| 27580 | 6e 67 20 60 66 69 6e 64 2d 66 69 6c 65 27 2e 22    0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 | ng.`find-file'."...:group.'elnod | 
| 275a0 | 65 0a 20 20 3a 74 79 70 65 20 27 62 6f 6f 6c 65    61 6e 29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e | e...:type.'boolean)..(defvar.eln | 
| 275c0 | 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e 74 73    2d 68 74 74 70 63 6f 6e 20 6e 69 6c 0a 20 20 22 | ode-replacements-httpcon.nil..." | 
| 275e0 | 54 68 69 73 20 69 73 20 62 6f 75 6e 64 20 62 79    20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 | This.is.bound.by.`elnode-send-fi | 
| 27600 | 6c 65 27 20 77 68 65 6e 20 64 6f 69 6e 67 20 72    65 70 6c 61 63 65 6d 65 6e 74 73 2e 0a 0a 49 74 | le'.when.doing.replacements...It | 
| 27620 | 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75    73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 22 29 | .should.not.be.used.otherwise.") | 
| 27640 | 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65    2d 72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 74 61 | ..(defvar.elnode-replacements-ta | 
| 27660 | 72 67 65 74 66 69 6c 65 20 6e 69 6c 0a 20 20 22    54 68 69 73 20 69 73 20 62 6f 75 6e 64 20 62 79 | rgetfile.nil..."This.is.bound.by | 
| 27680 | 20 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69    6c 65 27 20 77 68 65 6e 20 64 6f 69 6e 67 20 72 | .`elnode-send-file'.when.doing.r | 
| 276a0 | 65 70 6c 61 63 65 6d 65 6e 74 73 2e 0a 0a 49 74    20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75 | eplacements...It.should.not.be.u | 
| 276c0 | 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 22 29    0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d | sed.otherwise.")..(defun.elnode- | 
| 276e0 | 2d 72 66 63 31 31 32 33 2d 64 61 74 65 20 28 74    69 6d 65 29 0a 20 20 22 52 65 74 75 72 6e 20 54 | -rfc1123-date.(time)..."Return.T | 
| 27700 | 49 4d 45 20 69 6e 20 52 46 43 31 31 32 33 20 66    6f 72 6d 61 74 2c 20 73 75 69 74 61 62 6c 65 20 | IME.in.RFC1123.format,.suitable. | 
| 27720 | 66 6f 72 20 48 54 54 50 20 64 61 74 65 73 2e 22    0a 20 20 28 6c 65 74 2a 20 28 28 64 61 79 2d 6e | for.HTTP.dates."...(let*.((day-n | 
| 27740 | 61 6d 65 73 20 27 28 22 53 75 6e 22 20 22 4d 6f    6e 22 20 22 54 75 65 22 20 22 57 65 64 22 20 22 | ames.'("Sun"."Mon"."Tue"."Wed"." | 
| 27760 | 54 68 75 22 20 22 46 72 69 22 20 22 53 61 74 22    29 29 0a 09 20 28 6d 6f 6e 74 68 2d 6e 61 6d 65 | Thu"."Fri"."Sat"))...(month-name | 
| 27780 | 73 20 27 28 22 4a 61 6e 22 20 22 46 65 62 22 20    22 4d 61 72 22 20 22 41 70 72 22 20 22 4d 61 79 | s.'("Jan"."Feb"."Mar"."Apr"."May | 
| 277a0 | 22 20 22 4a 75 6e 22 0a 09 09 09 22 4a 75 6c 22    20 22 41 75 67 22 20 22 53 65 70 22 20 22 4f 63 | "."Jun"...."Jul"."Aug"."Sep"."Oc | 
| 277c0 | 74 22 20 22 4e 6f 76 22 20 22 44 65 63 22 29 29    0a 09 20 28 64 65 63 6f 64 65 64 2d 74 69 6d 65 | t"."Nov"."Dec"))...(decoded-time | 
| 277e0 | 20 28 64 65 63 6f 64 65 2d 74 69 6d 65 20 74 69    6d 65 29 29 0a 09 20 28 64 61 79 20 28 6e 74 68 | .(decode-time.time))...(day.(nth | 
| 27800 | 20 28 6e 74 68 20 36 20 64 65 63 6f 64 65 64 2d    74 69 6d 65 29 20 64 61 79 2d 6e 61 6d 65 73 29 | .(nth.6.decoded-time).day-names) | 
| 27820 | 29 0a 09 20 28 6d 6f 6e 74 68 20 28 6e 74 68 20    28 2d 20 28 6e 74 68 20 34 20 64 65 63 6f 64 65 | )...(month.(nth.(-.(nth.4.decode | 
| 27840 | 64 2d 74 69 6d 65 29 20 31 29 20 6d 6f 6e 74 68    2d 6e 61 6d 65 73 29 29 29 0a 20 20 20 20 28 66 | d-time).1).month-names))).....(f | 
| 27860 | 6f 72 6d 61 74 20 22 25 73 2c 20 25 73 20 25 73    20 25 73 22 0a 09 20 20 20 20 64 61 79 0a 09 20 | ormat."%s,.%s.%s.%s"......day... | 
| 27880 | 20 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 2d    73 74 72 69 6e 67 20 22 25 64 22 20 74 69 6d 65 | ...(format-time-string."%d".time | 
| 278a0 | 20 74 29 0a 09 20 20 20 20 6d 6f 6e 74 68 0a 09    20 20 20 20 28 66 6f 72 6d 61 74 2d 74 69 6d 65 | .t)......month......(format-time | 
| 278c0 | 2d 73 74 72 69 6e 67 20 22 25 59 20 25 48 3a 25    4d 3a 25 53 20 47 4d 54 22 20 74 69 6d 65 20 74 | -string."%Y.%H:%M:%S.GMT".time.t | 
| 278e0 | 29 29 29 29 0a 0a 28 64 65 66 61 6c 69 61 73 20    27 65 6c 6e 6f 64 65 2d 72 66 63 31 31 32 33 2d | ))))..(defalias.'elnode-rfc1123- | 
| 27900 | 64 61 74 65 20 27 65 6c 6e 6f 64 65 2d 2d 72 66    63 31 31 32 33 2d 64 61 74 65 29 0a 0a 28 64 65 | date.'elnode--rfc1123-date)..(de | 
| 27920 | 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65    2d 6d 6f 64 69 66 69 65 64 2d 74 69 6d 65 20 28 | fun.elnode--file-modified-time.( | 
| 27940 | 66 69 6c 65 29 0a 20 20 22 47 65 74 20 6d 6f 64    69 66 69 63 61 74 69 6f 6e 20 74 69 6d 65 20 66 | file)..."Get.modification.time.f | 
| 27960 | 6f 72 20 46 49 4c 45 2e 22 0a 20 20 28 6e 74 68    20 35 20 28 66 69 6c 65 2d 61 74 74 72 69 62 75 | or.FILE."...(nth.5.(file-attribu | 
| 27980 | 74 65 73 20 66 69 6c 65 29 29 29 0a 0a 28 64 65    66 61 6c 69 61 73 20 27 65 6c 6e 6f 64 65 2d 66 | tes.file)))..(defalias.'elnode-f | 
| 279a0 | 69 6c 65 2d 6d 6f 64 69 66 69 65 64 2d 74 69 6d    65 20 27 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65 2d | ile-modified-time.'elnode--file- | 
| 279c0 | 6d 6f 64 69 66 69 65 64 2d 74 69 6d 65 29 0a 0a    28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 73 | modified-time)..(defun*.elnode-s | 
| 279e0 | 65 6e 64 2d 66 69 6c 65 20 28 68 74 74 70 63 6f    6e 20 74 61 72 67 65 74 66 69 6c 65 0a 20 20 20 | end-file.(httpcon.targetfile.... | 
| 27a00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 26 | ...............................& | 
| 27a20 | 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | key............................. | 
| 27a40 | 20 20 20 20 20 20 70 72 65 61 6d 62 6c 65 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ......preamble.................. | 
| 27a60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 6d 69 6d 65 2d 74 79 70 65 73 0a 20 20 20 20 | .................mime-types..... | 
| 27a80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 | ..............................re | 
| 27aa0 | 70 6c 61 63 65 6d 65 6e 74 73 29 0a 20 20 22 53    65 6e 64 20 74 68 65 20 54 41 52 47 45 54 46 49 | placements)..."Send.the.TARGETFI | 
| 27ac0 | 4c 45 20 74 6f 20 74 68 65 20 48 54 54 50 43 4f    4e 2e 0a 0a 49 66 20 74 68 65 20 54 41 52 47 45 | LE.to.the.HTTPCON...If.the.TARGE | 
| 27ae0 | 54 46 49 4c 45 20 69 73 20 72 65 6c 61 74 69 76    65 20 74 68 65 6e 20 72 65 73 6f 6c 76 65 20 69 | TFILE.is.relative.then.resolve.i | 
| 27b00 | 74 20 76 69 61 20 74 68 65 20 63 75 72 72 65 6e    74 0a 60 6c 6f 61 64 2d 66 69 6c 65 2d 6e 61 6d | t.via.the.current.`load-file-nam | 
| 27b20 | 65 27 20 6f 72 20 60 62 75 66 66 65 72 2d 66 69    6c 65 2d 6e 61 6d 65 27 20 6f 72 20 60 64 65 66 | e'.or.`buffer-file-name'.or.`def | 
| 27b40 | 61 75 6c 74 2d 64 69 72 65 63 74 6f 72 79 27 2e    0a 0a 57 41 52 4e 49 4e 47 3a 20 74 68 69 73 20 | ault-directory'...WARNING:.this. | 
| 27b60 | 72 65 73 6f 6c 75 74 69 6f 6e 20 6f 72 64 65 72    20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 63 68 | resolution.order.is.likely.to.ch | 
| 27b80 | 61 6e 67 65 20 62 65 63 61 75 73 65 2c 0a 65 73    70 65 63 69 61 6c 6c 79 20 77 68 65 6e 20 64 65 | ange.because,.especially.when.de | 
| 27ba0 | 76 65 6c 6f 70 69 6e 67 20 60 64 65 66 61 75 6c    74 2d 64 69 72 65 63 74 6f 72 79 27 20 63 61 6e | veloping.`default-directory'.can | 
| 27bc0 | 20 62 65 20 71 75 69 74 65 0a 72 61 6e 64 6f 6d    20 28 63 68 61 6e 67 65 20 62 75 66 66 65 72 2c | .be.quite.random.(change.buffer, | 
| 27be0 | 20 63 68 61 6e 67 65 20 60 64 65 66 61 75 6c 74    2d 64 69 72 65 63 74 6f 72 79 27 29 2e 0a 0a 4f | .change.`default-directory')...O | 
| 27c00 | 70 74 69 6f 6e 61 6c 6c 79 20 79 6f 75 20 6d 61    79 20 73 70 65 63 69 66 79 20 65 78 74 72 61 20 | ptionally.you.may.specify.extra. | 
| 27c20 | 6b 65 79 77 6f 72 64 20 61 72 67 75 6d 65 6e 74    73 3a 74 0a 0a 3a 50 52 45 41 4d 42 4c 45 20 61 | keyword.arguments:t..:PREAMBLE.a | 
| 27c40 | 20 73 74 72 69 6e 67 20 6f 66 20 64 61 74 61 20    74 6f 20 73 65 6e 64 20 62 65 66 6f 72 65 20 74 | .string.of.data.to.send.before.t | 
| 27c60 | 68 65 20 66 69 6c 65 2e 0a 0a 3a 50 52 45 41 4d    42 4c 45 20 69 73 20 6d 6f 73 74 20 75 73 65 66 | he.file...:PREAMBLE.is.most.usef | 
| 27c80 | 75 6c 20 66 6f 72 20 70 72 65 66 69 78 69 6e 67    20 73 79 6e 74 61 78 20 74 6f 20 73 6f 6d 65 20 | ul.for.prefixing.syntax.to.some. | 
| 27ca0 | 6f 74 68 65 72 20 66 69 6c 65 2c 0a 66 6f 72 20    65 78 61 6d 70 6c 65 20 79 6f 75 20 63 6f 75 6c | other.file,.for.example.you.coul | 
| 27cc0 | 64 20 70 72 65 66 69 78 20 61 6e 20 58 4d 4c 20    66 69 6c 65 20 77 69 74 68 20 58 53 4c 20 74 72 | d.prefix.an.XML.file.with.XSL.tr | 
| 27ce0 | 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 0a 73 74 61    74 65 6d 65 6e 74 73 20 73 6f 20 61 20 63 6f 6d | ansformation.statements.so.a.com | 
| 27d00 | 70 6c 69 61 6e 74 20 75 73 65 72 2d 61 67 65 6e    74 20 77 69 6c 6c 20 74 72 61 6e 73 66 6f 72 6d | pliant.user-agent.will.transform | 
| 27d20 | 20 74 68 65 20 58 4d 4c 2e 0a 0a 3a 4d 49 4d 45    2d 54 59 50 45 53 20 69 73 20 61 6e 20 6f 70 74 | .the.XML...:MIME-TYPES.is.an.opt | 
| 27d40 | 69 6f 6e 61 6c 20 61 6c 69 73 74 20 6f 66 20 4d    49 4d 45 20 74 79 70 65 20 6d 61 70 70 69 6e 67 | ional.alist.of.MIME.type.mapping | 
| 27d60 | 73 20 74 6f 20 68 65 6c 70 0a 72 65 73 6f 6c 76    65 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 | s.to.help.resolve.the.type.of.a. | 
| 27d80 | 66 69 6c 65 2e 0a 0a 49 66 20 3a 52 45 50 4c 41    43 45 4d 45 4e 54 53 20 69 73 20 73 70 65 63 69 | file...If.:REPLACEMENTS.is.speci | 
| 27da0 | 66 69 65 64 20 69 74 20 73 68 6f 75 6c 64 20 62    65 20 61 20 68 61 73 68 2d 74 61 62 6c 65 20 6f | fied.it.should.be.a.hash-table.o | 
| 27dc0 | 72 20 61 6e 0a 61 73 73 6f 63 69 61 74 69 6f 6e    20 6c 69 73 74 20 75 73 65 64 20 74 6f 20 73 75 | r.an.association.list.used.to.su | 
| 27de0 | 70 70 6c 79 20 76 61 6c 75 65 73 20 66 6f 72 20    74 65 6d 70 6c 61 74 69 6e 67 2e 20 20 57 68 65 | pply.values.for.templating...Whe | 
| 27e00 | 6e 0a 74 65 6d 70 6c 61 74 69 6e 67 20 69 73 20    73 70 65 63 69 66 69 65 64 20 74 68 65 20 74 61 | n.templating.is.specified.the.ta | 
| 27e20 | 72 67 65 74 66 69 6c 65 20 69 73 20 6e 6f 74 20    73 65 6e 74 20 64 69 72 65 63 74 6c 79 20 62 75 | rgetfile.is.not.sent.directly.bu | 
| 27e40 | 74 0a 6f 70 65 6e 65 64 20 69 6e 20 45 6d 61 63    73 20 61 73 20 61 20 62 75 66 66 65 72 20 61 6e | t.opened.in.Emacs.as.a.buffer.an | 
| 27e60 | 64 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 74 68    72 6f 75 67 68 20 74 68 65 0a 74 65 6d 70 6c 61 | d.transformed.through.the.templa | 
| 27e80 | 74 69 6e 67 20 73 79 73 74 65 6d 20 62 65 66 6f    72 65 20 62 65 69 6e 67 20 73 65 6e 74 2e 20 20 | ting.system.before.being.sent... | 
| 27ea0 | 53 65 65 0a 60 65 6c 6e 6f 64 65 2d 2d 62 75 66    66 65 72 2d 74 65 6d 70 6c 61 74 65 27 20 66 6f | See.`elnode--buffer-template'.fo | 
| 27ec0 | 72 20 64 65 74 61 69 6c 73 20 6f 66 20 74 65 6d    70 6c 61 74 69 6e 67 2e 0a 0a 52 45 50 4c 41 43 | r.details.of.templating...REPLAC | 
| 27ee0 | 45 4d 45 4e 54 53 20 63 61 6e 20 6f 70 74 69 6f    6e 61 6c 6c 79 20 62 65 20 61 20 66 75 6e 63 74 | EMENTS.can.optionally.be.a.funct | 
| 27f00 | 69 6f 6e 20 69 6e 20 77 68 69 63 68 20 63 61 73    65 20 74 68 65 0a 72 65 74 75 72 6e 20 76 61 6c | ion.in.which.case.the.return.val | 
| 27f20 | 75 65 20 69 73 20 65 78 70 65 63 74 65 64 20 74    6f 20 62 65 20 74 68 65 20 68 61 73 68 2d 74 61 | ue.is.expected.to.be.the.hash-ta | 
| 27f40 | 62 6c 65 20 6f 72 20 61 6c 69 73 74 20 66 6f 72    20 74 68 65 0a 76 61 72 69 61 62 6c 65 73 2e 20 | ble.or.alist.for.the.variables.. | 
| 27f60 | 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 73 68    6f 75 6c 64 20 68 61 76 65 20 6e 6f 20 61 72 67 | .The.function.should.have.no.arg | 
| 27f80 | 75 6d 65 6e 74 73 20 62 75 74 20 74 77 6f 0a 76    61 72 69 61 62 6c 65 73 20 61 72 65 20 62 6f 75 | uments.but.two.variables.are.bou | 
| 27fa0 | 6e 64 20 64 75 72 69 6e 67 20 74 68 65 20 66 75    6e 63 74 69 6f 6e 27 73 20 65 78 65 63 75 74 69 | nd.during.the.function's.executi | 
| 27fc0 | 6f 6e 0a 60 65 6c 6e 6f 64 65 2d 72 65 70 6c 61    63 65 6d 65 6e 74 73 2d 68 74 74 70 63 6f 6e 27 | on.`elnode-replacements-httpcon' | 
| 27fe0 | 20 69 73 20 74 68 65 20 60 68 74 74 70 63 6f 6e    27 20 61 6e 64 0a 60 65 6c 6e 6f 64 65 2d 72 65 | .is.the.`httpcon'.and.`elnode-re | 
| 28000 | 70 6c 61 63 65 6d 65 6e 74 73 2d 74 61 72 67 65    74 66 69 6c 65 27 20 69 73 20 74 68 65 20 74 61 | placements-targetfile'.is.the.ta | 
| 28020 | 72 67 65 74 66 69 6c 65 20 74 6f 20 62 65 0a 64    65 6c 69 76 65 72 65 64 2e 22 0a 20 20 28 6c 65 | rgetfile.to.be.delivered."...(le | 
| 28040 | 74 20 28 28 66 69 6c 65 6e 61 6d 65 0a 20 20 20    20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 | t.((filename..........(if.(not.( | 
| 28060 | 66 69 6c 65 2d 6e 61 6d 65 2d 61 62 73 6f 6c 75    74 65 2d 70 20 74 61 72 67 65 74 66 69 6c 65 29 | file-name-absolute-p.targetfile) | 
| 28080 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28    66 69 6c 65 2d 72 65 6c 61 74 69 76 65 2d 6e 61 | )..............(file-relative-na | 
| 280a0 | 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 74 61 72 67 65 74 66 69 6c 65 0a 20 20 20 20 | me...............targetfile..... | 
| 280c0 | 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28    28 64 69 72 20 28 6f 72 20 6c 6f 61 64 2d 66 69 | ..........(let.((dir.(or.load-fi | 
| 280e0 | 6c 65 2d 6e 61 6d 65 20 62 75 66 66 65 72 2d 66    69 6c 65 2d 6e 61 6d 65 29 29 29 0a 20 20 20 20 | le-name.buffer-file-name)))..... | 
| 28100 | 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20    64 69 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ............(if.dir............. | 
| 28120 | 20 20 20 20 20 20 20 20 28 64 69 72 65 63 74 6f    72 79 2d 66 69 6c 65 2d 6e 61 6d 65 20 64 69 72 | ........(directory-file-name.dir | 
| 28140 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 64 65 66 61 75 6c 74 2d 64 69 72 65 | )...................default-dire | 
| 28160 | 63 74 6f 72 79 29 29 29 0a 20 20 20 20 20 20 20    20 20 20 20 74 61 72 67 65 74 66 69 6c 65 29 29 | ctory)))............targetfile)) | 
| 28180 | 29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28    66 69 6c 65 2d 65 78 69 73 74 73 2d 70 20 66 69 | ).....(if.(not.(file-exists-p.fi | 
| 281a0 | 6c 65 6e 61 6d 65 29 29 0a 20 20 20 20 20 20 20    20 3b 3b 20 46 49 58 4d 45 3a 20 54 68 69 73 20 | lename)).........;;.FIXME:.This. | 
| 281c0 | 6e 65 65 64 73 20 69 6d 70 72 6f 76 69 6e 67 20    73 6f 20 77 65 20 63 61 6e 20 68 61 6e 64 6c 65 | needs.improving.so.we.can.handle | 
| 281e0 | 20 74 68 65 20 34 30 34 0a 20 20 20 20 20 20 20    20 3b 3b 20 54 68 69 73 20 66 75 6e 63 74 69 6f | .the.404.........;;.This.functio | 
| 28200 | 6e 20 73 68 6f 75 6c 64 20 72 61 69 73 65 20 61    6e 20 65 78 63 65 70 74 69 6f 6e 3f 0a 20 20 20 | n.should.raise.an.exception?.... | 
| 28220 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 6e    64 2d 34 30 34 20 68 74 74 70 63 6f 6e 29 0a 20 | .....(elnode-send-404.httpcon).. | 
| 28240 | 20 20 20 20 20 28 6c 65 74 20 28 28 6d 69 6d 65    74 79 70 65 0a 20 20 20 20 20 20 20 20 20 20 20 | .....(let.((mimetype............ | 
| 28260 | 20 20 28 6f 72 20 28 77 68 65 6e 20 28 6c 69 73    74 70 20 6d 69 6d 65 2d 74 79 70 65 73 29 0a 20 | ..(or.(when.(listp.mime-types).. | 
| 28280 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 63 61 72 20 28 72 61 73 73 6f 63 0a 20 | ..................(car.(rassoc.. | 
| 282a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 6e 61 | ........................(file-na | 
| 282c0 | 6d 65 2d 65 78 74 65 6e 73 69 6f 6e 20 74 61 72    67 65 74 66 69 6c 65 29 0a 20 20 20 20 20 20 20 | me-extension.targetfile)........ | 
| 282e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 6d 69 6d 65 2d 74 79 70 65 73 29 29 29 0a | ..................mime-types))). | 
| 28300 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 6d 6d 2d 64 65 66 61 75 6c 74 2d 66 69 6c | .................(mm-default-fil | 
| 28320 | 65 2d 65 6e 63 6f 64 69 6e 67 20 74 61 72 67 65    74 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 | e-encoding.targetfile).......... | 
| 28340 | 20 20 20 20 20 20 20 20 22 61 70 70 6c 69 63 61    74 69 6f 6e 2f 6f 63 74 65 74 2d 73 74 72 65 61 | ........"application/octet-strea | 
| 28360 | 6d 22 29 29 29 0a 20 20 20 20 20 20 20 20 28 65    6c 6e 6f 64 65 2d 68 74 74 70 2d 73 74 61 72 74 | m"))).........(elnode-http-start | 
| 28380 | 0a 20 20 20 20 20 20 20 20 20 68 74 74 70 63 6f    6e 20 32 30 30 0a 20 20 20 20 20 20 20 20 20 60 | ..........httpcon.200..........` | 
| 283a0 | 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 22 20    2e 20 2c 6d 69 6d 65 74 79 70 65 29 0a 20 20 20 | ("Content-type"...,mimetype).... | 
| 283c0 | 20 20 20 20 20 20 60 28 22 4c 61 73 74 2d 4d 6f    64 69 66 69 65 64 22 20 2e 20 2c 28 65 6c 6e 6f | ......`("Last-Modified"...,(elno | 
| 283e0 | 64 65 2d 2d 72 66 63 31 31 32 33 2d 64 61 74 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | de--rfc1123-date................ | 
| 28400 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 65 6c 6e 6f 64 65 2d 2d 66 69 6c 65 2d 6d 6f | ................(elnode--file-mo | 
| 28420 | 64 69 66 69 65 64 2d 74 69 6d 65 20 74 61 72 67    65 74 66 69 6c 65 29 29 29 29 0a 20 20 20 20 20 | dified-time.targetfile))))...... | 
| 28440 | 20 20 20 28 77 68 65 6e 20 70 72 65 61 6d 62 6c    65 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 | ...(when.preamble.(elnode-http-s | 
| 28460 | 65 6e 64 2d 73 74 72 69 6e 67 20 68 74 74 70 63    6f 6e 20 70 72 65 61 6d 62 6c 65 29 29 0a 20 20 | end-string.httpcon.preamble))... | 
| 28480 | 20 20 20 20 20 20 28 69 66 20 28 6f 72 20 65 6c    6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 76 | ......(if.(or.elnode-webserver-v | 
| 284a0 | 69 73 69 74 2d 66 69 6c 65 20 72 65 70 6c 61 63    65 6d 65 6e 74 73 29 0a 20 20 20 20 20 20 20 20 | isit-file.replacements)......... | 
| 284c0 | 20 20 20 20 28 6c 65 74 20 28 28 66 69 6c 65 2d    62 75 66 20 28 66 69 6e 64 2d 66 69 6c 65 2d 6e | ....(let.((file-buf.(find-file-n | 
| 284e0 | 6f 73 65 6c 65 63 74 20 66 69 6c 65 6e 61 6d 65    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | oselect.filename)))............. | 
| 28500 | 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72    65 74 75 72 6e 0a 20 20 20 20 20 20 20 20 20 20 | ..(elnode-http-return........... | 
| 28520 | 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | .....httpcon................(eln | 
| 28540 | 6f 64 65 2d 2d 62 75 66 66 65 72 2d 74 65 6d 70    6c 61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 | ode--buffer-template............ | 
| 28560 | 20 20 20 20 20 66 69 6c 65 2d 62 75 66 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b | .....file-buf.................;; | 
| 28580 | 20 52 65 70 6c 61 63 65 6d 65 6e 74 73 20 68 61    6e 64 6c 69 6e 67 0a 20 20 20 20 20 20 20 20 20 | .Replacements.handling.......... | 
| 285a0 | 20 20 20 20 20 20 20 28 69 66 20 28 66 75 6e 63    74 69 6f 6e 70 20 72 65 70 6c 61 63 65 6d 65 6e | .......(if.(functionp.replacemen | 
| 285c0 | 74 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 | ts).....................(let.((e | 
| 285e0 | 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e    74 73 2d 68 74 74 70 63 6f 6e 20 68 74 74 70 63 | lnode-replacements-httpcon.httpc | 
| 28600 | 6f 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | on)...........................(e | 
| 28620 | 6c 6e 6f 64 65 2d 72 65 70 6c 61 63 65 6d 65 6e    74 73 2d 74 61 72 67 65 74 66 69 6c 65 20 74 61 | lnode-replacements-targetfile.ta | 
| 28640 | 72 67 65 74 66 69 6c 65 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | rgetfile))...................... | 
| 28660 | 20 28 66 75 6e 63 61 6c 6c 20 72 65 70 6c 61 63    65 6d 65 6e 74 73 29 29 0a 20 20 20 20 20 20 20 | .(funcall.replacements))........ | 
| 28680 | 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70    6c 61 63 65 6d 65 6e 74 73 29 29 29 29 0a 20 20 | .............replacements))))... | 
| 286a0 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 63 68 69 6c 64 2d 70 72 6f 63 65 73 73 0a | ..........(elnode-child-process. | 
| 286c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74 74    70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 | .............httpcon............ | 
| 286e0 | 20 20 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69    6c 65 2d 70 72 6f 67 72 61 6d 0a 20 20 20 20 20 | ..elnode-send-file-program...... | 
| 28700 | 20 20 20 20 20 20 20 20 28 65 78 70 61 6e 64 2d    66 69 6c 65 2d 6e 61 6d 65 20 74 61 72 67 65 74 | ........(expand-file-name.target | 
| 28720 | 66 69 6c 65 29 29 29 29 29 29 29 0a 0a 28 64 65    66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 6d 65 | file)))))))..(defmacro.elnode-me | 
| 28740 | 74 68 6f 64 20 28 68 74 74 70 63 6f 6e 20 26 72    65 73 74 20 6d 65 74 68 6f 64 2d 6d 61 70 70 69 | thod.(httpcon.&rest.method-mappi | 
| 28760 | 6e 67 73 29 0a 20 20 22 4d 61 70 20 74 68 65 20    48 54 54 50 20 6d 65 74 68 6f 64 2e 0a 0a 57 72 | ngs)..."Map.the.HTTP.method...Wr | 
| 28780 | 69 74 65 20 63 6f 64 65 20 6c 69 6b 65 20 74 68    69 73 3a 0a 0a 20 28 65 6c 6e 6f 64 65 2d 6d 65 | ite.code.like.this:...(elnode-me | 
| 287a0 | 74 68 6f 64 0a 20 20 28 47 45 54 0a 20 20 20 28    63 6f 64 65 29 0a 20 20 20 28 6d 6f 72 65 20 63 | thod...(GET....(code)....(more.c | 
| 287c0 | 6f 64 65 29 29 0a 20 20 28 50 4f 53 54 0a 20 20    20 28 64 69 66 66 65 72 65 6e 74 20 63 6f 64 65 | ode))...(POST....(different.code | 
| 287e0 | 29 0a 20 20 20 28 65 76 65 6e 6d 6f 72 65 63 6f    64 65 29 29 29 22 0a 20 20 28 64 65 63 6c 61 72 | )....(evenmorecode)))"...(declar | 
| 28800 | 65 0a 20 20 20 28 64 65 62 75 67 20 28 73 65 78    70 20 26 72 65 73 74 20 28 73 65 78 70 20 26 72 | e....(debug.(sexp.&rest.(sexp.&r | 
| 28820 | 65 73 74 20 66 6f 72 6d 29 29 29 0a 20 20 20 28    69 6e 64 65 6e 74 20 31 29 29 0a 20 20 28 6c 65 | est.form)))....(indent.1))...(le | 
| 28840 | 74 2a 20 28 28 76 61 72 20 28 6d 61 6b 65 2d 73    79 6d 62 6f 6c 20 22 76 22 29 29 0a 20 20 20 20 | t*.((var.(make-symbol."v"))..... | 
| 28860 | 20 20 20 20 20 28 63 6f 6e 76 20 28 6d 61 6b 65    2d 73 79 6d 62 6f 6c 20 22 63 6f 6e 22 29 29 29 | .....(conv.(make-symbol."con"))) | 
| 28880 | 0a 20 20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c    63 6f 6e 76 20 2c 68 74 74 70 63 6f 6e 29 0a 20 | ......`(let*.((,conv.,httpcon).. | 
| 288a0 | 20 20 20 20 20 20 20 20 20 20 20 20 28 2c 76 61    72 20 28 69 6e 74 65 72 6e 20 28 65 6c 6e 6f 64 | ............(,var.(intern.(elnod | 
| 288c0 | 65 2d 68 74 74 70 2d 6d 65 74 68 6f 64 20 2c 63    6f 6e 76 29 29 29 29 0a 20 20 20 20 20 20 20 28 | e-http-method.,conv))))........( | 
| 288e0 | 63 6f 6e 64 0a 20 20 20 20 20 20 20 20 2c 40 28    6c 6f 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 | cond.........,@(loop............ | 
| 28900 | 66 6f 72 20 64 20 69 6e 20 6d 65 74 68 6f 64 2d    6d 61 70 70 69 6e 67 73 0a 20 20 20 20 20 20 20 | for.d.in.method-mappings........ | 
| 28920 | 20 20 20 20 75 6e 6c 65 73 73 20 28 65 71 20 28    63 61 72 20 64 29 20 74 29 0a 20 20 20 20 20 20 | ....unless.(eq.(car.d).t)....... | 
| 28940 | 20 20 20 20 20 63 6f 6c 6c 65 63 74 20 60 28 28    65 71 20 2c 76 61 72 20 28 71 75 6f 74 65 20 2c | .....collect.`((eq.,var.(quote., | 
| 28960 | 28 63 61 72 20 64 29 29 29 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c | (car.d)))......................, | 
| 28980 | 40 28 63 64 72 20 64 29 29 29 0a 20 20 20 20 20    20 20 20 3b 3b 20 49 66 20 77 65 20 64 6f 6e 27 | @(cdr.d))).........;;.If.we.don' | 
| 289a0 | 74 20 6d 61 70 20 74 68 65 6e 20 73 65 6e 64 20    61 6e 20 65 72 72 6f 72 0a 20 20 20 20 20 20 20 | t.map.then.send.an.error........ | 
| 289c0 | 20 3b 3b 0a 20 20 20 20 20 20 20 20 3b 3b 20 70    72 6f 62 61 62 6c 79 20 73 68 6f 75 6c 64 20 62 | .;;.........;;.probably.should.b | 
| 289e0 | 65 20 34 30 35 0a 20 20 20 20 20 20 20 20 28 74    0a 20 20 20 20 20 20 20 20 20 2c 40 28 6f 72 20 | e.405.........(t..........,@(or. | 
| 28a00 | 28 63 64 72 20 28 61 73 73 6f 63 20 74 20 6d 65    74 68 6f 64 2d 6d 61 70 70 69 6e 67 73 29 29 0a | (cdr.(assoc.t.method-mappings)). | 
| 28a20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60    28 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 35 30 | ...............`((elnode-send-50 | 
| 28a40 | 30 20 2c 63 6f 6e 76 29 29 29 29 29 29 29 29 0a    0a 0a 3b 3b 20 4d 61 6b 65 20 73 69 6d 70 6c 65 | 0.,conv))))))))...;;.Make.simple | 
| 28a60 | 20 68 61 6e 64 6c 65 72 73 20 61 75 74 6f 6d 61    74 69 63 61 6c 6c 79 0a 0a 28 64 65 66 75 6e 20 | .handlers.automatically..(defun. | 
| 28a80 | 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 72 65 64 69    72 65 63 74 65 72 20 28 6c 6f 63 61 74 69 6f 6e | elnode-make-redirecter.(location | 
| 28aa0 | 20 26 6f 70 74 69 6f 6e 61 6c 20 74 79 70 65 29    0a 20 20 22 4d 61 6b 65 20 61 20 68 61 6e 64 6c | .&optional.type)..."Make.a.handl | 
| 28ac0 | 65 72 20 74 68 61 74 20 77 69 6c 6c 20 72 65 64    69 72 65 63 74 20 74 6f 20 4c 4f 43 41 54 49 4f | er.that.will.redirect.to.LOCATIO | 
| 28ae0 | 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20    75 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 | N...Optionally,.use.the.specifie | 
| 28b00 | 64 20 54 59 50 45 20 61 73 20 74 68 65 20 73 74    61 74 75 73 20 63 6f 64 65 2c 20 65 67 3a 0a 0a | d.TYPE.as.the.status.code,.eg:.. | 
| 28b20 | 20 28 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 72 65    64 69 72 65 63 74 20 5c 22 68 74 74 70 3a 2f 2f | .(elnode-make-redirect.\"http:// | 
| 28b40 | 73 6f 6d 65 68 6f 73 74 2e 63 6f 6d 2f 5c 22 20    33 30 31 29 22 0a 20 20 28 6c 61 6d 62 64 61 20 | somehost.com/\".301)"...(lambda. | 
| 28b60 | 28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 65    6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 64 69 72 | (httpcon).....(elnode-send-redir | 
| 28b80 | 65 63 74 20 68 74 74 70 63 6f 6e 20 6c 6f 63 61    74 69 6f 6e 20 74 79 70 65 29 29 29 0a 0a 28 64 | ect.httpcon.location.type)))..(d | 
| 28ba0 | 65 66 75 6e 2a 20 65 6c 6e 6f 64 65 2d 6d 61 6b    65 2d 73 65 6e 64 2d 66 69 6c 65 20 20 28 66 69 | efun*.elnode-make-send-file..(fi | 
| 28bc0 | 6c 65 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | lename.......................... | 
| 28be0 | 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .......&key..................... | 
| 28c00 | 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 61    6d 62 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 | ............preamble............ | 
| 28c20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 6d 69 6d 65 2d 74 79 70 65 73 0a | .....................mime-types. | 
| 28c40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 28c60 | 72 65 70 6c 61 63 65 6d 65 6e 74 73 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | replacements.................... | 
| 28c80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 70    6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 | .............replacements-patter | 
| 28ca0 | 6e 29 0a 20 20 22 4d 61 6b 65 20 61 20 68 61 6e    64 6c 65 72 20 74 68 61 74 20 77 69 6c 6c 20 73 | n)..."Make.a.handler.that.will.s | 
| 28cc0 | 65 72 76 65 20 61 20 73 69 6e 67 6c 65 20 46 49    4c 45 4e 41 4d 45 2e 0a 0a 49 66 20 74 68 65 20 | erve.a.single.FILENAME...If.the. | 
| 28ce0 | 46 49 4c 45 4e 41 4d 45 20 69 73 20 72 65 6c 61    74 69 76 65 20 74 68 65 6e 20 69 74 20 69 73 20 | FILENAME.is.relative.then.it.is. | 
| 28d00 | 72 65 73 6f 6c 76 65 64 20 61 67 61 69 6e 73 74    20 74 68 65 0a 70 61 63 6b 61 67 65 27 73 20 60 | resolved.against.the.package's.` | 
| 28d20 | 6c 6f 61 64 2d 66 69 6c 65 2d 6e 61 6d 65 27 2e    0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 20 4d 49 4d | load-file-name'...Optionally.MIM | 
| 28d40 | 45 2d 54 59 50 45 53 20 61 6e 64 20 6f 74 68 65    72 20 61 64 64 69 74 69 6f 6e 61 6c 20 6b 65 79 | E-TYPES.and.other.additional.key | 
| 28d60 | 77 6f 72 64 20 61 72 67 75 6d 65 6e 74 73 20 6d    61 79 20 62 65 0a 73 70 65 63 69 66 69 65 64 20 | word.arguments.may.be.specified. | 
| 28d80 | 61 6e 64 20 61 72 65 20 70 61 73 73 65 64 20 74    68 72 6f 75 67 68 2c 20 73 65 65 20 60 65 6c 6e | and.are.passed.through,.see.`eln | 
| 28da0 | 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 27 20 66    6f 72 0a 64 65 74 61 69 6c 73 2e 0a 0a 54 68 65 | ode-send-file'.for.details...The | 
| 28dc0 | 20 52 45 50 4c 41 43 45 4d 45 4e 54 53 20 70 61    72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 | .REPLACEMENTS.parameter.can.be.a | 
| 28de0 | 20 66 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72    65 74 75 72 6e 73 20 61 0a 68 61 73 68 2d 74 61 | .function.that.returns.a.hash-ta | 
| 28e00 | 62 6c 65 20 6f 72 20 61 6c 69 73 74 2c 20 74 68    69 73 20 69 73 20 76 65 72 79 20 75 73 65 66 75 | ble.or.alist,.this.is.very.usefu | 
| 28e20 | 6c 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74    69 6f 6e 0a 62 65 63 61 75 73 65 20 69 74 20 61 | l.for.this.function.because.it.a | 
| 28e40 | 6c 6c 6f 77 73 20 64 79 6e 61 6d 69 63 20 76 61    72 69 61 62 6c 65 73 20 74 6f 20 62 65 20 64 65 | llows.dynamic.variables.to.be.de | 
| 28e60 | 66 69 6e 65 64 2e 20 20 41 67 61 69 6e 2c 20 73    65 65 0a 60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d | fined...Again,.see.`elnode-send- | 
| 28e80 | 66 69 6c 65 27 20 66 6f 72 20 66 75 6c 6c 20 64    6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 | file'.for.full.documentation.of. | 
| 28ea0 | 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 0a 54    68 65 20 52 45 50 4c 41 43 45 4d 45 4e 54 53 2d | this.feature...The.REPLACEMENTS- | 
| 28ec0 | 50 41 54 54 45 52 4e 20 63 61 6e 20 62 65 20 75    73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 72 | PATTERN.can.be.used.to.set.the.r | 
| 28ee0 | 65 67 65 78 20 75 73 65 64 20 74 6f 0a 6d 61 74    63 68 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 2e | egex.used.to.match.replacements. | 
| 28f00 | 20 20 53 65 65 20 60 65 6c 6e 6f 64 65 2d 72 65    70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 | ..See.`elnode-replacements-patte | 
| 28f20 | 72 6e 27 2e 22 0a 20 20 28 6c 61 6d 62 64 61 20    28 68 74 74 70 63 6f 6e 29 0a 20 20 20 20 28 6c | rn'."...(lambda.(httpcon).....(l | 
| 28f40 | 65 74 20 28 28 65 6c 6e 6f 64 65 2d 72 65 70 6c    61 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 6e | et.((elnode-replacements-pattern | 
| 28f60 | 0a 20 20 20 20 20 20 20 20 20 20 20 28 6f 72 20    72 65 70 6c 61 63 65 6d 65 6e 74 73 2d 70 61 74 | ............(or.replacements-pat | 
| 28f80 | 74 65 72 6e 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 65 6c 6e 6f 64 65 2d 72 65 70 6c 61 | tern................elnode-repla | 
| 28fa0 | 63 65 6d 65 6e 74 73 2d 70 61 74 74 65 72 6e 29    29 29 0a 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 | cements-pattern))).......(elnode | 
| 28fc0 | 2d 73 65 6e 64 2d 66 69 6c 65 0a 20 20 20 20 20    20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 | -send-file........httpcon....... | 
| 28fe0 | 20 66 69 6c 65 6e 61 6d 65 0a 20 20 20 20 20 20    20 3a 6d 69 6d 65 2d 74 79 70 65 73 20 6d 69 6d | .filename........:mime-types.mim | 
| 29000 | 65 2d 74 79 70 65 73 0a 20 20 20 20 20 20 20 3a    70 72 65 61 6d 62 6c 65 20 70 72 65 61 6d 62 6c | e-types........:preamble.preambl | 
| 29020 | 65 0a 20 20 20 20 20 20 20 3a 72 65 70 6c 61 63    65 6d 65 6e 74 73 20 72 65 70 6c 61 63 65 6d 65 | e........:replacements.replaceme | 
| 29040 | 6e 74 73 29 29 29 29 0a 0a 0a 3b 3b 20 44 6f 63    72 6f 6f 74 20 70 72 6f 74 65 63 74 69 6f 6e 0a | nts))))...;;.Docroot.protection. | 
| 29060 | 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 2d    75 6e 64 65 72 2d 64 6f 63 72 6f 6f 74 2d 70 20 | .(defun.elnode--under-docroot-p. | 
| 29080 | 28 74 61 72 67 65 74 2d 66 69 6c 65 20 64 6f 63    2d 72 6f 6f 74 20 26 6f 70 74 69 6f 6e 61 6c 20 | (target-file.doc-root.&optional. | 
| 290a0 | 69 67 6e 6f 72 65 2d 6d 69 73 73 69 6e 67 29 0a    20 20 22 49 73 20 74 68 65 20 54 41 52 47 45 54 | ignore-missing)..."Is.the.TARGET | 
| 290c0 | 2d 46 49 4c 45 20 75 6e 64 65 72 20 74 68 65 20    44 4f 43 2d 52 4f 4f 54 3f 0a 4f 70 74 69 6f 6e | -FILE.under.the.DOC-ROOT?.Option | 
| 290e0 | 61 6c 20 61 72 67 75 6d 65 6e 74 20 49 47 4e 4f    52 45 2d 4d 49 53 53 49 4e 47 20 77 69 6c 6c 20 | al.argument.IGNORE-MISSING.will. | 
| 29100 | 69 6e 68 69 62 69 74 20 63 68 65 63 6b 73 20 66    6f 72 20 6d 69 73 73 69 6e 67 20 66 69 6c 65 73 | inhibit.checks.for.missing.files | 
| 29120 | 2e 22 0a 20 20 28 6c 65 74 20 28 28 64 6f 63 72    6f 6f 74 0a 20 20 20 20 20 20 20 20 20 28 64 69 | ."...(let.((docroot..........(di | 
| 29140 | 72 65 63 74 6f 72 79 2d 66 69 6c 65 2d 6e 61 6d    65 0a 20 20 20 20 20 20 20 20 20 20 28 65 78 70 | rectory-file-name...........(exp | 
| 29160 | 61 6e 64 2d 66 69 6c 65 2d 6e 61 6d 65 20 64 6f    63 2d 72 6f 6f 74 29 29 29 29 0a 20 20 20 20 28 | and-file-name.doc-root)))).....( | 
| 29180 | 61 6e 64 0a 20 20 20 20 20 28 73 74 72 69 6e 67    2d 6d 61 74 63 68 0a 20 20 20 20 20 20 28 66 6f | and......(string-match.......(fo | 
| 291a0 | 72 6d 61 74 20 22 5e 25 73 5c 5c 28 24 5c 5c 7c    2f 5c 5c 29 22 20 64 6f 63 72 6f 6f 74 29 0a 20 | rmat."^%s\\($\\|/\\)".docroot).. | 
| 291c0 | 20 20 20 20 20 74 61 72 67 65 74 2d 66 69 6c 65    29 0a 20 20 20 20 20 28 6f 72 20 69 67 6e 6f 72 | .....target-file)......(or.ignor | 
| 291e0 | 65 2d 6d 69 73 73 69 6e 67 20 28 66 69 6c 65 2d    65 78 69 73 74 73 2d 70 20 74 61 72 67 65 74 2d | e-missing.(file-exists-p.target- | 
| 29200 | 66 69 6c 65 29 29 29 29 29 0a 0a 0a 28 64 65 66    75 6e 20 65 6c 6e 6f 64 65 2d 6e 6f 74 2d 66 6f | file)))))...(defun.elnode-not-fo | 
| 29220 | 75 6e 64 20 28 68 74 74 70 63 6f 6e 20 74 61 72    67 65 74 2d 66 69 6c 65 29 0a 20 20 22 60 65 6c | und.(httpcon.target-file)..."`el | 
| 29240 | 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72    27 20 63 61 6c 6c 73 20 74 68 69 73 20 77 68 65 | node-docroot-for'.calls.this.whe | 
| 29260 | 6e 20 74 68 65 20 64 6f 63 20 77 61 73 20 6e 6f    74 20 66 6f 75 6e 64 2e 0a 0a 59 6f 75 20 63 61 | n.the.doc.was.not.found...You.ca | 
| 29280 | 6e 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20    69 6e 20 74 65 73 74 73 20 74 6f 20 68 61 76 65 | n.override.this.in.tests.to.have | 
| 292a0 | 20 69 6e 74 65 72 65 73 74 69 6e 67 20 65 66 66    65 63 74 73 2e 20 20 42 79 0a 64 65 66 61 75 6c | .interesting.effects...By.defaul | 
| 292c0 | 74 20 69 74 20 6a 75 73 74 20 63 61 6c 6c 73 20    60 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 34 30 34 | t.it.just.calls.`elnode-send-404 | 
| 292e0 | 27 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 73 65    6e 64 2d 34 30 34 20 68 74 74 70 63 6f 6e 29 29 | '."...(elnode-send-404.httpcon)) | 
| 29300 | 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d    6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 20 28 | ..(defun.elnode-modified-since.( | 
| 29320 | 68 74 74 70 63 6f 6e 20 6d 6f 64 69 66 69 65 64    2d 74 69 6d 65 29 0a 20 20 22 49 6d 70 6c 65 6d | httpcon.modified-time)..."Implem | 
| 29340 | 65 6e 74 20 74 68 65 20 48 54 54 50 20 49 66 2d    4d 6f 64 69 66 69 65 64 2d 53 69 6e 63 65 20 74 | ent.the.HTTP.If-Modified-Since.t | 
| 29360 | 65 73 74 2e 0a 0a 4d 4f 44 49 46 49 45 44 2d 54    49 4d 45 20 69 73 20 74 68 65 20 74 69 6d 65 20 | est...MODIFIED-TIME.is.the.time. | 
| 29380 | 74 68 65 20 72 65 73 6f 75 72 63 65 20 77 61 73    20 6d 6f 64 69 66 69 65 64 2c 20 66 6f 72 20 65 | the.resource.was.modified,.for.e | 
| 293a0 | 78 61 6d 70 6c 65 0a 61 20 66 69 6c 65 20 6d 6f    64 69 66 69 63 61 74 69 6f 6e 20 74 69 6d 65 2e | xample.a.file.modification.time. | 
| 293c0 | 22 0a 20 20 28 6c 65 74 2a 20 28 28 6d 6f 64 69    66 69 65 64 2d 73 69 6e 63 65 0a 20 20 20 20 20 | "...(let*.((modified-since...... | 
| 293e0 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 68 65 61 64 65 72 0a 20 20 20 20 20 20 20 | .....(elnode-http-header........ | 
| 29400 | 20 20 20 20 68 74 74 70 63 6f 6e 20 27 69 66 2d    6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 20 3a | ....httpcon.'if-modified-since.: | 
| 29420 | 74 69 6d 65 29 29 29 0a 20 20 20 20 28 61 6e 64    0a 20 20 20 20 20 6d 6f 64 69 66 69 65 64 2d 73 | time))).....(and......modified-s | 
| 29440 | 69 6e 63 65 0a 20 20 20 20 20 28 74 69 6d 65 2d    6c 65 73 73 2d 70 20 6d 6f 64 69 66 69 65 64 2d | ince......(time-less-p.modified- | 
| 29460 | 74 69 6d 65 20 6d 6f 64 69 66 69 65 64 2d 73 69    6e 63 65 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 | time.modified-since))))..(defun. | 
| 29480 | 65 6c 6e 6f 64 65 2d 63 61 63 68 65 64 2d 70 20    28 68 74 74 70 63 6f 6e 20 74 61 72 67 65 74 2d | elnode-cached-p.(httpcon.target- | 
| 294a0 | 66 69 6c 65 29 0a 20 20 22 49 73 20 74 68 65 20    73 70 65 63 69 66 69 65 64 20 54 41 52 47 45 54 | file)..."Is.the.specified.TARGET | 
| 294c0 | 2d 46 49 4c 45 20 6f 6c 64 65 72 20 74 68 61 6e    20 74 68 65 20 48 54 54 50 43 4f 4e 3f 0a 0a 54 | -FILE.older.than.the.HTTPCON?..T | 
| 294e0 | 68 69 73 20 75 73 65 73 20 60 65 6c 6e 6f 64 65    2d 6d 6f 64 69 66 69 65 64 2d 73 69 6e 63 65 27 | his.uses.`elnode-modified-since' | 
| 29500 | 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 6f 64    69 66 69 65 64 2d 73 69 6e 63 65 0a 20 20 20 68 | ."...(elnode-modified-since....h | 
| 29520 | 74 74 70 63 6f 6e 20 28 65 6c 6e 6f 64 65 2d 2d    66 69 6c 65 2d 6d 6f 64 69 66 69 65 64 2d 74 69 | ttpcon.(elnode--file-modified-ti | 
| 29540 | 6d 65 20 74 61 72 67 65 74 2d 66 69 6c 65 29 29    29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | me.target-file)))..(defun.elnode | 
| 29560 | 2d 63 61 63 68 65 64 20 28 68 74 74 70 63 6f 6e    29 0a 20 20 22 60 65 6c 6e 6f 64 65 2d 64 6f 63 | -cached.(httpcon)..."`elnode-doc | 
| 29580 | 72 6f 6f 74 2d 66 6f 72 27 20 63 61 6c 6c 73 20    74 68 69 73 20 77 68 65 6e 20 74 68 65 20 72 65 | root-for'.calls.this.when.the.re | 
| 295a0 | 73 6f 75 72 63 65 73 20 77 61 73 20 63 61 63 68    65 64 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 | sources.was.cached...By.default. | 
| 295c0 | 69 74 20 6a 75 73 74 20 63 61 6c 6c 73 20 60 65    6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 74 75 | it.just.calls.`elnode-send-statu | 
| 295e0 | 73 27 20 77 69 74 68 20 33 30 34 2e 22 0a 20 20    28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 73 74 61 | s'.with.304."...(elnode-send-sta | 
| 29600 | 74 75 73 20 68 74 74 70 63 6f 6e 20 33 30 34 29    29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 | tus.httpcon.304))..(defvar.elnod | 
| 29620 | 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 2d 6e 6f    2d 34 30 34 20 6e 69 6c 0a 20 20 22 57 68 65 6e | e-docroot-for-no-404.nil..."When | 
| 29640 | 20 73 65 74 20 74 6f 20 74 72 75 65 20 60 65 6c    6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 | .set.to.true.`elnode-docroot-for | 
| 29660 | 27 20 64 6f 65 73 6e 27 74 20 63 68 65 63 6b 20    66 6f 72 20 6d 69 73 73 69 6e 67 20 66 69 6c 65 | '.doesn't.check.for.missing.file | 
| 29680 | 73 2e 22 29 0a 0a 28 64 65 66 76 61 72 20 65 6c    6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72 | s.")..(defvar.elnode-docroot-for | 
| 296a0 | 2d 6e 6f 2d 63 61 63 68 65 20 6e 69 6c 0a 20 20    22 57 68 65 6e 20 73 65 74 20 74 6f 20 74 72 75 | -no-cache.nil..."When.set.to.tru | 
| 296c0 | 65 20 60 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f    74 2d 66 6f 72 27 20 64 6f 65 73 6e 27 74 20 63 | e.`elnode-docroot-for'.doesn't.c | 
| 296e0 | 68 65 63 6b 20 66 6f 72 20 63 61 63 68 65 64 20    66 69 6c 65 73 2e 22 29 0a 0a 28 64 65 66 6d 61 | heck.for.cached.files.")..(defma | 
| 29700 | 63 72 6f 20 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f    6f 74 2d 66 6f 72 20 28 64 6f 63 2d 72 6f 6f 74 | cro.elnode-docroot-for.(doc-root | 
| 29720 | 20 77 69 74 68 20 74 61 72 67 65 74 2d 66 69 6c    65 2d 76 61 72 0a 20 20 20 20 20 20 20 20 20 20 | .with.target-file-var........... | 
| 29740 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 6f 6e 20 | .............................on. | 
| 29760 | 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | httpcon......................... | 
| 29780 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64    6f 20 26 72 65 73 74 20 68 61 6e 64 6c 69 6e 67 | ...............do.&rest.handling | 
| 297a0 | 29 0a 20 20 22 44 6f 63 72 6f 6f 74 20 70 72 6f    74 65 63 74 69 6f 6e 20 66 6f 72 20 45 6c 6e 6f | )..."Docroot.protection.for.Elno | 
| 297c0 | 64 65 20 68 61 6e 64 6c 65 72 73 2e 0a 0a 54 65    73 74 20 74 68 65 20 70 61 74 68 20 72 65 71 75 | de.handlers...Test.the.path.requ | 
| 297e0 | 65 73 74 65 64 20 69 6e 20 48 54 54 50 43 4f 4e    20 69 73 20 73 61 66 65 6c 79 20 75 6e 64 65 72 | ested.in.HTTPCON.is.safely.under | 
| 29800 | 20 74 68 65 20 44 4f 43 2d 52 4f 4f 54 0a 73 70    65 63 69 66 69 65 64 2c 20 62 69 6e 64 20 74 68 | .the.DOC-ROOT.specified,.bind.th | 
| 29820 | 65 20 54 41 52 47 45 54 2d 46 49 4c 45 2d 56 41    52 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 | e.TARGET-FILE-VAR.to.the.resulti | 
| 29840 | 6e 67 20 65 78 70 61 6e 64 65 64 0a 66 69 6c 65    20 6e 61 6d 65 20 61 6e 64 20 65 78 65 63 75 74 | ng.expanded.file.name.and.execut | 
| 29860 | 65 20 74 68 65 20 48 41 4e 44 4c 49 4e 47 20 63    6f 64 65 2e 0a 0a 46 6f 72 20 65 78 61 6d 70 6c | e.the.HANDLING.code...For.exampl | 
| 29880 | 65 3a 0a 0a 20 20 28 65 6c 6e 6f 64 65 2d 64 6f    63 72 6f 6f 74 2d 66 6f 72 0a 20 20 20 20 20 20 | e:....(elnode-docroot-for....... | 
| 298a0 | 20 20 5c 22 7e 2f 77 6f 72 6b 5c 22 0a 20 20 20    20 20 20 20 20 77 69 74 68 20 66 69 6c 65 2d 76 | ..\"~/work\".........with.file-v | 
| 298c0 | 61 72 0a 20 20 20 20 20 20 20 20 6f 6e 20 68 74    74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 64 6f | ar.........on.httpcon.........do | 
| 298e0 | 0a 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65    2d 73 65 6e 64 2d 66 69 6c 65 20 68 74 74 70 63 | .........(elnode-send-file.httpc | 
| 29900 | 6f 6e 20 66 69 6c 65 2d 76 61 72 29 29 0a 0a 63    68 65 63 6b 73 20 61 6e 79 20 72 65 73 6f 75 72 | on.file-var))..checks.any.resour | 
| 29920 | 63 65 20 72 65 71 75 65 73 74 65 64 20 69 6e 20    48 54 54 50 43 4f 4e 20 69 73 20 61 20 66 69 6c | ce.requested.in.HTTPCON.is.a.fil | 
| 29940 | 65 20 75 6e 64 65 72 20 74 68 65 0a 64 6f 63 2d    72 6f 6f 74 20 5c 22 7e 2f 77 6f 72 6b 5c 22 20 | e.under.the.doc-root.\"~/work\". | 
| 29960 | 61 6e 64 20 69 66 20 69 74 20 69 73 2c 20 62 69    6e 64 73 20 74 68 65 20 72 65 73 75 6c 74 69 6e | and.if.it.is,.binds.the.resultin | 
| 29980 | 67 20 66 69 6c 65 20 6e 61 6d 65 0a 74 6f 20 46    49 4c 45 2d 56 41 52 20 61 6e 64 20 63 61 6c 6c | g.file.name.to.FILE-VAR.and.call | 
| 299a0 | 73 20 74 68 65 20 63 6f 64 65 20 66 6f 6c 6c 6f    77 69 6e 67 20 44 4f 20 28 77 68 69 63 68 20 73 | s.the.code.following.DO.(which.s | 
| 299c0 | 65 6e 64 73 20 74 68 65 20 66 69 6c 65 0a 74 6f    20 74 68 65 20 48 54 54 50 43 4f 4e 29 2e 0a 0a | ends.the.file.to.the.HTTPCON)... | 
| 299e0 | 57 68 65 6e 20 61 20 66 69 6c 65 20 69 73 20 6e    6f 74 20 66 6f 75 6e 64 20 28 6f 72 20 6e 6f 74 | When.a.file.is.not.found.(or.not | 
| 29a00 | 20 73 61 66 65 20 74 6f 20 72 65 74 75 72 6e 29    20 60 65 6c 6e 6f 64 65 2d 6e 6f 74 2d 66 6f 75 | .safe.to.return).`elnode-not-fou | 
| 29a20 | 6e 64 27 20 69 73 20 63 61 6c 6c 65 64 2e 0a 0a    57 68 65 6e 20 61 20 66 69 6c 65 20 69 73 20 63 | nd'.is.called...When.a.file.is.c | 
| 29a40 | 61 63 68 65 64 20 6f 6e 20 74 68 65 20 63 6c 69    65 6e 74 20 28 77 68 65 6e 20 61 20 63 6c 69 65 | ached.on.the.client.(when.a.clie | 
| 29a60 | 6e 74 20 73 65 6e 64 73 20 61 0a 63 6f 6e 64 69    74 69 6f 6e 61 6c 20 47 45 54 20 66 6f 72 20 74 | nt.sends.a.conditional.GET.for.t | 
| 29a80 | 68 65 20 66 69 6c 65 20 74 68 61 74 20 73 68 6f    77 73 20 74 68 65 20 63 6c 69 65 6e 74 20 68 61 | he.file.that.shows.the.client.ha | 
| 29aa0 | 73 20 61 6e 20 75 70 20 74 6f 0a 64 61 74 65 20    63 6f 70 79 29 20 74 68 65 6e 20 60 65 6c 6e 6f | s.an.up.to.date.copy).then.`elno | 
| 29ac0 | 64 65 2d 63 61 63 68 65 64 27 20 69 73 20 63 61    6c 6c 65 64 2e 22 0a 20 20 28 64 65 63 6c 61 72 | de-cached'.is.called."...(declar | 
| 29ae0 | 65 0a 20 20 20 28 64 65 62 75 67 20 28 73 65 78    70 20 22 77 69 74 68 22 20 73 65 78 70 20 22 6f | e....(debug.(sexp."with".sexp."o | 
| 29b00 | 6e 22 20 73 65 78 70 20 22 64 6f 22 20 26 72 65    73 74 20 66 6f 72 6d 29 29 0a 20 20 20 28 69 6e | n".sexp."do".&rest.form))....(in | 
| 29b20 | 64 65 6e 74 20 64 65 66 75 6e 29 29 0a 20 20 28    6c 65 74 20 28 28 64 72 20 28 6d 61 6b 65 2d 73 | dent.defun))...(let.((dr.(make-s | 
| 29b40 | 79 6d 62 6f 6c 20 22 64 6f 63 72 6f 6f 74 22 29    29 0a 20 20 20 20 20 20 20 20 28 63 6f 6e 20 28 | ymbol."docroot")).........(con.( | 
| 29b60 | 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74 74    70 63 6f 6e 22 29 29 29 0a 20 20 20 20 28 61 73 | make-symbol."httpcon"))).....(as | 
| 29b80 | 73 65 72 74 20 28 6f 72 20 28 65 71 20 77 69 74    68 20 27 77 69 74 68 29 20 28 65 71 20 77 69 74 | sert.(or.(eq.with.'with).(eq.wit | 
| 29ba0 | 68 20 3a 77 69 74 68 29 29 29 0a 20 20 20 20 28    61 73 73 65 72 74 20 28 6f 72 20 28 65 71 20 6f | h.:with))).....(assert.(or.(eq.o | 
| 29bc0 | 6e 20 27 6f 6e 29 20 20 20 20 20 28 65 71 20 6f    6e 20 3a 6f 6e 29 29 29 0a 20 20 20 20 28 61 73 | n.'on).....(eq.on.:on))).....(as | 
| 29be0 | 73 65 72 74 20 28 6f 72 20 28 65 71 20 64 6f 20    27 64 6f 29 20 20 20 20 20 28 65 71 20 64 6f 20 | sert.(or.(eq.do.'do).....(eq.do. | 
| 29c00 | 3a 64 6f 29 29 29 0a 20 20 20 20 60 28 6c 65 74    20 28 28 2c 64 72 20 2c 64 6f 63 2d 72 6f 6f 74 | :do))).....`(let.((,dr.,doc-root | 
| 29c20 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 2c 63    6f 6e 20 2c 68 74 74 70 63 6f 6e 29 29 0a 20 20 | )............(,con.,httpcon))... | 
| 29c40 | 20 20 20 20 20 28 6c 65 74 20 28 28 2c 74 61 72    67 65 74 2d 66 69 6c 65 2d 76 61 72 20 28 65 6c | .....(let.((,target-file-var.(el | 
| 29c60 | 6e 6f 64 65 2d 67 65 74 2d 74 61 72 67 65 74 66    69 6c 65 20 2c 63 6f 6e 20 2c 64 72 29 29 29 0a | node-get-targetfile.,con.,dr))). | 
| 29c80 | 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f    74 20 28 65 6c 6e 6f 64 65 2d 2d 75 6e 64 65 72 | .........(if.(not.(elnode--under | 
| 29ca0 | 2d 64 6f 63 72 6f 6f 74 2d 70 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c 74 | -docroot-p....................,t | 
| 29cc0 | 61 72 67 65 74 2d 66 69 6c 65 2d 76 61 72 20 2c    64 72 20 65 6c 6e 6f 64 65 2d 64 6f 63 72 6f 6f | arget-file-var.,dr.elnode-docroo | 
| 29ce0 | 74 2d 66 6f 72 2d 6e 6f 2d 34 30 34 29 29 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e | t-for-no-404))..............(eln | 
| 29d00 | 6f 64 65 2d 6e 6f 74 2d 66 6f 75 6e 64 20 2c 63    6f 6e 20 2c 74 61 72 67 65 74 2d 66 69 6c 65 2d | ode-not-found.,con.,target-file- | 
| 29d20 | 76 61 72 29 0a 20 20 20 20 20 20 20 20 20 20 20    28 69 66 20 28 61 6e 64 20 28 6e 6f 74 20 65 6c | var)............(if.(and.(not.el | 
| 29d40 | 6e 6f 64 65 2d 64 6f 63 72 6f 6f 74 2d 66 6f 72    2d 6e 6f 2d 63 61 63 68 65 29 0a 20 20 20 20 20 | node-docroot-for-no-cache)...... | 
| 29d60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    65 6c 6e 6f 64 65 2d 63 61 63 68 65 64 2d 70 20 | ...............(elnode-cached-p. | 
| 29d80 | 2c 63 6f 6e 20 2c 74 61 72 67 65 74 2d 66 69 6c    65 2d 76 61 72 29 29 0a 20 20 20 20 20 20 20 20 | ,con.,target-file-var))......... | 
| 29da0 | 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 63    61 63 68 65 64 20 2c 63 6f 6e 29 0a 20 20 20 20 | .......(elnode-cached.,con)..... | 
| 29dc0 | 20 20 20 20 20 20 20 20 20 2c 40 68 61 6e 64 6c    69 6e 67 29 29 29 29 29 29 0a 0a 0a 3b 3b 20 57 | .........,@handling))))))...;;.W | 
| 29de0 | 65 62 73 65 72 76 65 72 20 73 74 75 66 66 0a 0a    3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28 | ebserver.stuff..;;;###autoload.( | 
| 29e00 | 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f 64 65 2d    63 6f 6e 66 69 67 2d 64 69 72 65 63 74 6f 72 79 | defconst.elnode-config-directory | 
| 29e20 | 0a 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 2d    6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 75 73 65 | ...(expand-file-name.(concat.use | 
| 29e40 | 72 2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72    79 20 22 65 6c 6e 6f 64 65 2f 22 29 29 0a 20 20 | r-emacs-directory."elnode/"))... | 
| 29e60 | 22 54 68 65 20 63 6f 6e 66 69 67 20 64 69 72 65    63 74 6f 72 79 20 66 6f 72 20 65 6c 6e 6f 64 65 | "The.config.directory.for.elnode | 
| 29e80 | 20 74 6f 20 73 74 6f 72 65 20 70 65 72 69 70 68    65 72 61 6c 20 66 69 6c 65 73 2e 0a 0a 54 68 69 | .to.store.peripheral.files...Thi | 
| 29ea0 | 73 20 69 73 20 75 73 65 64 20 61 73 20 61 20 62    61 73 65 20 66 6f 72 20 6f 74 68 65 72 20 63 6f | s.is.used.as.a.base.for.other.co | 
| 29ec0 | 6e 73 74 61 6e 74 20 64 69 72 65 63 74 6f 72 79    20 6f 72 20 66 69 6c 65 0a 6e 61 6d 65 73 20 28 | nstant.directory.or.file.names.( | 
| 29ee0 | 74 68 65 20 65 6c 6e 6f 64 65 20 61 75 74 68 20    64 61 74 61 62 61 73 65 20 69 73 20 61 20 66 69 | the.elnode.auth.database.is.a.fi | 
| 29f00 | 6c 65 20 69 6e 20 74 68 69 73 20 64 69 72 65 63    74 6f 72 79 2c 20 74 68 65 0a 65 6c 6e 6f 64 65 | le.in.this.directory,.the.elnode | 
| 29f20 | 20 77 65 62 73 65 72 76 65 72 20 68 61 73 20 61    20 64 6f 63 72 6f 6f 74 20 64 69 72 65 63 74 6f | .webserver.has.a.docroot.directo | 
| 29f40 | 72 79 20 69 6e 20 74 68 69 73 20 64 69 72 65 63    74 6f 72 79 29 2e 0a 0a 49 74 20 69 73 20 62 61 | ry.in.this.directory)...It.is.ba | 
| 29f60 | 73 65 64 20 6f 6e 20 74 68 65 20 60 75 73 65 72    2d 65 6d 61 63 73 2d 64 69 72 65 63 74 6f 72 79 | sed.on.the.`user-emacs-directory | 
| 29f80 | 27 20 77 68 69 63 68 20 61 6c 77 61 79 73 20 73    65 65 6d 73 20 74 6f 0a 62 65 20 73 65 74 2c 20 | '.which.always.seems.to.be.set,. | 
| 29fa0 | 65 76 65 6e 20 77 68 65 6e 20 65 6d 61 63 73 20    69 73 20 73 74 61 72 74 65 64 20 77 69 74 68 20 | even.when.emacs.is.started.with. | 
| 29fc0 | 2d 51 2e 22 29 0a 0a 28 64 65 66 63 6f 6e 73 74    20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 | -Q.")..(defconst.elnode-webserve | 
| 29fe0 | 72 2d 64 6f 63 72 6f 6f 74 2d 64 65 66 61 75 6c    74 0a 20 20 28 65 78 70 61 6e 64 2d 66 69 6c 65 | r-docroot-default...(expand-file | 
| 2a000 | 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74 20 65 6c    6e 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 69 72 65 | -name.(concat.elnode-config-dire | 
| 2a020 | 63 74 6f 72 79 20 22 70 75 62 6c 69 63 5f 68 74    6d 6c 2f 22 29 29 0a 20 20 22 54 68 65 20 64 65 | ctory."public_html/"))..."The.de | 
| 2a040 | 66 61 75 6c 74 20 6c 6f 63 61 74 69 6f 6e 20 6f    66 20 74 68 65 20 77 65 62 73 69 74 65 2e 0a 0a | fault.location.of.the.website... | 
| 2a060 | 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20    64 65 74 65 63 74 20 77 68 65 74 68 65 72 20 65 | This.is.used.to.detect.whether.e | 
| 2a080 | 6c 6e 6f 64 65 20 6e 65 65 64 73 20 74 6f 20 63    72 65 61 74 65 20 74 68 69 73 0a 64 69 72 65 63 | lnode.needs.to.create.this.direc | 
| 2a0a0 | 74 6f 72 79 20 6f 72 20 6e 6f 74 2e 22 29 0a 0a    28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64 | tory.or.not.")..(defcustom.elnod | 
| 2a0c0 | 65 2d 77 65 62 73 65 72 76 65 72 2d 64 6f 63 72    6f 6f 74 0a 20 20 65 6c 6e 6f 64 65 2d 77 65 62 | e-webserver-docroot...elnode-web | 
| 2a0e0 | 73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 2d 64    65 66 61 75 6c 74 0a 20 20 22 54 68 65 20 64 6f | server-docroot-default..."The.do | 
| 2a100 | 63 75 6d 65 6e 74 20 72 6f 6f 74 20 6f 66 20 74    68 65 20 77 65 62 73 65 72 76 65 72 2e 0a 0a 57 | cument.root.of.the.webserver...W | 
| 2a120 | 65 62 73 65 72 76 65 72 20 66 75 6e 63 74 69 6f    6e 73 20 61 72 65 20 66 72 65 65 20 74 6f 20 75 | ebserver.functions.are.free.to.u | 
| 2a140 | 73 65 20 74 68 69 73 20 6f 72 20 6e 6f 74 2e 20    20 54 68 65 0a 60 65 6c 6e 6f 64 65 2d 77 65 62 | se.this.or.not...The.`elnode-web | 
| 2a160 | 73 65 72 76 65 72 27 20 66 75 6e 63 74 69 6f 6e    20 64 6f 65 73 20 75 73 65 20 69 74 2e 22 0a 20 | server'.function.does.use.it.".. | 
| 2a180 | 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a    20 20 3a 74 79 70 65 20 27 66 69 6c 65 29 0a 0a | .:group.'elnode...:type.'file).. | 
| 2a1a0 | 28 64 65 66 63 75 73 74 6f 6d 20 65 6c 6e 6f 64    65 2d 77 65 62 73 65 72 76 65 72 2d 65 78 74 72 | (defcustom.elnode-webserver-extr | 
| 2a1c0 | 61 2d 6d 69 6d 65 74 79 70 65 73 0a 20 20 27 28    28 22 74 65 78 74 2f 70 6c 61 69 6e 22 20 2e 20 | a-mimetypes...'(("text/plain"... | 
| 2a1e0 | 22 63 72 65 6f 6c 65 22 29 0a 20 20 20 20 28 22    74 65 78 74 2f 70 6c 61 69 6e 22 20 2e 20 22 65 | "creole").....("text/plain"..."e | 
| 2a200 | 6c 22 29 29 0a 20 20 22 45 78 74 72 61 20 6d 69    6d 65 20 74 79 70 65 73 20 74 6f 20 69 64 65 6e | l"))..."Extra.mime.types.to.iden | 
| 2a220 | 74 69 66 79 20 73 70 65 63 69 61 6c 20 66 69 6c    65 20 74 79 70 65 73 2e 0a 0a 54 68 69 73 20 69 | tify.special.file.types...This.i | 
| 2a240 | 73 20 6a 75 73 74 20 61 20 77 61 79 20 6f 66 20    68 61 63 6b 69 6e 67 20 74 68 65 20 6d 69 6d 65 | s.just.a.way.of.hacking.the.mime | 
| 2a260 | 20 74 79 70 65 20 64 69 73 63 6f 76 65 72 79 20    73 6f 20 77 65 20 63 61 6e 0a 61 64 64 20 6d 6f | .type.discovery.so.we.can.add.mo | 
| 2a280 | 72 65 20 66 69 6c 65 20 6d 61 70 70 69 6e 67 73    20 6d 6f 72 65 20 65 61 73 69 6c 79 20 74 68 61 | re.file.mappings.more.easily.tha | 
| 2a2a0 | 6e 20 65 64 69 74 69 6e 67 20 60 2f 65 74 63 2f    6d 69 6d 65 2e 74 79 70 65 73 27 2e 22 0a 20 20 | n.editing.`/etc/mime.types'."... | 
| 2a2c0 | 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20    20 3a 74 79 70 65 20 27 28 61 6c 69 73 74 20 3a | :group.'elnode...:type.'(alist.: | 
| 2a2e0 | 6b 65 79 2d 74 79 70 65 20 73 74 72 69 6e 67 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | key-type.string................. | 
| 2a300 | 3a 76 61 6c 75 65 2d 74 79 70 65 20 73 74 72 69    6e 67 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d | :value-type.string))..(defcustom | 
| 2a320 | 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65    72 2d 69 6e 64 65 78 20 27 28 22 69 6e 64 65 78 | .elnode-webserver-index.'("index | 
| 2a340 | 2e 68 74 6d 6c 22 20 22 69 6e 64 65 78 2e 68 74    6d 22 29 0a 20 20 22 41 20 6c 69 73 74 20 6f 66 | .html"."index.htm")..."A.list.of | 
| 2a360 | 20 70 6f 73 73 69 62 6c 65 20 69 6e 64 65 78 20    66 69 6c 65 6e 61 6d 65 73 2e 0a 0a 41 6e 79 6f | .possible.index.filenames...Anyo | 
| 2a380 | 6e 65 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73    20 6f 66 20 74 68 69 73 20 6c 69 73 74 20 6d 61 | ne.of.the.values.of.this.list.ma | 
| 2a3a0 | 79 20 62 65 20 70 69 63 6b 65 64 20 61 73 20 74    68 65 20 69 6e 64 65 78 20 70 61 67 65 0a 66 6f | y.be.picked.as.the.index.page.fo | 
| 2a3c0 | 72 20 61 20 64 69 72 65 63 74 6f 72 79 2e 22 0a    20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 | r.a.directory."...:group.'elnode | 
| 2a3e0 | 0a 20 20 3a 74 79 70 65 20 27 28 72 65 70 65 61    74 20 73 74 72 69 6e 67 29 29 0a 0a 28 64 65 66 | ...:type.'(repeat.string))..(def | 
| 2a400 | 75 6e 20 65 6c 6e 6f 64 65 2d 2d 77 65 62 73 65    72 76 65 72 2d 73 65 74 75 70 20 28 29 0a 20 20 | un.elnode--webserver-setup.()... | 
| 2a420 | 22 53 65 74 75 70 20 74 68 65 20 45 6c 6e 6f 64    65 20 77 65 62 73 65 72 76 65 72 20 62 79 20 6d | "Setup.the.Elnode.webserver.by.m | 
| 2a440 | 61 6b 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20    70 75 62 6c 69 63 5f 68 74 6d 6c 20 64 69 72 2e | aking.a.default.public_html.dir. | 
| 2a460 | 0a 0a 54 68 65 20 73 65 72 76 65 72 20 68 61 73    20 61 20 73 69 6e 67 6c 65 20 60 74 65 73 74 2e | ..The.server.has.a.single.`test. | 
| 2a480 | 68 74 6d 6c 27 20 66 69 6c 65 2c 20 74 68 69 73    20 69 73 20 73 6f 20 77 65 20 63 61 6e 20 73 68 | html'.file,.this.is.so.we.can.sh | 
| 2a4a0 | 6f 77 0a 6f 66 66 20 74 68 65 20 73 74 61 6e 64    61 72 64 20 77 65 62 73 65 72 76 65 72 20 69 6e | ow.off.the.standard.webserver.in | 
| 2a4c0 | 64 65 78 69 6e 67 20 69 6e 20 65 6c 6e 6f 64 65    27 73 20 77 65 62 73 65 72 76 65 72 2e 22 0a 20 | dexing.in.elnode's.webserver.".. | 
| 2a4e0 | 20 28 65 6c 6e 6f 64 65 2d 2d 64 69 72 2d 73 65    74 75 70 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 | .(elnode--dir-setup.elnode-webse | 
| 2a500 | 72 76 65 72 2d 64 6f 63 72 6f 6f 74 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | rver-docroot.................... | 
| 2a520 | 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76    65 72 2d 64 6f 63 72 6f 6f 74 2d 64 65 66 61 75 | ..elnode-webserver-docroot-defau | 
| 2a540 | 6c 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 22 64 65 66 61 75 6c 74 | lt......................"default | 
| 2a560 | 2d 77 65 62 73 65 72 76 65 72 2d 74 65 73 74 2e    68 74 6d 6c 22 0a 20 20 20 20 20 20 20 20 20 20 | -webserver-test.html"........... | 
| 2a580 | 20 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74    2e 68 74 6d 6c 22 0a 20 20 20 20 20 20 20 20 20 | ..........."test.html".......... | 
| 2a5a0 | 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 66    61 75 6c 74 2d 77 65 62 73 65 72 76 65 72 2d 69 | ............"default-webserver-i | 
| 2a5c0 | 6d 61 67 65 2e 70 6e 67 22 29 29 0a 0a 28 64 65    66 75 6e 20 65 6c 6e 6f 64 65 2d 75 72 6c 2d 65 | mage.png"))..(defun.elnode-url-e | 
| 2a5e0 | 6e 63 6f 64 65 2d 70 61 74 68 20 28 70 61 74 68    29 0a 20 20 22 52 65 74 75 72 6e 20 61 20 75 72 | ncode-path.(path)..."Return.a.ur | 
| 2a600 | 6c 20 65 6e 63 6f 64 65 64 20 76 65 72 73 69 6f    6e 20 6f 66 20 50 41 54 48 2e 0a 0a 54 68 69 73 | l.encoded.version.of.PATH...This | 
| 2a620 | 20 69 73 20 6c 69 6b 65 20 60 75 72 6c 2d 68 65    78 69 66 79 2d 73 74 72 69 6e 67 27 20 62 75 74 | .is.like.`url-hexify-string'.but | 
| 2a640 | 20 69 74 20 68 61 6e 64 6c 65 73 20 74 68 65 20    70 61 72 74 73 20 6f 66 20 74 68 65 0a 50 41 54 | .it.handles.the.parts.of.the.PAT | 
| 2a660 | 48 20 70 72 6f 70 65 72 6c 79 2e 20 20 49 74 20    61 6c 73 6f 20 68 65 78 69 66 69 65 73 20 73 69 | H.properly...It.also.hexifies.si | 
| 2a680 | 6e 67 6c 65 20 71 75 6f 74 65 2e 22 0a 20 20 28    72 65 70 6c 61 63 65 2d 72 65 67 65 78 70 2d 69 | ngle.quote."...(replace-regexp-i | 
| 2a6a0 | 6e 2d 73 74 72 69 6e 67 0a 20 20 20 22 27 22 20    22 25 32 37 22 0a 20 20 20 28 6d 61 70 63 6f 6e | n-string...."'"."%27"....(mapcon | 
| 2a6c0 | 63 61 74 0a 20 20 20 20 27 69 64 65 6e 74 69 74    79 0a 20 20 20 20 28 6c 6f 6f 70 0a 20 20 20 20 | cat.....'identity.....(loop..... | 
| 2a6e0 | 20 20 20 66 6f 72 20 70 61 72 74 20 69 6e 20 28    73 70 6c 69 74 2d 73 74 72 69 6e 67 20 70 61 74 | ...for.part.in.(split-string.pat | 
| 2a700 | 68 20 22 2f 22 29 0a 20 20 20 20 20 20 20 63 6f    6c 6c 65 63 74 0a 20 20 20 20 20 20 20 20 20 28 | h."/")........collect..........( | 
| 2a720 | 63 6f 6e 63 61 74 0a 20 20 20 20 20 20 20 20 20    20 28 75 72 6c 2d 68 65 78 69 66 79 2d 73 74 72 | concat...........(url-hexify-str | 
| 2a740 | 69 6e 67 20 70 61 72 74 29 29 29 0a 20 20 20 20    22 2f 22 29 29 29 0a 0a 28 64 65 66 63 75 73 74 | ing.part)))....."/")))..(defcust | 
| 2a760 | 6f 6d 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72    76 65 72 2d 69 6e 64 65 78 2d 70 61 67 65 2d 74 | om.elnode-webserver-index-page-t | 
| 2a780 | 65 6d 70 6c 61 74 65 20 22 3c 68 74 6d 6c 3e 0a    20 3c 68 65 61 64 3e 0a 20 20 3c 74 69 74 6c 65 | emplate."<html>..<head>...<title | 
| 2a7a0 | 3e 25 73 3c 2f 74 69 74 6c 65 3e 0a 20 3c 2f 68    65 61 64 3e 0a 20 3c 62 6f 64 79 3e 0a 20 20 3c | >%s</title>..</head>..<body>...< | 
| 2a7c0 | 68 31 3e 25 73 3c 2f 68 31 3e 0a 20 20 3c 64 69    76 3e 25 73 3c 2f 64 69 76 3e 0a 20 3c 2f 62 6f | h1>%s</h1>...<div>%s</div>..</bo | 
| 2a7e0 | 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 0a 22 0a 20 20    22 54 68 65 20 70 61 67 65 20 74 65 6d 70 6c 61 | dy>.</html>."..."The.page.templa | 
| 2a800 | 74 65 20 75 73 65 64 20 74 6f 20 72 65 6e 64 65    72 20 61 6e 20 69 6e 64 65 78 20 70 61 67 65 2e | te.used.to.render.an.index.page. | 
| 2a820 | 0a 0a 54 68 65 20 6f 72 64 65 72 20 6f 66 20 74    68 65 20 76 61 72 69 61 62 6c 65 73 20 69 73 3a | ..The.order.of.the.variables.is: | 
| 2a840 | 0a 0a 2d 20 74 68 65 20 74 69 74 6c 65 20 6f 66    20 74 68 65 20 64 6f 63 75 6d 65 6e 74 0a 2d 20 | ..-.the.title.of.the.document.-. | 
| 2a860 | 74 68 65 20 74 69 74 6c 65 20 6f 66 20 74 68 65    20 64 6f 63 75 6d 65 6e 74 0a 2d 20 74 68 65 20 | the.title.of.the.document.-.the. | 
| 2a880 | 48 54 4d 4c 20 66 6f 72 6d 61 74 74 65 64 20 6c    69 73 74 20 6f 66 20 66 69 6c 65 73 2e 22 0a 20 | HTML.formatted.list.of.files.".. | 
| 2a8a0 | 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 0a    20 20 3a 74 79 70 65 20 27 28 73 74 72 69 6e 67 | .:group.'elnode...:type.'(string | 
| 2a8c0 | 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d 20 65    6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d | ))..(defcustom.elnode-webserver- | 
| 2a8e0 | 69 6e 64 65 78 2d 66 69 6c 65 2d 74 65 6d 70 6c    61 74 65 20 22 3c 61 20 68 72 65 66 3d 27 25 73 | index-file-template."<a.href='%s | 
| 2a900 | 27 3e 25 73 3c 2f 61 3e 3c 62 72 2f 3e 5c 72 5c    6e 22 0a 20 20 22 54 68 65 20 74 65 6d 70 6c 61 | '>%s</a><br/>\r\n"..."The.templa | 
| 2a920 | 74 65 20 66 6f 72 20 65 61 63 68 20 66 69 6c 65    20 69 6e 20 74 68 65 20 77 65 62 73 65 72 76 65 | te.for.each.file.in.the.webserve | 
| 2a940 | 72 20 69 6e 64 65 78 2e 0a 0a 54 68 69 73 20 69    73 20 75 73 65 64 20 74 6f 20 64 69 73 70 6c 61 | r.index...This.is.used.to.displa | 
| 2a960 | 79 20 65 61 63 68 20 66 69 6c 65 20 69 6e 20 61    6e 20 61 75 74 6f 6d 61 74 65 64 20 64 69 72 65 | y.each.file.in.an.automated.dire | 
| 2a980 | 63 74 6f 72 79 20 69 6e 64 65 78 2e 0a 0a 49 74    20 69 73 20 65 78 70 65 63 74 65 64 20 74 68 65 | ctory.index...It.is.expected.the | 
| 2a9a0 | 20 74 65 6d 70 6c 61 74 65 20 68 61 73 20 32 20    25 73 20 76 61 72 69 61 62 6c 65 73 20 69 6e 20 | .template.has.2.%s.variables.in. | 
| 2a9c0 | 69 74 2c 20 74 68 65 20 66 69 72 73 74 0a 69 73    20 74 68 65 20 75 72 6c 20 74 6f 20 6c 69 6e 6b | it,.the.first.is.the.url.to.link | 
| 2a9e0 | 20 74 6f 20 61 6e 64 20 74 68 65 20 73 65 63 6f    6e 64 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e | .to.and.the.second.is.the.conten | 
| 2aa00 | 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 2e 22 0a    20 20 3a 67 72 6f 75 70 20 27 65 6c 6e 6f 64 65 | t.of.the.link."...:group.'elnode | 
| 2aa20 | 0a 20 20 3a 74 79 70 65 20 27 28 73 74 72 69 6e    67 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f | ...:type.'(string))..(defun.elno | 
| 2aa40 | 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 69 6e    64 65 78 20 28 64 6f 63 72 6f 6f 74 20 74 61 72 | de--webserver-index.(docroot.tar | 
| 2aa60 | 67 65 74 66 69 6c 65 20 70 61 74 68 69 6e 66 6f    20 26 6f 70 74 69 6f 6e 61 6c 20 6d 61 74 63 68 | getfile.pathinfo.&optional.match | 
| 2aa80 | 29 0a 20 20 22 43 6f 6e 73 74 72 75 63 74 73 20    69 6e 64 65 78 20 64 6f 63 75 6d 65 6e 74 73 2e | )..."Constructs.index.documents. | 
| 2aaa0 | 0a 0a 54 68 65 20 69 6e 64 65 78 20 69 73 20 6d    61 64 65 20 66 6f 72 20 74 68 65 20 44 4f 43 52 | ..The.index.is.made.for.the.DOCR | 
| 2aac0 | 4f 4f 54 20 61 6e 64 20 54 41 52 47 45 54 46 49    4c 45 2e 20 54 68 65 20 77 65 62 20 70 61 74 68 | OOT.and.TARGETFILE..The.web.path | 
| 2aae0 | 20 69 73 0a 50 41 54 48 49 4e 46 4f 2e 0a 0a 4f    70 74 69 6f 6e 61 6c 20 4d 41 54 43 48 20 69 73 | .is.PATHINFO...Optional.MATCH.is | 
| 2ab00 | 20 70 61 73 73 65 64 20 64 69 72 65 63 74 6c 79    20 74 68 72 6f 75 67 68 20 74 6f 0a 60 64 69 72 | .passed.directly.through.to.`dir | 
| 2ab20 | 65 63 74 6f 72 79 2d 66 69 6c 65 73 2d 61 6e 64    2d 61 74 74 72 69 62 75 74 65 73 27 2e 22 0a 20 | ectory-files-and-attributes'.".. | 
| 2ab40 | 20 3b 3b 20 54 4f 44 4f 20 6d 61 6b 65 20 74 68    69 73 20 75 73 61 62 6c 65 20 62 79 20 70 65 6f | .;;.TODO.make.this.usable.by.peo | 
| 2ab60 | 70 6c 65 20 67 65 6e 65 72 61 6c 6c 79 0a 20 20    28 6c 65 74 20 28 28 64 69 72 6c 69 73 74 20 28 | ple.generally...(let.((dirlist.( | 
| 2ab80 | 64 69 72 65 63 74 6f 72 79 2d 66 69 6c 65 73 2d    61 6e 64 2d 61 74 74 72 69 62 75 74 65 73 20 74 | directory-files-and-attributes.t | 
| 2aba0 | 61 72 67 65 74 66 69 6c 65 20 6e 69 6c 20 6d 61    74 63 68 29 29 29 0a 20 20 20 20 3b 3b 20 54 4f | argetfile.nil.match))).....;;.TO | 
| 2abc0 | 44 4f 20 6d 61 6b 65 20 73 6f 6d 65 20 74 65 6d    70 6c 61 74 69 6e 67 20 68 65 72 65 20 73 6f 20 | DO.make.some.templating.here.so. | 
| 2abe0 | 70 65 6f 70 6c 65 20 63 61 6e 20 63 68 61 6e 67    65 20 74 68 69 73 0a 20 20 20 20 28 66 6f 72 6d | people.can.change.this.....(form | 
| 2ac00 | 61 74 0a 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77    65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 2d 70 | at......elnode-webserver-index-p | 
| 2ac20 | 61 67 65 2d 74 65 6d 70 6c 61 74 65 0a 20 20 20    20 20 70 61 74 68 69 6e 66 6f 0a 20 20 20 20 20 | age-template......pathinfo...... | 
| 2ac40 | 70 61 74 68 69 6e 66 6f 0a 20 20 20 20 20 28 6c    6f 6f 70 20 66 6f 72 20 64 69 72 2d 65 6e 74 72 | pathinfo......(loop.for.dir-entr | 
| 2ac60 | 79 20 69 6e 20 64 69 72 6c 69 73 74 0a 20 20 20    20 20 20 20 20 20 20 20 63 6f 6e 63 61 74 0a 20 | y.in.dirlist............concat.. | 
| 2ac80 | 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28    28 65 6e 74 72 79 0a 20 20 20 20 20 20 20 20 20 | ..........(let.((entry.......... | 
| 2aca0 | 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .........(format................ | 
| 2acc0 | 20 20 20 20 22 25 73 2f 25 73 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 | ...."%s/%s"....................( | 
| 2ace0 | 69 66 20 28 65 71 75 61 6c 20 70 61 74 68 69 6e    66 6f 20 22 2f 22 29 20 20 22 22 20 70 61 74 68 | if.(equal.pathinfo."/").."".path | 
| 2ad00 | 69 6e 66 6f 29 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 63 61 72 20 64 69 | info)....................(car.di | 
| 2ad20 | 72 2d 65 6e 74 72 79 29 29 29 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 | r-entry))))..............(format | 
| 2ad40 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65    6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d | ...............elnode-webserver- | 
| 2ad60 | 69 6e 64 65 78 2d 66 69 6c 65 2d 74 65 6d 70 6c    61 74 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 | index-file-template............. | 
| 2ad80 | 20 20 28 65 6c 6e 6f 64 65 2d 75 72 6c 2d 65 6e    63 6f 64 65 2d 70 61 74 68 20 65 6e 74 72 79 29 | ..(elnode-url-encode-path.entry) | 
| 2ada0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28    63 61 72 20 64 69 72 2d 65 6e 74 72 79 29 29 29 | ...............(car.dir-entry))) | 
| 2adc0 | 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f    6c 6f 61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f | ))))..;;;###autoload.(defun.elno | 
| 2ade0 | 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 68 61    6e 64 6c 65 72 2d 70 72 6f 63 20 28 68 74 74 70 | de--webserver-handler-proc.(http | 
| 2ae00 | 63 6f 6e 20 64 6f 63 72 6f 6f 74 20 6d 69 6d 65    2d 74 79 70 65 73 29 0a 20 20 22 41 63 74 75 61 | con.docroot.mime-types)..."Actua | 
| 2ae20 | 6c 20 77 65 62 73 65 72 76 65 72 20 69 6d 70 6c    65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 0a 44 6f 20 | l.webserver.implementation...Do. | 
| 2ae40 | 77 65 62 73 65 72 76 69 6e 67 20 74 6f 20 48 54    54 50 43 4f 4e 20 66 72 6f 6d 20 74 68 65 20 44 | webserving.to.HTTPCON.from.the.D | 
| 2ae60 | 4f 43 52 4f 4f 54 20 75 73 69 6e 67 20 74 68 65    20 4d 49 4d 45 2d 54 59 50 45 53 0a 66 6f 72 20 | OCROOT.using.the.MIME-TYPES.for. | 
| 2ae80 | 6d 65 74 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e    2e 0a 0a 54 68 69 73 20 69 73 20 6e 6f 74 20 61 | meta.information...This.is.not.a | 
| 2aea0 | 20 72 65 61 6c 20 68 61 6e 64 6c 65 72 20 28 62    65 63 61 75 73 65 20 69 74 20 74 61 6b 65 73 20 | .real.handler.(because.it.takes. | 
| 2aec0 | 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a 48 54    54 50 43 4f 4e 29 20 62 75 74 20 69 74 20 69 73 | more.than.the.HTTPCON).but.it.is | 
| 2aee0 | 20 63 61 6c 6c 65 64 20 64 69 72 65 63 74 6c 79    20 62 79 20 74 68 65 20 72 65 61 6c 20 77 65 62 | .called.directly.by.the.real.web | 
| 2af00 | 73 65 72 76 65 72 0a 68 61 6e 64 6c 65 72 73 2e    22 0a 20 20 28 65 6c 6e 6f 64 65 2d 64 6f 63 72 | server.handlers."...(elnode-docr | 
| 2af20 | 6f 6f 74 2d 66 6f 72 20 64 6f 63 72 6f 6f 74 0a    20 20 20 20 77 69 74 68 20 74 61 72 67 65 74 66 | oot-for.docroot.....with.targetf | 
| 2af40 | 69 6c 65 0a 20 20 20 20 6f 6e 20 68 74 74 70 63    6f 6e 0a 20 20 20 20 64 6f 0a 20 20 20 20 28 6c | ile.....on.httpcon.....do.....(l | 
| 2af60 | 65 74 20 28 28 70 61 74 68 69 6e 66 6f 20 28 65    6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 68 69 | et.((pathinfo.(elnode-http-pathi | 
| 2af80 | 6e 66 6f 20 68 74 74 70 63 6f 6e 29 29 29 0a 20    20 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 64 | nfo.httpcon))).......(if.(file-d | 
| 2afa0 | 69 72 65 63 74 6f 72 79 2d 70 20 74 61 72 67 65    74 66 69 6c 65 29 0a 20 20 20 20 20 20 20 20 20 | irectory-p.targetfile).......... | 
| 2afc0 | 20 3b 3b 20 55 73 65 20 61 6e 20 65 78 69 73 74    69 6e 67 20 69 6e 64 65 78 20 66 69 6c 65 20 6f | .;;.Use.an.existing.index.file.o | 
| 2afe0 | 72 20 73 65 6e 64 20 61 20 64 69 72 65 63 74 6f    72 79 20 69 6e 64 65 78 0a 20 20 20 20 20 20 20 | r.send.a.directory.index........ | 
| 2b000 | 20 20 20 28 6c 65 74 2a 20 28 28 69 6e 64 65 78    66 69 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 | ...(let*.((indexfile............ | 
| 2b020 | 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 66 6f 72    20 69 20 69 6e 20 65 6c 6e 6f 64 65 2d 77 65 62 | .......(loop.for.i.in.elnode-web | 
| 2b040 | 73 65 72 76 65 72 2d 69 6e 64 65 78 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | server-index.................... | 
| 2b060 | 20 20 20 20 20 69 66 20 28 6d 65 6d 62 65 72 20    69 20 28 64 69 72 65 63 74 6f 72 79 2d 66 69 6c | .....if.(member.i.(directory-fil | 
| 2b080 | 65 73 20 74 61 72 67 65 74 66 69 6c 65 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | es.targetfile))................. | 
| 2b0a0 | 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 69    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ........return.i)))............. | 
| 2b0c0 | 28 69 66 20 69 6e 64 65 78 66 69 6c 65 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | (if.indexfile.................(e | 
| 2b0e0 | 6c 6e 6f 64 65 2d 73 65 6e 64 2d 66 69 6c 65 20    68 74 74 70 63 6f 6e 20 28 63 6f 6e 63 61 74 20 | lnode-send-file.httpcon.(concat. | 
| 2b100 | 74 61 72 67 65 74 66 69 6c 65 20 22 2f 22 20 69    6e 64 65 78 66 69 6c 65 29 29 0a 20 20 20 20 20 | targetfile."/".indexfile))...... | 
| 2b120 | 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 28    69 6e 64 65 78 20 28 65 6c 6e 6f 64 65 2d 2d 77 | .........(let.((index.(elnode--w | 
| 2b140 | 65 62 73 65 72 76 65 72 2d 69 6e 64 65 78 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ebserver-index.................. | 
| 2b160 | 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 72 6f    6f 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........docroot.............. | 
| 2b180 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74    61 72 67 65 74 66 69 6c 65 0a 20 20 20 20 20 20 | ...............targetfile....... | 
| 2b1a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 70 61 74 68 69 6e 66 6f 29 29 | ......................pathinfo)) | 
| 2b1c0 | 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 73 | ).................(elnode-http-s | 
| 2b1e0 | 74 61 72 74 20 68 74 74 70 63 6f 6e 20 32 30 30    20 27 28 22 43 6f 6e 74 65 6e 74 2d 74 79 70 65 | tart.httpcon.200.'("Content-type | 
| 2b200 | 22 20 2e 20 22 74 65 78 74 2f 68 74 6d 6c 22 29    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | "..."text/html"))............... | 
| 2b220 | 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 72    65 74 75 72 6e 20 68 74 74 70 63 6f 6e 20 69 6e | ..(elnode-http-return.httpcon.in | 
| 2b240 | 64 65 78 29 29 29 29 0a 20 20 20 20 20 20 20 20    3b 3b 20 53 65 6e 64 20 61 20 66 69 6c 65 2e 0a | dex)))).........;;.Send.a.file.. | 
| 2b260 | 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d    73 65 6e 64 2d 66 69 6c 65 0a 20 20 20 20 20 20 | ........(elnode-send-file....... | 
| 2b280 | 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20    20 20 20 20 74 61 72 67 65 74 66 69 6c 65 0a 20 | ...httpcon..........targetfile.. | 
| 2b2a0 | 20 20 20 20 20 20 20 20 3a 6d 69 6d 65 2d 74 79    70 65 73 20 6d 69 6d 65 2d 74 79 70 65 73 29 29 | ........:mime-types.mime-types)) | 
| 2b2c0 | 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f    64 65 2d 77 65 62 73 65 72 76 65 72 2d 68 61 6e | )))..(defun.elnode-webserver-han | 
| 2b2e0 | 64 6c 65 72 2d 6d 61 6b 65 72 20 28 26 6f 70 74    69 6f 6e 61 6c 20 64 6f 63 72 6f 6f 74 20 65 78 | dler-maker.(&optional.docroot.ex | 
| 2b300 | 74 72 61 2d 6d 69 6d 65 2d 74 79 70 65 73 29 0a    20 20 22 4d 61 6b 65 20 61 20 77 65 62 73 65 72 | tra-mime-types)..."Make.a.webser | 
| 2b320 | 76 65 72 20 68 61 6e 64 6c 65 72 20 70 6f 73 73    69 62 6c 79 20 77 69 74 68 20 74 68 65 20 44 4f | ver.handler.possibly.with.the.DO | 
| 2b340 | 43 52 4f 4f 54 20 61 6e 64 20 45 58 54 52 41 2d    4d 49 4d 45 2d 54 59 50 45 53 2e 0a 0a 52 65 74 | CROOT.and.EXTRA-MIME-TYPES...Ret | 
| 2b360 | 75 72 6e 73 20 61 20 70 72 6f 63 20 77 68 69 63    68 20 69 73 20 74 68 65 20 68 61 6e 64 6c 65 72 | urns.a.proc.which.is.the.handler | 
| 2b380 | 2e 20 54 68 65 20 68 61 6e 64 6c 65 72 20 73 65    72 76 65 73 20 66 69 6c 65 73 20 6f 75 74 0a 6f | ..The.handler.serves.files.out.o | 
| 2b3a0 | 66 20 74 68 65 20 64 6f 63 72 6f 6f 74 20 61 6e    64 20 6d 61 72 6b 73 20 74 68 65 6d 20 77 69 74 | f.the.docroot.and.marks.them.wit | 
| 2b3c0 | 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 74 79    70 65 73 20 74 68 61 74 20 45 6d 61 63 73 0a 6b | h.the.content.types.that.Emacs.k | 
| 2b3e0 | 6e 6f 77 73 20 61 62 6f 75 74 2e 20 59 6f 75 20    63 61 6e 20 61 64 64 20 65 78 74 72 61 20 63 6f | nows.about..You.can.add.extra.co | 
| 2b400 | 6e 74 65 6e 74 20 74 79 70 65 73 20 66 6f 72 20    74 68 65 20 77 65 62 73 65 72 76 65 72 0a 6a 75 | ntent.types.for.the.webserver.ju | 
| 2b420 | 73 74 20 62 79 20 73 75 70 70 6c 79 69 6e 67 20    61 6e 20 61 6c 69 73 74 20 6f 66 20 6d 69 6d 65 | st.by.supplying.an.alist.of.mime | 
| 2b440 | 2d 74 79 70 65 73 20 61 6e 64 20 65 78 74 65 6e    73 69 6f 6e 73 20 66 6f 72 0a 45 58 54 52 41 2d | -types.and.extensions.for.EXTRA- | 
| 2b460 | 4d 49 4d 45 2d 54 59 50 45 53 2e 0a 0a 54 68 65    20 77 65 62 73 65 72 76 65 72 20 68 61 6e 64 6c | MIME-TYPES...The.webserver.handl | 
| 2b480 | 65 72 20 61 6c 73 6f 20 63 72 65 61 74 65 73 20    66 69 6c 65 20 69 6e 64 65 78 65 73 2e 0a 0a 54 | er.also.creates.file.indexes...T | 
| 2b4a0 | 68 65 20 77 65 62 73 65 72 76 65 72 20 75 73 65    73 20 60 65 6c 6e 6f 64 65 2d 74 65 73 74 2d 70 | he.webserver.uses.`elnode-test-p | 
| 2b4c0 | 61 74 68 27 20 74 6f 20 6d 61 6b 65 20 73 75 72    65 20 74 68 61 74 20 74 68 65 0a 72 65 71 75 65 | ath'.to.make.sure.that.the.reque | 
| 2b4e0 | 73 74 20 64 6f 65 73 20 6e 6f 74 20 67 6f 20 61    62 6f 76 65 20 74 68 65 20 44 4f 43 52 4f 4f 54 | st.does.not.go.above.the.DOCROOT | 
| 2b500 | 2e 22 0a 20 20 28 6c 65 74 20 28 28 6d 79 2d 64    6f 63 72 6f 6f 74 20 28 6f 72 20 64 6f 63 72 6f | ."...(let.((my-docroot.(or.docro | 
| 2b520 | 6f 74 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72    76 65 72 2d 64 6f 63 72 6f 6f 74 29 29 0a 20 20 | ot.elnode-webserver-docroot))... | 
| 2b540 | 20 20 20 20 20 20 28 6d 79 2d 6d 69 6d 65 2d 74    79 70 65 73 20 28 6f 72 20 65 78 74 72 61 2d 6d | ......(my-mime-types.(or.extra-m | 
| 2b560 | 69 6d 65 2d 74 79 70 65 73 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ime-types....................... | 
| 2b580 | 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62 73    65 72 76 65 72 2d 65 78 74 72 61 2d 6d 69 6d 65 | .....elnode-webserver-extra-mime | 
| 2b5a0 | 74 79 70 65 73 29 29 29 0a 20 20 20 20 28 6c 61    6d 62 64 61 20 28 68 74 74 70 63 6f 6e 29 0a 20 | types))).....(lambda.(httpcon).. | 
| 2b5c0 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 2d 77 65    62 73 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d | .....(elnode--webserver-handler- | 
| 2b5e0 | 70 72 6f 63 0a 20 20 20 20 20 20 20 68 74 74 70    63 6f 6e 20 6d 79 2d 64 6f 63 72 6f 6f 74 20 6d | proc........httpcon.my-docroot.m | 
| 2b600 | 79 2d 6d 69 6d 65 2d 74 79 70 65 73 29 29 29 29    0a 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 | y-mime-types))))...(defvar.elnod | 
| 2b620 | 65 2d 2d 6d 61 6b 65 2d 77 65 62 73 65 72 76 65    72 2d 73 74 6f 72 65 20 6e 69 6c 0a 20 20 22 41 | e--make-webserver-store.nil..."A | 
| 2b640 | 6c 69 73 74 20 6f 66 20 77 65 62 73 65 72 76 65    72 73 20 6d 61 64 65 20 62 79 20 60 65 6c 6e 6f | list.of.webservers.made.by.`elno | 
| 2b660 | 64 65 2d 6d 61 6b 65 2d 77 65 62 73 65 72 76 65    72 27 2e 0a 0a 53 74 6f 72 65 64 20 61 73 20 60 | de-make-webserver'...Stored.as.` | 
| 2b680 | 64 6f 63 72 6f 6f 74 27 20 2e 20 60 77 65 62 73    65 72 76 65 72 27 2e 22 29 0a 0a 3b 3b 3b 23 23 | docroot'...`webserver'.")..;;;## | 
| 2b6a0 | 23 61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e    20 65 6c 6e 6f 64 65 2d 6d 61 6b 65 2d 77 65 62 | #autoload.(defun.elnode-make-web | 
| 2b6c0 | 73 65 72 76 65 72 20 28 64 6f 63 72 6f 6f 74 20    70 6f 72 74 20 26 6f 70 74 69 6f 6e 61 6c 20 68 | server.(docroot.port.&optional.h | 
| 2b6e0 | 6f 73 74 29 0a 20 20 22 4d 61 6b 65 20 61 20 77    65 62 73 65 72 76 65 72 20 69 6e 74 65 72 61 63 | ost)..."Make.a.webserver.interac | 
| 2b700 | 74 69 76 65 6c 79 2c 20 66 6f 72 20 44 4f 43 52    4f 4f 54 20 6f 6e 20 50 4f 52 54 2e 0a 0a 41 6e | tively,.for.DOCROOT.on.PORT...An | 
| 2b720 | 20 65 61 73 79 20 77 61 79 20 66 6f 72 20 61 20    75 73 65 72 20 74 6f 20 6d 61 6b 65 20 61 20 77 | .easy.way.for.a.user.to.make.a.w | 
| 2b740 | 65 62 73 65 72 76 65 72 20 66 6f 72 20 61 20 70    61 72 74 69 63 75 6c 61 72 0a 64 69 72 65 63 74 | ebserver.for.a.particular.direct | 
| 2b760 | 6f 72 79 2e 22 0a 20 20 28 69 6e 74 65 72 61 63    74 69 76 65 0a 20 20 20 28 6c 65 74 20 28 28 64 | ory."...(interactive....(let.((d | 
| 2b780 | 6f 63 72 6f 6f 74 20 28 72 65 61 64 2d 64 69 72    65 63 74 6f 72 79 2d 6e 61 6d 65 20 22 44 6f 63 | ocroot.(read-directory-name."Doc | 
| 2b7a0 | 72 6f 6f 74 3a 20 22 20 6e 69 6c 20 6e 69 6c 20    74 29 29 0a 20 20 20 20 20 20 20 20 20 28 70 6f | root:.".nil.nil.t))..........(po | 
| 2b7c0 | 72 74 20 28 72 65 61 64 2d 66 72 6f 6d 2d 6d 69    6e 69 62 75 66 66 65 72 20 22 50 6f 72 74 3a 20 | rt.(read-from-minibuffer."Port:. | 
| 2b7e0 | 22 29 29 0a 20 20 20 20 20 20 20 20 20 28 68 6f    73 74 20 28 69 66 20 63 75 72 72 65 6e 74 2d 70 | "))..........(host.(if.current-p | 
| 2b800 | 72 65 66 69 78 2d 61 72 67 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 72 65 | refix-arg....................(re | 
| 2b820 | 61 64 2d 66 72 6f 6d 2d 6d 69 6e 69 62 75 66 66    65 72 20 22 48 6f 73 74 3a 20 22 29 0a 20 20 20 | ad-from-minibuffer."Host:.").... | 
| 2b840 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73 74 | ................elnode-init-host | 
| 2b860 | 29 29 29 0a 20 20 20 20 20 28 6c 69 73 74 20 64    6f 63 72 6f 6f 74 20 70 6f 72 74 20 68 6f 73 74 | )))......(list.docroot.port.host | 
| 2b880 | 29 29 29 0a 20 20 28 6c 65 74 20 28 28 77 65 62    73 65 72 76 65 72 2d 70 72 6f 63 20 28 65 6c 6e | )))...(let.((webserver-proc.(eln | 
| 2b8a0 | 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 68 61    6e 64 6c 65 72 2d 6d 61 6b 65 72 20 64 6f 63 72 | ode-webserver-handler-maker.docr | 
| 2b8c0 | 6f 6f 74 29 29 29 0a 20 20 20 20 28 61 64 64 2d    74 6f 2d 6c 69 73 74 0a 20 20 20 20 20 27 65 6c | oot))).....(add-to-list......'el | 
| 2b8e0 | 6e 6f 64 65 2d 2d 6d 61 6b 65 2d 77 65 62 73 65    72 76 65 72 2d 73 74 6f 72 65 0a 20 20 20 20 20 | node--make-webserver-store...... | 
| 2b900 | 28 63 6f 6e 73 20 64 6f 63 72 6f 6f 74 20 77 65    62 73 65 72 76 65 72 2d 70 72 6f 63 29 29 0a 20 | (cons.docroot.webserver-proc)).. | 
| 2b920 | 20 20 20 28 65 6c 6e 6f 64 65 2d 73 74 61 72 74    0a 20 20 20 20 20 77 65 62 73 65 72 76 65 72 2d | ...(elnode-start......webserver- | 
| 2b940 | 70 72 6f 63 0a 20 20 20 20 20 3a 70 6f 72 74 20    28 73 74 72 69 6e 67 2d 74 6f 2d 6e 75 6d 62 65 | proc......:port.(string-to-numbe | 
| 2b960 | 72 20 28 66 6f 72 6d 61 74 20 22 25 73 22 20 70    6f 72 74 29 29 0a 20 20 20 20 20 3a 68 6f 73 74 | r.(format."%s".port))......:host | 
| 2b980 | 20 68 6f 73 74 29 29 29 0a 0a 3b 3b 3b 23 23 23    61 75 74 6f 6c 6f 61 64 0a 28 64 65 66 75 6e 20 | .host)))..;;;###autoload.(defun. | 
| 2b9a0 | 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72    20 28 68 74 74 70 63 6f 6e 29 0a 20 20 22 41 20 | elnode-webserver.(httpcon)..."A. | 
| 2b9c0 | 73 69 6d 70 6c 65 20 77 65 62 73 65 72 76 65 72    20 74 68 61 74 20 73 65 72 76 65 73 20 64 6f 63 | simple.webserver.that.serves.doc | 
| 2b9e0 | 75 6d 65 6e 74 73 20 6f 75 74 20 6f 66 20 60 65    6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d | uments.out.of.`elnode-webserver- | 
| 2ba00 | 64 6f 63 72 6f 6f 74 27 2e 0a 0a 54 68 69 73 20    69 73 20 6a 75 73 74 20 61 6e 20 65 78 61 6d 70 | docroot'...This.is.just.an.examp | 
| 2ba20 | 6c 65 20 6f 66 20 61 6e 20 65 6c 6e 6f 64 65 20    77 65 62 73 65 72 76 65 72 2c 20 62 75 74 20 69 | le.of.an.elnode.webserver,.but.i | 
| 2ba40 | 74 20 6d 61 79 20 62 65 20 61 6c 6c 0a 74 68 61    74 20 69 73 20 6e 65 65 64 65 64 20 6d 6f 73 74 | t.may.be.all.that.is.needed.most | 
| 2ba60 | 20 6f 66 20 74 68 65 20 74 69 6d 65 2e 0a 0a 53    65 65 20 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65 | .of.the.time...See.`elnode-webse | 
| 2ba80 | 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 6b    65 72 27 20 66 6f 72 20 6d 6f 72 65 20 70 6f 73 | rver-handler-maker'.for.more.pos | 
| 2baa0 | 73 69 62 69 6c 69 74 69 65 73 20 66 6f 72 0a 6d    61 6b 69 6e 67 20 77 65 62 73 65 72 76 65 72 20 | sibilities.for.making.webserver. | 
| 2bac0 | 66 75 6e 63 74 69 6f 6e 73 2e 0a 0a 48 54 54 50    43 4f 4e 20 69 73 20 74 68 65 20 48 54 54 50 20 | functions...HTTPCON.is.the.HTTP. | 
| 2bae0 | 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68    65 20 75 73 65 72 20 61 67 65 6e 74 2e 22 0a 20 | connection.to.the.user.agent.".. | 
| 2bb00 | 20 28 65 6c 6e 6f 64 65 2d 2d 77 65 62 73 65 72    76 65 72 2d 73 65 74 75 70 29 0a 20 20 28 6c 65 | .(elnode--webserver-setup)...(le | 
| 2bb20 | 74 20 28 75 73 65 2d 77 65 62 73 65 72 76 65 72    2d 68 61 6e 64 6c 65 72 2d 6d 61 6b 65 72 29 0a | t.(use-webserver-handler-maker). | 
| 2bb40 | 20 20 20 20 28 69 66 20 75 73 65 2d 77 65 62 73    65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61 | ....(if.use-webserver-handler-ma | 
| 2bb60 | 6b 65 72 0a 20 20 20 20 20 20 20 20 28 65 6c 6e    6f 64 65 2d 2d 77 65 62 73 65 72 76 65 72 2d 68 | ker.........(elnode--webserver-h | 
| 2bb80 | 61 6e 64 6c 65 72 2d 70 72 6f 63 0a 20 20 20 20    20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20 20 20 | andler-proc..........httpcon.... | 
| 2bba0 | 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77 65 62    73 65 72 76 65 72 2d 64 6f 63 72 6f 6f 74 0a 20 | ......elnode-webserver-docroot.. | 
| 2bbc0 | 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 77    65 62 73 65 72 76 65 72 2d 65 78 74 72 61 2d 6d | ........elnode-webserver-extra-m | 
| 2bbe0 | 69 6d 65 74 79 70 65 73 29 0a 20 20 20 20 20 20    20 20 3b 3b 20 4f 74 68 65 72 77 69 73 65 20 44 | imetypes).........;;.Otherwise.D | 
| 2bc00 | 4f 20 75 73 65 20 74 68 65 20 68 61 6e 64 6c 65    72 20 6d 61 6b 65 72 2e 2e 2e 0a 20 20 20 20 20 | O.use.the.handler.maker......... | 
| 2bc20 | 20 20 20 28 6c 65 74 20 28 28 77 65 62 73 65 72    76 65 72 20 28 65 6c 6e 6f 64 65 2d 77 65 62 73 | ...(let.((webserver.(elnode-webs | 
| 2bc40 | 65 72 76 65 72 2d 68 61 6e 64 6c 65 72 2d 6d 61    6b 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 | erver-handler-maker............. | 
| 2bc60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c    6e 6f 64 65 2d 77 65 62 73 65 72 76 65 72 2d 64 | ..............elnode-webserver-d | 
| 2bc80 | 6f 63 72 6f 6f 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ocroot.......................... | 
| 2bca0 | 20 65 6c 6e 6f 64 65 2d 77 65 62 73 65 72 76 65    72 2d 65 78 74 72 61 2d 6d 69 6d 65 74 79 70 65 | .elnode-webserver-extra-mimetype | 
| 2bcc0 | 73 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 28    66 75 6e 63 61 6c 6c 20 77 65 62 73 65 72 76 65 | s)))...........(funcall.webserve | 
| 2bce0 | 72 20 68 74 74 70 63 6f 6e 29 29 29 29 29 0a 0a    3b 3b 20 44 65 66 61 75 6c 74 20 65 6c 6e 6f 64 | r.httpcon)))))..;;.Default.elnod | 
| 2bd00 | 65 20 61 75 74 68 20 64 61 74 61 62 61 73 65 73    0a 0a 28 64 65 66 63 6f 6e 73 74 20 65 6c 6e 6f | e.auth.databases..(defconst.elno | 
| 2bd20 | 64 65 2d 61 75 74 68 2d 64 62 2d 73 70 65 63 2d    64 65 66 61 75 6c 74 0a 20 20 60 28 64 62 2d 68 | de-auth-db-spec-default...`(db-h | 
| 2bd40 | 61 73 68 0a 20 20 20 20 3a 66 69 6c 65 6e 61 6d    65 0a 20 20 20 20 2c 28 65 78 70 61 6e 64 2d 66 | ash.....:filename.....,(expand-f | 
| 2bd60 | 69 6c 65 2d 6e 61 6d 65 20 28 63 6f 6e 63 61 74    20 65 6c 6e 6f 64 65 2d 63 6f 6e 66 69 67 2d 64 | ile-name.(concat.elnode-config-d | 
| 2bd80 | 69 72 65 63 74 6f 72 79 20 22 65 6c 6e 6f 64 65    2d 61 75 74 68 22 29 29 29 0a 20 20 22 54 68 65 | irectory."elnode-auth")))..."The | 
| 2bda0 | 20 64 65 66 61 75 6c 74 20 65 6c 6e 6f 64 65 2d    61 75 74 68 2d 64 62 20 73 70 65 63 69 66 69 63 | .default.elnode-auth-db.specific | 
| 2bdc0 | 61 74 69 6f 6e 2e 22 29 0a 0a 28 64 65 66 63 75    73 74 6f 6d 20 65 6c 6e 6f 64 65 2d 61 75 74 68 | ation.")..(defcustom.elnode-auth | 
| 2bde0 | 2d 64 62 2d 73 70 65 63 0a 20 20 65 6c 6e 6f 64    65 2d 61 75 74 68 2d 64 62 2d 73 70 65 63 2d 64 | -db-spec...elnode-auth-db-spec-d | 
| 2be00 | 65 66 61 75 6c 74 0a 20 20 22 54 68 65 20 60 64    62 27 20 73 70 65 63 69 66 69 63 61 74 69 6f 6e | efault..."The.`db'.specification | 
| 2be20 | 20 6f 66 20 77 68 65 72 65 20 74 68 65 20 61 75    74 68 20 64 62 20 69 73 2e 22 0a 20 20 3a 67 72 | .of.where.the.auth.db.is."...:gr | 
| 2be40 | 6f 75 70 20 27 65 6c 6e 6f 64 65 0a 20 20 3a 74    79 70 65 20 27 28 6c 69 73 74 20 73 79 6d 62 6f | oup.'elnode...:type.'(list.symbo | 
| 2be60 | 6c 20 73 79 6d 62 6f 6c 20 73 74 72 69 6e 67 29    29 0a 0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 | l.symbol.string))..(defvar.elnod | 
| 2be80 | 65 2d 61 75 74 68 2d 64 62 0a 20 20 28 64 62 2d    6d 61 6b 65 20 65 6c 6e 6f 64 65 2d 61 75 74 68 | e-auth-db...(db-make.elnode-auth | 
| 2bea0 | 2d 64 62 2d 73 70 65 63 29 0a 20 20 22 41 75 74    68 65 6e 74 69 63 61 74 69 6f 6e 20 64 61 74 61 | -db-spec)..."Authentication.data | 
| 2bec0 | 62 61 73 65 2e 0a 0a 54 68 69 73 20 69 73 20 74    68 65 20 64 61 74 61 20 73 74 72 75 63 74 75 72 | base...This.is.the.data.structur | 
| 2bee0 | 65 20 73 74 6f 72 69 6e 67 20 68 61 73 68 65 64    20 70 61 73 73 77 6f 72 64 73 20 61 67 61 69 6e | e.storing.hashed.passwords.again | 
| 2bf00 | 73 74 0a 75 73 65 72 6e 61 6d 65 20 6b 65 79 73    2e 0a 0a 49 74 20 69 73 20 61 6e 20 65 6c 6e 6f | st.username.keys...It.is.an.elno | 
| 2bf20 | 64 65 20 64 61 74 61 62 61 73 65 20 77 68 69 63    68 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 66 20 | de.database.which.can.be.one.of. | 
| 2bf40 | 73 65 76 65 72 61 6c 0a 69 6d 70 6c 65 6d 65 6e    74 61 74 69 6f 6e 73 2e 22 29 0a 0a 28 64 65 66 | several.implementations.")..(def | 
| 2bf60 | 76 61 72 20 65 6c 6e 6f 64 65 2d 73 65 63 72 65    74 2d 6b 65 79 20 22 73 65 63 72 65 74 22 0a 20 | var.elnode-secret-key."secret".. | 
| 2bf80 | 20 22 53 65 63 72 65 74 20 6b 65 79 20 75 73 65    64 20 74 6f 20 68 61 73 68 20 73 65 63 72 65 74 | ."Secret.key.used.to.hash.secret | 
| 2bfa0 | 73 20 6c 69 6b 65 20 70 61 73 73 77 6f 72 64 73    2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f | s.like.passwords.")..(defun.elno | 
| 2bfc0 | 64 65 2d 2d 61 75 74 68 2d 6d 61 6b 65 2d 68 61    73 68 20 28 75 73 65 72 6e 61 6d 65 20 70 61 73 | de--auth-make-hash.(username.pas | 
| 2bfe0 | 73 77 6f 72 64 29 0a 20 20 22 48 61 73 68 20 74    68 65 20 73 65 63 72 65 74 20 6b 65 79 20 61 6e | sword)..."Hash.the.secret.key.an | 
| 2c000 | 64 20 74 68 65 20 55 53 45 52 4e 41 4d 45 20 61    6e 64 20 50 41 53 53 57 4f 52 44 2e 22 0a 20 20 | d.the.USERNAME.and.PASSWORD."... | 
| 2c020 | 28 73 68 61 31 20 28 66 6f 72 6d 61 74 20 22 25    73 3a 25 73 3a 25 73 22 0a 20 20 20 20 20 20 20 | (sha1.(format."%s:%s:%s"........ | 
| 2c040 | 20 20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d    73 65 63 72 65 74 2d 6b 65 79 0a 20 20 20 20 20 | .........elnode-secret-key...... | 
| 2c060 | 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e    61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ...........username............. | 
| 2c080 | 20 20 20 20 70 61 73 73 77 6f 72 64 29 29 29 0a    0a 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d | ....password)))..(defvar.elnode- | 
| 2c0a0 | 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 64 2d 64    61 74 61 62 61 73 65 73 2d 68 69 73 74 6f 72 79 | -auth-user-add-databases-history | 
| 2c0c0 | 20 6e 69 6c 0a 20 20 22 54 68 65 20 68 69 73 74    6f 72 79 20 6f 66 20 73 79 6d 62 6f 6c 73 20 75 | .nil..."The.history.of.symbols.u | 
| 2c0e0 | 73 65 64 20 66 6f 72 20 61 75 74 68 20 64 61 74    61 62 61 73 65 73 2e 22 29 0a 0a 28 64 65 66 76 | sed.for.auth.databases.")..(defv | 
| 2c100 | 61 72 20 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d    75 73 65 72 2d 61 64 64 2d 75 73 65 72 6e 61 6d | ar.elnode--auth-user-add-usernam | 
| 2c120 | 65 2d 68 69 73 74 6f 72 79 20 6e 69 6c 0a 20 20    22 54 68 65 20 68 69 73 74 6f 72 79 20 6f 66 20 | e-history.nil..."The.history.of. | 
| 2c140 | 75 73 65 72 6e 61 6d 65 73 20 75 73 65 64 20 66    6f 72 20 61 75 74 68 20 64 61 74 61 62 61 73 65 | usernames.used.for.auth.database | 
| 2c160 | 73 2e 22 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e    6f 64 65 2d 61 75 74 68 2d 75 73 65 72 2d 61 64 | s.")..(defun.elnode-auth-user-ad | 
| 2c180 | 64 20 28 75 73 65 72 6e 61 6d 65 20 70 61 73 73    77 6f 72 64 20 26 6f 70 74 69 6f 6e 61 6c 20 61 | d.(username.password.&optional.a | 
| 2c1a0 | 75 74 68 2d 64 62 29 0a 20 20 22 43 6f 6d 6d 61    6e 64 20 74 6f 20 61 64 64 20 61 20 75 73 65 72 | uth-db)..."Command.to.add.a.user | 
| 2c1c0 | 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c    20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 | .to.the.internal.authentication. | 
| 2c1e0 | 64 61 74 61 62 61 73 65 2e 0a 0a 57 69 74 68 20    70 72 65 66 69 78 2d 61 72 67 20 61 6c 73 6f 20 | database...With.prefix-arg.also. | 
| 2c200 | 72 65 71 75 65 73 74 20 74 68 65 20 61 75 74 68    65 6e 74 69 63 61 74 69 6f 6e 20 64 61 74 61 62 | request.the.authentication.datab | 
| 2c220 | 61 73 65 20 76 61 72 69 61 62 6c 65 0a 6e 61 6d    65 2e 20 20 54 68 65 20 61 75 74 68 65 6e 74 69 | ase.variable.name...The.authenti | 
| 2c240 | 63 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20    6d 75 73 74 20 65 78 69 73 74 2e 20 20 42 79 20 | cation.database.must.exist...By. | 
| 2c260 | 64 65 66 61 75 6c 74 20 74 68 65 0a 6d 61 69 6e    20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 | default.the.main.`elnode-auth-db | 
| 2c280 | 27 20 69 73 20 75 73 65 64 2e 22 0a 20 20 28 69    6e 74 65 72 61 63 74 69 76 65 0a 20 20 20 28 6c | '.is.used."...(interactive....(l | 
| 2c2a0 | 69 73 74 20 28 72 65 61 64 2d 66 72 6f 6d 2d 6d    69 6e 69 62 75 66 66 65 72 0a 20 20 20 20 20 20 | ist.(read-from-minibuffer....... | 
| 2c2c0 | 20 20 20 20 22 75 73 65 72 6e 61 6d 65 3a 20 22    20 6e 69 6c 20 6e 69 6c 20 6e 69 6c 0a 20 20 20 | ...."username:.".nil.nil.nil.... | 
| 2c2e0 | 20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d 2d    61 75 74 68 2d 75 73 65 72 2d 61 64 64 2d 75 73 | .......'elnode--auth-user-add-us | 
| 2c300 | 65 72 6e 61 6d 65 2d 68 69 73 74 6f 72 79 29 0a    20 20 20 20 20 20 20 20 20 28 72 65 61 64 2d 70 | ername-history)..........(read-p | 
| 2c320 | 61 73 73 77 64 20 22 70 61 73 73 77 6f 72 64 3a    20 22 29 0a 20 20 20 20 20 20 20 20 20 28 77 68 | asswd."password:.")..........(wh | 
| 2c340 | 65 6e 20 63 75 72 72 65 6e 74 2d 70 72 65 66 69    78 2d 61 72 67 0a 20 20 20 20 20 20 20 20 20 20 | en.current-prefix-arg........... | 
| 2c360 | 20 28 69 6e 74 65 72 6e 0a 20 20 20 20 20 20 20    20 20 20 20 20 28 63 6f 6d 70 6c 65 74 69 6e 67 | .(intern.............(completing | 
| 2c380 | 2d 72 65 61 64 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 22 61 75 74 68 20 64 61 74 61 62 61 73 | -read.............."auth.databas | 
| 2c3a0 | 65 20 76 61 72 69 61 62 6c 65 20 28 65 6c 6e 6f    64 65 2d 61 75 74 68 2d 75 73 65 72 2d 64 62 29 | e.variable.(elnode-auth-user-db) | 
| 2c3c0 | 3a 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 6f 62 61 72 72 61 79 0a 20 20 20 20 20 20 20 | :."..............obarray........ | 
| 2c3e0 | 20 20 20 20 20 20 6e 69 6c 20 74 20 6e 69 6c 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 27 65 6c | ......nil.t.nil..............'el | 
| 2c400 | 6e 6f 64 65 2d 2d 61 75 74 68 2d 75 73 65 72 2d    61 64 64 2d 64 61 74 61 62 61 73 65 73 2d 68 69 | node--auth-user-add-databases-hi | 
| 2c420 | 73 74 6f 72 79 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d | story..............'elnode-auth- | 
| 2c440 | 64 62 29 29 29 29 29 0a 20 20 28 75 6e 6c 65 73    73 20 61 75 74 68 2d 64 62 0a 20 20 20 20 28 73 | db)))))...(unless.auth-db.....(s | 
| 2c460 | 65 74 71 20 61 75 74 68 2d 64 62 20 27 65 6c 6e    6f 64 65 2d 61 75 74 68 2d 64 62 29 29 0a 20 20 | etq.auth-db.'elnode-auth-db))... | 
| 2c480 | 28 64 62 2d 70 75 74 0a 20 20 20 75 73 65 72 6e    61 6d 65 0a 20 20 20 60 28 28 22 74 6f 6b 65 6e | (db-put....username....`(("token | 
| 2c4a0 | 22 20 2e 20 2c 28 65 6c 6e 6f 64 65 2d 2d 61 75    74 68 2d 6d 61 6b 65 2d 68 61 73 68 0a 20 20 20 | "...,(elnode--auth-make-hash.... | 
| 2c4c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75    73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 | ...............username.password | 
| 2c4e0 | 29 29 0a 20 20 20 20 20 28 22 75 73 65 72 6e 61    6d 65 22 20 2e 20 2c 75 73 65 72 6e 61 6d 65 29 | ))......("username"...,username) | 
| 2c500 | 29 0a 20 20 20 28 73 79 6d 62 6f 6c 2d 76 61 6c    75 65 20 61 75 74 68 2d 64 62 29 29 0a 20 20 28 | )....(symbol-value.auth-db))...( | 
| 2c520 | 6d 65 73 73 61 67 65 20 22 75 73 65 72 6e 61 6d    65 20 69 73 20 25 73 22 20 75 73 65 72 6e 61 6d | message."username.is.%s".usernam | 
| 2c540 | 65 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e    6f 64 65 2d 61 75 74 68 2d 75 73 65 72 2d 70 20 | e))..(defun*.elnode-auth-user-p. | 
| 2c560 | 28 75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | (username....................... | 
| 2c580 | 20 20 20 20 20 20 70 61 73 73 77 6f 72 64 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ......password.................. | 
| 2c5a0 | 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........&key................. | 
| 2c5c0 | 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68    2d 74 65 73 74 29 0a 20 20 22 44 6f 65 73 20 74 | ............auth-test)..."Does.t | 
| 2c5e0 | 68 65 20 41 55 54 48 2d 54 45 53 54 20 70 61 73    73 3f 0a 0a 54 68 65 20 70 61 73 73 77 6f 72 64 | he.AUTH-TEST.pass?..The.password | 
| 2c600 | 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68    65 20 64 62 20 68 61 73 68 65 64 20 6b 65 79 65 | .is.stored.in.the.db.hashed.keye | 
| 2c620 | 64 20 62 79 20 74 68 65 20 55 53 45 52 4e 41 4d    45 2c 0a 74 68 69 73 20 6c 6f 6f 6b 73 20 75 70 | d.by.the.USERNAME,.this.looks.up | 
| 2c640 | 20 61 6e 64 20 74 65 73 74 73 20 74 68 65 20 68    61 73 68 2e 0a 0a 54 68 65 20 41 55 54 48 2d 44 | .and.tests.the.hash...The.AUTH-D | 
| 2c660 | 42 20 69 73 20 61 6e 20 60 64 62 27 2c 20 62 79    20 64 65 66 61 75 6c 74 20 69 74 20 69 73 0a 60 | B.is.an.`db',.by.default.it.is.` | 
| 2c680 | 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 27 22    0a 20 20 28 6c 65 74 20 28 28 74 6f 6b 65 6e 20 | elnode-auth-db'"...(let.((token. | 
| 2c6a0 | 28 65 6c 6e 6f 64 65 2d 2d 61 75 74 68 2d 6d 61    6b 65 2d 68 61 73 68 20 75 73 65 72 6e 61 6d 65 | (elnode--auth-make-hash.username | 
| 2c6c0 | 20 70 61 73 73 77 6f 72 64 29 29 29 0a 20 20 20    20 28 65 71 75 61 6c 20 74 6f 6b 65 6e 20 28 66 | .password))).....(equal.token.(f | 
| 2c6e0 | 75 6e 63 61 6c 6c 20 61 75 74 68 2d 74 65 73 74    20 75 73 65 72 6e 61 6d 65 29 29 29 29 0a 0a 0a | uncall.auth-test.username))))... | 
| 2c700 | 28 64 65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 6c    6f 67 67 65 64 69 6e 2d 64 62 20 28 6d 61 6b 65 | (defvar.elnode-loggedin-db.(make | 
| 2c720 | 2d 68 61 73 68 2d 74 61 62 6c 65 20 3a 74 65 73    74 20 27 65 71 75 61 6c 29 0a 20 20 22 53 74 6f | -hash-table.:test.'equal)..."Sto | 
| 2c740 | 72 65 73 20 6c 6f 67 69 6e 73 20 2d 20 61 75 74    68 65 6e 74 69 63 61 74 69 6f 6e 20 73 65 73 73 | res.logins.-.authentication.sess | 
| 2c760 | 69 6f 6e 73 2e 0a 0a 53 65 65 20 60 65 6c 6e 6f    64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 27 20 66 | ions...See.`elnode-auth-login'.f | 
| 2c780 | 6f 72 20 68 6f 77 20 74 68 69 73 20 69 73 20 75    70 64 61 74 65 64 2e 22 29 0a 0a 0a 28 70 72 6f | or.how.this.is.updated.")...(pro | 
| 2c7a0 | 67 6e 0a 20 20 3b 3b 20 53 65 74 73 20 75 70 20    74 68 65 20 65 6c 6e 6f 64 65 20 61 75 74 68 20 | gn...;;.Sets.up.the.elnode.auth. | 
| 2c7c0 | 65 72 72 6f 72 73 0a 20 20 28 70 75 74 20 27 65    6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72 65 64 65 | errors...(put.'elnode-auth-crede | 
| 2c7e0 | 6e 74 69 61 6c 73 0a 20 20 20 20 20 20 20 27 65    72 72 6f 72 2d 63 6f 6e 64 69 74 69 6f 6e 73 0a | ntials........'error-conditions. | 
| 2c800 | 20 20 20 20 20 20 20 27 28 65 72 72 6f 72 20 65    6c 6e 6f 64 65 20 65 6c 6e 6f 64 65 2d 61 75 74 | .......'(error.elnode.elnode-aut | 
| 2c820 | 68 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 72    65 64 65 6e 74 69 61 6c 73 29 29 0a 20 20 28 70 | h.elnode-auth-credentials))...(p | 
| 2c840 | 75 74 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d    63 72 65 64 65 6e 74 69 61 6c 73 0a 20 20 20 20 | ut.'elnode-auth-credentials..... | 
| 2c860 | 20 20 20 27 65 72 72 6f 72 2d 6d 65 73 73 61 67    65 0a 20 20 20 20 20 20 20 22 45 6c 6e 6f 64 65 | ...'error-message........"Elnode | 
| 2c880 | 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20    66 61 69 6c 65 64 22 29 0a 0a 20 20 3b 3b 20 46 | .authentication.failed")....;;.F | 
| 2c8a0 | 6f 72 20 66 61 69 6c 69 6e 67 20 63 6f 6f 6b 69    65 73 0a 20 20 28 70 75 74 20 27 65 6c 6e 6f 64 | or.failing.cookies...(put.'elnod | 
| 2c8c0 | 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 0a 20 20 20    20 20 20 20 27 65 72 72 6f 72 2d 63 6f 6e 64 69 | e-auth-token........'error-condi | 
| 2c8e0 | 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 27 28 65    72 72 6f 72 20 65 6c 6e 6f 64 65 20 65 6c 6e 6f | tions........'(error.elnode.elno | 
| 2c900 | 64 65 2d 61 75 74 68 20 65 6c 6e 6f 64 65 2d 61    75 74 68 2d 74 6f 6b 65 6e 29 29 0a 20 20 28 70 | de-auth.elnode-auth-token))...(p | 
| 2c920 | 75 74 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d    74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 27 65 72 | ut.'elnode-auth-token........'er | 
| 2c940 | 72 6f 72 2d 6d 65 73 73 61 67 65 0a 20 20 20 20    20 20 20 22 45 6c 6e 6f 64 65 20 61 75 74 68 65 | ror-message........"Elnode.authe | 
| 2c960 | 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64    22 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e | ntication.failed"))..(defun*.eln | 
| 2c980 | 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 20 28    75 73 65 72 6e 61 6d 65 0a 20 20 20 20 20 20 20 | ode-auth-login.(username........ | 
| 2c9a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 70 61 73 73 77 6f 72 64 0a 20 20 20 | ....................password.... | 
| 2c9c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 | ........................&key.... | 
| 2c9e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 | ........................auth-tes | 
| 2ca00 | 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 6f | t............................(lo | 
| 2ca20 | 67 67 65 64 69 6e 2d 64 62 20 65 6c 6e 6f 64 65    2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 29 0a 20 | ggedin-db.elnode-loggedin-db)).. | 
| 2ca40 | 20 22 4c 6f 67 20 61 20 75 73 65 72 20 69 6e 2e    0a 0a 43 68 65 63 6b 20 74 68 65 20 55 53 45 52 | ."Log.a.user.in...Check.the.USER | 
| 2ca60 | 4e 41 4d 45 20 61 6e 64 20 50 41 53 53 57 4f 52    44 20 77 69 74 68 20 60 65 6c 6e 6f 64 65 2d 61 | NAME.and.PASSWORD.with.`elnode-a | 
| 2ca80 | 75 74 68 2d 75 73 65 72 2d 70 27 20 61 6e 64 0a    74 68 65 6e 20 75 70 64 61 74 65 20 60 65 6c 6e | uth-user-p'.and.then.update.`eln | 
| 2caa0 | 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 27    20 77 69 74 68 20 74 68 65 20 75 73 65 72 6e 61 | ode-loggedin-db'.with.the.userna | 
| 2cac0 | 6d 65 20 61 6e 64 20 74 68 65 20 6c 6f 67 69 6e    0a 72 65 63 6f 72 64 2e 0a 0a 54 61 6b 65 73 20 | me.and.the.login.record...Takes. | 
| 2cae0 | 6f 70 74 69 6f 6e 61 6c 20 41 55 54 48 2d 44 42    20 77 68 69 63 68 20 69 73 20 74 68 65 20 64 61 | optional.AUTH-DB.which.is.the.da | 
| 2cb00 | 74 61 62 61 73 65 20 76 61 72 69 61 62 6c 65 20    74 6f 0a 75 73 65 20 28 77 68 69 63 68 20 69 73 | tabase.variable.to.use.(which.is | 
| 2cb20 | 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62    27 20 62 79 20 64 65 66 61 75 6c 74 29 20 61 6e | .`elnode-auth-db'.by.default).an | 
| 2cb40 | 64 20 4c 4f 47 47 45 44 49 4e 2d 44 42 20 77 68    69 63 68 0a 69 73 20 74 68 65 20 6c 6f 67 67 65 | d.LOGGEDIN-DB.which.is.the.logge | 
| 2cb60 | 64 2d 69 6e 20 73 74 61 74 65 20 64 61 74 61 62    61 73 65 20 74 6f 20 75 73 65 20 61 6e 64 20 77 | d-in.state.database.to.use.and.w | 
| 2cb80 | 68 69 63 68 20 69 73 0a 60 65 6c 6e 6f 64 65 2d    6c 6f 67 67 65 64 69 6e 2d 64 62 27 20 62 79 20 | hich.is.`elnode-loggedin-db'.by. | 
| 2cba0 | 64 65 66 61 75 6c 74 2e 22 0a 20 20 3b 3b 20 46    49 58 4d 45 20 2d 20 70 61 73 73 20 69 6e 20 74 | default."...;;.FIXME.-.pass.in.t | 
| 2cbc0 | 68 65 20 74 65 73 74 20 66 75 6e 63 74 69 6f 6e    0a 20 20 28 69 66 20 28 65 6c 6e 6f 64 65 2d 61 | he.test.function...(if.(elnode-a | 
| 2cbe0 | 75 74 68 2d 75 73 65 72 2d 70 20 75 73 65 72 6e    61 6d 65 20 70 61 73 73 77 6f 72 64 20 3a 61 75 | uth-user-p.username.password.:au | 
| 2cc00 | 74 68 2d 74 65 73 74 20 61 75 74 68 2d 74 65 73    74 29 0a 20 20 20 20 20 20 28 6c 65 74 2a 20 28 | th-test.auth-test).......(let*.( | 
| 2cc20 | 28 72 6e 64 73 74 72 20 28 66 6f 72 6d 61 74 20    22 25 64 22 20 28 72 61 6e 64 6f 6d 29 29 29 0a | (rndstr.(format."%d".(random))). | 
| 2cc40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 68 61    73 68 20 28 73 68 61 31 20 28 66 6f 72 6d 61 74 | .............(hash.(sha1.(format | 
| 2cc60 | 20 22 25 73 3a 25 73 3a 25 73 22 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ."%s:%s:%s"..................... | 
| 2cc80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65    72 6e 61 6d 65 0a 20 20 20 20 20 20 20 20 20 20 | .............username........... | 
| 2cca0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 72 6e 64 73 74 72 0a 20 20 | .......................rndstr... | 
| 2ccc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 | ...............................e | 
| 2cce0 | 6c 6e 6f 64 65 2d 73 65 63 72 65 74 2d 6b 65 79    29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | lnode-secret-key)))............. | 
| 2cd00 | 20 28 75 73 65 72 2d 72 65 63 6f 72 64 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 | .(user-record...............(lis | 
| 2cd20 | 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 3a 75 73 65 72 20 75 73 65 72 6e 61 6d 65 0a | t................:user.username. | 
| 2cd40 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a    74 6f 6b 65 6e 20 72 6e 64 73 74 72 0a 20 20 20 | ...............:token.rndstr.... | 
| 2cd60 | 20 20 20 20 20 20 20 20 20 20 20 20 3a 68 61 73    68 20 68 61 73 68 29 29 29 0a 20 20 20 20 20 20 | ............:hash.hash)))....... | 
| 2cd80 | 20 20 28 70 75 74 68 61 73 68 20 75 73 65 72 6e    61 6d 65 20 75 73 65 72 2d 72 65 63 6f 72 64 20 | ..(puthash.username.user-record. | 
| 2cda0 | 6c 6f 67 67 65 64 69 6e 2d 64 62 29 0a 20 20 20    20 20 20 20 20 68 61 73 68 29 0a 20 20 20 20 20 | loggedin-db).........hash)...... | 
| 2cdc0 | 20 3b 3b 20 45 6c 73 65 20 69 74 20 77 61 73 20    62 61 64 20 73 6f 20 74 68 72 6f 77 20 61 6e 20 | .;;.Else.it.was.bad.so.throw.an. | 
| 2cde0 | 65 72 72 6f 72 2e 0a 20 20 20 20 20 20 28 73 69    67 6e 61 6c 20 27 65 6c 6e 6f 64 65 2d 61 75 74 | error........(signal.'elnode-aut | 
| 2ce00 | 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 20 28 6c    69 73 74 20 75 73 65 72 6e 61 6d 65 20 70 61 73 | h-credentials.(list.username.pas | 
| 2ce20 | 73 77 6f 72 64 29 29 29 29 0a 0a 28 64 65 66 75    6e 2a 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 | sword))))..(defun*.elnode-auth-c | 
| 2ce40 | 68 65 63 6b 2d 70 20 28 75 73 65 72 6e 61 6d 65    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | heck-p.(username................ | 
| 2ce60 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f    6b 65 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ..............token............. | 
| 2ce80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 26 6b 65 79 0a 20 20 20 20 20 20 20 20 20 20 | .................&key........... | 
| 2cea0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 | ...................(loggedin-db. | 
| 2cec0 | 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d    64 62 29 29 0a 20 20 22 43 68 65 63 6b 20 6c 6f | elnode-loggedin-db))..."Check.lo | 
| 2cee0 | 67 69 6e 20 73 74 61 74 75 73 20 6f 66 20 74 68    65 20 55 53 45 52 4e 41 4d 45 20 61 67 61 69 6e | gin.status.of.the.USERNAME.again | 
| 2cf00 | 73 74 20 74 68 65 20 68 61 73 68 65 64 20 54 4f    4b 45 4e 2e 0a 0a 4f 70 74 69 6f 6e 61 6c 6c 79 | st.the.hashed.TOKEN...Optionally | 
| 2cf20 | 20 75 73 65 20 74 68 65 20 4c 4f 47 47 45 44 49    4e 2d 44 42 20 73 75 70 70 6c 69 65 64 2e 20 20 | .use.the.LOGGEDIN-DB.supplied... | 
| 2cf40 | 42 79 20 64 65 66 61 75 6c 74 20 74 68 69 73 20    69 73 0a 60 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 | By.default.this.is.`elnode-logge | 
| 2cf60 | 64 69 6e 2d 64 62 27 2e 22 0a 20 20 28 6c 65 74    20 28 28 72 65 63 6f 72 64 20 28 67 65 74 68 61 | din-db'."...(let.((record.(getha | 
| 2cf80 | 73 68 20 75 73 65 72 6e 61 6d 65 20 6c 6f 67 67    65 64 69 6e 2d 64 62 29 29 29 0a 20 20 20 20 28 | sh.username.loggedin-db))).....( | 
| 2cfa0 | 65 71 75 61 6c 20 74 6f 6b 65 6e 20 28 70 6c 69    73 74 2d 67 65 74 20 72 65 63 6f 72 64 20 3a 68 | equal.token.(plist-get.record.:h | 
| 2cfc0 | 61 73 68 29 29 29 29 0a 0a 28 64 65 66 75 6e 20    65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b | ash))))..(defun.elnode-auth-cook | 
| 2cfe0 | 69 65 2d 64 65 63 6f 64 65 20 28 63 6f 6f 6b 69    65 2d 76 61 6c 75 65 29 0a 20 20 22 44 65 63 6f | ie-decode.(cookie-value)..."Deco | 
| 2d000 | 64 65 20 61 6e 20 65 6e 63 6f 64 65 64 20 65 6c    6e 6f 64 65 20 61 75 74 68 20 43 4f 4f 4b 49 45 | de.an.encoded.elnode.auth.COOKIE | 
| 2d020 | 2d 56 41 4c 55 45 2e 22 0a 20 20 28 77 68 65 6e    20 28 73 74 72 69 6e 67 2d 6d 61 74 63 68 20 22 | -VALUE."...(when.(string-match." | 
| 2d040 | 5c 5c 28 2e 2a 5c 5c 29 3a 3a 5c 5c 28 2e 2a 5c    5c 29 22 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 | \\(.*\\)::\\(.*\\)".cookie-value | 
| 2d060 | 29 0a 20 20 20 20 28 63 6f 6e 73 20 28 6d 61 74    63 68 2d 73 74 72 69 6e 67 20 31 20 63 6f 6f 6b | ).....(cons.(match-string.1.cook | 
| 2d080 | 69 65 2d 76 61 6c 75 65 29 0a 20 20 20 20 20 20    20 20 20 20 28 6d 61 74 63 68 2d 73 74 72 69 6e | ie-value)...........(match-strin | 
| 2d0a0 | 67 20 32 20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65    29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c | g.2.cookie-value))))..(defun*.el | 
| 2d0c0 | 6e 6f 64 65 2d 61 75 74 68 2d 67 65 74 2d 63 6f    6f 6b 69 65 2d 76 61 6c 75 65 20 28 68 74 74 70 | node-auth-get-cookie-value.(http | 
| 2d0e0 | 63 6f 6e 20 26 6b 65 79 20 28 63 6f 6f 6b 69 65    2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 2d 61 75 | con.&key.(cookie-name."elnode-au | 
| 2d100 | 74 68 22 29 29 0a 20 20 22 52 65 74 75 72 6e 20    74 68 65 20 64 65 63 6f 64 65 64 20 76 61 6c 75 | th"))..."Return.the.decoded.valu | 
| 2d120 | 65 20 66 6f 72 20 43 4f 4f 4b 49 45 2d 4e 41 4d    45 2e 0a 0a 42 79 20 64 65 66 61 75 6c 74 20 69 | e.for.COOKIE-NAME...By.default.i | 
| 2d140 | 74 27 73 20 5c 22 65 6c 6e 6f 64 65 2d 61 75 74    68 5c 22 20 62 75 74 20 79 6f 75 20 73 68 6f 75 | t's.\"elnode-auth\".but.you.shou | 
| 2d160 | 6c 64 20 75 73 65 20 77 68 61 74 65 76 65 72 0a    63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 79 6f 75 27 | ld.use.whatever.cookie-name.you' | 
| 2d180 | 72 65 20 75 73 69 6e 67 20 66 6f 72 20 79 6f 75    72 20 61 70 70 2e 22 0a 20 20 28 6c 65 74 2a 20 | re.using.for.your.app."...(let*. | 
| 2d1a0 | 28 28 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 20 28    65 6c 6e 6f 64 65 2d 68 74 74 70 2d 63 6f 6f 6b | ((cookie-value.(elnode-http-cook | 
| 2d1c0 | 69 65 20 68 74 74 70 63 6f 6e 20 63 6f 6f 6b 69    65 2d 6e 61 6d 65 20 74 29 29 0a 20 20 20 20 20 | ie.httpcon.cookie-name.t))...... | 
| 2d1e0 | 20 20 20 20 28 64 65 63 6f 64 65 64 2d 63 6f 6e    73 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 | ....(decoded-cons.(elnode-auth-c | 
| 2d200 | 6f 6f 6b 69 65 2d 64 65 63 6f 64 65 20 28 6f 72    20 63 6f 6f 6b 69 65 2d 76 61 6c 75 65 20 22 22 | ookie-decode.(or.cookie-value."" | 
| 2d220 | 29 29 29 29 0a 20 20 20 20 64 65 63 6f 64 65 64    2d 63 6f 6e 73 29 29 0a 0a 28 64 65 66 75 6e 2a | )))).....decoded-cons))..(defun* | 
| 2d240 | 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f    6b 69 65 2d 63 68 65 63 6b 2d 70 20 28 68 74 74 | .elnode-auth-cookie-check-p.(htt | 
| 2d260 | 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | pcon............................ | 
| 2d280 | 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .........&key................... | 
| 2d2a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 | ..................(cookie-name." | 
| 2d2c0 | 65 6c 6e 6f 64 65 2d 61 75 74 68 22 29 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | elnode-auth")................... | 
| 2d2e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 65 | ..................(loggedin-db.e | 
| 2d300 | 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64    62 29 29 0a 20 20 22 43 68 65 63 6b 20 74 68 61 | lnode-loggedin-db))..."Check.tha | 
| 2d320 | 74 20 74 68 65 20 75 73 65 72 20 69 73 20 6c 6f    67 67 65 64 69 6e 20 61 63 63 6f 72 64 69 6e 67 | t.the.user.is.loggedin.according | 
| 2d340 | 20 74 6f 20 74 68 65 20 63 6f 6f 6b 69 65 2e 0a    0a 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 | .to.the.cookie...The.name.of.the | 
| 2d360 | 20 63 6f 6f 6b 69 65 20 63 61 6e 20 62 65 20 73    75 70 70 6c 69 65 64 20 77 69 74 68 20 3a 43 4f | .cookie.can.be.supplied.with.:CO | 
| 2d380 | 4f 4b 49 45 2d 4e 41 4d 45 20 2d 20 62 79 0a 64    65 66 61 75 6c 74 20 69 73 20 69 73 20 5c 22 65 | OKIE-NAME.-.by.default.is.is.\"e | 
| 2d3a0 | 6c 6e 6f 64 65 2d 61 75 74 68 5c 22 2e 0a 0a 4c    4f 47 47 45 44 49 4e 2d 44 42 20 63 61 6e 20 62 | lnode-auth\"...LOGGEDIN-DB.can.b | 
| 2d3c0 | 65 20 61 20 6c 6f 67 67 65 64 69 6e 20 73 74 61    74 65 20 64 61 74 61 62 61 73 65 20 77 68 69 63 | e.a.loggedin.state.database.whic | 
| 2d3e0 | 68 20 69 73 20 65 78 70 65 63 74 65 64 20 74 6f    0a 62 65 20 61 20 60 64 62 27 2e 20 20 42 79 20 | h.is.expected.to.be.a.`db'...By. | 
| 2d400 | 64 65 66 61 75 6c 74 20 69 74 20 69 73 20 60 65    6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 | default.it.is.`elnode-loggedin-d | 
| 2d420 | 62 27 2e 22 0a 20 20 28 6c 65 74 20 28 28 63 6f    6f 6b 69 65 2d 63 6f 6e 73 20 28 65 6c 6e 6f 64 | b'."...(let.((cookie-cons.(elnod | 
| 2d440 | 65 2d 61 75 74 68 2d 67 65 74 2d 63 6f 6f 6b 69    65 2d 76 61 6c 75 65 0a 20 20 20 20 20 20 20 20 | e-auth-get-cookie-value......... | 
| 2d460 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 74    74 70 63 6f 6e 20 3a 63 6f 6f 6b 69 65 2d 6e 61 | ..............httpcon.:cookie-na | 
| 2d480 | 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 29    29 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 63 | me.cookie-name))).....(if.(not.c | 
| 2d4a0 | 6f 6f 6b 69 65 2d 63 6f 6e 73 29 0a 20 20 20 20    20 20 20 20 28 73 69 67 6e 61 6c 20 27 65 6c 6e | ookie-cons).........(signal.'eln | 
| 2d4c0 | 6f 64 65 2d 61 75 74 68 2d 74 6f 6b 65 6e 20 63    6f 6f 6b 69 65 2d 6e 61 6d 65 29 0a 20 20 20 20 | ode-auth-token.cookie-name)..... | 
| 2d4e0 | 20 20 20 20 28 6c 65 74 20 28 28 75 73 65 72 6e    61 6d 65 20 28 63 61 72 20 63 6f 6f 6b 69 65 2d | ....(let.((username.(car.cookie- | 
| 2d500 | 63 6f 6e 73 29 29 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 74 6f 6b 65 6e 20 28 63 64 72 | cons))...............(token.(cdr | 
| 2d520 | 20 63 6f 6f 6b 69 65 2d 63 6f 6e 73 29 29 29 0a    20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 | .cookie-cons)))...........(elnod | 
| 2d540 | 65 2d 61 75 74 68 2d 63 68 65 63 6b 2d 70 0a 20    20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e 61 | e-auth-check-p............userna | 
| 2d560 | 6d 65 20 74 6f 6b 65 6e 20 3a 6c 6f 67 67 65 64    69 6e 2d 64 62 20 6c 6f 67 67 65 64 69 6e 2d 64 | me.token.:loggedin-db.loggedin-d | 
| 2d580 | 62 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20    65 6c 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b | b)))))..(defun*.elnode-auth-cook | 
| 2d5a0 | 69 65 2d 63 68 65 63 6b 20 28 68 74 74 70 63 6f    6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ie-check.(httpcon............... | 
| 2d5c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 26 6b 65 79 0a 20 20 20 20 20 20 20 | ....................&key........ | 
| 2d5e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6f 6b | ...........................(cook | 
| 2d600 | 69 65 2d 6e 61 6d 65 20 22 65 6c 6e 6f 64 65 2d    61 75 74 68 22 29 0a 20 20 20 20 20 20 20 20 20 | ie-name."elnode-auth").......... | 
| 2d620 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64 | .........................(logged | 
| 2d640 | 69 6e 2d 64 62 20 65 6c 6e 6f 64 65 2d 6c 6f 67    67 65 64 69 6e 2d 64 62 29 29 0a 20 20 22 53 69 | in-db.elnode-loggedin-db))..."Si | 
| 2d660 | 67 6e 61 6c 20 6f 6e 20 63 6f 6f 6b 69 65 20 66    61 69 6c 75 72 65 2e 0a 0a 53 65 65 20 60 65 6c | gnal.on.cookie.failure...See.`el | 
| 2d680 | 6e 6f 64 65 2d 61 75 74 68 2d 63 6f 6f 6b 69 65    2d 63 68 65 63 6b 2d 70 27 20 66 6f 72 20 6d 6f | node-auth-cookie-check-p'.for.mo | 
| 2d6a0 | 72 65 20 64 65 74 61 69 6c 73 2e 22 0a 20 20 28    75 6e 6c 65 73 73 20 28 65 6c 6e 6f 64 65 2d 61 | re.details."...(unless.(elnode-a | 
| 2d6c0 | 75 74 68 2d 63 6f 6f 6b 69 65 2d 63 68 65 63 6b    2d 70 0a 20 20 20 20 20 20 20 20 20 20 20 68 74 | uth-cookie-check-p............ht | 
| 2d6e0 | 74 70 63 6f 6e 0a 20 20 20 20 20 20 20 20 20 20    20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 63 6f | tpcon............:cookie-name.co | 
| 2d700 | 6f 6b 69 65 2d 6e 61 6d 65 0a 20 20 20 20 20 20    20 20 20 20 20 3a 6c 6f 67 67 65 64 69 6e 2d 64 | okie-name............:loggedin-d | 
| 2d720 | 62 20 6c 6f 67 67 65 64 69 6e 2d 64 62 29 0a 20    20 20 20 3b 3b 20 4e 6f 74 20 73 75 72 65 20 74 | b.loggedin-db).....;;.Not.sure.t | 
| 2d740 | 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 72 65    63 74 20 74 6f 6b 65 6e 2e 2e 2e 0a 20 20 20 20 | his.is.the.correct.token........ | 
| 2d760 | 28 73 69 67 6e 61 6c 20 27 65 6c 6e 6f 64 65 2d    61 75 74 68 2d 74 6f 6b 65 6e 20 3a 6e 6f 74 2d | (signal.'elnode-auth-token.:not- | 
| 2d780 | 6c 6f 67 67 65 64 2d 69 6e 29 29 29 0a 0a 28 64    65 66 76 61 72 20 65 6c 6e 6f 64 65 2d 61 75 74 | logged-in)))..(defvar.elnode-aut | 
| 2d7a0 | 68 2d 68 74 74 70 63 6f 6e 20 6e 69 6c 0a 20 20    22 44 79 6e 61 6d 69 63 20 73 63 6f 70 65 20 76 | h-httpcon.nil..."Dynamic.scope.v | 
| 2d7c0 | 61 72 69 61 62 6c 65 20 66 6f 72 20 48 54 54 50    20 63 6f 6e 20 77 68 69 6c 65 20 77 65 20 61 75 | ariable.for.HTTP.con.while.we.au | 
| 2d7e0 | 74 68 2e 22 29 0a 0a 28 64 65 66 75 6e 2a 20 65    6c 6e 6f 64 65 2d 61 75 74 68 2d 68 74 74 70 2d | th.")..(defun*.elnode-auth-http- | 
| 2d800 | 6c 6f 67 69 6e 20 28 68 74 74 70 63 6f 6e 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | login.(httpcon.................. | 
| 2d820 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75    73 65 72 6e 61 6d 65 20 70 61 73 73 77 6f 72 64 | ...............username.password | 
| 2d840 | 20 6c 6f 67 67 65 64 2d 69 6e 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .logged-in...................... | 
| 2d860 | 20 20 20 20 20 20 20 20 20 20 20 26 6b 65 79 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........&key................. | 
| 2d880 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65 6c | ................(cookie-name."el | 
| 2d8a0 | 6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | nodeauth")...................... | 
| 2d8c0 | 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d    74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 | ...........auth-test............ | 
| 2d8e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 | .....................(loggedin-d | 
| 2d900 | 62 20 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69    6e 2d 64 62 29 29 0a 20 20 22 4c 6f 67 20 74 68 | b.elnode-loggedin-db))..."Log.th | 
| 2d920 | 65 20 55 53 45 52 4e 41 4d 45 20 69 6e 20 6f 6e    20 74 68 65 20 48 54 54 50 43 4f 4e 20 69 66 20 | e.USERNAME.in.on.the.HTTPCON.if. | 
| 2d940 | 50 41 53 53 57 4f 52 44 20 69 73 20 63 6f 72 72    65 63 74 2e 0a 0a 49 66 20 61 75 74 68 65 6e 74 | PASSWORD.is.correct...If.authent | 
| 2d960 | 69 63 61 74 69 6f 6e 20 73 75 63 63 65 65 64 73    20 73 65 74 20 74 68 65 20 72 65 6c 65 76 61 6e | ication.succeeds.set.the.relevan | 
| 2d980 | 74 20 63 6f 6f 6b 69 65 20 61 6e 64 20 72 65 64    69 72 65 63 74 0a 74 68 65 20 75 73 65 72 20 74 | t.cookie.and.redirect.the.user.t | 
| 2d9a0 | 6f 20 4c 4f 47 47 45 44 2d 49 4e 2e 0a 0a 41 63    74 75 61 6c 6c 79 20 75 73 65 73 20 60 65 6c 6e | o.LOGGED-IN...Actually.uses.`eln | 
| 2d9c0 | 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 6e 27 20    74 6f 20 64 6f 20 74 68 65 20 61 73 73 65 72 74 | ode-auth-login'.to.do.the.assert | 
| 2d9e0 | 69 6f 6e 2e 0a 60 65 6c 6e 6f 64 65 2d 61 75 74    68 2d 63 72 65 64 65 6e 74 69 61 6c 73 27 20 69 | ion..`elnode-auth-credentials'.i | 
| 2da00 | 73 20 73 69 67 6e 61 6c 65 64 20 62 79 20 74 68    61 74 20 69 66 20 74 68 65 20 61 73 73 65 72 74 | s.signaled.by.that.if.the.assert | 
| 2da20 | 69 6f 6e 20 66 61 69 6c 73 2e 0a 0a 41 55 54 48    2d 44 42 20 69 73 20 61 20 64 61 74 61 62 61 73 | ion.fails...AUTH-DB.is.a.databas | 
| 2da40 | 65 2c 20 62 79 20 64 65 66 61 75 6c 74 20 60 65    6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 27 2c 20 | e,.by.default.`elnode-auth-db',. | 
| 2da60 | 69 74 27 73 20 70 61 73 73 65 64 0a 74 6f 20 60    65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69 | it's.passed.to.`elnode-auth-logi | 
| 2da80 | 6e 27 2e 22 0a 20 20 28 6c 65 74 2a 20 28 28 65    6c 6e 6f 64 65 2d 61 75 74 68 2d 68 74 74 70 63 | n'."...(let*.((elnode-auth-httpc | 
| 2daa0 | 6f 6e 20 68 74 74 70 63 6f 6e 29 0a 20 20 20 20    20 20 20 20 20 28 68 61 73 68 0a 20 20 20 20 20 | on.httpcon)..........(hash...... | 
| 2dac0 | 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74    68 2d 6c 6f 67 69 6e 0a 20 20 20 20 20 20 20 20 | .....(elnode-auth-login......... | 
| 2dae0 | 20 20 20 75 73 65 72 6e 61 6d 65 20 70 61 73 73    77 6f 72 64 0a 20 20 20 20 20 20 20 20 20 20 20 | ...username.password............ | 
| 2db00 | 3a 61 75 74 68 2d 74 65 73 74 20 61 75 74 68 2d    74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 | :auth-test.auth-test............ | 
| 2db20 | 3a 6c 6f 67 67 65 64 69 6e 2d 64 62 20 6c 6f 67    67 65 64 69 6e 2d 64 62 29 29 29 0a 20 20 20 20 | :loggedin-db.loggedin-db)))..... | 
| 2db40 | 28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 68 65 61    64 65 72 2d 73 65 74 0a 20 20 20 20 20 68 74 74 | (elnode-http-header-set......htt | 
| 2db60 | 70 63 6f 6e 0a 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 68 74 74 70 2d 63 6f 6f 6b 69 65 2d 6d 61 | pcon......(elnode-http-cookie-ma | 
| 2db80 | 6b 65 0a 20 20 20 20 20 20 63 6f 6f 6b 69 65 2d    6e 61 6d 65 0a 20 20 20 20 20 20 28 66 6f 72 6d | ke.......cookie-name.......(form | 
| 2dba0 | 61 74 20 22 25 73 3a 3a 25 73 22 20 75 73 65 72    6e 61 6d 65 20 68 61 73 68 29 0a 20 20 20 20 20 | at."%s::%s".username.hash)...... | 
| 2dbc0 | 20 3a 70 61 74 68 20 22 2f 22 29 29 0a 20 20 20    20 28 65 6c 6e 6f 64 65 2d 73 65 6e 64 2d 72 65 | .:path."/")).....(elnode-send-re | 
| 2dbe0 | 64 69 72 65 63 74 20 68 74 74 70 63 6f 6e 20 28    6f 72 20 6c 6f 67 67 65 64 2d 69 6e 20 22 2f 22 | direct.httpcon.(or.logged-in."/" | 
| 2dc00 | 29 29 29 29 0a 0a 28 64 65 66 63 75 73 74 6f 6d    20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 | ))))..(defcustom.elnode-auth-log | 
| 2dc20 | 69 6e 2d 70 61 67 65 20 22 3c 68 74 6d 6c 3e 0a    3c 62 6f 64 79 3e 0a 3c 66 6f 72 6d 20 6d 65 74 | in-page."<html>.<body>.<form.met | 
| 2dc40 | 68 6f 64 3d 27 50 4f 53 54 27 20 61 63 74 69 6f    6e 3d 27 3c 21 23 23 45 20 74 61 72 67 65 74 20 | hod='POST'.action='<!##E.target. | 
| 2dc60 | 45 23 23 21 3e 27 3e 0a 3c 69 6e 70 75 74 20 74    79 70 65 3d 27 68 69 64 64 65 6e 27 20 6e 61 6d | E##!>'>.<input.type='hidden'.nam | 
| 2dc80 | 65 3d 27 72 65 64 69 72 65 63 74 27 20 76 61 6c    75 65 3d 27 3c 21 23 23 45 20 72 65 64 69 72 65 | e='redirect'.value='<!##E.redire | 
| 2dca0 | 63 74 20 45 23 23 21 3e 27 2f 3e 0a 75 73 65 72    6e 61 6d 65 3a 20 3c 69 6e 70 75 74 20 74 79 70 | ct.E##!>'/>.username:.<input.typ | 
| 2dcc0 | 65 3d 27 74 65 78 74 27 20 6e 61 6d 65 3d 27 75    73 65 72 6e 61 6d 65 27 2f 3e 3c 62 72 2f 3e 0a | e='text'.name='username'/><br/>. | 
| 2dce0 | 70 61 73 73 77 6f 72 64 3a 20 3c 69 6e 70 75 74    20 74 79 70 65 3d 27 70 61 73 73 77 6f 72 64 27 | password:.<input.type='password' | 
| 2dd00 | 20 6e 61 6d 65 3d 27 70 61 73 73 77 6f 72 64 27    2f 3e 3c 62 72 2f 3e 0a 3c 69 6e 70 75 74 20 74 | .name='password'/><br/>.<input.t | 
| 2dd20 | 79 70 65 3d 27 73 75 62 6d 69 74 27 20 6e 61 6d    65 3d 27 6c 6f 67 69 6e 27 2f 3e 0a 3c 2f 66 6f | ype='submit'.name='login'/>.</fo | 
| 2dd40 | 72 6d 3e 0a 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74    6d 6c 3e 22 0a 20 20 22 41 20 73 74 61 6e 64 61 | rm>.</body>.</html>"..."A.standa | 
| 2dd60 | 72 64 20 6c 6f 67 69 6e 20 70 61 67 65 2c 20 75    73 65 64 20 62 79 20 60 65 6c 6e 6f 64 65 2d 61 | rd.login.page,.used.by.`elnode-a | 
| 2dd80 | 75 74 68 2d 6c 6f 67 69 6e 2d 73 65 6e 64 65 72    27 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c | uth-login-sender'."...:group.'el | 
| 2dda0 | 6e 6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 73    74 72 69 6e 67 29 29 0a 0a 28 64 65 66 75 6e 20 | node...:type.'(string))..(defun. | 
| 2ddc0 | 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c 6f 67 69    6e 2d 73 65 6e 64 65 72 20 28 68 74 74 70 63 6f | elnode-auth-login-sender.(httpco | 
| 2dde0 | 6e 20 74 61 72 67 65 74 20 72 65 64 69 72 65 63    74 29 0a 20 20 22 53 65 6e 64 20 74 68 65 20 6c | n.target.redirect)..."Send.the.l | 
| 2de00 | 6f 67 69 6e 20 70 61 67 65 20 66 6f 72 20 61 75    74 68 20 74 6f 20 48 54 54 50 43 4f 4e 2e 0a 0a | ogin.page.for.auth.to.HTTPCON... | 
| 2de20 | 54 68 65 20 6c 6f 67 69 6e 20 70 61 67 65 20 77    69 6c 6c 20 73 65 6e 64 20 69 74 73 20 61 75 74 | The.login.page.will.send.its.aut | 
| 2de40 | 68 65 6e 74 69 63 61 74 69 6f 6e 20 72 65 71 75    65 73 74 20 74 6f 20 54 41 52 47 45 54 2e 0a 0a | hentication.request.to.TARGET... | 
| 2de60 | 54 68 65 20 61 75 74 68 65 6e 74 69 63 61 74 69    6f 6e 20 77 69 6c 6c 20 69 6e 63 6c 75 64 65 20 | The.authentication.will.include. | 
| 2de80 | 75 73 65 72 6e 61 6d 65 2c 20 70 61 73 73 77 6f    72 64 20 41 4e 44 20 52 45 44 49 52 45 43 54 2c | username,.password.AND.REDIRECT, | 
| 2dea0 | 0a 77 68 69 63 68 20 69 73 20 74 68 65 20 55 52    4c 20 74 6f 20 72 65 64 69 72 65 63 74 20 74 6f | .which.is.the.URL.to.redirect.to | 
| 2dec0 | 20 77 68 65 6e 20 6c 6f 67 69 6e 20 69 73 20 73    75 63 63 65 73 73 66 75 6c 2e 0a 0a 54 68 69 73 | .when.login.is.successful...This | 
| 2dee0 | 20 66 75 6e 63 74 69 6f 6e 20 73 65 6e 64 73 20    74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 | .function.sends.the.contents.of. | 
| 2df00 | 74 68 65 20 63 75 73 74 6f 6d 20 76 61 72 69 61    62 6c 65 0a 60 65 6c 6e 6f 64 65 2d 61 75 74 68 | the.custom.variable.`elnode-auth | 
| 2df20 | 2d 6c 6f 67 69 6e 2d 70 61 67 65 27 20 61 66 74    65 72 20 74 65 6d 70 6c 61 74 69 6e 67 20 69 74 | -login-page'.after.templating.it | 
| 2df40 | 2e 22 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74    70 2d 73 74 61 72 74 20 68 74 74 70 63 6f 6e 20 | ."...(elnode-http-start.httpcon. | 
| 2df60 | 32 30 30 20 60 28 22 43 6f 6e 74 65 6e 74 2d 74    79 70 65 22 20 2e 20 22 74 65 78 74 2f 68 74 6d | 200.`("Content-type"..."text/htm | 
| 2df80 | 6c 22 29 29 0a 20 20 3b 3b 20 49 74 20 77 6f 75    6c 64 20 62 65 20 6e 69 63 65 20 74 6f 20 73 75 | l"))...;;.It.would.be.nice.to.su | 
| 2dfa0 | 70 70 6f 72 74 20 70 72 65 61 6d 62 6c 65 73 2e    2e 2e 20 6e 6f 74 20 73 75 72 65 20 68 6f 77 2e | pport.preambles....not.sure.how. | 
| 2dfc0 | 0a 20 20 3b 3b 20 20 28 77 68 65 6e 20 70 72 65    61 6d 62 6c 65 20 28 65 6c 6e 6f 64 65 2d 68 74 | ...;;..(when.preamble.(elnode-ht | 
| 2dfe0 | 74 70 2d 73 65 6e 64 2d 73 74 72 69 6e 67 20 68    74 74 70 63 6f 6e 20 70 72 65 61 6d 62 6c 65 29 | tp-send-string.httpcon.preamble) | 
| 2e000 | 29 0a 20 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70    2d 72 65 74 75 72 6e 0a 20 20 20 68 74 74 70 63 | )...(elnode-http-return....httpc | 
| 2e020 | 6f 6e 0a 20 20 20 28 77 69 74 68 2d 74 65 6d 70    2d 62 75 66 66 65 72 0a 20 20 20 20 20 28 69 6e | on....(with-temp-buffer......(in | 
| 2e040 | 73 65 72 74 20 65 6c 6e 6f 64 65 2d 61 75 74 68    2d 6c 6f 67 69 6e 2d 70 61 67 65 29 0a 20 20 20 | sert.elnode-auth-login-page).... | 
| 2e060 | 20 20 28 65 6c 6e 6f 64 65 2d 2d 62 75 66 66 65    72 2d 74 65 6d 70 6c 61 74 65 0a 20 20 20 20 20 | ..(elnode--buffer-template...... | 
| 2e080 | 20 28 63 75 72 72 65 6e 74 2d 62 75 66 66 65 72    29 0a 20 20 20 20 20 20 60 28 28 22 74 61 72 67 | .(current-buffer).......`(("targ | 
| 2e0a0 | 65 74 22 20 2e 20 2c 74 61 72 67 65 74 29 0a 20    20 20 20 20 20 20 20 28 22 72 65 64 69 72 65 63 | et"...,target).........("redirec | 
| 2e0c0 | 74 22 20 2e 20 2c 72 65 64 69 72 65 63 74 29 29    29 29 29 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c | t"...,redirect))))))..(defun*.el | 
| 2e0e0 | 6e 6f 64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e    2d 68 61 6e 64 6c 65 72 20 28 68 74 74 70 63 6f | node-auth--login-handler.(httpco | 
| 2e100 | 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | n............................... | 
| 2e120 | 20 20 20 20 20 20 73 65 6e 64 65 72 20 74 61 72    67 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ......sender.target............. | 
| 2e140 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20 | ........................&key.... | 
| 2e160 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 2e180 | 20 61 75 74 68 2d 74 65 73 74 20 3b 20 61 73 73    65 72 74 20 6e 6f 74 20 6e 69 6c 3f 0a 20 20 20 | .auth-test.;.assert.not.nil?.... | 
| 2e1a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 2e1c0 | 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65    6c 6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 | .(cookie-name."elnodeauth")..... | 
| 2e1e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ................................ | 
| 2e200 | 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 65 6c 6e    6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d 64 62 29 | (loggedin-db.elnode-loggedin-db) | 
| 2e220 | 29 0a 20 20 22 54 68 65 20 69 6d 70 6c 65 6d 65    6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c | )..."The.implementation.of.the.l | 
| 2e240 | 6f 67 69 6e 20 68 61 6e 64 6c 65 72 20 66 6f 72    20 61 75 74 68 20 74 65 73 74 69 6e 67 2e 0a 0a | ogin.handler.for.auth.testing... | 
| 2e260 | 54 68 69 73 20 69 73 20 74 68 65 20 68 61 6e 64    6c 65 72 20 74 68 61 74 20 69 73 20 6d 61 70 70 | This.is.the.handler.that.is.mapp | 
| 2e280 | 65 64 20 74 6f 20 2f 6c 6f 67 69 6e 2f 20 28 77    68 69 63 68 20 69 73 20 74 68 65 0a 64 65 66 61 | ed.to./login/.(which.is.the.defa | 
| 2e2a0 | 75 6c 74 20 6c 6f 67 69 6e 20 70 61 74 68 29 20    6f 72 20 77 68 61 74 65 76 65 72 20 79 6f 75 20 | ult.login.path).or.whatever.you. | 
| 2e2c0 | 77 61 6e 74 20 74 68 65 20 6c 6f 67 69 6e 20 70    61 74 68 20 74 6f 20 62 65 2e 0a 0a 53 45 4e 44 | want.the.login.path.to.be...SEND | 
| 2e2e0 | 45 52 20 69 73 20 74 68 65 20 66 75 6e 63 74 69    6f 6e 20 77 68 69 63 68 20 77 69 6c 6c 20 73 65 | ER.is.the.function.which.will.se | 
| 2e300 | 6e 64 20 74 68 65 20 6c 6f 67 69 6e 20 70 61 67    65 20 74 6f 20 74 68 65 0a 75 73 65 72 2c 20 69 | nd.the.login.page.to.the.user,.i | 
| 2e320 | 74 20 74 61 6b 65 73 20 61 6e 20 48 54 54 50 43    4f 4e 2e 20 20 49 74 20 6d 75 73 74 20 73 65 6e | t.takes.an.HTTPCON...It.must.sen | 
| 2e340 | 64 20 61 20 27 75 73 65 72 6e 61 6d 65 27 20 61    6e 64 0a 27 70 61 73 73 77 6f 72 64 27 20 48 54 | d.a.'username'.and.'password'.HT | 
| 2e360 | 54 50 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f    20 74 68 69 73 20 68 61 6e 64 6c 65 72 2e 0a 0a | TP.parameters.to.this.handler... | 
| 2e380 | 54 41 52 47 45 54 20 69 73 20 74 68 65 20 70 61    74 68 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 | TARGET.is.the.path.that.will.be. | 
| 2e3a0 | 75 73 65 64 20 61 73 20 74 68 65 20 6c 6f 67 69    6e 20 68 61 6e 64 6c 65 72 0a 70 61 74 68 20 28 | used.as.the.login.handler.path.( | 
| 2e3c0 | 74 68 65 20 70 61 74 68 20 74 6f 20 63 61 6c 6c    20 74 68 69 73 20 68 61 6e 64 6c 65 72 29 2e 22 | the.path.to.call.this.handler)." | 
| 2e3e0 | 0a 20 20 28 65 6c 6e 6f 64 65 2d 6d 65 74 68 6f    64 20 68 74 74 70 63 6f 6e 0a 20 20 20 20 20 20 | ...(elnode-method.httpcon....... | 
| 2e400 | 28 47 45 54 0a 20 20 20 20 20 20 20 28 6c 65 74    20 28 28 74 6f 20 28 6f 72 0a 20 20 20 20 20 20 | (GET........(let.((to.(or....... | 
| 2e420 | 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e    6f 64 65 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 | ............(elnode-http-param.h | 
| 2e440 | 74 74 70 63 6f 6e 20 22 72 65 64 69 72 65 63 74    22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ttpcon."redirect").............. | 
| 2e460 | 20 20 20 20 20 22 2f 22 29 29 29 0a 20 20 20 20    20 20 20 20 20 28 66 75 6e 63 61 6c 6c 20 73 65 | ....."/")))..........(funcall.se | 
| 2e480 | 6e 64 65 72 20 68 74 74 70 63 6f 6e 20 74 61 72    67 65 74 20 74 6f 29 29 29 0a 20 20 20 20 28 50 | nder.httpcon.target.to))).....(P | 
| 2e4a0 | 4f 53 54 0a 20 20 20 20 20 28 6c 65 74 20 28 28    75 73 65 72 6e 61 6d 65 20 28 65 6c 6e 6f 64 65 | OST......(let.((username.(elnode | 
| 2e4c0 | 2d 68 74 74 70 2d 70 61 72 61 6d 20 68 74 74 70    63 6f 6e 20 22 75 73 65 72 6e 61 6d 65 22 29 29 | -http-param.httpcon."username")) | 
| 2e4e0 | 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 61 73    73 77 6f 72 64 20 28 65 6c 6e 6f 64 65 2d 68 74 | ............(password.(elnode-ht | 
| 2e500 | 74 70 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e    20 22 70 61 73 73 77 6f 72 64 22 29 29 0a 20 20 | tp-param.httpcon."password"))... | 
| 2e520 | 20 20 20 20 20 20 20 20 20 28 6c 6f 67 67 65 64    2d 69 6e 20 28 65 6c 6e 6f 64 65 2d 68 74 74 70 | .........(logged-in.(elnode-http | 
| 2e540 | 2d 70 61 72 61 6d 20 68 74 74 70 63 6f 6e 20 22    72 65 64 69 72 65 63 74 22 29 29 29 0a 20 20 20 | -param.httpcon."redirect"))).... | 
| 2e560 | 20 20 20 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63    61 73 65 20 65 72 72 0a 20 20 20 20 20 20 20 20 | ....(condition-case.err......... | 
| 2e580 | 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 2d    68 74 74 70 2d 6c 6f 67 69 6e 0a 20 20 20 20 20 | ...(elnode-auth-http-login...... | 
| 2e5a0 | 20 20 20 20 20 20 20 68 74 74 70 63 6f 6e 0a 20    20 20 20 20 20 20 20 20 20 20 20 75 73 65 72 6e | .......httpcon.............usern | 
| 2e5c0 | 61 6d 65 20 70 61 73 73 77 6f 72 64 20 6c 6f 67    67 65 64 2d 69 6e 0a 20 20 20 20 20 20 20 20 20 | ame.password.logged-in.......... | 
| 2e5e0 | 20 20 20 3a 61 75 74 68 2d 74 65 73 74 20 61 75    74 68 2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 | ...:auth-test.auth-test......... | 
| 2e600 | 20 20 20 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65    20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 0a 20 20 | ....:cookie-name.cookie-name)... | 
| 2e620 | 20 20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61    75 74 68 2d 63 72 65 64 65 6e 74 69 61 6c 73 0a | .......(elnode-auth-credentials. | 
| 2e640 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 73 65 6e 64 2d 72 65 64 69 72 65 63 74 0a | ..........(elnode-send-redirect. | 
| 2e660 | 20 20 20 20 20 20 20 20 20 20 20 68 74 74 70 63    6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 28 69 | ...........httpcon............(i | 
| 2e680 | 66 20 28 6e 6f 74 20 6c 6f 67 67 65 64 2d 69 6e    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | f.(not.logged-in)............... | 
| 2e6a0 | 20 74 61 72 67 65 74 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 28 66 6f 72 6d 61 74 20 22 | .target................(format." | 
| 2e6c0 | 25 73 3f 72 65 64 69 72 65 63 74 3d 25 73 22 20    74 61 72 67 65 74 20 6c 6f 67 67 65 64 2d 69 6e | %s?redirect=%s".target.logged-in | 
| 2e6e0 | 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 28 74    20 28 65 6c 6e 6f 64 65 2d 65 72 72 6f 72 0a 20 | ))))..........(t.(elnode-error.. | 
| 2e700 | 20 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 6e    6f 64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e 2d | ............"elnode-auth--login- | 
| 2e720 | 68 61 6e 64 6c 65 72 3a 20 75 6e 65 78 70 65 63    74 65 64 20 65 72 72 6f 72 3a 20 25 53 22 0a 20 | handler:.unexpected.error:.%S".. | 
| 2e740 | 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 29    29 29 29 29 29 29 0a 0a 28 64 65 66 75 6e 20 65 | ............err)))))))..(defun.e | 
| 2e760 | 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 65 66 61 75    6c 74 2d 74 65 73 74 2d 76 30 30 31 20 28 75 73 | lnode-auth-default-test-v001.(us | 
| 2e780 | 65 72 6e 61 6d 65 20 64 61 74 61 62 61 73 65 29    0a 20 20 22 54 68 65 20 66 69 72 73 74 20 74 65 | ername.database)..."The.first.te | 
| 2e7a0 | 73 74 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 64    20 66 6f 72 20 45 6c 6e 6f 64 65 20 61 75 74 68 | st.function.used.for.Elnode.auth | 
| 2e7c0 | 2e 0a 0a 54 68 69 73 20 75 73 65 73 20 6a 75 73    74 20 74 68 65 20 6b 65 79 65 64 20 76 61 6c 75 | ...This.uses.just.the.keyed.valu | 
| 2e7e0 | 65 20 6f 66 20 74 68 65 20 75 73 65 72 6e 61 6d    65 20 61 73 20 74 68 65 20 74 6f 6b 65 6e 2e 20 | e.of.the.username.as.the.token.. | 
| 2e800 | 20 57 65 0a 6e 6f 20 6c 6f 6e 67 65 72 20 73 74    6f 72 65 20 64 61 74 61 62 61 73 65 73 20 6c 69 | .We.no.longer.store.databases.li | 
| 2e820 | 6b 65 20 74 68 61 74 20 62 79 20 64 65 66 61 75    6c 74 2e 22 0a 20 20 28 64 62 2d 67 65 74 20 75 | ke.that.by.default."...(db-get.u | 
| 2e840 | 73 65 72 6e 61 6d 65 20 64 61 74 61 62 61 73 65    29 29 0a 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 | sername.database))..(defun.elnod | 
| 2e860 | 65 2d 61 75 74 68 2d 64 65 66 61 75 6c 74 2d 74    65 73 74 20 28 75 73 65 72 6e 61 6d 65 20 64 61 | e-auth-default-test.(username.da | 
| 2e880 | 74 61 62 61 73 65 29 0a 20 20 22 54 68 65 20 64    65 66 61 75 6c 74 20 74 65 73 74 20 66 75 6e 63 | tabase)..."The.default.test.func | 
| 2e8a0 | 74 69 6f 6e 20 75 73 65 64 20 66 6f 72 20 45 6c    6e 6f 64 65 20 61 75 74 68 2e 0a 0a 49 73 20 75 | tion.used.for.Elnode.auth...Is.u | 
| 2e8c0 | 73 65 73 20 61 20 73 74 6f 72 65 64 20 61 6c 69    73 74 20 61 67 61 69 6e 73 74 20 55 53 45 52 4e | ses.a.stored.alist.against.USERN | 
| 2e8e0 | 41 4d 45 2c 20 74 68 65 20 61 6c 69 73 74 20 73    68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 0a 74 68 | AME,.the.alist.should.contain.th | 
| 2e900 | 65 20 6b 65 79 20 5c 22 74 6f 6b 65 6e 5c 22 20    77 69 74 68 20 61 20 75 73 65 72 27 73 20 74 6f | e.key.\"token\".with.a.user's.to | 
| 2e920 | 6b 65 6e 2e 20 20 57 68 61 74 65 76 65 72 20 65    6c 73 65 20 74 68 65 20 61 6c 69 73 74 0a 63 6f | ken...Whatever.else.the.alist.co | 
| 2e940 | 6e 74 61 69 6e 73 20 69 73 20 69 72 72 65 6c 65    76 61 6e 74 2e 22 0a 20 20 28 6c 65 74 20 28 28 | ntains.is.irrelevant."...(let.(( | 
| 2e960 | 75 73 65 72 20 28 64 62 2d 67 65 74 20 75 73 65    72 6e 61 6d 65 20 64 61 74 61 62 61 73 65 29 29 | user.(db-get.username.database)) | 
| 2e980 | 29 0a 20 20 20 20 28 77 68 65 6e 20 75 73 65 72    0a 20 20 20 20 20 20 28 61 6c 69 73 74 2d 67 65 | ).....(when.user.......(alist-ge | 
| 2e9a0 | 74 20 22 74 6f 6b 65 6e 22 20 75 73 65 72 20 6e    69 6c 20 6e 69 6c 20 27 65 71 75 61 6c 29 29 29 | t."token".user.nil.nil.'equal))) | 
| 2e9c0 | 29 0a 0a 28 64 65 66 75 6e 2a 20 65 6c 6e 6f 64    65 2d 61 75 74 68 2d 2d 6d 61 6b 65 2d 6c 6f 67 | )..(defun*.elnode-auth--make-log | 
| 2e9e0 | 69 6e 2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 28    26 6b 65 79 0a 20 20 20 20 20 28 73 65 6e 64 65 | in-handler.....(&key......(sende | 
| 2ea00 | 72 20 27 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 6c    6f 67 69 6e 2d 73 65 6e 64 65 72 29 0a 20 20 20 | r.'elnode-auth-login-sender).... | 
| 2ea20 | 20 20 28 74 61 72 67 65 74 20 22 2f 6c 6f 67 69    6e 2f 22 29 0a 20 20 20 20 20 61 75 74 68 2d 74 | ..(target."/login/")......auth-t | 
| 2ea40 | 65 73 74 0a 20 20 20 20 20 28 61 75 74 68 2d 64    62 20 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 62 | est......(auth-db.elnode-auth-db | 
| 2ea60 | 29 20 3b 20 6f 6e 6c 79 20 75 73 65 64 20 69 66    20 74 68 65 20 61 75 74 68 2d 74 65 73 74 20 69 | ).;.only.used.if.the.auth-test.i | 
| 2ea80 | 73 20 6e 6f 74 20 70 72 65 73 65 6e 74 0a 20 20    20 20 20 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 | s.not.present......(cookie-name. | 
| 2eaa0 | 22 65 6c 6e 6f 64 65 61 75 74 68 22 29 0a 20 20    20 20 20 28 6c 6f 67 67 65 64 69 6e 2d 64 62 20 | "elnodeauth")......(loggedin-db. | 
| 2eac0 | 65 6c 6e 6f 64 65 2d 6c 6f 67 67 65 64 69 6e 2d    64 62 29 29 0a 20 20 22 4d 61 6b 65 20 61 6e 20 | elnode-loggedin-db))..."Make.an. | 
| 2eae0 | 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d 2d 6c 6f    67 69 6e 2d 68 61 6e 64 6c 65 72 27 2c 20 62 69 | `elnode-auth--login-handler',.bi | 
| 2eb00 | 6e 64 69 6e 67 20 70 61 72 61 6d 65 74 65 72 73    2e 22 0a 20 20 28 6c 61 6d 62 64 61 20 28 68 74 | nding.parameters."...(lambda.(ht | 
| 2eb20 | 74 70 63 6f 6e 29 0a 20 20 20 20 28 65 6c 6e 6f    64 65 2d 61 75 74 68 2d 2d 6c 6f 67 69 6e 2d 68 | tpcon).....(elnode-auth--login-h | 
| 2eb40 | 61 6e 64 6c 65 72 0a 20 20 20 20 20 68 74 74 70    63 6f 6e 0a 20 20 20 20 20 73 65 6e 64 65 72 20 | andler......httpcon......sender. | 
| 2eb60 | 74 61 72 67 65 74 0a 20 20 20 20 20 3b 3b 20 4d    61 6b 65 20 61 20 74 65 73 74 20 66 75 6e 63 74 | target......;;.Make.a.test.funct | 
| 2eb80 | 69 6f 6e 20 69 66 20 77 65 20 64 6f 6e 27 74 20    68 61 76 65 20 6f 6e 65 0a 20 20 20 20 20 3a 61 | ion.if.we.don't.have.one......:a | 
| 2eba0 | 75 74 68 2d 74 65 73 74 20 28 69 66 20 28 66 75    6e 63 74 69 6f 6e 70 20 61 75 74 68 2d 74 65 73 | uth-test.(if.(functionp.auth-tes | 
| 2ebc0 | 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 61 75 74 68 2d 74 65 73 74 | t).....................auth-test | 
| 2ebe0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 75 73 | .....................(lambda.(us | 
| 2ec00 | 65 72 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 | ername).......................(e | 
| 2ec20 | 6c 6e 6f 64 65 2d 61 75 74 68 2d 64 65 66 61 75    6c 74 2d 74 65 73 74 20 75 73 65 72 6e 61 6d 65 | lnode-auth-default-test.username | 
| 2ec40 | 20 61 75 74 68 2d 64 62 29 29 29 0a 20 20 20 20    20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 63 6f | .auth-db)))......:cookie-name.co | 
| 2ec60 | 6f 6b 69 65 2d 6e 61 6d 65 0a 20 20 20 20 20 3a    6c 6f 67 67 65 64 69 6e 2d 64 62 20 6c 6f 67 67 | okie-name......:loggedin-db.logg | 
| 2ec80 | 65 64 69 6e 2d 64 62 29 29 29 0a 0a 28 64 65 66    75 6e 2a 20 65 6c 6e 6f 64 65 2d 64 65 66 61 75 | edin-db)))..(defun*.elnode-defau | 
| 2eca0 | 74 68 20 28 73 63 68 65 6d 65 2d 6e 61 6d 65 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | th.(scheme-name................. | 
| 2ecc0 | 20 20 20 20 20 20 20 20 26 6b 65 79 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ........&key.................... | 
| 2ece0 | 20 20 20 20 20 28 74 65 73 74 20 3a 63 6f 6f 6b    69 65 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 | .....(test.:cookie)............. | 
| 2ed00 | 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68    2d 74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 | ............auth-test........... | 
| 2ed20 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61    75 74 68 2d 64 62 20 27 65 6c 6e 6f 64 65 2d 61 | ..............(auth-db.'elnode-a | 
| 2ed40 | 75 74 68 2d 64 62 29 0a 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | uth-db)......................... | 
| 2ed60 | 28 63 6f 6f 6b 69 65 2d 6e 61 6d 65 20 22 65 6c    6e 6f 64 65 61 75 74 68 22 29 0a 20 20 20 20 20 | (cookie-name."elnodeauth")...... | 
| 2ed80 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 28 66 61 69 6c 75 72 65 2d 74 79 70 65 | ...................(failure-type | 
| 2eda0 | 20 3a 72 65 64 69 72 65 63 74 29 0a 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .:redirect)..................... | 
| 2edc0 | 20 20 20 20 28 72 65 64 69 72 65 63 74 20 22 2f    6c 6f 67 69 6e 2f 22 29 0a 20 20 20 20 20 20 20 | ....(redirect."/login/")........ | 
| 2ede0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 28 73 65 6e 64 65 72 20 27 65 6c 6e 6f 64 65 | .................(sender.'elnode | 
| 2ee00 | 2d 61 75 74 68 2d 6c 6f 67 69 6e 2d 73 65 6e 64    65 72 29 29 0a 20 20 22 44 65 66 69 6e 65 20 61 | -auth-login-sender))..."Define.a | 
| 2ee20 | 6e 20 45 6c 6e 6f 64 65 20 61 75 74 68 65 6e 74    69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 2e 0a | n.Elnode.authentication.scheme.. | 
| 2ee40 | 0a 41 6e 20 61 75 74 68 65 6e 74 69 63 61 74 69    6f 6e 20 73 63 68 65 6d 65 20 63 6f 6e 73 69 73 | .An.authentication.scheme.consis | 
| 2ee60 | 74 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77    69 6e 67 20 61 74 74 72 69 62 75 74 65 73 3a 0a | ts.of.the.following.attributes:. | 
| 2ee80 | 0a 54 45 53 54 20 77 68 61 74 20 73 6f 72 74 20    6f 66 20 74 65 73 74 20 69 73 20 75 73 65 64 20 | .TEST.what.sort.of.test.is.used. | 
| 2eea0 | 74 6f 20 74 65 73 74 20 74 68 65 20 61 75 74 68    65 6e 74 69 63 61 74 69 6f 6e 2c 20 62 79 0a 64 | to.test.the.authentication,.by.d | 
| 2eec0 | 65 66 61 75 6c 74 20 74 68 69 73 20 69 73 20 60    3a 63 6f 6f 6b 69 65 27 2e 20 20 4e 6f 20 6f 74 | efault.this.is.`:cookie'...No.ot | 
| 2eee0 | 68 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69    6f 6e 20 74 65 73 74 73 20 61 72 65 0a 70 6f 73 | her.authentication.tests.are.pos | 
| 2ef00 | 73 69 62 6c 65 20 72 69 67 68 74 20 6e 6f 77 20    62 75 74 20 69 6e 20 74 68 65 20 66 75 74 75 72 | sible.right.now.but.in.the.futur | 
| 2ef20 | 65 20 74 68 65 72 65 20 6d 69 67 68 74 20 62 65    20 6d 61 6e 79 20 28 74 68 65 72 65 0a 6d 69 67 | e.there.might.be.many.(there.mig | 
| 2ef40 | 68 74 20 61 6c 73 6f 20 62 65 20 61 20 67 65 6e    65 72 61 6c 20 60 3a 66 75 6e 63 74 69 6f 6e 27 | ht.also.be.a.general.`:function' | 
| 2ef60 | 20 74 65 73 74 20 74 68 61 74 20 61 6c 6c 6f 77    73 20 63 61 6c 6c 69 6e 67 20 6f 66 20 61 0a 66 | .test.that.allows.calling.of.a.f | 
| 2ef80 | 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6d 70 6c 65    6d 65 6e 74 20 74 68 65 20 74 65 73 74 29 2e 0a | unction.to.implement.the.test).. | 
| 2efa0 | 0a 43 4f 4f 4b 49 45 2d 4e 41 4d 45 20 69 73 20    75 73 65 64 20 77 68 65 6e 20 74 68 65 20 54 45 | .COOKIE-NAME.is.used.when.the.TE | 
| 2efc0 | 53 54 20 69 73 20 60 3a 63 6f 6f 6b 69 65 27 2e    20 20 49 74 20 69 73 20 74 68 65 20 6e 61 6d 65 | ST.is.`:cookie'...It.is.the.name | 
| 2efe0 | 0a 6f 66 20 74 68 65 20 63 6f 6f 6b 69 65 20 74    6f 20 75 73 65 20 66 6f 72 20 61 75 74 68 65 6e | .of.the.cookie.to.use.for.authen | 
| 2f000 | 74 69 63 61 74 69 6f 6e 2e 20 20 42 79 20 64 65    66 61 75 6c 74 20 74 68 69 73 20 69 73 0a 60 65 | tication...By.default.this.is.`e | 
| 2f020 | 6c 6e 6f 64 65 2d 61 75 74 68 27 2e 20 20 49 74    20 6d 75 73 74 20 62 65 20 73 70 65 63 69 66 69 | lnode-auth'...It.must.be.specifi | 
| 2f040 | 65 64 20 61 73 20 61 20 73 74 72 69 6e 67 2e 0a    0a 41 55 54 48 2d 44 42 20 69 73 20 74 68 65 20 | ed.as.a.string...AUTH-DB.is.the. | 
| 2f060 | 60 64 62 27 20 75 73 65 64 20 66 6f 72 20 61 75    74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 | `db'.used.for.authentication.inf | 
| 2f080 | 6f 72 6d 61 74 69 6f 6e 2e 0a 49 74 20 69 73 20    75 73 65 64 20 61 73 20 74 68 65 20 61 75 74 68 | ormation..It.is.used.as.the.auth | 
| 2f0a0 | 6f 72 69 74 79 20 6f 66 20 69 6e 66 6f 72 6d 61    74 69 6f 6e 20 6f 6e 20 75 73 65 72 73 2e 20 20 | ority.of.information.on.users... | 
| 2f0c0 | 42 79 20 64 65 66 61 75 6c 74 0a 74 68 69 73 20    69 73 20 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d | By.default.this.is.`elnode-auth- | 
| 2f0e0 | 64 62 27 2e 0a 0a 41 55 54 48 2d 54 45 53 54 20    69 73 20 61 20 66 75 6e 63 74 69 6f 6e 20 74 6f | db'...AUTH-TEST.is.a.function.to | 
| 2f100 | 20 69 6d 70 6c 65 6d 65 6e 74 20 72 65 74 72 69    65 76 61 6c 20 6f 66 20 75 73 65 72 73 2e 20 20 | .implement.retrieval.of.users... | 
| 2f120 | 49 74 20 69 73 0a 75 73 65 64 20 69 6e 20 70 72    65 66 65 72 65 6e 63 65 20 74 6f 20 41 55 54 48 | It.is.used.in.preference.to.AUTH | 
| 2f140 | 2d 44 42 20 62 75 74 20 63 61 6e 20 62 65 20 6e    69 6c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 | -DB.but.can.be.nil.in.which.case | 
| 2f160 | 20 61 0a 64 65 66 61 75 6c 74 20 62 61 73 65 64    20 6f 6e 20 41 55 54 48 2d 44 42 20 77 69 6c 6c | .a.default.based.on.AUTH-DB.will | 
| 2f180 | 20 62 65 20 75 73 65 64 2e 0a 0a 46 41 49 4c 55    52 45 2d 54 59 50 45 20 69 73 20 77 68 61 74 20 | .be.used...FAILURE-TYPE.is.what. | 
| 2f1a0 | 74 6f 20 64 6f 20 69 66 20 61 75 74 68 65 6e 74    69 63 61 74 69 6f 6e 20 66 61 69 6c 73 2e 20 20 | to.do.if.authentication.fails... | 
| 2f1c0 | 43 75 72 72 65 6e 74 6c 79 0a 6f 6e 6c 79 20 60    3a 72 65 64 69 72 65 63 74 27 20 69 73 20 73 75 | Currently.only.`:redirect'.is.su | 
| 2f1e0 | 70 70 6f 72 74 65 64 2e 20 20 54 6f 20 72 65 64    69 72 65 63 74 20 6f 6e 20 66 61 69 6c 75 72 65 | pported...To.redirect.on.failure | 
| 2f200 | 20 6d 65 61 6e 73 20 74 6f 0a 73 65 6e 64 20 61    20 33 30 32 20 77 69 74 68 20 61 20 6c 6f 63 61 | .means.to.send.a.302.with.a.loca | 
| 2f220 | 74 69 6f 6e 20 74 6f 20 76 69 73 69 74 20 61 20    6c 6f 67 69 6e 20 70 61 67 65 2e 20 20 3a 46 41 | tion.to.visit.a.login.page...:FA | 
| 2f240 | 49 4c 55 52 45 2d 54 59 50 45 0a 69 73 20 60 3a    72 65 64 69 72 65 63 74 27 20 62 79 20 64 65 66 | ILURE-TYPE.is.`:redirect'.by.def | 
| 2f260 | 61 75 6c 74 2e 0a 0a 52 45 44 49 52 45 43 54 20    69 73 20 77 68 65 72 65 20 74 6f 20 72 65 64 69 | ault...REDIRECT.is.where.to.redi | 
| 2f280 | 72 65 63 74 20 74 6f 20 69 66 20 46 41 49 4c 55    52 45 2d 54 59 50 45 20 69 73 20 60 3a 72 65 64 | rect.to.if.FAILURE-TYPE.is.`:red | 
| 2f2a0 | 69 72 65 63 74 27 2e 0a 42 79 20 64 65 66 61 75    6c 74 20 74 68 69 73 20 69 73 20 5c 22 2f 6c 6f | irect'..By.default.this.is.\"/lo | 
| 2f2c0 | 67 69 6e 2f 5c 22 2e 20 20 49 66 20 53 45 4e 44    45 52 20 69 73 20 6e 6f 74 20 6e 69 6c 20 74 68 | gin/\"...If.SENDER.is.not.nil.th | 
| 2f2e0 | 65 6e 20 61 0a 64 69 73 70 61 74 63 68 65 72 20    74 6f 6c 64 20 61 62 6f 75 74 20 74 68 69 73 20 | en.a.dispatcher.told.about.this. | 
| 2f300 | 61 75 74 68 20 73 63 68 65 6d 65 20 77 69 6c 6c    20 64 69 73 70 61 74 63 68 20 61 20 70 61 74 68 | auth.scheme.will.dispatch.a.path | 
| 2f320 | 0a 6e 61 6d 69 6e 67 20 52 45 44 49 52 45 43 54    20 74 6f 20 53 45 4e 44 45 52 2e 0a 0a 53 45 4e | .naming.REDIRECT.to.SENDER...SEN | 
| 2f340 | 44 45 52 20 69 73 20 61 6e 20 45 6c 6e 6f 64 65    20 68 61 6e 64 6c 65 72 20 74 61 6b 69 6e 67 20 | DER.is.an.Elnode.handler.taking. | 
| 2f360 | 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d    65 74 65 72 73 20 6f 66 0a 60 74 61 72 67 65 74 | additional.parameters.of.`target | 
| 2f380 | 27 20 61 6e 64 20 60 72 65 64 69 72 65 63 74 27    2e 20 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 | '.and.`redirect'...By.default.th | 
| 2f3a0 | 69 73 20 69 73 20 74 68 65 20 66 75 6e 63 74 69    6f 6e 0a 60 65 6c 6e 6f 64 65 2d 61 75 74 68 2d | is.is.the.function.`elnode-auth- | 
| 2f3c0 | 6c 6f 67 69 6e 2d 73 65 6e 64 65 72 27 2e 20 20    53 70 65 63 69 66 79 20 61 20 64 69 66 66 65 72 | login-sender'...Specify.a.differ | 
| 2f3e0 | 65 6e 74 20 66 75 6e 63 74 69 6f 6e 20 69 66 20    79 6f 75 0a 77 61 6e 74 20 74 6f 20 74 6f 74 61 | ent.function.if.you.want.to.tota | 
| 2f400 | 6c 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 6c    6f 67 69 6e 20 70 61 67 65 2e 22 0a 20 20 28 6c | lly.change.the.login.page."...(l | 
| 2f420 | 65 74 2a 20 28 28 6c 6f 67 69 6e 2d 68 61 6e 64    6c 65 72 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 | et*.((login-handler.(elnode-auth | 
| 2f440 | 2d 2d 6d 61 6b 65 2d 6c 6f 67 69 6e 2d 68 61 6e    64 6c 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 | --make-login-handler............ | 
| 2f460 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 73    65 6e 64 65 72 20 73 65 6e 64 65 72 0a 20 20 20 | ..............:sender.sender.... | 
| 2f480 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 3a 74 61 72 67 65 74 20 72 65 | ......................:target.re | 
| 2f4a0 | 64 69 72 65 63 74 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | direct.......................... | 
| 2f4c0 | 3a 61 75 74 68 2d 74 65 73 74 20 61 75 74 68 2d    74 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 | :auth-test.auth-test............ | 
| 2f4e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 61    75 74 68 2d 64 62 20 61 75 74 68 2d 64 62 0a 20 | ..............:auth-db.auth-db.. | 
| 2f500 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 63 6f 6f 6b 69 65 2d | ........................:cookie- | 
| 2f520 | 6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65    29 29 0a 20 20 20 20 20 20 20 20 20 28 61 75 74 | name.cookie-name))..........(aut | 
| 2f540 | 68 2d 73 63 68 65 6d 65 20 28 6c 69 73 74 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | h-scheme.(list.................. | 
| 2f560 | 20 20 20 20 20 20 3a 74 65 73 74 20 74 65 73 74    0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | ......:test.test................ | 
| 2f580 | 20 20 20 20 20 20 20 20 3a 63 6f 6f 6b 69 65 2d    6e 61 6d 65 20 63 6f 6f 6b 69 65 2d 6e 61 6d 65 | ........:cookie-name.cookie-name | 
| 2f5a0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 3a 66 61 69 6c 75 72 65 | ........................:failure | 
| 2f5c0 | 2d 74 79 70 65 20 66 61 69 6c 75 72 65 2d 74 79    70 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | -type.failure-type.............. | 
| 2f5e0 | 20 20 20 20 20 20 20 20 20 20 3a 72 65 64 69 72    65 63 74 20 72 65 64 69 72 65 63 74 0a 20 20 20 | ..........:redirect.redirect.... | 
| 2f600 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 3a 6c 6f 67 69 6e 2d 68 61 6e 64 6c | ....................:login-handl | 
| 2f620 | 65 72 20 6c 6f 67 69 6e 2d 68 61 6e 64 6c 65 72    29 29 29 0a 20 20 20 20 28 70 75 74 68 61 73 68 | er.login-handler))).....(puthash | 
| 2f640 | 20 73 63 68 65 6d 65 2d 6e 61 6d 65 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 61 75 74 68 2d 73 | .scheme-name..............auth-s | 
| 2f660 | 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 65 6c 6e 6f 64 65 2d 2d 64 65 66 69 6e | cheme..............elnode--defin | 
| 2f680 | 65 64 2d 61 75 74 68 65 6e 74 69 63 61 74 69 6f    6e 2d 73 63 68 65 6d 65 73 29 29 29 0a 0a 28 64 | ed-authentication-schemes)))..(d | 
| 2f6a0 | 65 66 6d 61 63 72 6f 20 65 6c 6e 6f 64 65 2d 61    75 74 68 2d 64 69 73 70 61 74 63 68 65 72 20 28 | efmacro.elnode-auth-dispatcher.( | 
| 2f6c0 | 68 74 74 70 63 6f 6e 20 61 75 74 68 2d 73 63 68    65 6d 65 20 26 72 65 73 74 20 62 6f 64 79 29 0a | httpcon.auth-scheme.&rest.body). | 
| 2f6e0 | 20 20 22 44 69 73 70 61 74 63 68 20 48 54 54 50    43 4f 4e 20 74 6f 20 41 55 54 48 2d 53 43 48 45 | .."Dispatch.HTTPCON.to.AUTH-SCHE | 
| 2f700 | 4d 45 27 73 20 68 61 6e 64 6c 65 72 20 69 66 20    69 74 20 6d 61 74 63 68 65 73 2e 0a 0a 4f 74 68 | ME's.handler.if.it.matches...Oth | 
| 2f720 | 65 72 77 69 73 65 20 64 6f 20 42 4f 44 59 2e 22    0a 20 20 28 64 65 63 6c 61 72 65 0a 20 20 20 28 | erwise.do.BODY."...(declare....( | 
| 2f740 | 64 65 62 75 67 20 28 73 65 78 70 20 73 65 78 70    20 26 72 65 73 74 20 66 6f 72 6d 29 29 0a 20 20 | debug.(sexp.sexp.&rest.form))... | 
| 2f760 | 20 28 69 6e 64 65 6e 74 20 32 29 29 0a 20 20 28    6c 65 74 20 28 28 68 74 74 70 63 6f 6e 2d 76 20 | .(indent.2))...(let.((httpcon-v. | 
| 2f780 | 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 68 74    74 70 63 6f 6e 2d 76 22 29 29 0a 20 20 20 20 20 | (make-symbol."httpcon-v"))...... | 
| 2f7a0 | 20 20 20 28 61 75 74 68 2d 73 63 68 65 6d 65 2d    76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22 | ...(auth-scheme-v.(make-symbol." | 
| 2f7c0 | 61 75 74 68 2d 73 63 68 65 6d 65 2d 76 22 29 29    0a 20 20 20 20 20 20 20 20 28 72 65 64 69 72 65 | auth-scheme-v")).........(redire | 
| 2f7e0 | 63 74 2d 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f    6c 20 22 72 65 64 69 72 65 63 74 2d 76 22 29 29 | ct-v.(make-symbol."redirect-v")) | 
| 2f800 | 0a 20 20 20 20 20 20 20 20 28 68 61 6e 64 6c 65    72 2d 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c | .........(handler-v.(make-symbol | 
| 2f820 | 20 22 68 61 6e 64 6c 65 72 2d 76 22 29 29 29 0a    20 20 20 20 60 28 6c 65 74 2a 20 28 28 2c 68 74 | ."handler-v"))).....`(let*.((,ht | 
| 2f840 | 74 70 63 6f 6e 2d 76 20 2c 68 74 74 70 63 6f 6e    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 2c | tpcon-v.,httpcon).............(, | 
| 2f860 | 61 75 74 68 2d 73 63 68 65 6d 65 2d 76 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 28 67 65 74 68 | auth-scheme-v..............(geth | 
| 2f880 | 61 73 68 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 2c 61 75 74 68 2d 73 63 68 65 6d 65 0a 20 | ash...............,auth-scheme.. | 
| 2f8a0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e    6f 64 65 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 | .............elnode--defined-aut | 
| 2f8c0 | 68 65 6e 74 69 63 61 74 69 6f 6e 2d 73 63 68 65    6d 65 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 | hentication-schemes))........... | 
| 2f8e0 | 20 20 28 2c 72 65 64 69 72 65 63 74 2d 76 20 28    70 6c 69 73 74 2d 67 65 74 20 2c 61 75 74 68 2d | ..(,redirect-v.(plist-get.,auth- | 
| 2f900 | 73 63 68 65 6d 65 2d 76 20 3a 72 65 64 69 72 65    63 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 | scheme-v.:redirect))............ | 
| 2f920 | 20 28 2c 68 61 6e 64 6c 65 72 2d 76 20 28 70 6c    69 73 74 2d 67 65 74 20 2c 61 75 74 68 2d 73 63 | .(,handler-v.(plist-get.,auth-sc | 
| 2f940 | 68 65 6d 65 2d 76 20 3a 6c 6f 67 69 6e 2d 68 61    6e 64 6c 65 72 29 29 29 0a 20 20 20 20 20 20 20 | heme-v.:login-handler)))........ | 
| 2f960 | 28 69 66 20 28 65 6c 6e 6f 64 65 2d 2d 6d 61 70    70 65 72 2d 66 69 6e 64 2d 6d 61 74 63 68 2d 66 | (if.(elnode--mapper-find-match-f | 
| 2f980 | 75 6e 63 0a 20 20 20 20 20 20 20 20 20 20 20 20    28 65 6c 6e 6f 64 65 2d 68 74 74 70 2d 70 61 74 | unc.............(elnode-http-pat | 
| 2f9a0 | 68 69 6e 66 6f 20 2c 68 74 74 70 63 6f 6e 2d 76    29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 | hinfo.,httpcon-v).............(c | 
| 2f9c0 | 6f 6e 73 20 2c 72 65 64 69 72 65 63 74 2d 76 20    2c 68 61 6e 64 6c 65 72 2d 76 29 29 0a 20 20 20 | ons.,redirect-v.,handler-v)).... | 
| 2f9e0 | 20 20 20 20 20 20 20 20 3b 3b 20 49 66 20 74 68    65 20 63 75 72 72 65 6e 74 20 70 61 74 68 20 6d | ........;;.If.the.current.path.m | 
| 2fa00 | 61 74 63 68 65 73 20 63 61 6c 6c 20 74 68 65 20    61 75 74 68 20 68 61 6e 64 6c 65 72 0a 20 20 20 | atches.call.the.auth.handler.... | 
| 2fa20 | 20 20 20 20 20 20 20 20 28 66 75 6e 63 61 6c 6c    20 2c 68 61 6e 64 6c 65 72 2d 76 20 2c 68 74 74 | ........(funcall.,handler-v.,htt | 
| 2fa40 | 70 63 6f 6e 2d 76 29 0a 20 20 20 20 20 20 20 20    20 20 20 3b 3b 20 45 6c 73 65 20 64 6f 20 77 68 | pcon-v)............;;.Else.do.wh | 
| 2fa60 | 61 74 65 76 65 72 20 74 68 65 20 62 6f 64 79 20    77 61 73 0a 20 20 20 20 20 20 20 20 20 20 20 2c | atever.the.body.was............, | 
| 2fa80 | 40 62 6f 64 79 29 29 29 29 0a 0a 28 64 65 66 6d    61 63 72 6f 20 69 66 2d 65 6c 6e 6f 64 65 2d 61 | @body))))..(defmacro.if-elnode-a | 
| 2faa0 | 75 74 68 20 28 68 74 74 70 63 6f 6e 20 73 63 68    65 6d 65 20 61 75 74 68 64 20 26 72 65 73 74 20 | uth.(httpcon.scheme.authd.&rest. | 
| 2fac0 | 61 6e 6f 6e 79 6d 6f 75 73 29 0a 20 20 22 43 68    65 63 6b 20 74 68 65 20 48 54 54 50 43 4f 4e 20 | anonymous)..."Check.the.HTTPCON. | 
| 2fae0 | 66 6f 72 20 53 43 48 45 4d 45 20 61 75 74 68 20    61 6e 64 20 65 76 61 6c 20 41 55 54 48 44 2e 0a | for.SCHEME.auth.and.eval.AUTHD.. | 
| 2fb00 | 0a 49 66 20 74 68 65 20 61 75 74 68 20 66 61 69    6c 73 20 74 68 65 6e 20 65 76 61 6c 75 61 74 65 | .If.the.auth.fails.then.evaluate | 
| 2fb20 | 20 41 4e 4f 4e 59 4d 4f 55 53 20 69 6e 73 74 65    61 64 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a | .ANONYMOUS.instead."...(declare. | 
| 2fb40 | 20 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20    73 65 78 70 20 73 65 78 70 20 26 72 65 73 74 20 | ...(debug.(sexp.sexp.sexp.&rest. | 
| 2fb60 | 66 6f 72 6d 29 29 0a 20 20 20 28 69 6e 64 65 6e    74 20 32 29 29 0a 20 20 28 6c 65 74 20 28 28 68 | form))....(indent.2))...(let.((h | 
| 2fb80 | 74 74 70 63 6f 6e 76 20 28 6d 61 6b 65 2d 73 79    6d 62 6f 6c 20 22 68 74 74 70 63 6f 6e 76 22 29 | ttpconv.(make-symbol."httpconv") | 
| 2fba0 | 29 29 0a 20 20 20 20 60 28 6c 65 74 20 28 28 2c    68 74 74 70 63 6f 6e 76 20 2c 68 74 74 70 63 6f | )).....`(let.((,httpconv.,httpco | 
| 2fbc0 | 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 73    63 68 65 6d 65 2d 6c 69 73 74 0a 20 20 20 20 20 | n)............(scheme-list...... | 
| 2fbe0 | 20 20 20 20 20 20 20 28 67 65 74 68 61 73 68 20    2c 73 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 | .......(gethash.,scheme......... | 
| 2fc00 | 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 6e    6f 64 65 2d 2d 64 65 66 69 6e 65 64 2d 61 75 74 | .............elnode--defined-aut | 
| 2fc20 | 68 65 6e 74 69 63 61 74 69 6f 6e 2d 73 63 68 65    6d 65 73 29 29 29 0a 20 20 20 20 20 20 20 28 69 | hentication-schemes)))........(i | 
| 2fc40 | 66 20 28 65 71 20 3a 63 6f 6f 6b 69 65 20 28 70    6c 69 73 74 2d 67 65 74 20 73 63 68 65 6d 65 2d | f.(eq.:cookie.(plist-get.scheme- | 
| 2fc60 | 6c 69 73 74 20 3a 74 65 73 74 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 28 63 6f 6e 64 69 74 69 | list.:test))............(conditi | 
| 2fc80 | 6f 6e 2d 63 61 73 65 20 74 6f 6b 65 6e 0a 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 | on-case.token................(pr | 
| 2fca0 | 6f 67 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 | ogn..................(elnode-aut | 
| 2fcc0 | 68 2d 63 6f 6f 6b 69 65 2d 63 68 65 63 6b 0a 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | h-cookie-check.................. | 
| 2fce0 | 20 2c 68 74 74 70 63 6f 6e 76 0a 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 3a 63 6f | .,httpconv...................:co | 
| 2fd00 | 6f 6b 69 65 2d 6e 61 6d 65 20 28 70 6c 69 73 74    2d 67 65 74 20 73 63 68 65 6d 65 2d 6c 69 73 74 | okie-name.(plist-get.scheme-list | 
| 2fd20 | 20 3a 63 6f 6f 6b 69 65 2d 6e 61 6d 65 29 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .:cookie-name))................. | 
| 2fd40 | 20 3b 3b 20 44 6f 20 77 68 61 74 65 76 65 72 20    74 68 65 20 63 6f 64 65 20 77 61 73 20 6e 6f 77 | .;;.Do.whatever.the.code.was.now | 
| 2fd60 | 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 20 2c 61 75 74 68 64 29 0a 20 20 20 20 20 | ...................,authd)...... | 
| 2fd80 | 20 20 20 20 20 20 20 20 3b 3b 20 4f 6e 20 61 75    74 68 20 66 61 69 6c 75 72 65 20 64 6f 20 74 68 | ........;;.On.auth.failure.do.th | 
| 2fda0 | 65 20 45 4c 53 45 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 28 65 6c 6e 6f 64 65 2d 61 75 74 68 | e.ELSE..............(elnode-auth | 
| 2fdc0 | 2d 74 6f 6b 65 6e 0a 20 20 20 20 20 20 20 20 20    20 20 20 20 20 28 70 72 6f 67 6e 20 2c 40 61 6e | -token...............(progn.,@an | 
| 2fde0 | 6f 6e 79 6d 6f 75 73 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 3b 3b 20 4e 6f 74 20 61 20 63 | onymous)))............;;.Not.a.c | 
| 2fe00 | 6f 6f 6b 69 65 20 74 65 73 74 20 2d 20 6e 6f 74    20 73 75 72 65 20 77 68 61 74 20 74 6f 20 64 6f | ookie.test.-.not.sure.what.to.do | 
| 2fe20 | 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 28    6d 65 73 73 61 67 65 20 22 45 4c 4e 4f 44 45 20 | ...............(message."ELNODE. | 
| 2fe40 | 41 55 54 48 20 49 46 20 2d 20 4e 4f 54 20 43 4f    4f 4b 49 45 21 22 29 29 29 29 29 0a 0a 28 64 65 | AUTH.IF.-.NOT.COOKIE!")))))..(de | 
| 2fe60 | 66 6d 61 63 72 6f 20 77 69 74 68 2d 65 6c 6e 6f    64 65 2d 61 75 74 68 20 28 68 74 74 70 63 6f 6e | fmacro.with-elnode-auth.(httpcon | 
| 2fe80 | 20 73 63 68 65 6d 65 20 26 72 65 73 74 20 62 6f    64 79 29 0a 20 20 22 50 72 6f 74 65 63 74 20 63 | .scheme.&rest.body)..."Protect.c | 
| 2fea0 | 6f 64 65 20 77 69 74 68 20 61 75 74 68 65 6e 74    69 63 61 74 69 6f 6e 20 75 73 69 6e 67 20 48 54 | ode.with.authentication.using.HT | 
| 2fec0 | 54 50 43 4f 4e 20 61 6e 64 20 53 43 48 45 4d 45    2e 0a 0a 54 68 69 73 20 6d 61 63 72 6f 20 70 72 | TPCON.and.SCHEME...This.macro.pr | 
| 2fee0 | 6f 74 65 63 74 73 20 63 6f 64 65 20 69 6e 20 61    20 68 61 6e 64 6c 65 72 20 77 69 74 68 20 61 20 | otects.code.in.a.handler.with.a. | 
| 2ff00 | 63 68 65 63 6b 20 66 6f 72 20 61 6e 0a 61 75 74    68 65 6e 74 69 63 61 74 65 64 20 72 65 71 75 65 | check.for.an.authenticated.reque | 
| 2ff20 | 73 74 20 28 74 68 65 20 63 68 65 63 6b 20 69 73    20 63 6f 6e 66 69 67 75 72 61 62 6c 65 29 2e 20 | st.(the.check.is.configurable).. | 
| 2ff40 | 20 49 66 20 74 68 65 20 63 68 65 63 6b 0a 66 61    69 6c 73 20 74 68 65 6e 20 61 6e 20 61 70 70 72 | .If.the.check.fails.then.an.appr | 
| 2ff60 | 6f 70 72 69 61 74 65 20 61 63 74 69 6f 6e 20 69    73 20 74 61 6b 65 6e 3b 20 66 6f 72 20 65 78 61 | opriate.action.is.taken;.for.exa | 
| 2ff80 | 6d 70 6c 65 2c 20 73 65 6e 64 69 6e 67 20 61 0a    6c 6f 67 69 6e 20 70 61 67 65 2e 0a 0a 53 43 48 | mple,.sending.a.login.page...SCH | 
| 2ffa0 | 45 4d 45 20 69 73 20 74 68 65 20 61 75 74 68 65    6e 74 69 63 61 74 69 6f 6e 20 73 63 68 65 6d 65 | EME.is.the.authentication.scheme | 
| 2ffc0 | 20 74 6f 20 75 73 65 20 61 73 20 64 65 66 69 6e    65 64 20 62 79 0a 60 65 6c 6e 6f 64 65 2d 61 75 | .to.use.as.defined.by.`elnode-au | 
| 2ffe0 | 74 68 2d 64 65 66 69 6e 65 2d 73 63 68 65 6d 65    27 2e 22 0a 20 20 28 64 65 63 6c 61 72 65 0a 20 | th-define-scheme'."...(declare.. | 
| 30000 | 20 20 28 64 65 62 75 67 20 28 73 65 78 70 20 73    65 78 70 20 26 72 65 73 74 20 66 6f 72 6d 29 29 | ..(debug.(sexp.sexp.&rest.form)) | 
| 30020 | 0a 20 20 20 28 69 6e 64 65 6e 74 20 32 29 29 0a    20 20 28 6c 65 74 20 28 28 68 74 74 70 63 6f 6e | ....(indent.2))...(let.((httpcon | 
| 30040 | 76 20 28 6d 61 6b 65 2d 73 79 6d 62 6f 6c 20 22    68 74 74 70 63 6f 6e 76 22 29 29 29 0a 20 20 20 | v.(make-symbol."httpconv"))).... | 
| 30060 | 20 60 28 6c 65 74 20 28 28 2c 68 74 74 70 63 6f    6e 76 20 2c 68 74 74 70 63 6f 6e 29 29 0a 20 20 | .`(let.((,httpconv.,httpcon))... | 
| 30080 | 20 20 20 20 20 28 69 66 2d 65 6c 6e 6f 64 65 2d    61 75 74 68 20 2c 68 74 74 70 63 6f 6e 76 20 2c | .....(if-elnode-auth.,httpconv., | 
| 300a0 | 73 63 68 65 6d 65 0a 20 20 20 20 20 20 20 20 20    2c 40 62 6f 64 79 0a 20 20 20 20 20 20 20 20 20 | scheme..........,@body.......... | 
| 300c0 | 28 6c 65 74 20 28 28 74 6f 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 64 0a | (let.((to.................(cond. | 
| 300e0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    20 20 28 3b 3b 20 57 65 20 68 61 76 65 20 61 20 | ..................(;;.We.have.a. | 
| 30100 | 77 72 61 70 70 65 72 2e 2e 2e 20 6f 74 68 65 72    20 6c 69 73 74 73 20 6f 74 68 65 72 0a 20 20 20 | wrapper....other.lists.other.... | 
| 30120 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20    3b 3b 20 74 68 61 6e 20 77 72 61 70 70 65 72 73 | ................;;.than.wrappers | 
| 30140 | 20 61 72 65 20 70 72 6f 62 61 62 6c 79 20 70 6f    73 73 69 62 6c 65 3b 20 77 65 0a 20 20 20 20 20 | .are.probably.possible;.we...... | 
| 30160 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 3b    20 73 68 6f 75 6c 64 20 71 75 61 6c 69 66 79 20 | ..............;;.should.qualify. | 
| 30180 | 74 68 65 20 74 65 73 74 20 68 65 72 65 20 74 6f    20 62 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 | the.test.here.to.be............. | 
| 301a0 | 20 20 20 20 20 20 20 3b 3b 20 77 72 61 70 70 65    72 20 73 70 65 63 69 66 69 63 0a 20 20 20 20 20 | .......;;.wrapper.specific...... | 
| 301c0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c    69 73 74 70 20 28 70 6c 69 73 74 2d 67 65 74 20 | ..............(listp.(plist-get. | 
| 301e0 | 73 63 68 65 6d 65 2d 6c 69 73 74 20 3a 72 65 64    69 72 65 63 74 29 29 0a 20 20 20 20 20 20 20 20 | scheme-list.:redirect))......... | 
| 30200 | 20 20 20 20 20 20 20 20 20 20 20 28 66 6f 72 6d    61 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 | ...........(format.............. | 
| 30220 | 20 20 20 20 20 20 20 22 25 73 3f 72 65 64 69 72    65 63 74 3d 25 73 22 0a 20 20 20 20 20 20 20 20 | ......."%s?redirect=%s"......... | 
| 30240 | 20 20 20 20 20 20 20 20 20 20 20 20 28 65 6c 74    20 28 70 6c 69 73 74 2d 67 65 74 20 73 63 68 65 | ............(elt.(plist-get.sche | 
| 30260 | 6d 65 2d 6c 69 73 74 20 3a 72 65 64 69 72 65 63    74 29 20 33 29 0a 20 20 20 20 20 20 20 20 20 20 | me-list.:redirect).3)........... | 
| 30280 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 68 74 74 70 2d 70 61 74 68 69 6e 66 6f 20 | ..........(elnode-http-pathinfo. | 
| 302a0 | 2c 68 74 74 70 63 6f 6e 76 29 29 29 0a 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ,httpconv)))...................; | 
| 302c0 | 3b 20 41 20 70 6c 61 69 6e 20 73 74 72 69 6e 67    20 63 61 6e 20 62 65 20 75 73 65 64 20 64 69 72 | ;.A.plain.string.can.be.used.dir | 
| 302e0 | 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 28 73 74 72 69 6e 67 | ectly...................((string | 
| 30300 | 70 20 28 70 6c 69 73 74 2d 67 65 74 20 73 63 68    65 6d 65 2d 6c 69 73 74 20 3a 72 65 64 69 72 65 | p.(plist-get.scheme-list.:redire | 
| 30320 | 63 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20    20 20 20 20 20 20 20 20 28 70 6c 69 73 74 2d 67 | ct))....................(plist-g | 
| 30340 | 65 74 20 73 63 68 65 6d 65 2d 6c 69 73 74 20 3a    72 65 64 69 72 65 63 74 29 29 0a 20 20 20 20 20 | et.scheme-list.:redirect))...... | 
| 30360 | 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | .............(t................. | 
| 30380 | 20 20 20 28 65 72 72 6f 72 0a 20 20 20 20 20 20    20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3a | ...(error.....................": | 
| 303a0 | 72 65 64 69 72 65 63 74 20 4d 55 53 54 20 62 65    20 20 61 20 6c 69 73 74 20 6f 72 20 61 20 73 74 | redirect.MUST.be..a.list.or.a.st | 
| 303c0 | 72 69 6e 67 22 29 29 29 29 29 0a 20 20 20 20 20    20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 73 65 | ring")))))............(elnode-se | 
| 303e0 | 6e 64 2d 72 65 64 69 72 65 63 74 20 2c 68 74 74    70 63 6f 6e 76 20 74 6f 29 29 29 29 29 29 0a 0a | nd-redirect.,httpconv.to)))))).. | 
| 30400 | 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 2d 74 65    73 74 2d 6c 6f 67 69 6e 20 28 61 75 74 68 20 74 | (defun.elnode-test-login.(auth.t | 
| 30420 | 61 72 67 65 74 20 75 73 65 72 6e 61 6d 65 20 70    61 73 73 77 6f 72 64 29 0a 20 20 22 53 65 6e 64 | arget.username.password)..."Send | 
| 30440 | 20 61 20 74 65 73 74 20 6c 6f 67 69 6e 20 74 6f    20 45 6c 6e 6f 64 65 2e 22 0a 20 20 3b 3b 20 46 | .a.test.login.to.Elnode."...;;.F | 
| 30460 | 49 58 4d 45 20 2d 20 75 73 65 20 41 55 54 48 20    61 73 20 61 20 72 65 66 65 72 65 6e 63 65 20 74 | IXME.-.use.AUTH.as.a.reference.t | 
| 30480 | 6f 20 61 6e 20 65 6c 6e 6f 64 65 2d 61 75 74 68    65 6e 74 69 63 61 74 69 6f 6e 0a 20 20 3b 3b 20 | o.an.elnode-authentication...;;. | 
| 304a0 | 64 65 63 6c 61 72 61 74 69 6f 6e 20 61 6e 64 20    70 75 6c 6c 20 74 68 69 6e 67 73 20 6c 69 6b 65 | declaration.and.pull.things.like | 
| 304c0 | 20 2f 6c 6f 67 69 6e 2f 20 66 72 6f 6d 20 69 74    0a 20 20 28 65 6c 6e 6f 64 65 2d 74 65 73 74 2d | ./login/.from.it...(elnode-test- | 
| 304e0 | 63 61 6c 6c 0a 20 20 20 28 66 6f 72 6d 61 74 20    22 2f 6c 6f 67 69 6e 2f 3f 72 65 64 69 72 65 63 | call....(format."/login/?redirec | 
| 30500 | 74 3d 25 73 22 20 74 61 72 67 65 74 29 0a 20 20    20 3a 6d 65 74 68 6f 64 20 22 50 4f 53 54 22 0a | t=%s".target)....:method."POST". | 
| 30520 | 20 20 20 3a 70 61 72 61 6d 65 74 65 72 73 20 28    6c 69 73 74 20 28 63 6f 6e 73 20 22 75 73 65 72 | ...:parameters.(list.(cons."user | 
| 30540 | 6e 61 6d 65 22 20 75 73 65 72 6e 61 6d 65 29 0a    20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | name".username)................. | 
| 30560 | 20 20 20 20 20 28 63 6f 6e 73 20 22 70 61 73 73    77 6f 72 64 22 20 70 61 73 73 77 6f 72 64 29 29 | .....(cons."password".password)) | 
| 30580 | 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f    61 64 0a 28 64 65 66 75 6e 20 65 6c 6e 6f 64 65 | ))..;;;###autoload.(defun.elnode | 
| 305a0 | 2d 69 6e 69 74 20 28 29 0a 20 20 22 42 6f 6f 74    73 74 72 61 70 73 20 74 68 65 20 65 6c 6e 6f 64 | -init.()..."Bootstraps.the.elnod | 
| 305c0 | 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 77 68    65 6e 20 74 68 65 20 4c 69 73 70 20 69 73 20 6c | e.environment.when.the.Lisp.is.l | 
| 305e0 | 6f 61 64 65 64 2e 0a 0a 49 74 27 73 20 75 73 65    66 75 6c 20 74 6f 20 68 61 76 65 20 65 6c 6e 6f | oaded...It's.useful.to.have.elno | 
| 30600 | 64 65 20 73 74 61 72 74 20 61 75 74 6f 6d 61 74    69 63 61 6c 6c 79 2e 2e 2e 20 6f 6e 20 4c 69 73 | de.start.automatically....on.Lis | 
| 30620 | 70 0a 6c 6f 61 64 2e 20 20 49 66 20 74 68 65 20    76 61 72 69 61 62 6c 65 20 60 65 6c 6e 6f 64 65 | p.load...If.the.variable.`elnode | 
| 30640 | 2d 69 6e 69 74 2d 70 6f 72 74 27 20 69 73 20 73    65 74 20 74 68 65 6e 20 74 68 69 73 0a 66 75 6e | -init-port'.is.set.then.this.fun | 
| 30660 | 63 74 69 6f 6e 20 77 69 6c 6c 20 6c 61 75 6e 63    68 20 61 20 73 65 72 76 65 72 20 6f 6e 20 69 74 | ction.will.launch.a.server.on.it | 
| 30680 | 2e 0a 0a 54 68 65 20 73 65 72 76 65 72 20 69 73    20 73 74 61 72 74 65 64 20 77 69 74 68 20 60 65 | ...The.server.is.started.with.`e | 
| 306a0 | 6c 6e 6f 64 65 2d 68 6f 73 74 70 61 74 68 2d 64    65 66 61 75 6c 74 2d 68 61 6e 64 6c 65 72 27 20 | lnode-hostpath-default-handler'. | 
| 306c0 | 61 73 0a 74 68 65 20 68 61 6e 64 6c 65 72 20 61    6e 64 20 6c 69 73 74 65 6e 69 6e 67 20 6f 6e 20 | as.the.handler.and.listening.on. | 
| 306e0 | 60 65 6c 6e 6f 64 65 2d 69 6e 69 74 2d 68 6f 73    74 27 22 0a 20 20 28 69 6e 74 65 72 61 63 74 69 | `elnode-init-host'"...(interacti | 
| 30700 | 76 65 29 0a 20 20 28 69 66 20 65 6c 6e 6f 64 65    2d 69 6e 69 74 2d 70 6f 72 74 0a 20 20 20 20 20 | ve)...(if.elnode-init-port...... | 
| 30720 | 20 28 63 6f 6e 64 69 74 69 6f 6e 2d 63 61 73 65    20 6e 69 6c 0a 20 20 20 20 20 20 20 20 20 20 28 | .(condition-case.nil...........( | 
| 30740 | 65 6c 6e 6f 64 65 2d 73 74 61 72 74 0a 20 20 20    20 20 20 20 20 20 20 20 27 65 6c 6e 6f 64 65 2d | elnode-start............'elnode- | 
| 30760 | 68 6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74    2d 68 61 6e 64 6c 65 72 0a 20 20 20 20 20 20 20 | hostpath-default-handler........ | 
| 30780 | 20 20 20 20 3a 70 6f 72 74 20 65 6c 6e 6f 64 65    2d 69 6e 69 74 2d 70 6f 72 74 0a 20 20 20 20 20 | ....:port.elnode-init-port...... | 
| 307a0 | 20 20 20 20 20 20 3a 68 6f 73 74 20 65 6c 6e 6f    64 65 2d 69 6e 69 74 2d 68 6f 73 74 29 0a 20 20 | ......:host.elnode-init-host)... | 
| 307c0 | 20 20 20 20 20 20 28 65 72 72 6f 72 0a 20 20 20    20 20 20 20 20 20 28 65 6c 6e 6f 64 65 2d 65 72 | ......(error..........(elnode-er | 
| 307e0 | 72 6f 72 0a 20 20 20 20 20 20 20 20 20 20 22 65    6c 6e 6f 64 65 2d 69 6e 69 74 3a 20 63 61 6e 27 | ror..........."elnode-init:.can' | 
| 30800 | 74 20 73 74 61 72 74 20 2d 20 70 6f 72 74 20 25    64 20 68 61 73 20 73 6f 6d 65 74 68 69 6e 67 20 | t.start.-.port.%d.has.something. | 
| 30820 | 61 74 74 61 63 68 65 64 20 61 6c 72 65 61 64 79    22 0a 20 20 20 20 20 20 20 20 20 20 65 6c 6e 6f | attached.already"...........elno | 
| 30840 | 64 65 2d 69 6e 69 74 2d 70 6f 72 74 29 29 29 29    0a 20 20 3b 3b 20 54 75 72 6e 20 6f 6e 20 74 68 | de-init-port))))...;;.Turn.on.th | 
| 30860 | 65 20 64 65 66 65 72 20 71 75 65 75 65 20 70 72    6f 63 65 73 73 6f 72 20 69 66 20 77 65 20 6e 65 | e.defer.queue.processor.if.we.ne | 
| 30880 | 65 64 20 74 6f 0a 20 20 28 69 66 20 65 6c 6e 6f    64 65 2d 64 65 66 65 72 2d 6f 6e 0a 20 20 20 20 | ed.to...(if.elnode-defer-on..... | 
| 308a0 | 20 20 28 69 66 20 28 6e 6f 74 20 65 6c 6e 6f 64    65 2d 2d 64 65 66 65 72 2d 74 69 6d 65 72 29 0a | ..(if.(not.elnode--defer-timer). | 
| 308c0 | 20 20 20 20 20 20 20 20 20 20 28 65 6c 6e 6f 64    65 2d 2d 69 6e 69 74 2d 64 65 66 65 72 72 69 6e | ..........(elnode--init-deferrin | 
| 308e0 | 67 29 29 29 29 0a 0a 3b 3b 3b 23 23 23 61 75 74    6f 6c 6f 61 64 0a 28 64 65 66 63 75 73 74 6f 6d | g))))..;;;###autoload.(defcustom | 
| 30900 | 20 65 6c 6e 6f 64 65 2d 64 6f 2d 69 6e 69 74 20    6e 69 6c 0a 20 20 22 53 68 6f 75 6c 64 20 65 6c | .elnode-do-init.nil..."Should.el | 
| 30920 | 6e 6f 64 65 20 73 74 61 72 74 20 61 20 73 65 72    76 65 72 20 6f 6e 20 6c 6f 61 64 3f 0a 0a 54 68 | node.start.a.server.on.load?..Th | 
| 30940 | 65 20 73 65 72 76 65 72 20 74 68 61 74 20 69 73    20 73 74 61 72 74 65 64 20 69 73 20 63 6f 6e 74 | e.server.that.is.started.is.cont | 
| 30960 | 72 6f 6c 6c 65 64 20 62 79 20 6d 6f 72 65 20 65    6c 6e 6f 64 65 0a 63 75 73 74 6f 6d 69 7a 61 74 | rolled.by.more.elnode.customizat | 
| 30980 | 69 6f 6e 73 2e 0a 0a 60 65 6c 6e 6f 64 65 2d 68    6f 73 74 70 61 74 68 2d 64 65 66 61 75 6c 74 2d | ions...`elnode-hostpath-default- | 
| 309a0 | 74 61 62 6c 65 27 20 64 65 66 69 6e 65 73 20 74    68 65 20 6d 61 70 70 69 6e 67 73 20 66 72 6f 6d | table'.defines.the.mappings.from | 
| 309c0 | 0a 68 6f 73 74 70 61 74 68 20 72 65 67 65 78 73    20 74 6f 20 68 61 6e 64 6c 65 72 20 66 75 6e 63 | .hostpath.regexs.to.handler.func | 
| 309e0 | 74 69 6f 6e 73 2e 20 42 79 20 64 65 66 61 75 6c    74 20 65 6c 6e 6f 64 65 20 73 68 69 70 73 0a 77 | tions..By.default.elnode.ships.w | 
| 30a00 | 69 74 68 20 74 68 69 73 20 63 75 73 74 6f 6d 69    7a 61 74 69 6f 6e 20 73 65 74 75 70 20 74 6f 20 | ith.this.customization.setup.to. | 
| 30a20 | 73 65 72 76 65 20 74 68 65 20 64 6f 63 75 6d 65    6e 74 20 72 6f 6f 74 20 64 65 66 69 6e 65 64 0a | serve.the.document.root.defined. | 
| 30a40 | 69 6e 20 60 65 6c 6e 6f 64 65 2d 77 65 62 73 65    72 76 65 72 2d 64 6f 63 72 6f 6f 74 27 2c 20 77 | in.`elnode-webserver-docroot',.w | 
| 30a60 | 68 69 63 68 20 62 79 20 64 65 66 61 75 6c 74 20    69 73 20 7e 2f 70 75 62 6c 69 63 5f 68 74 6d 6c | hich.by.default.is.~/public_html | 
| 30a80 | 2e 22 0a 20 20 3a 67 72 6f 75 70 20 27 65 6c 6e    6f 64 65 0a 20 20 3a 74 79 70 65 20 27 28 62 6f | ."...:group.'elnode...:type.'(bo | 
| 30aa0 | 6f 6c 65 61 6e 29 29 0a 0a 28 64 65 66 76 61 72    20 65 6c 6e 6f 64 65 2d 2d 69 6e 69 74 65 64 20 | olean))..(defvar.elnode--inited. | 
| 30ac0 | 6e 69 6c 0a 20 20 22 52 65 63 6f 72 64 73 20 77    68 65 6e 20 65 6c 6e 6f 64 65 20 69 73 20 69 6e | nil..."Records.when.elnode.is.in | 
| 30ae0 | 69 74 69 61 6c 69 7a 65 64 2e 0a 0a 54 68 69 73    20 69 73 20 61 75 74 6f 6c 6f 61 64 69 6e 67 20 | itialized...This.is.autoloading. | 
| 30b00 | 6d 65 63 68 61 6e 69 63 73 2c 20 73 65 65 20 74    68 65 20 65 76 61 6c 2d 61 66 74 65 72 2d 6c 6f | mechanics,.see.the.eval-after-lo | 
| 30b20 | 61 64 20 66 6f 72 20 64 6f 69 6e 67 0a 69 6e 69    74 2e 22 29 0a 0a 3b 3b 20 41 75 74 6f 20 73 74 | ad.for.doing.init.")..;;.Auto.st | 
| 30b40 | 61 72 74 20 65 6c 6e 6f 64 65 20 69 66 20 77 65    27 72 65 20 65 76 65 72 20 6c 6f 61 64 65 64 0a | art.elnode.if.we're.ever.loaded. | 
| 30b60 | 3b 3b 3b 23 23 23 61 75 74 6f 6c 6f 61 64 0a 28    65 76 61 6c 2d 61 66 74 65 72 2d 6c 6f 61 64 20 | ;;;###autoload.(eval-after-load. | 
| 30b80 | 27 65 6c 6e 6f 64 65 0a 20 20 27 28 69 66 20 28    61 6e 64 20 28 62 6f 75 6e 64 70 20 27 65 6c 6e | 'elnode...'(if.(and.(boundp.'eln | 
| 30ba0 | 6f 64 65 2d 64 6f 2d 69 6e 69 74 29 0a 20 20 20    20 20 20 20 20 20 20 20 65 6c 6e 6f 64 65 2d 64 | ode-do-init)............elnode-d | 
| 30bc0 | 6f 2d 69 6e 69 74 0a 09 20 20 20 28 6f 72 20 28    6e 6f 74 20 28 62 6f 75 6e 64 70 20 27 65 6c 6e | o-init.....(or.(not.(boundp.'eln | 
| 30be0 | 6f 64 65 2d 2d 69 6e 69 74 65 64 29 29 0a 09 20    20 20 20 20 20 20 28 6e 6f 74 20 65 6c 6e 6f 64 | ode--inited)).........(not.elnod | 
| 30c00 | 65 2d 2d 69 6e 69 74 65 64 29 29 29 0a 20 20 20    20 20 20 28 70 72 6f 67 6e 0a 20 20 20 20 20 20 | e--inited))).......(progn....... | 
| 30c20 | 20 20 28 65 6c 6e 6f 64 65 2d 69 6e 69 74 29 0a    20 20 20 20 20 20 20 20 28 73 65 74 71 20 65 6c | ..(elnode-init).........(setq.el | 
| 30c40 | 6e 6f 64 65 2d 2d 69 6e 69 74 65 64 20 6e 69 6c    29 29 29 29 0a 0a 28 70 72 6f 76 69 64 65 20 27 | node--inited.nil))))..(provide.' | 
| 30c60 | 65 6c 6e 6f 64 65 29 0a 0a 3b 3b 3b 20 65 6c 6e    6f 64 65 2e 65 6c 20 65 6e 64 73 20 68 65 72 65 | elnode)..;;;.elnode.el.ends.here | 
| 30c80 | 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30ca0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30cc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30ce0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30d00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30d20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30d40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30d60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30d80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30da0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30dc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30de0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30e00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30e20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30e40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30e60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30e80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30ea0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30ec0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30ee0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30f00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30f20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30f40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30f60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30f80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30fa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30fc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 30fe0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31000 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31020 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31080 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 310a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 310c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 310e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31100 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31120 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31140 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31160 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31180 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 311a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 311c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 311e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31200 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31220 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31240 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31260 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31280 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 312a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 312c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 312e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31300 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31320 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31340 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31360 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31380 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 313a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 313c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 313e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31400 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31420 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31440 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31460 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31480 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 314a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 314c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 314e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31500 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31520 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31540 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31560 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31580 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 315a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 315c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 315e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31600 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31620 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31640 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31660 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31680 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 316a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 316c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 316e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31700 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31720 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31740 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31760 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31780 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 317a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 317c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 317e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31800 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31820 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31840 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31860 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31880 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 318a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 318c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 318e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31900 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31920 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31940 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31960 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31980 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 319a0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 319c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 319e0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31a00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31a20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31a40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31a60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31a80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31aa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ac0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ae0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31b00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31b20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31b40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31b60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31b80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ba0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31bc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31be0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31c00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31c20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31c40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31c60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31c80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ca0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31cc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ce0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31d00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31d20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31d40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31d60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31d80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31da0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31dc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31de0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31e00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31e20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31e40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31e60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31e80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ea0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ec0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31ee0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31f00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31f20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31f40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31f60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31f80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31fa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31fc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ | 
| 31fe0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |