Artifact 8d036f91db27753966f343a42260ba832a48bc8b:
- File wiki/commands.md — part of check-in [c7456d90e9] at 2019-08-22 11:22:10 on branch trunk — Bump version number (user: bernd size: 13304)
0000: 23 20 43 6f 6d 6d 61 6e 64 73 20 23 0a 0a 56 65 # Commands #..Ve 0010: 72 73 69 6f 6e 20 30 2e 39 2e 31 2d 32 30 31 39 rsion 0.9.1-2019 0020: 30 38 32 32 2e 0a 0a 6e 65 74 32 6f 20 73 65 70 0822...net2o sep 0030: 61 72 61 74 65 73 20 64 61 74 61 20 61 6e 64 20 arates data and 0040: 63 6f 6d 6d 61 6e 64 73 2e 20 20 44 61 74 61 20 commands. Data 0050: 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 is passed throug 0060: 68 20 74 6f 20 68 69 67 68 65 72 0a 6c 61 79 65 h to higher.laye 0070: 72 73 2c 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 rs, commands are 0080: 20 69 6e 74 65 72 70 72 65 74 65 64 20 77 68 65 interpreted whe 0090: 6e 20 74 68 65 79 20 61 72 72 69 76 65 2e 20 20 n they arrive. 00a0: 46 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 72 For connection.r 00b0: 65 71 75 65 73 74 73 2c 20 61 20 73 70 65 63 69 equests, a speci 00c0: 61 6c 20 62 69 74 20 69 73 20 73 65 74 2c 20 61 al bit is set, a 00d0: 6e 64 20 74 68 65 20 61 64 64 72 65 73 73 20 74 nd the address t 00e0: 68 65 6e 20 69 73 6e 27 74 20 75 73 65 64 20 61 hen isn't used a 00f0: 73 0a 61 64 64 72 65 73 73 2c 20 62 75 74 20 61 s.address, but a 0100: 73 20 49 56 20 66 6f 72 20 74 68 65 20 6f 70 70 s IV for the opp 0110: 6f 72 74 75 6e 69 73 74 69 63 20 65 6e 63 6f 64 ortunistic encod 0120: 69 6e 67 2e 0a 0a 54 68 65 20 63 6f 6d 6d 61 6e ing...The comman 0130: 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 73 d interpreter is 0140: 20 61 20 73 74 61 63 6b 20 6d 61 63 68 69 6e 65 a stack machine 0150: 20 77 69 74 68 20 74 77 6f 20 64 61 74 61 20 74 with two data t 0160: 79 70 65 73 3a 20 36 34 0a 62 69 74 20 69 6e 74 ypes: 64.bit int 0170: 65 67 65 72 73 20 61 6e 64 20 73 74 72 69 6e 67 egers and string 0180: 73 20 28 66 6c 6f 61 74 73 20 61 72 65 20 61 6c s (floats are al 0190: 73 6f 20 73 75 70 70 6f 72 65 64 2c 20 62 75 74 so suppored, but 01a0: 20 75 73 65 64 0a 69 6e 66 72 65 71 75 65 6e 74 used.infrequent 01b0: 6c 79 29 2e 20 20 45 6e 63 6f 64 69 6e 67 20 6f ly). Encoding o 01c0: 66 20 63 6f 6d 6d 61 6e 64 73 2c 20 69 6e 74 65 f commands, inte 01d0: 67 65 72 73 20 61 6e 64 20 73 74 72 69 6e 67 20 gers and string 01e0: 6c 65 6e 67 74 68 0a 66 6f 6c 6c 6f 77 73 20 70 length.follows p 01f0: 72 6f 74 6f 62 75 66 20 63 6f 6e 63 65 70 74 75 rotobuf conceptu 0200: 61 6c 6c 79 20 28 62 75 74 20 4d 53 42 20 66 69 ally (but MSB fi 0210: 72 73 74 2c 20 6e 6f 74 20 4c 53 42 20 66 69 72 rst, not LSB fir 0220: 73 74 20 61 73 20 77 69 74 68 0a 70 72 6f 74 6f st as with.proto 0230: 62 75 66 2c 20 74 6f 20 73 69 6d 70 6c 69 66 79 buf, to simplify 0240: 20 73 63 61 6e 6e 69 6e 67 29 2c 20 73 74 72 69 scanning), stri 0250: 6e 67 73 20 61 72 65 20 6a 75 73 74 20 73 65 71 ngs are just seq 0260: 75 65 6e 63 65 73 20 6f 66 0a 62 79 74 65 73 20 uences of.bytes 0270: 28 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 (interpretation 0280: 63 61 6e 20 76 61 72 79 29 2e 20 20 43 6f 6d 6d can vary). Comm 0290: 61 6e 64 20 62 6c 6f 63 6b 73 20 63 6f 6e 74 61 and blocks conta 02a0: 69 6e 20 61 20 73 65 71 75 65 6e 63 65 0a 6f 66 in a sequence.of 02b0: 20 63 6f 6d 6d 61 6e 64 73 3b 20 74 68 65 72 65 commands; there 02c0: 20 61 72 65 20 6e 6f 20 63 6f 6e 64 69 74 69 6f are no conditio 02d0: 6e 61 6c 73 20 61 6e 64 20 6c 6f 6f 70 69 6e 67 nals and looping 02e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a instructions... 02f0: 53 74 72 69 6e 67 73 20 63 61 6e 20 63 6f 6e 74 Strings can cont 0300: 61 69 6e 20 65 6e 63 72 79 70 74 65 64 20 6e 65 ain encrypted ne 0310: 73 74 65 64 20 63 6f 6d 6d 61 6e 64 73 2c 20 75 sted commands, u 0320: 73 65 64 20 64 75 72 69 6e 67 0a 63 6f 6d 6d 75 sed during.commu 0330: 6e 69 63 61 74 69 6f 6e 20 73 65 74 75 70 2e 0a nication setup.. 0340: 0a 23 23 20 4c 69 73 74 20 6f 66 20 43 6f 6d 6d .## List of Comm 0350: 61 6e 64 73 20 23 23 0a 0a 43 6f 6d 6d 61 6e 64 ands ##..Command 0360: 73 20 61 72 65 20 63 6f 6e 74 65 78 74 2d 73 65 s are context-se 0370: 6e 73 69 74 69 76 65 20 69 6e 20 61 6e 20 4f 4f nsitive in an OO 0380: 50 20 6d 65 74 68 6f 64 20 68 69 65 72 61 72 63 P method hierarc 0390: 68 79 20 73 65 6e 73 65 2e 0a 0a 23 23 23 20 62 hy sense...### b 03a0: 61 73 65 20 63 6f 6d 6d 61 6e 64 73 20 23 23 23 ase commands ### 03b0: 0a 0a 2a 20 24 30 20 65 6e 64 2d 63 6d 64 20 28 ..* $0 end-cmd ( 03c0: 20 2d 2d 20 29 0a 20 20 65 6e 64 20 63 6f 6d 6d -- ). end comm 03d0: 61 6e 64 20 62 75 66 66 65 72 0a 2a 20 24 31 20 and buffer.* $1 03e0: 6c 69 74 20 28 20 23 75 20 2d 2d 20 75 20 29 0a lit ( #u -- u ). 03f0: 20 20 6c 69 74 65 72 61 6c 0a 2a 20 24 32 20 2d literal.* $2 - 0400: 6c 69 74 20 28 20 23 6e 20 2d 2d 20 6e 20 29 0a lit ( #n -- n ). 0410: 20 20 6e 65 67 61 74 69 76 65 20 6c 69 74 65 72 negative liter 0420: 61 6c 2c 20 69 6e 76 65 72 74 65 64 20 65 6e 63 al, inverted enc 0430: 6f 64 65 64 0a 2a 20 24 33 20 73 74 72 69 6e 67 oded.* $3 string 0440: 20 28 20 23 73 74 72 69 6e 67 20 2d 2d 20 24 3a ( #string -- $: 0450: 73 74 72 69 6e 67 20 29 0a 20 20 73 74 72 69 6e string ). strin 0460: 67 20 6c 69 74 65 72 61 6c 0a 2a 20 24 34 20 66 g literal.* $4 f 0470: 6c 69 74 20 28 20 23 64 66 6c 6f 61 74 20 2d 2d lit ( #dfloat -- 0480: 20 72 20 29 0a 20 20 64 6f 75 62 6c 65 20 66 6c r ). double fl 0490: 6f 61 74 20 6c 69 74 65 72 61 6c 0a 2a 20 24 35 oat literal.* $5 04a0: 20 65 6e 64 2d 77 69 74 68 20 28 20 6f 3a 6f 62 end-with ( o:ob 04b0: 6a 65 63 74 20 2d 2d 20 29 0a 20 20 65 6e 64 20 ject -- ). end 04c0: 73 63 6f 70 65 0a 2a 20 24 36 20 6f 73 77 61 70 scope.* $6 oswap 04d0: 20 28 20 6f 3a 6e 65 73 74 20 6f 3a 63 75 72 72 ( o:nest o:curr 04e0: 65 6e 74 20 2d 2d 20 6f 3a 63 75 72 72 65 6e 74 ent -- o:current 04f0: 20 6f 3a 6e 65 73 74 20 29 0a 2a 20 24 37 20 74 o:nest ).* $7 t 0500: 72 75 20 28 20 2d 2d 20 66 3a 74 72 75 65 20 29 ru ( -- f:true ) 0510: 0a 20 20 74 72 75 65 20 66 6c 61 67 20 6c 69 74 . true flag lit 0520: 65 72 61 6c 0a 2a 20 24 38 20 66 61 6c 73 20 28 eral.* $8 fals ( 0530: 20 2d 2d 20 66 3a 66 61 6c 73 65 20 29 0a 20 20 -- f:false ). 0540: 66 61 6c 73 65 20 66 6c 61 67 20 6c 69 74 65 72 false flag liter 0550: 61 6c 0a 2a 20 24 39 20 77 6f 72 64 73 20 28 20 al.* $9 words ( 0560: 75 73 74 61 72 74 20 2d 2d 20 29 0a 20 20 72 65 ustart -- ). re 0570: 66 6c 65 63 74 69 6f 6e 0a 2a 20 24 41 20 6e 65 flection.* $A ne 0580: 73 74 73 69 67 20 28 20 24 3a 63 6d 64 2b 73 69 stsig ( $:cmd+si 0590: 67 20 2d 2d 20 29 0a 20 20 63 68 65 63 6b 20 73 g -- ). check s 05a0: 69 67 2b 6e 65 73 74 0a 2a 20 24 42 20 73 65 63 ig+nest.* $B sec 05b0: 73 74 72 69 6e 67 20 28 20 23 73 74 72 69 6e 67 string ( #string 05c0: 20 2d 2d 20 24 3a 73 74 72 69 6e 67 20 29 0a 20 -- $:string ). 05d0: 20 73 65 63 72 65 74 20 73 74 72 69 6e 67 20 6c secret string l 05e0: 69 74 65 72 61 6c 0a 2a 20 24 43 20 6e 6f 70 20 iteral.* $C nop 05f0: 28 20 2d 2d 20 29 0a 20 20 64 6f 20 6e 6f 74 68 ( -- ). do noth 0600: 69 6e 67 0a 2a 20 24 44 20 34 63 63 20 28 20 23 ing.* $D 4cc ( # 0610: 33 6c 65 74 74 65 72 20 2d 2d 20 29 0a 20 20 41 3letter -- ). A 0620: 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 t the beginning 0630: 6f 66 20 61 20 66 69 6c 65 2c 20 74 68 69 73 20 of a file, this 0640: 63 61 6e 20 62 65 20 75 73 65 64 20 61 73 20 46 can be used as F 0650: 6f 75 72 43 43 20 63 6f 64 65 0a 2a 20 24 45 20 ourCC code.* $E 0660: 70 61 64 64 69 6e 67 20 28 20 23 6c 65 6e 20 2d padding ( #len - 0670: 2d 20 29 0a 20 20 61 64 64 20 70 61 64 64 69 6e - ). add paddin 0680: 67 20 74 6f 20 61 6c 69 67 6e 20 66 69 65 6c 64 g to align field 0690: 73 0a 2a 20 24 46 20 76 65 72 73 69 6f 6e 20 28 s.* $F version ( 06a0: 20 24 3a 76 65 72 73 69 6f 6e 20 2d 2d 20 29 0a $:version -- ). 06b0: 20 20 76 65 72 73 69 6f 6e 20 63 68 65 63 6b 0a version check. 06c0: 0a 23 23 23 20 72 65 70 6c 79 20 63 6f 6d 6d 61 .### reply comma 06d0: 6e 64 73 20 23 23 23 0a 0a 2a 20 24 31 30 20 70 nds ###..* $10 p 06e0: 75 73 68 27 20 28 20 23 63 6d 64 20 2d 2d 20 29 ush' ( #cmd -- ) 06f0: 0a 20 20 70 75 73 68 20 63 6f 6d 6d 61 6e 64 20 . push command 0700: 69 6e 74 6f 20 61 6e 73 77 65 72 20 70 61 63 6b into answer pack 0710: 65 74 0a 2a 20 24 31 31 20 70 75 73 68 2d 6c 69 et.* $11 push-li 0720: 74 20 28 20 75 20 2d 2d 20 29 0a 20 20 70 75 73 t ( u -- ). pus 0730: 68 20 75 6e 73 69 67 6e 65 64 20 6c 69 74 65 72 h unsigned liter 0740: 61 6c 20 69 6e 74 6f 20 61 6e 73 77 65 72 20 70 al into answer p 0750: 61 63 6b 65 74 0a 2a 20 24 31 33 20 70 75 73 68 acket.* $13 push 0760: 2d 24 20 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d -$ ( $:string -- 0770: 20 29 0a 20 20 70 75 73 68 20 73 74 72 69 6e 67 ). push string 0780: 20 69 6e 74 6f 20 61 6e 73 77 65 72 20 70 61 63 into answer pac 0790: 6b 65 74 0a 2a 20 24 31 34 20 70 75 73 68 2d 66 ket.* $14 push-f 07a0: 6c 6f 61 74 20 28 20 72 20 2d 2d 20 29 0a 20 20 loat ( r -- ). 07b0: 70 75 73 68 20 66 6c 6f 61 74 69 6e 67 20 70 6f push floating po 07c0: 69 6e 74 20 6e 75 6d 62 65 72 0a 2a 20 24 31 35 int number.* $15 07d0: 20 6f 6b 20 28 20 75 74 61 67 20 2d 2d 20 29 0a ok ( utag -- ). 07e0: 20 20 74 61 67 67 65 64 20 72 65 73 70 6f 6e 73 tagged respons 07f0: 65 0a 2a 20 24 31 36 20 6f 6b 3f 20 28 20 75 74 e.* $16 ok? ( ut 0800: 61 67 20 2d 2d 20 29 0a 20 20 72 65 71 75 65 73 ag -- ). reques 0810: 74 20 74 61 67 67 65 64 20 72 65 73 70 6f 6e 73 t tagged respons 0820: 65 0a 2a 20 24 31 37 20 6b 6f 20 28 20 75 65 72 e.* $17 ko ( uer 0830: 72 6f 72 20 2d 2d 20 29 0a 20 20 72 65 63 65 69 ror -- ). recei 0840: 76 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 ve error message 0850: 0a 2a 20 24 31 38 20 6e 65 73 74 20 28 20 24 3a .* $18 nest ( $: 0860: 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 6e 65 string -- ). ne 0870: 73 74 65 64 20 28 73 65 6c 66 2d 65 6e 63 72 79 sted (self-encry 0880: 70 74 65 64 29 20 63 6f 6d 6d 61 6e 64 0a 2a 20 pted) command.* 0890: 24 31 39 20 74 6f 6b 65 6e 20 28 20 24 3a 74 6f $19 token ( $:to 08a0: 6b 65 6e 20 6e 20 2d 2d 20 29 0a 20 20 67 65 6e ken n -- ). gen 08b0: 65 72 69 63 20 69 6e 73 70 65 63 74 69 6f 6e 20 eric inspection 08c0: 74 6f 6b 65 6e 0a 2a 20 24 31 41 20 65 72 72 6f token.* $1A erro 08d0: 72 2d 69 64 20 28 20 24 3a 65 72 72 6f 72 69 64 r-id ( $:errorid 08e0: 20 2d 2d 20 29 0a 20 20 65 72 72 6f 72 2d 69 64 -- ). error-id 08f0: 20 73 74 72 69 6e 67 0a 2a 20 24 31 42 20 76 65 string.* $1B ve 0900: 72 73 69 6f 6e 3f 20 28 20 24 3a 76 65 72 73 69 rsion? ( $:versi 0910: 6f 6e 20 2d 2d 20 29 0a 20 20 76 65 72 73 69 6f on -- ). versio 0920: 6e 20 63 72 6f 73 73 2d 63 68 65 63 6b 0a 0a 23 n cross-check..# 0930: 23 23 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 67 65 ## connection ge 0940: 6e 65 72 69 63 20 63 6f 6d 6d 61 6e 64 73 20 23 neric commands # 0950: 23 23 0a 0a 2a 20 24 32 30 20 72 65 71 75 65 73 ##..* $20 reques 0960: 74 2d 64 6f 6e 65 20 28 20 75 72 65 71 20 2d 2d t-done ( ureq -- 0970: 20 29 0a 20 20 73 69 67 6e 61 6c 20 72 65 71 75 ). signal requ 0980: 65 73 74 20 69 73 20 63 6f 6d 70 6c 65 74 65 64 est is completed 0990: 0a 2a 20 24 32 31 20 73 65 74 2d 63 6f 6f 6b 69 .* $21 set-cooki 09a0: 65 20 28 20 75 74 69 6d 65 73 74 61 6d 70 20 2d e ( utimestamp - 09b0: 2d 20 29 0a 20 20 63 6f 6f 6b 69 65 73 20 61 6e - ). cookies an 09c0: 64 20 72 6f 75 6e 64 20 74 72 69 70 20 64 65 6c d round trip del 09d0: 61 79 73 0a 2a 20 24 32 32 20 70 75 6e 63 68 2d ays.* $22 punch- 09e0: 6c 6f 61 64 2c 20 28 20 24 3a 73 74 72 69 6e 67 load, ( $:string 09f0: 20 2d 2d 20 29 0a 20 20 75 73 65 20 66 6f 72 20 -- ). use for 0a00: 70 75 6e 63 68 20 70 61 79 6c 6f 61 64 3a 20 6e punch payload: n 0a10: 65 73 74 20 69 74 0a 2a 20 24 32 33 20 70 75 6e est it.* $23 pun 0a20: 63 68 20 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d ch ( $:string -- 0a30: 20 29 0a 20 20 70 75 6e 63 68 20 4e 41 54 20 74 ). punch NAT t 0a40: 72 61 76 65 72 73 61 6c 20 68 6f 6c 65 0a 2a 20 raversal hole.* 0a50: 24 32 34 20 70 75 6e 63 68 2d 64 6f 6e 65 20 28 $24 punch-done ( 0a60: 20 2d 2d 20 29 0a 20 20 70 75 6e 63 68 20 72 65 -- ). punch re 0a70: 63 65 69 76 65 64 0a 0a 23 23 23 20 63 6f 6e 6e ceived..### conn 0a80: 65 63 74 69 6f 6e 20 73 65 74 75 70 20 63 6f 6d ection setup com 0a90: 6d 61 6e 64 73 20 23 23 23 0a 0a 2a 20 24 33 30 mands ###..* $30 0aa0: 20 74 6d 70 6e 65 73 74 20 28 20 24 3a 73 74 72 tmpnest ( $:str 0ab0: 69 6e 67 20 2d 2d 20 29 0a 20 20 6e 65 73 74 65 ing -- ). neste 0ac0: 64 20 28 74 65 6d 70 6f 72 61 72 79 20 65 6e 63 d (temporary enc 0ad0: 72 79 70 74 65 64 29 20 63 6f 6d 6d 61 6e 64 0a rypted) command. 0ae0: 2a 20 24 33 31 20 65 6e 63 6e 65 73 74 20 28 20 * $31 encnest ( 0af0: 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 $:string -- ). 0b00: 6e 65 73 74 65 64 20 28 63 6f 6d 70 6c 65 74 65 nested (complete 0b10: 6c 79 20 65 6e 63 72 79 70 74 65 64 29 20 63 6f ly encrypted) co 0b20: 6d 6d 61 6e 64 0a 2a 20 24 33 32 20 63 6c 6f 73 mmand.* $32 clos 0b30: 65 2d 74 6d 70 6e 65 73 74 20 28 20 2d 2d 20 29 e-tmpnest ( -- ) 0b40: 0a 20 20 63 6f 73 65 20 61 20 6f 70 65 6e 65 64 . cose a opened 0b50: 20 74 6d 70 6e 65 73 74 2c 20 61 6e 64 20 61 64 tmpnest, and ad 0b60: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 d the necessary 0b70: 73 74 75 66 66 0a 2a 20 24 33 33 20 63 6c 6f 73 stuff.* $33 clos 0b80: 65 2d 65 6e 63 6e 65 73 74 20 28 20 2d 2d 20 29 e-encnest ( -- ) 0b90: 0a 20 20 63 6f 73 65 20 61 20 6f 70 65 6e 65 64 . cose a opened 0ba0: 20 65 6e 63 6e 65 73 74 2c 20 61 6e 64 20 61 64 encnest, and ad 0bb0: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 d the necessary 0bc0: 73 74 75 66 66 0a 2a 20 24 33 34 20 6e 65 77 2d stuff.* $34 new- 0bd0: 64 61 74 61 20 28 20 61 64 64 72 20 61 64 64 72 data ( addr addr 0be0: 20 75 20 2d 2d 20 29 0a 20 20 63 72 65 61 74 65 u -- ). create 0bf0: 20 6e 65 77 20 64 61 74 61 20 6d 61 70 70 69 6e new data mappin 0c00: 67 0a 2a 20 24 33 35 20 6e 65 77 2d 63 6f 64 65 g.* $35 new-code 0c10: 20 28 20 61 64 64 72 20 61 64 64 72 20 75 20 2d ( addr addr u - 0c20: 2d 20 29 0a 20 20 63 72 61 74 65 20 6e 65 77 20 - ). crate new 0c30: 63 6f 64 65 20 6d 61 70 70 69 6e 67 0a 2a 20 24 code mapping.* $ 0c40: 33 36 20 73 74 6f 72 65 2d 6b 65 79 20 28 20 24 36 store-key ( $ 0c50: 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 73 :string -- ). s 0c60: 74 6f 72 65 20 6b 65 79 0a 2a 20 24 33 37 20 6d tore key.* $37 m 0c70: 61 70 2d 72 65 71 75 65 73 74 20 28 20 61 64 64 ap-request ( add 0c80: 72 73 20 75 63 6f 64 65 20 75 64 61 74 61 20 2d rs ucode udata - 0c90: 2d 20 29 0a 20 20 72 65 71 75 65 73 74 20 6d 61 - ). request ma 0ca0: 70 70 69 6e 67 0a 2a 20 24 33 38 20 73 65 74 2d pping.* $38 set- 0cb0: 74 69 63 6b 20 28 20 75 74 69 63 6b 73 20 2d 2d tick ( uticks -- 0cc0: 20 29 0a 20 20 61 64 6a 75 73 74 20 74 69 6d 65 ). adjust time 0cd0: 0a 2a 20 24 33 39 20 67 65 74 2d 74 69 63 6b 20 .* $39 get-tick 0ce0: 28 20 2d 2d 20 29 0a 20 20 72 65 71 75 65 73 74 ( -- ). request 0cf0: 20 74 69 6d 65 20 61 64 6a 75 73 74 0a 2a 20 24 time adjust.* $ 0d00: 33 41 20 72 65 63 65 69 76 65 2d 74 6d 70 6b 65 3A receive-tmpke 0d10: 79 20 28 20 24 3a 6b 65 79 20 2d 2d 20 29 0a 20 y ( $:key -- ). 0d20: 20 72 65 63 65 69 76 65 20 65 6d 70 68 65 6d 65 receive empheme 0d30: 72 61 6c 20 6b 65 79 0a 2a 20 24 33 42 20 74 6d ral key.* $3B tm 0d40: 70 6b 65 79 2d 72 65 71 75 65 73 74 20 28 20 2d pkey-request ( - 0d50: 2d 20 29 0a 20 20 72 65 71 75 65 73 74 20 65 70 - ). request ep 0d60: 68 65 6d 65 72 61 6c 20 6b 65 79 0a 2a 20 24 33 hemeral key.* $3 0d70: 43 20 6b 65 79 70 61 69 72 20 28 20 24 3a 79 6f C keypair ( $:yo 0d80: 75 72 6b 65 79 20 24 3a 6d 79 6b 65 79 20 2d 2d urkey $:mykey -- 0d90: 20 29 0a 20 20 73 65 6c 65 63 74 20 61 20 70 75 ). select a pu 0da0: 62 6b 65 79 0a 2a 20 24 33 44 20 75 70 64 61 74 bkey.* $3D updat 0db0: 65 2d 6b 65 79 20 28 20 2d 2d 20 29 0a 20 20 75 e-key ( -- ). u 0dc0: 70 64 61 74 65 20 73 65 63 72 65 74 73 0a 2a 20 pdate secrets.* 0dd0: 24 33 45 20 67 65 6e 2d 69 76 73 20 28 20 24 3a $3E gen-ivs ( $: 0de0: 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 67 65 string -- ). ge 0df0: 6e 65 72 61 74 65 20 49 56 73 0a 2a 20 24 33 46 nerate IVs.* $3F 0e00: 20 61 64 64 72 2d 6b 65 79 21 20 28 20 24 3a 73 addr-key! ( $:s 0e10: 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 73 65 74 tring -- ). set 0e20: 20 6b 65 79 20 66 6f 72 20 72 65 70 6c 79 0a 2a key for reply.* 0e30: 20 24 34 30 20 70 75 6e 63 68 3f 20 28 20 2d 2d $40 punch? ( -- 0e40: 20 29 0a 20 20 52 65 71 75 65 73 74 20 70 75 6e ). Request pun 0e50: 63 68 20 61 64 64 72 65 73 73 65 73 0a 2a 20 24 ch addresses.* $ 0e60: 34 31 20 3e 74 69 6d 65 2d 6f 66 66 73 65 74 20 41 >time-offset 0e70: 28 20 6e 20 2d 2d 20 29 0a 20 20 73 65 74 20 74 ( n -- ). set t 0e80: 69 6d 65 20 6f 66 66 73 65 74 0a 2a 20 24 34 32 ime offset.* $42 0e90: 20 63 6f 6e 74 65 78 74 20 28 20 2d 2d 20 29 0a context ( -- ). 0ea0: 20 20 6d 61 6b 65 20 63 6f 6e 74 65 78 74 20 61 make context a 0eb0: 63 74 69 76 65 0a 2a 20 24 34 33 20 67 65 6e 2d ctive.* $43 gen- 0ec0: 72 65 70 6c 79 20 28 20 2d 2d 20 29 0a 20 20 67 reply ( -- ). g 0ed0: 65 6e 65 72 61 74 65 20 61 20 6b 65 79 20 72 65 enerate a key re 0ee0: 71 75 65 73 74 20 72 65 70 6c 79 0a 2a 20 24 34 quest reply.* $4 0ef0: 34 20 67 65 6e 2d 70 75 6e 63 68 2d 72 65 70 6c 4 gen-punch-repl 0f00: 79 20 28 20 2d 2d 20 29 0a 2a 20 24 34 35 20 69 y ( -- ).* $45 i 0f10: 6e 76 69 74 65 20 28 20 24 3a 6e 69 63 6b 2b 73 nvite ( $:nick+s 0f20: 69 67 20 24 3a 70 6b 20 2d 2d 20 29 0a 20 20 69 ig $:pk -- ). i 0f30: 6e 76 69 74 65 20 73 6f 6d 65 6f 6e 65 0a 2a 20 nvite someone.* 0f40: 24 34 36 20 72 65 71 75 65 73 74 2d 69 6e 76 69 $46 request-invi 0f50: 74 61 74 69 6f 6e 20 28 20 2d 2d 20 29 0a 20 20 tation ( -- ). 0f60: 61 73 6b 20 66 6f 72 20 61 6e 20 69 6e 76 69 74 ask for an invit 0f70: 61 74 69 6f 6e 20 61 73 20 73 65 63 6f 6e 64 20 ation as second 0f80: 73 74 61 67 65 20 6f 66 20 69 6e 76 69 74 61 74 stage of invitat 0f90: 69 6f 6e 20 68 61 6e 64 73 68 61 6b 65 0a 2a 20 ion handshake.* 0fa0: 24 34 37 20 73 69 67 6e 2d 69 6e 76 69 74 65 20 $47 sign-invite 0fb0: 28 20 24 3a 73 69 67 6e 61 74 75 72 65 20 2d 2d ( $:signature -- 0fc0: 20 29 0a 20 20 73 65 6e 64 20 79 6f 75 20 61 20 ). send you a 0fd0: 73 69 67 6e 61 74 75 72 65 0a 2a 20 24 34 38 20 signature.* $48 0fe0: 72 65 71 75 65 73 74 2d 71 72 2d 69 6e 76 69 74 request-qr-invit 0ff0: 61 74 69 6f 6e 20 28 20 2d 2d 20 29 0a 20 20 61 ation ( -- ). a 1000: 73 6b 20 66 6f 72 20 61 6e 20 69 6e 76 69 74 61 sk for an invita 1010: 74 69 6f 6e 20 61 73 20 73 65 63 6f 6e 64 20 73 tion as second s 1020: 74 61 67 65 20 6f 66 20 69 6e 76 69 74 61 74 69 tage of invitati 1030: 6f 6e 20 68 61 6e 64 73 68 61 6b 65 0a 2a 20 24 on handshake.* $ 1040: 34 39 20 74 6d 70 2d 73 65 63 72 65 74 2c 20 28 49 tmp-secret, ( 1050: 20 2d 2d 20 29 0a 2a 20 24 34 41 20 71 72 2d 63 -- ).* $4A qr-c 1060: 68 61 6c 6c 65 6e 67 65 20 28 20 24 3a 63 68 61 hallenge ( $:cha 1070: 6c 6c 65 6e 67 65 20 24 3a 72 65 73 70 6f 73 65 llenge $:respose 1080: 20 2d 2d 20 29 0a 2a 20 24 34 42 20 69 6e 76 69 -- ).* $4B invi 1090: 74 65 2d 72 65 73 75 6c 74 20 28 20 66 6c 61 67 te-result ( flag 10a0: 20 2d 2d 20 29 0a 0a 23 23 23 20 63 6f 6e 6e 65 -- )..### conne 10b0: 63 74 69 6f 6e 20 63 6f 6d 6d 61 6e 64 73 20 23 ction commands # 10c0: 23 23 0a 0a 2a 20 24 32 35 20 64 69 73 63 6f 6e ##..* $25 discon 10d0: 6e 65 63 74 20 28 20 2d 2d 20 29 0a 20 20 63 6c nect ( -- ). cl 10e0: 6f 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 2a ose connection.* 10f0: 20 24 32 36 20 73 65 74 2d 69 70 20 28 20 24 3a $26 set-ip ( $: 1100: 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 73 65 string -- ). se 1110: 74 20 61 64 64 72 65 73 73 20 69 6e 66 6f 72 6d t address inform 1120: 61 74 69 6f 6e 0a 2a 20 24 32 37 20 67 65 74 2d ation.* $27 get- 1130: 69 70 20 28 20 2d 2d 20 29 0a 20 20 72 65 71 75 ip ( -- ). requ 1140: 65 73 74 20 61 64 64 72 65 73 73 20 69 6e 66 6f est address info 1150: 72 6d 61 74 69 6f 6e 0a 2a 20 24 32 38 20 73 65 rmation.* $28 se 1160: 74 2d 62 6c 6f 63 6b 73 69 7a 65 20 28 20 6e 20 t-blocksize ( n 1170: 2d 2d 20 29 0a 20 20 73 65 74 20 62 6c 6f 63 6b -- ). set block 1180: 73 69 7a 65 20 74 6f 20 32 5e 6e 0a 2a 20 24 32 size to 2^n.* $2 1190: 39 20 73 65 74 2d 62 6c 6f 63 6b 61 6c 69 67 6e 9 set-blockalign 11a0: 20 28 20 6e 20 2d 2d 20 29 0a 20 20 73 65 74 20 ( n -- ). set 11b0: 62 6c 6f 63 6b 20 61 6c 69 67 6e 6d 65 6e 74 20 block alignment 11c0: 74 6f 20 32 5e 6e 0a 2a 20 24 32 41 20 63 6c 6f to 2^n.* $2A clo 11d0: 73 65 2d 61 6c 6c 20 28 20 2d 2d 20 29 0a 20 20 se-all ( -- ). 11e0: 63 6c 6f 73 65 20 61 6c 6c 20 66 69 6c 65 73 0a close all files. 11f0: 2a 20 24 32 42 20 73 65 74 2d 74 6f 70 20 28 20 * $2B set-top ( 1200: 75 74 6f 70 20 66 6c 61 67 20 2d 2d 20 29 0a 20 utop flag -- ). 1210: 20 73 65 74 20 74 6f 70 2c 20 66 6c 61 67 20 69 set top, flag i 1220: 73 20 74 72 75 65 20 77 68 65 6e 20 61 6c 6c 20 s true when all 1230: 64 61 74 61 20 69 73 20 73 65 6e 74 0a 2a 20 24 data is sent.* $ 1240: 32 43 20 73 6c 75 72 70 20 28 20 2d 2d 20 29 0a 2C slurp ( -- ). 1250: 20 20 73 6c 75 72 70 20 69 6e 20 74 72 61 63 6b slurp in track 1260: 65 64 20 66 69 6c 65 73 0a 2a 20 24 32 44 20 61 ed files.* $2D a 1270: 63 6b 2d 72 65 73 65 74 20 28 20 2d 2d 20 29 0a ck-reset ( -- ). 1280: 20 20 72 65 73 65 74 20 61 63 6b 20 73 74 61 74 reset ack stat 1290: 65 0a 0a 23 23 23 20 66 69 6c 65 20 63 6f 6d 6d e..### file comm 12a0: 61 6e 64 73 20 23 23 23 0a 0a 2a 20 24 33 30 20 ands ###..* $30 12b0: 66 69 6c 65 2d 69 64 20 28 20 75 69 64 20 2d 2d file-id ( uid -- 12c0: 20 6f 3a 66 69 6c 65 20 29 0a 20 20 63 68 6f 6f o:file ). choo 12d0: 73 65 20 61 20 66 69 6c 65 20 6f 62 6a 65 63 74 se a file object 12e0: 0a 2a 20 24 32 30 20 6f 70 65 6e 2d 66 69 6c 65 .* $20 open-file 12f0: 20 28 20 24 3a 73 74 72 69 6e 67 20 6d 6f 64 65 ( $:string mode 1300: 20 2d 2d 20 29 0a 20 20 6f 70 65 6e 20 66 69 6c -- ). open fil 1310: 65 20 77 69 74 68 20 6d 6f 64 65 0a 2a 20 24 32 e with mode.* $2 1320: 31 20 66 69 6c 65 2d 74 79 70 65 20 28 20 6e 20 1 file-type ( n 1330: 2d 2d 20 29 0a 20 20 63 68 6f 6f 73 65 20 66 69 -- ). choose fi 1340: 6c 65 20 74 79 70 65 0a 2a 20 24 32 32 20 63 6c le type.* $22 cl 1350: 6f 73 65 2d 66 69 6c 65 20 28 20 2d 2d 20 29 0a ose-file ( -- ). 1360: 20 20 63 6c 6f 73 65 20 66 69 6c 65 0a 2a 20 24 close file.* $ 1370: 32 33 20 73 65 74 2d 73 69 7a 65 20 28 20 73 69 23 set-size ( si 1380: 7a 65 20 2d 2d 20 29 0a 20 20 73 65 74 20 73 69 ze -- ). set si 1390: 7a 65 20 61 74 74 72 69 62 75 74 65 20 6f 66 20 ze attribute of 13a0: 63 75 72 72 65 6e 74 20 66 69 6c 65 0a 2a 20 24 current file.* $ 13b0: 32 34 20 73 65 74 2d 73 65 65 6b 20 28 20 75 73 24 set-seek ( us 13c0: 65 65 6b 20 2d 2d 20 29 0a 20 20 73 65 74 20 73 eek -- ). set s 13d0: 65 65 6b 20 61 74 74 72 69 62 75 74 65 20 6f 66 eek attribute of 13e0: 20 63 75 72 72 65 6e 74 20 66 69 6c 65 0a 2a 20 current file.* 13f0: 24 32 35 20 73 65 74 2d 6c 69 6d 69 74 20 28 20 $25 set-limit ( 1400: 75 6c 69 6d 69 74 20 2d 2d 20 29 0a 20 20 73 65 ulimit -- ). se 1410: 74 20 6c 69 6d 69 74 20 61 74 74 72 69 62 75 74 t limit attribut 1420: 65 20 6f 66 20 63 75 72 72 65 6e 74 20 66 69 6c e of current fil 1430: 65 0a 2a 20 24 32 36 20 73 65 74 2d 73 74 61 74 e.* $26 set-stat 1440: 20 28 20 75 6d 74 69 6d 65 20 75 6d 6f 64 20 2d ( umtime umod - 1450: 2d 20 29 0a 20 20 73 65 74 20 74 69 6d 65 20 61 - ). set time a 1460: 6e 64 20 6d 6f 64 65 20 6f 66 20 63 75 72 72 65 nd mode of curre 1470: 6e 74 20 66 69 6c 65 0a 2a 20 24 32 37 20 67 65 nt file.* $27 ge 1480: 74 2d 73 69 7a 65 20 28 20 2d 2d 20 29 0a 20 20 t-size ( -- ). 1490: 72 65 71 75 65 73 74 20 66 69 6c 65 20 73 69 7a request file siz 14a0: 65 0a 2a 20 24 32 38 20 67 65 74 2d 73 74 61 74 e.* $28 get-stat 14b0: 20 28 20 2d 2d 20 29 0a 20 20 72 65 71 75 65 73 ( -- ). reques 14c0: 74 20 73 74 61 74 20 6f 66 20 63 75 72 72 65 6e t stat of curren 14d0: 74 20 66 69 6c 65 0a 2a 20 24 32 39 20 73 65 74 t file.* $29 set 14e0: 2d 66 6f 72 6d 20 28 20 77 20 68 20 2d 2d 20 29 -form ( w h -- ) 14f0: 0a 20 20 69 66 20 66 69 6c 65 20 69 73 20 61 20 . if file is a 1500: 74 65 72 6d 69 6e 61 6c 2c 20 73 65 74 20 73 69 terminal, set si 1510: 7a 65 0a 2a 20 24 32 41 20 67 65 74 2d 66 6f 72 ze.* $2A get-for 1520: 6d 20 28 20 2d 2d 20 29 0a 20 20 69 66 20 66 69 m ( -- ). if fi 1530: 6c 65 20 69 73 20 61 20 74 65 72 6d 69 6e 61 6c le is a terminal 1540: 2c 20 72 65 71 75 65 73 74 20 73 69 7a 65 0a 2a , request size.* 1550: 20 24 32 42 20 70 6f 6c 6c 2d 72 65 71 75 65 73 $2B poll-reques 1560: 74 20 28 20 75 6c 69 6d 69 74 20 2d 2d 20 29 0a t ( ulimit -- ). 1570: 20 20 70 6f 6c 6c 20 61 20 66 69 6c 65 20 74 6f poll a file to 1580: 20 63 68 65 63 6b 20 66 6f 72 20 73 69 7a 65 20 check for size 1590: 63 68 61 6e 67 65 73 0a 0a 23 23 23 20 61 63 6b changes..### ack 15a0: 20 63 6f 6d 6d 61 6e 64 73 20 23 23 23 0a 0a 2a commands ###..* 15b0: 20 24 33 31 20 61 63 6b 20 28 20 2d 2d 20 6f 3a $31 ack ( -- o: 15c0: 61 63 6b 6f 20 29 0a 20 20 61 63 6b 20 6f 62 6a acko ). ack obj 15d0: 65 63 74 0a 2a 20 24 32 30 20 61 63 6b 2d 61 64 ect.* $20 ack-ad 15e0: 64 72 74 69 6d 65 20 28 20 75 74 69 6d 65 20 61 drtime ( utime a 15f0: 64 64 72 20 2d 2d 20 29 0a 20 20 70 61 63 6b 65 ddr -- ). packe 1600: 74 20 61 74 20 61 64 64 72 20 72 65 63 65 69 76 t at addr receiv 1610: 65 64 20 61 74 20 74 69 6d 65 0a 2a 20 24 32 31 ed at time.* $21 1620: 20 61 63 6b 2d 72 65 73 65 6e 64 20 28 20 66 6c ack-resend ( fl 1630: 61 67 20 2d 2d 20 29 0a 20 20 73 65 74 20 72 65 ag -- ). set re 1640: 73 65 6e 64 20 74 6f 67 67 6c 65 20 66 6c 61 67 send toggle flag 1650: 0a 2a 20 24 32 32 20 73 65 74 2d 72 61 74 65 20 .* $22 set-rate 1660: 28 20 75 72 61 74 65 20 75 64 65 6c 74 61 2d 74 ( urate udelta-t 1670: 20 2d 2d 20 29 0a 20 20 73 65 74 20 72 61 74 65 -- ). set rate 1680: 20 0a 2a 20 24 32 33 20 72 65 73 65 6e 64 2d 6d .* $23 resend-m 1690: 61 73 6b 20 28 20 61 64 64 72 20 75 6d 61 73 6b ask ( addr umask 16a0: 20 2d 2d 20 29 0a 20 20 72 65 73 65 6e 64 20 6d -- ). resend m 16b0: 61 73 6b 20 62 6c 6f 63 6b 73 20 73 74 61 72 74 ask blocks start 16c0: 69 6e 67 20 61 74 20 61 64 64 72 0a 2a 20 24 32 ing at addr.* $2 16d0: 34 20 74 72 61 63 6b 2d 74 69 6d 69 6e 67 20 28 4 track-timing ( 16e0: 20 2d 2d 20 29 0a 20 20 74 72 61 63 6b 20 74 69 -- ). track ti 16f0: 6d 69 6e 67 0a 2a 20 24 32 35 20 72 65 63 2d 74 ming.* $25 rec-t 1700: 69 6d 69 6e 67 20 28 20 24 3a 73 74 72 69 6e 67 iming ( $:string 1710: 20 2d 2d 20 29 0a 20 20 72 65 63 6f 72 64 65 64 -- ). recorded 1720: 20 74 69 6d 69 6e 67 0a 2a 20 24 32 36 20 73 65 timing.* $26 se 1730: 6e 64 2d 74 69 6d 69 6e 67 20 28 20 2d 2d 20 29 nd-timing ( -- ) 1740: 0a 20 20 72 65 71 75 65 73 74 20 72 65 63 6f 72 . request recor 1750: 64 65 64 20 74 69 6d 69 6e 67 0a 2a 20 24 32 37 ded timing.* $27 1760: 20 61 63 6b 2d 62 32 62 74 69 6d 65 20 28 20 75 ack-b2btime ( u 1770: 74 69 6d 65 20 61 64 64 72 20 2d 2d 20 29 0a 20 time addr -- ). 1780: 20 62 75 72 73 74 2d 74 6f 2d 62 75 72 73 74 20 burst-to-burst 1790: 74 69 6d 65 20 61 74 20 70 61 63 6b 65 74 20 61 time at packet a 17a0: 64 64 72 0a 2a 20 24 32 38 20 61 63 6b 2d 72 65 ddr.* $28 ack-re 17b0: 73 65 6e 64 23 20 28 20 61 64 64 72 20 24 3a 73 send# ( addr $:s 17c0: 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 72 65 73 tring -- ). res 17d0: 65 6e 64 20 6e 75 6d 62 65 72 73 0a 2a 20 24 32 end numbers.* $2 17e0: 39 20 61 63 6b 2d 66 6c 75 73 68 20 28 20 61 64 9 ack-flush ( ad 17f0: 64 72 20 2d 2d 20 29 0a 20 20 66 6c 75 73 68 65 dr -- ). flushe 1800: 64 20 74 6f 20 61 64 64 72 0a 2a 20 24 32 43 20 d to addr.* $2C 1810: 73 65 74 2d 72 74 64 65 6c 61 79 20 28 20 74 69 set-rtdelay ( ti 1820: 63 6b 73 20 2d 2d 20 29 0a 20 20 73 65 74 20 72 cks -- ). set r 1830: 6f 75 6e 64 20 74 72 69 70 20 64 65 6c 61 79 20 ound trip delay 1840: 6f 6e 6c 79 0a 2a 20 24 32 44 20 73 65 71 23 20 only.* $2D seq# 1850: 28 20 6e 20 2d 2d 20 29 0a 20 20 73 65 74 20 74 ( n -- ). set t 1860: 68 65 20 61 63 6b 20 6e 75 6d 62 65 72 20 61 6e he ack number an 1870: 64 20 63 68 65 63 6b 20 66 6f 72 20 73 6d 61 6c d check for smal 1880: 6c 65 72 0a 0a 23 23 23 20 6c 6f 67 20 63 6f 6d ler..### log com 1890: 6d 61 6e 64 73 20 23 23 23 0a 0a 2a 20 24 31 39 mands ###..* $19 18a0: 20 6c 6f 67 2d 74 6f 6b 65 6e 20 28 20 24 3a 74 log-token ( $:t 18b0: 6f 6b 65 6e 20 6e 20 2d 2d 20 29 0a 2a 20 24 32 oken n -- ).* $2 18c0: 30 20 65 6d 69 74 20 28 20 75 74 66 38 20 2d 2d 0 emit ( utf8 -- 18d0: 20 29 0a 20 20 65 6d 69 74 20 63 68 61 72 61 63 ). emit charac 18e0: 74 65 72 20 6f 6e 20 73 65 72 76 65 72 20 6c 6f ter on server lo 18f0: 67 0a 2a 20 24 32 31 20 74 79 70 65 20 28 20 24 g.* $21 type ( $ 1900: 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 74 :string -- ). t 1910: 79 70 65 20 73 74 72 69 6e 67 20 6f 6e 20 73 65 ype string on se 1920: 72 76 65 72 20 6c 6f 67 0a 2a 20 24 32 32 20 63 rver log.* $22 c 1930: 72 20 28 20 2d 2d 20 29 0a 20 20 6e 65 77 6c 69 r ( -- ). newli 1940: 6e 65 20 6f 6e 20 73 65 72 76 65 72 20 6c 6f 67 ne on server log 1950: 0a 2a 20 24 32 33 20 2e 20 28 20 6e 20 2d 2d 20 .* $23 . ( n -- 1960: 29 0a 20 20 70 72 69 6e 74 20 6e 75 6d 62 65 72 ). print number 1970: 20 6f 6e 20 73 65 72 76 65 72 20 6c 6f 67 0a 2a on server log.* 1980: 20 24 32 34 20 66 2e 20 28 20 72 20 2d 2d 20 29 $24 f. ( r -- ) 1990: 0a 20 20 70 72 69 6e 74 20 66 70 20 6e 75 6d 62 . print fp numb 19a0: 65 72 20 6f 6e 20 73 65 72 76 65 72 20 6c 6f 67 er on server log 19b0: 0a 2a 20 24 32 35 20 2e 74 69 6d 65 20 28 20 2d .* $25 .time ( - 19c0: 2d 20 29 0a 20 20 70 72 69 6e 74 20 74 69 6d 65 - ). print time 19d0: 72 20 74 6f 20 73 65 72 76 65 72 20 6c 6f 67 0a r to server log. 19e0: 2a 20 24 32 36 20 21 74 69 6d 65 20 28 20 2d 2d * $26 !time ( -- 19f0: 20 29 0a 20 20 73 74 61 72 74 20 74 69 6d 65 72 ). start timer 1a00: 0a 2a 20 24 33 32 20 6c 6f 67 20 28 20 2d 2d 20 .* $32 log ( -- 1a10: 6f 3a 6c 6f 67 20 29 0a 20 20 66 72 65 65 20 61 o:log ). free a 1a20: 6c 6c 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 ll parts of the 1a30: 73 75 62 6b 65 79 0a 0a 23 23 23 20 6b 65 79 20 subkey..### key 1a40: 73 74 6f 72 61 67 65 20 63 6f 6d 6d 61 6e 64 73 storage commands 1a50: 20 23 23 23 0a 2a 20 24 32 20 73 6c 69 74 20 28 ###.* $2 slit ( 1a60: 20 23 6c 69 74 20 2d 2d 20 29 0a 20 20 64 65 70 #lit -- ). dep 1a70: 72 65 63 61 74 65 64 20 73 6c 69 74 20 76 65 72 recated slit ver 1a80: 73 69 6f 6e 0a 2a 20 24 46 20 6b 76 65 72 73 69 sion.* $F kversi 1a90: 6f 6e 20 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d on ( $:string -- 1aa0: 20 29 0a 20 20 6b 65 79 20 76 65 72 73 69 6f 6e ). key version 1ab0: 0a 2a 20 24 31 31 20 70 72 69 76 6b 65 79 20 28 .* $11 privkey ( 1ac0: 20 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 $:string -- ). 1ad0: 20 70 72 69 76 61 74 65 20 6b 65 79 0a 2a 20 24 private key.* $ 1ae0: 31 32 20 6b 65 79 74 79 70 65 20 28 20 6e 20 2d 12 keytype ( n - 1af0: 2d 20 29 0a 20 20 6b 65 79 20 74 79 70 65 20 28 - ). key type ( 1b00: 30 3a 20 61 6e 6f 6e 2c 20 31 3a 20 75 73 65 72 0: anon, 1: user 1b10: 2c 20 32 3a 20 67 72 6f 75 70 29 0a 2a 20 24 31 , 2: group).* $1 1b20: 33 20 6b 65 79 6e 69 63 6b 20 28 20 24 3a 73 74 3 keynick ( $:st 1b30: 72 69 6e 67 20 2d 2d 20 29 0a 20 20 6b 65 79 20 ring -- ). key 1b40: 6e 69 63 6b 0a 2a 20 24 31 34 20 6b 65 79 70 72 nick.* $14 keypr 1b50: 6f 66 69 6c 65 20 28 20 24 3a 73 74 72 69 6e 67 ofile ( $:string 1b60: 20 2d 2d 20 29 0a 20 20 6b 65 79 20 70 72 6f 66 -- ). key prof 1b70: 69 6c 65 20 28 68 61 73 68 20 6f 66 20 61 20 72 ile (hash of a r 1b80: 65 73 6f 75 72 63 65 29 0a 2a 20 24 31 35 20 6b esource).* $15 k 1b90: 65 79 6d 61 73 6b 20 28 20 78 20 2d 2d 20 29 0a eymask ( x -- ). 1ba0: 20 20 6b 65 79 20 61 63 63 65 73 73 20 72 69 67 key access rig 1bb0: 68 74 20 6d 61 73 6b 0a 2a 20 24 31 36 20 6b 65 ht mask.* $16 ke 1bc0: 79 67 72 6f 75 70 73 20 28 20 24 3a 67 72 6f 75 ygroups ( $:grou 1bd0: 70 73 20 2d 2d 20 29 0a 20 20 61 63 63 65 73 73 ps -- ). access 1be0: 20 67 72 6f 75 70 73 0a 2a 20 24 31 37 20 2b 6b groups.* $17 +k 1bf0: 65 79 73 69 67 20 28 20 24 3a 73 74 72 69 6e 67 eysig ( $:string 1c00: 20 2d 2d 20 29 0a 20 20 61 64 64 20 61 20 6b 65 -- ). add a ke 1c10: 79 20 73 69 67 6e 61 74 75 72 65 0a 2a 20 24 31 y signature.* $1 1c20: 38 20 6b 65 79 69 6d 70 6f 72 74 20 28 20 6e 20 8 keyimport ( n 1c30: 2d 2d 20 29 0a 2a 20 24 31 39 20 72 73 6b 6b 65 -- ).* $19 rskke 1c40: 79 20 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d 2d y ( $:string --- 1c50: 20 29 0a 20 20 72 65 76 6f 6b 65 20 6b 65 79 2c ). revoke key, 1c60: 20 74 65 6d 70 6f 72 61 72 69 6c 79 20 73 74 6f temporarily sto 1c70: 72 65 64 0a 2a 20 24 31 41 20 6b 65 79 70 65 74 red.* $1A keypet 1c80: 20 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 ( $:string -- ) 1c90: 0a 2a 20 24 31 42 20 77 61 6c 6c 65 74 6b 65 79 .* $1B walletkey 1ca0: 20 28 20 24 3a 73 65 65 64 20 2d 2d 20 29 0a 2a ( $:seed -- ).* 1cb0: 20 24 31 43 20 61 76 61 74 61 72 20 28 20 24 3a $1C avatar ( $: 1cc0: 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 6b 65 string -- ). ke 1cd0: 79 20 61 76 61 74 61 72 20 70 72 6f 66 69 6c 65 y avatar profile 1ce0: 20 28 68 61 73 68 20 6f 66 20 61 20 72 65 73 6f (hash of a reso 1cf0: 75 72 63 65 29 0a 2a 20 24 31 44 20 6b 65 79 2d urce).* $1D key- 1d00: 73 74 72 69 6e 67 31 20 28 20 24 3a 73 74 72 69 string1 ( $:stri 1d10: 6e 67 20 2d 2d 20 29 0a 2a 20 24 31 45 20 6b 65 ng -- ).* $1E ke 1d20: 79 2d 73 74 72 69 6e 67 32 20 28 20 24 3a 73 74 y-string2 ( $:st 1d30: 72 69 6e 67 20 2d 2d 20 29 0a 2a 20 24 31 46 20 ring -- ).* $1F 1d40: 6b 65 79 2d 73 74 72 69 6e 67 33 20 28 20 24 3a key-string3 ( $: 1d50: 73 74 72 69 6e 67 20 2d 2d 20 29 0a 2a 20 24 32 string -- ).* $2 1d60: 30 20 6b 65 79 2d 73 74 72 69 6e 67 34 20 28 20 0 key-string4 ( 1d70: 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 2a 20 $:string -- ).* 1d80: 24 32 31 20 6b 65 79 2d 73 65 63 31 20 28 20 24 $21 key-sec1 ( $ 1d90: 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 2a 20 24 :string -- ).* $ 1da0: 32 32 20 6b 65 79 2d 73 65 63 32 20 28 20 24 3a 22 key-sec2 ( $: 1db0: 73 74 72 69 6e 67 20 2d 2d 20 29 0a 2a 20 24 32 string -- ).* $2 1dc0: 33 20 6b 65 79 2d 6e 75 6d 31 20 28 20 36 34 6e 3 key-num1 ( 64n 1dd0: 20 2d 2d 20 29 0a 2a 20 24 32 34 20 6b 65 79 2d -- ).* $24 key- 1de0: 6e 75 6d 32 20 28 20 36 34 6e 20 2d 2d 20 29 0a num2 ( 64n -- ). 1df0: 2a 20 24 32 35 20 6b 65 79 2d 6e 75 6d 33 20 28 * $25 key-num3 ( 1e00: 20 36 34 6e 20 2d 2d 20 29 0a 2a 20 24 32 36 20 64n -- ).* $26 1e10: 6b 65 79 2d 6e 75 6d 34 20 28 20 36 34 6e 20 2d key-num4 ( 64n - 1e20: 2d 20 29 0a 20 20 72 65 61 64 20 61 20 6e 65 73 - ). read a nes 1e30: 74 65 64 20 6b 65 79 20 69 6e 74 6f 20 73 61 6d ted key into sam 1e40: 70 6c 65 2d 6b 65 79 0a 0a 23 23 23 20 61 64 64 ple-key..### add 1e50: 72 65 73 73 20 63 6f 6d 6d 61 6e 64 73 20 23 23 ress commands ## 1e60: 23 0a 0a 2a 20 24 31 31 20 61 64 64 72 2d 70 72 #..* $11 addr-pr 1e70: 69 23 20 28 20 6e 20 2d 2d 20 29 0a 20 20 70 72 i# ( n -- ). pr 1e80: 69 6f 72 69 74 79 0a 2a 20 24 31 32 20 61 64 64 iority.* $12 add 1e90: 72 2d 69 64 20 28 20 24 3a 69 64 20 2d 2d 20 29 r-id ( $:id -- ) 1ea0: 0a 20 20 75 6e 69 71 75 65 20 68 6f 73 74 20 69 . unique host i 1eb0: 64 20 73 74 72 69 6e 67 0a 2a 20 24 31 33 20 61 d string.* $13 a 1ec0: 64 64 72 2d 61 6e 63 68 6f 72 20 28 20 24 3a 70 ddr-anchor ( $:p 1ed0: 75 62 6b 65 79 20 2d 2d 20 29 0a 20 20 61 6e 63 ubkey -- ). anc 1ee0: 68 6f 72 20 66 6f 72 20 72 6f 75 74 69 6e 67 20 hor for routing 1ef0: 66 75 72 74 68 65 72 0a 2a 20 24 31 34 20 61 64 further.* $14 ad 1f00: 64 72 2d 69 70 76 34 20 28 20 6e 20 2d 2d 20 29 dr-ipv4 ( n -- ) 1f10: 0a 20 20 69 70 20 61 64 64 72 65 73 73 0a 2a 20 . ip address.* 1f20: 24 31 35 20 61 64 64 72 2d 69 70 76 36 20 28 20 $15 addr-ipv6 ( 1f30: 24 3a 69 70 76 36 20 2d 2d 20 29 0a 20 20 69 70 $:ipv6 -- ). ip 1f40: 76 36 20 61 64 64 72 65 73 73 0a 2a 20 24 31 36 v6 address.* $16 1f50: 20 61 64 64 72 2d 70 6f 72 74 76 34 20 28 20 6e addr-portv4 ( n 1f60: 20 2d 2d 20 29 0a 20 20 69 70 76 34 20 70 6f 72 -- ). ipv4 por 1f70: 74 0a 2a 20 24 31 37 20 61 64 64 72 2d 70 6f 72 t.* $17 addr-por 1f80: 74 76 36 20 28 20 6e 20 2d 2d 20 29 0a 20 20 69 tv6 ( n -- ). i 1f90: 70 76 36 20 70 6f 72 74 0a 2a 20 24 31 38 20 61 pv6 port.* $18 a 1fa0: 64 64 72 2d 70 6f 72 74 20 28 20 6e 20 2d 2d 20 ddr-port ( n -- 1fb0: 29 0a 20 20 69 70 20 70 6f 72 74 2c 20 62 6f 74 ). ip port, bot 1fc0: 68 20 70 72 6f 74 6f 63 6f 6c 73 0a 2a 20 24 31 h protocols.* $1 1fd0: 39 20 61 64 64 72 2d 72 6f 75 74 65 20 28 20 24 9 addr-route ( $ 1fe0: 3a 6e 65 74 32 6f 20 2d 2d 20 29 0a 20 20 6e 65 :net2o -- ). ne 1ff0: 74 32 6f 20 72 6f 75 74 69 6e 67 20 70 61 72 74 t2o routing part 2000: 0a 2a 20 24 31 41 20 61 64 64 72 2d 6b 65 79 20 .* $1A addr-key 2010: 28 20 24 3a 61 64 64 72 20 2d 2d 20 29 0a 20 20 ( $:addr -- ). 2020: 6b 65 79 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 key for connecti 2030: 6f 6e 20 73 65 74 75 70 0a 2a 20 24 31 42 20 61 on setup.* $1B a 2040: 64 64 72 2d 72 65 76 6f 6b 65 20 28 20 24 3a 72 ddr-revoke ( $:r 2050: 65 76 6f 6b 65 20 2d 2d 20 29 0a 20 20 72 65 76 evoke -- ). rev 2060: 6f 63 61 74 69 6f 6e 20 69 6e 66 6f 0a 2a 20 24 ocation info.* $ 2070: 31 43 20 61 64 64 72 2d 65 6b 65 79 20 28 20 24 1C addr-ekey ( $ 2080: 3a 65 6b 65 79 20 2d 2d 20 29 0a 20 20 65 70 68 :ekey -- ). eph 2090: 65 6d 65 72 61 6c 20 6b 65 79 0a 0a 23 23 23 20 emeral key..### 20a0: 64 68 74 20 63 6f 6d 6d 61 6e 64 73 20 23 23 23 dht commands ### 20b0: 0a 0a 2a 20 24 33 33 20 64 68 74 2d 69 64 20 28 ..* $33 dht-id ( 20c0: 20 24 3a 73 74 72 69 6e 67 20 2d 2d 20 6f 3a 6f $:string -- o:o 20d0: 20 29 0a 20 20 73 65 74 20 44 48 54 20 69 64 20 ). set DHT id 20e0: 66 6f 72 20 66 75 72 74 68 65 72 20 6f 70 65 72 for further oper 20f0: 61 74 69 6f 6e 73 20 6f 6e 20 69 74 0a 2a 20 24 ations on it.* $ 2100: 32 30 20 64 68 74 2d 68 6f 73 74 2b 20 28 20 24 20 dht-host+ ( $ 2110: 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 61 :string -- ). a 2120: 64 64 20 68 6f 73 74 20 74 6f 20 44 48 54 0a 2a dd host to DHT.* 2130: 20 24 32 31 20 64 68 74 2d 68 6f 73 74 2d 20 28 $21 dht-host- ( 2140: 20 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 $:string -- ). 2150: 20 64 65 6c 65 74 65 20 68 6f 73 74 20 66 72 6f delete host fro 2160: 6d 20 44 48 54 0a 2a 20 24 32 32 20 64 68 74 2d m DHT.* $22 dht- 2170: 68 6f 73 74 3f 20 28 20 2d 2d 20 29 0a 20 20 71 host? ( -- ). q 2180: 75 65 72 79 20 44 48 54 20 68 6f 73 74 0a 2a 20 uery DHT host.* 2190: 24 32 33 20 64 68 74 2d 74 61 67 73 2b 20 28 20 $23 dht-tags+ ( 21a0: 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a 20 20 $:string -- ). 21b0: 61 64 64 20 74 61 67 73 20 74 6f 20 44 48 54 0a add tags to DHT. 21c0: 2a 20 24 32 34 20 64 68 74 2d 74 61 67 73 2d 20 * $24 dht-tags- 21d0: 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a ( $:string -- ). 21e0: 20 20 64 65 6c 65 74 65 20 74 61 67 73 20 66 72 delete tags fr 21f0: 6f 6d 20 44 48 54 0a 2a 20 24 32 35 20 64 68 74 om DHT.* $25 dht 2200: 2d 74 61 67 73 3f 20 28 20 2d 2d 20 29 0a 20 20 -tags? ( -- ). 2210: 71 75 65 72 79 20 44 48 54 20 74 61 67 73 0a 2a query DHT tags.* 2220: 20 24 32 36 20 64 68 74 2d 6f 77 6e 65 72 2b 20 $26 dht-owner+ 2230: 28 20 24 3a 73 74 72 69 6e 67 20 2d 2d 20 29 0a ( $:string -- ). 2240: 20 20 61 64 64 20 6f 77 6e 65 72 20 74 6f 20 44 add owner to D 2250: 48 54 0a 2a 20 24 32 37 20 64 68 74 2d 6f 77 6e HT.* $27 dht-own 2260: 65 72 2d 20 28 20 24 3a 73 74 72 69 6e 67 20 2d er- ( $:string - 2270: 2d 20 29 0a 20 20 64 65 6c 65 74 65 20 6f 77 6e - ). delete own 2280: 65 72 20 66 72 6f 6d 20 44 48 54 0a 2a 20 24 32 er from DHT.* $2 2290: 38 20 64 68 74 2d 6f 77 6e 65 72 3f 20 28 20 2d 8 dht-owner? ( - 22a0: 2d 20 29 0a 20 20 71 75 65 72 79 20 44 48 54 20 - ). query DHT 22b0: 6f 77 6e 65 72 0a 2a 20 24 32 39 20 64 68 74 2d owner.* $29 dht- 22c0: 68 61 76 65 2b 20 28 20 24 3a 73 74 72 69 6e 67 have+ ( $:string 22d0: 20 2d 2d 20 29 0a 20 20 61 64 64 20 68 61 76 65 -- ). add have 22e0: 20 74 6f 20 44 48 54 0a 2a 20 24 32 41 20 64 68 to DHT.* $2A dh 22f0: 74 2d 68 61 76 65 2d 20 28 20 24 3a 73 74 72 69 t-have- ( $:stri 2300: 6e 67 20 2d 2d 20 29 0a 20 20 64 65 6c 65 74 65 ng -- ). delete 2310: 20 68 61 76 65 20 66 72 6f 6d 20 44 48 54 0a 2a have from DHT.* 2320: 20 24 32 42 20 64 68 74 2d 68 61 76 65 3f 20 28 $2B dht-have? ( 2330: 20 2d 2d 20 29 0a 20 20 71 75 65 72 79 20 44 48 -- ). query DH 2340: 54 20 68 61 76 65 0a 0a 23 23 23 20 76 61 75 6c T have..### vaul 2350: 74 20 63 6f 6d 6d 61 6e 64 73 20 23 23 23 0a 0a t commands ###.. 2360: 2a 20 24 32 30 20 64 68 65 20 28 20 24 3a 70 75 * $20 dhe ( $:pu 2370: 62 6b 65 79 20 2d 2d 20 29 0a 20 20 73 74 61 72 bkey -- ). star 2380: 74 20 64 69 66 66 69 65 20 68 65 6c 6c 6d 61 6e t diffie hellman 2390: 20 65 78 63 68 61 6e 67 65 0a 2a 20 24 32 31 20 exchange.* $21 23a0: 76 61 75 6c 74 2d 6b 65 79 73 20 28 20 24 3a 6b vault-keys ( $:k 23b0: 65 79 73 20 2d 2d 20 29 0a 20 20 76 61 75 6c 74 eys -- ). vault 23c0: 20 6b 65 79 73 20 63 61 6e 20 62 65 20 6f 70 65 keys can be ope 23d0: 6e 65 64 20 77 69 74 68 20 74 68 65 20 64 68 65 ned with the dhe 23e0: 20 73 65 63 72 65 74 3b 20 65 61 63 68 20 6b 65 secret; each ke 23f0: 79 20 69 73 20 49 56 2b 73 65 73 73 69 6f 6e 20 y is IV+session 2400: 6b 65 79 2b 63 68 65 63 6b 73 75 6d 0a 2a 20 24 key+checksum.* $ 2410: 32 32 20 76 61 75 6c 74 2d 66 69 6c 65 20 28 20 22 vault-file ( 2420: 24 3a 63 6f 6e 74 65 6e 74 20 2d 2d 20 29 0a 20 $:content -- ). 2430: 20 74 68 69 73 20 69 73 20 74 68 65 20 61 63 74 this is the act 2440: 75 61 6c 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 ual content of t 2450: 68 65 20 76 61 75 6c 74 0a 20 20 69 66 20 62 6c he vault. if bl 2460: 6f 63 6b 77 69 73 65 2c 20 74 68 65 72 65 20 6d ockwise, there m 2470: 61 79 20 62 65 20 6d 75 6c 74 69 70 6c 65 20 70 ay be multiple p 2480: 61 72 74 73 0a 2a 20 24 32 33 20 76 61 75 6c 74 arts.* $23 vault 2490: 2d 73 69 67 20 28 20 24 3a 73 69 67 20 2d 2d 20 -sig ( $:sig -- 24a0: 29 0a 20 20 74 68 65 20 73 69 67 6e 61 74 75 72 ). the signatur 24b0: 65 20 6f 66 20 74 68 65 20 76 61 75 6c 74 2c 20 e of the vault, 24c0: 75 73 69 6e 67 20 74 68 65 20 6b 65 79 65 64 20 using the keyed 24d0: 68 61 73 68 20 6f 76 65 72 20 74 68 65 20 66 69 hash over the fi 24e0: 6c 65 0a 2a 20 24 32 34 20 76 61 75 6c 74 2d 63 le.* $24 vault-c 24f0: 72 79 70 74 20 28 20 6e 20 2d 2d 20 29 0a 20 20 rypt ( n -- ). 2500: 73 65 74 20 65 6e 63 72 79 70 74 69 6f 6e 20 6d set encryption m 2510: 6f 64 65 20 61 6e 64 20 6b 65 79 20 77 72 61 70 ode and key wrap 2520: 20 73 69 7a 65 0a 2a 20 24 32 35 20 76 61 75 6c size.* $25 vaul 2530: 74 2d 61 75 74 68 20 28 20 24 3a 61 75 74 68 20 t-auth ( $:auth 2540: 2d 2d 20 29 0a 20 20 62 6c 6f 63 6b 20 61 75 74 -- ). block aut 2550: 68 65 6e 74 69 63 61 74 69 6f 6e 2c 20 36 34 20 hentication, 64 2560: 62 79 74 65 20 62 6c 6f 63 6b 0a 2a 20 24 32 36 byte block.* $26 2570: 20 76 61 75 6c 74 2d 64 68 65 2d 6b 65 79 73 20 vault-dhe-keys 2580: 28 20 24 3a 64 68 65 2b 6b 65 79 73 20 2d 2d 20 ( $:dhe+keys -- 2590: 29 0a 0a 23 23 23 20 6d 65 73 73 61 67 65 20 63 )..### message c 25a0: 6f 6d 6d 61 6e 64 73 20 23 23 23 0a 0a 2a 20 24 ommands ###..* $ 25b0: 32 30 20 6d 73 67 2d 73 74 61 72 74 20 28 20 24 20 msg-start ( $ 25c0: 3a 70 6b 73 69 67 20 2d 2d 20 29 0a 20 20 73 74 :pksig -- ). st 25d0: 61 72 74 20 6d 65 73 73 61 67 65 0a 2a 20 24 32 art message.* $2 25e0: 31 20 6d 73 67 2d 74 61 67 20 28 20 24 3a 74 61 1 msg-tag ( $:ta 25f0: 67 20 2d 2d 20 29 0a 20 20 74 61 67 67 69 6e 67 g -- ). tagging 2600: 20 28 63 61 6e 20 62 65 20 61 6e 79 77 68 65 72 (can be anywher 2610: 65 29 0a 2a 20 24 32 32 20 6d 73 67 2d 69 64 20 e).* $22 msg-id 2620: 28 20 24 3a 69 64 20 2d 2d 20 29 0a 20 20 61 20 ( $:id -- ). a 2630: 68 61 73 68 20 69 64 0a 2a 20 24 32 33 20 6d 73 hash id.* $23 ms 2640: 67 2d 63 68 61 69 6e 20 28 20 24 3a 64 61 74 65 g-chain ( $:date 2650: 73 2c 73 69 67 68 61 73 68 20 2d 2d 20 29 0a 20 s,sighash -- ). 2660: 20 63 68 61 69 6e 65 64 20 74 6f 20 6d 65 73 73 chained to mess 2670: 61 67 65 5b 73 5d 0a 2a 20 24 32 34 20 6d 73 67 age[s].* $24 msg 2680: 2d 73 69 67 6e 61 6c 20 28 20 24 3a 70 75 62 6b -signal ( $:pubk 2690: 65 79 20 2d 2d 20 29 0a 20 20 73 69 67 6e 61 6c ey -- ). signal 26a0: 20 6d 65 73 73 61 67 65 20 74 6f 20 6f 6e 65 20 message to one 26b0: 70 65 72 73 6f 6e 0a 2a 20 24 32 35 20 6d 73 67 person.* $25 msg 26c0: 2d 72 65 20 28 20 24 3a 68 61 73 68 20 29 0a 20 -re ( $:hash ). 26d0: 20 72 65 6c 61 74 65 20 74 6f 20 73 6f 6d 65 20 relate to some 26e0: 6f 62 6a 65 63 74 0a 2a 20 24 32 36 20 6d 73 67 object.* $26 msg 26f0: 2d 74 65 78 74 20 28 20 24 3a 6d 73 67 20 2d 2d -text ( $:msg -- 2700: 20 29 0a 20 20 73 70 65 63 69 66 79 20 6d 65 73 ). specify mes 2710: 73 61 67 65 20 73 74 72 69 6e 67 0a 2a 20 24 32 sage string.* $2 2720: 37 20 6d 73 67 2d 6f 62 6a 65 63 74 20 28 20 24 7 msg-object ( $ 2730: 3a 6f 62 6a 65 63 74 20 74 79 70 65 20 2d 2d 20 :object type -- 2740: 29 0a 20 20 73 70 65 63 69 66 79 20 61 6e 20 6f ). specify an o 2750: 62 6a 65 63 74 2c 20 65 2e 67 2e 20 61 6e 20 69 bject, e.g. an i 2760: 6d 61 67 65 0a 2a 20 24 32 38 20 6d 73 67 2d 61 mage.* $28 msg-a 2770: 63 74 69 6f 6e 20 28 20 24 3a 6d 73 67 20 2d 2d ction ( $:msg -- 2780: 20 29 0a 20 20 73 70 65 63 69 66 79 20 61 63 74 ). specify act 2790: 69 6f 6e 20 73 74 72 69 6e 67 0a 2a 20 24 32 39 ion string.* $29 27a0: 20 6d 73 67 2d 70 61 79 6d 65 6e 74 20 28 20 24 msg-payment ( $ 27b0: 3a 63 6f 6e 74 72 61 63 74 20 2d 2d 20 29 0a 20 :contract -- ). 27c0: 20 70 61 79 6d 65 6e 74 20 74 72 61 6e 73 61 63 payment transac 27d0: 74 69 6f 6e 0a 2a 20 24 32 41 20 6d 73 67 2d 6f tion.* $2A msg-o 27e0: 74 72 69 66 79 20 28 20 24 3a 64 61 74 65 2b 73 trify ( $:date+s 27f0: 69 67 20 24 3a 6e 65 77 64 61 74 65 2b 73 69 67 ig $:newdate+sig 2800: 20 2d 2d 20 29 0a 20 20 74 75 72 6e 20 61 20 70 -- ). turn a p 2810: 61 73 74 20 6d 65 73 73 61 67 65 20 69 6e 74 6f ast message into 2820: 20 4f 54 52 0a 2a 20 24 32 42 20 6d 73 67 2d 63 OTR.* $2B msg-c 2830: 6f 6f 72 64 20 28 20 24 3a 67 70 73 20 2d 2d 20 oord ( $:gps -- 2840: 29 0a 20 20 47 50 53 20 63 6f 6f 72 64 69 6e 61 ). GPS coordina 2850: 74 65 73 0a 2a 20 24 32 43 20 6d 73 67 2d 75 72 tes.* $2C msg-ur 2860: 6c 20 28 20 24 3a 75 72 6c 20 2d 2d 20 29 0a 20 l ( $:url -- ). 2870: 20 73 70 65 63 69 66 79 20 6d 65 73 73 61 67 65 specify message 2880: 20 55 52 4c 0a 2a 20 24 32 44 20 6d 73 67 2d 6c URL.* $2D msg-l 2890: 69 6b 65 20 28 20 78 63 68 61 72 20 2d 2d 20 29 ike ( xchar -- ) 28a0: 0a 20 20 61 64 64 20 61 20 6c 69 6b 65 0a 2a 20 . add a like.* 28b0: 24 32 45 20 6d 73 67 2d 6c 6f 63 6b 20 28 20 24 $2E msg-lock ( $ 28c0: 3a 6b 65 79 20 2d 2d 20 29 0a 20 20 6c 6f 63 6b :key -- ). lock 28d0: 20 64 6f 77 6e 20 63 6f 6d 6d 75 6e 63 69 61 74 down communciat 28e0: 69 6f 6e 0a 2a 20 24 32 46 20 6d 73 67 2d 75 6e ion.* $2F msg-un 28f0: 6c 6f 63 6b 20 28 20 2d 2d 20 29 0a 20 20 75 6e lock ( -- ). un 2900: 6c 6f 63 6b 20 63 6f 6d 6d 75 6e 69 63 61 74 69 lock communicati 2910: 6f 6e 0a 2a 20 24 33 30 20 6d 73 67 2d 70 65 72 on.* $30 msg-per 2920: 6d 73 20 28 20 24 3a 70 6b 20 70 65 72 6d 20 2d ms ( $:pk perm - 2930: 2d 20 29 0a 20 20 70 65 72 6d 69 73 73 69 6f 6e - ). permission 2940: 73 0a 0a 23 23 23 20 67 72 6f 75 70 20 64 65 73 s..### group des 2950: 63 72 69 70 74 69 6f 6e 20 63 6f 6d 6d 61 6e 64 cription command 2960: 73 20 23 23 23 0a 0a 2a 20 24 32 30 20 67 72 6f s ###..* $20 gro 2970: 75 70 2d 6e 61 6d 65 20 28 20 24 3a 6e 61 6d 65 up-name ( $:name 2980: 20 2d 2d 20 29 0a 20 20 67 72 6f 75 70 20 73 79 -- ). group sy 2990: 6d 62 6f 6c 69 63 20 6e 61 6d 65 0a 2a 20 24 32 mbolic name.* $2 29a0: 31 20 67 72 6f 75 70 2d 69 64 20 28 20 24 3a 67 1 group-id ( $:g 29b0: 72 6f 75 70 20 2d 2d 20 29 0a 20 20 67 72 6f 75 roup -- ). grou 29c0: 70 20 69 64 2c 20 69 73 20 61 20 70 75 62 6b 65 p id, is a pubke 29d0: 79 0a 2a 20 24 32 32 20 67 72 6f 75 70 2d 6d 65 y.* $22 group-me 29e0: 6d 62 65 72 20 28 20 24 3a 6d 65 6d 62 65 72 6b mber ( $:memberk 29f0: 65 79 20 2d 2d 20 29 0a 20 20 61 64 64 20 6d 65 ey -- ). add me 2a00: 6d 62 65 72 20 6b 65 79 0a 2a 20 24 32 33 20 67 mber key.* $23 g 2a10: 72 6f 75 70 2d 61 64 6d 69 6e 20 28 20 24 3a 61 roup-admin ( $:a 2a20: 64 6d 69 6e 6b 65 79 20 2d 2d 20 29 0a 20 20 73 dminkey -- ). s 2a30: 65 74 20 61 64 6d 69 6e 20 6b 65 79 0a 2a 20 24 et admin key.* $ 2a40: 32 34 20 67 72 6f 75 70 2d 70 65 72 6d 73 20 28 24 group-perms ( 2a50: 20 36 34 75 20 2d 2d 20 29 0a 20 20 70 65 72 6d 64u -- ). perm 2a60: 69 73 73 69 6f 6e 2f 6d 6f 64 65 73 20 62 69 74 ission/modes bit 2a70: 6d 61 73 6b 0a 0a 23 23 23 20 6d 65 73 73 61 67 mask..### messag 2a80: 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 23 23 23 ing commands ### 2a90: 0a 0a 2a 20 24 33 34 20 6d 65 73 73 61 67 65 20 ..* $34 message 2aa0: 28 20 2d 2d 20 6f 3a 6d 73 67 20 29 0a 20 20 70 ( -- o:msg ). p 2ab0: 75 73 68 20 61 20 6d 65 73 73 61 67 65 20 6f 62 ush a message ob 2ac0: 6a 65 63 74 0a 2a 20 24 32 31 20 6d 73 67 2d 67 ject.* $21 msg-g 2ad0: 72 6f 75 70 20 28 20 24 3a 67 72 6f 75 70 20 2d roup ( $:group - 2ae0: 2d 20 29 0a 20 20 73 65 74 20 67 72 6f 75 70 0a - ). set group. 2af0: 2a 20 24 32 32 20 6d 73 67 2d 6a 6f 69 6e 20 28 * $22 msg-join ( 2b00: 20 24 3a 67 72 6f 75 70 20 2d 2d 20 29 0a 20 20 $:group -- ). 2b10: 6a 6f 69 6e 20 61 20 63 68 61 74 20 67 72 6f 75 join a chat grou 2b20: 70 0a 2a 20 24 32 33 20 6d 73 67 2d 6c 65 61 76 p.* $23 msg-leav 2b30: 65 20 28 20 24 3a 67 72 6f 75 70 20 2d 2d 20 29 e ( $:group -- ) 2b40: 0a 20 20 6c 65 61 76 65 20 61 20 63 68 61 74 20 . leave a chat 2b50: 67 72 6f 75 70 0a 2a 20 24 32 34 20 6d 73 67 2d group.* $24 msg- 2b60: 72 65 63 6f 6e 6e 65 63 74 20 28 20 24 3a 70 75 reconnect ( $:pu 2b70: 62 6b 65 79 2b 61 64 64 72 20 2d 2d 20 29 0a 20 bkey+addr -- ). 2b80: 20 72 65 77 69 72 65 20 64 69 73 74 72 69 62 75 rewire distribu 2b90: 74 69 6f 6e 20 74 72 65 65 0a 2a 20 24 32 35 20 tion tree.* $25 2ba0: 6d 73 67 2d 6c 61 73 74 3f 20 28 20 73 74 61 72 msg-last? ( star 2bb0: 74 20 65 6e 64 20 6e 20 2d 2d 20 29 0a 2a 20 24 t end n -- ).* $ 2bc0: 32 36 20 6d 73 67 2d 6c 61 73 74 20 28 20 24 3a 26 msg-last ( $: 2bd0: 5b 74 69 63 6b 30 2c 6d 73 67 73 2c 2e 2e 74 69 [tick0,msgs,..ti 2be0: 63 6b 6e 5d 20 6e 20 2d 2d 20 29 0a 2a 20 24 41 ckn] n -- ).* $A 2bf0: 20 6d 73 67 2d 6e 65 73 74 73 69 67 20 28 20 24 msg-nestsig ( $ 2c00: 3a 63 6d 64 2b 73 69 67 20 2d 2d 20 29 0a 20 20 :cmd+sig -- ). 2c10: 63 68 65 63 6b 20 73 69 67 2b 6e 65 73 74 0a 0a check sig+nest.. 2c20: 23 23 23 20 44 56 43 53 20 70 61 74 63 68 20 63 ### DVCS patch c 2c30: 6f 6d 6d 61 6e 64 73 20 23 23 23 0a 0a 44 56 43 ommands ###..DVC 2c40: 53 20 6d 65 74 61 64 61 74 61 20 69 73 20 73 74 S metadata is st 2c50: 6f 72 65 64 20 69 6e 20 6d 65 73 73 61 67 65 73 ored in messages 2c60: 2c 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 65 73 , containing mes 2c70: 73 61 67 65 20 74 65 78 74 2c 20 72 65 66 73 0a sage text, refs. 2c80: 61 6e 64 20 70 61 74 63 68 73 65 74 20 6f 62 6a and patchset obj 2c90: 65 63 74 73 2e 20 50 61 74 63 68 73 65 74 20 6f ects. Patchset o 2ca0: 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 73 74 bjects are const 2cb0: 72 75 63 74 65 64 20 69 6e 20 61 20 77 61 79 0a ructed in a way. 2cc0: 74 68 61 74 20 6d 61 6b 65 73 20 69 64 65 6e 74 that makes ident 2cd0: 69 63 61 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e ical transaction 2ce0: 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 s have the same 2cf0: 68 61 73 68 2e 0a 0a 2a 20 24 32 30 20 64 76 63 hash...* $20 dvc 2d00: 73 2d 72 65 61 64 20 28 20 24 3a 68 61 73 68 20 s-read ( $:hash 2d10: 2d 2d 20 29 0a 20 20 72 65 61 64 20 69 6e 20 61 -- ). read in a 2d20: 6e 20 6f 62 6a 65 63 74 0a 2a 20 24 32 31 20 64 n object.* $21 d 2d30: 76 63 73 2d 72 6d 20 28 20 24 3a 68 61 73 68 2b vcs-rm ( $:hash+ 2d40: 6e 61 6d 65 20 2d 2d 20 29 0a 20 20 64 65 6c 65 name -- ). dele 2d50: 74 65 20 66 69 6c 65 0a 2a 20 24 32 32 20 64 76 te file.* $22 dv 2d60: 63 73 2d 72 6d 64 69 72 20 28 20 24 3a 6e 61 6d cs-rmdir ( $:nam 2d70: 65 20 2d 2d 20 29 0a 20 20 64 65 6c 65 74 65 20 e -- ). delete 2d80: 64 69 72 65 63 74 6f 72 79 0a 2a 20 24 32 33 20 directory.* $23 2d90: 64 76 63 73 2d 70 61 74 63 68 20 28 20 24 3a 64 dvcs-patch ( $:d 2da0: 69 66 66 20 6c 65 6e 20 2d 2d 20 29 0a 20 20 61 iff len -- ). a 2db0: 70 70 6c 79 20 70 61 74 63 68 2c 20 6c 65 6e 20 pply patch, len 2dc0: 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 is the size of t 2dd0: 68 65 20 72 65 73 75 6c 74 0a 2a 20 24 32 34 20 he result.* $24 2de0: 64 76 63 73 2d 77 72 69 74 65 20 28 20 24 3a 70 dvcs-write ( $:p 2df0: 65 72 6d 2b 6e 61 6d 65 20 73 69 7a 65 20 2d 2d erm+name size -- 2e00: 20 29 0a 20 20 77 72 69 74 65 20 6f 75 74 20 66 ). write out f 2e10: 69 6c 65 0a 2a 20 24 32 35 20 64 76 63 73 2d 75 ile.* $25 dvcs-u 2e20: 6e 7a 69 70 20 28 20 24 3a 64 69 66 66 67 7a 20 nzip ( $:diffgz 2e30: 73 69 7a 65 20 61 6c 67 6f 20 2d 2d 20 24 3a 64 size algo -- $:d 2e40: 69 66 66 20 29 0a 20 20 75 6e 7a 69 70 20 61 6e iff ). unzip an 2e50: 20 6f 62 6a 65 63 74 0a 2a 20 24 32 36 20 64 76 object.* $26 dv 2e60: 63 73 2d 72 65 66 20 28 20 24 3a 68 61 73 68 2b cs-ref ( $:hash+ 2e70: 70 65 72 6d 2b 6e 61 6d 65 20 2d 2d 20 29 0a 20 perm+name -- ). 2e80: 20 65 78 74 65 72 6e 61 6c 20 68 61 73 68 20 72 external hash r 2e90: 65 66 65 72 65 6e 63 65 0a 0a 23 23 23 20 70 61 eference..### pa 2ea0: 79 6d 65 6e 74 20 63 6f 6d 6d 61 6e 64 73 20 23 yment commands # 2eb0: 23 23 0a 0a 2a 20 24 32 30 20 70 61 79 2d 73 6f ##..* $20 pay-so 2ec0: 75 72 63 65 20 28 20 24 3a 73 6f 75 72 63 65 20 urce ( $:source 2ed0: 2d 2d 20 29 0a 20 20 73 6f 75 72 63 65 2c 20 70 -- ). source, p 2ee0: 6b 5b 2b 68 61 73 68 5d 20 66 6f 72 20 6c 6f 6f k[+hash] for loo 2ef0: 6b 75 70 0a 2a 20 24 32 31 20 70 61 79 2d 73 69 kup.* $21 pay-si 2f00: 6e 6b 20 28 20 6e 20 24 3a 73 69 67 20 2d 2d 20 nk ( n $:sig -- 2f10: 29 0a 20 20 73 69 6e 6b 2c 20 73 69 67 6e 61 74 ). sink, signat 2f20: 75 72 65 0a 2a 20 24 32 32 20 70 61 79 2d 61 73 ure.* $22 pay-as 2f30: 73 65 74 20 28 20 61 73 73 65 74 20 2d 2d 20 29 set ( asset -- ) 2f40: 0a 20 20 73 65 6c 65 63 74 20 67 6c 6f 62 61 6c . select global 2f50: 20 61 73 73 65 74 20 74 79 70 65 0a 2a 20 24 32 asset type.* $2 2f60: 33 20 70 61 79 2d 6f 62 6c 69 67 61 74 69 6f 6e 3 pay-obligation 2f70: 20 28 20 24 3a 65 6e 63 2d 61 73 73 65 74 20 2d ( $:enc-asset - 2f80: 2d 20 29 0a 20 20 73 65 6c 65 63 74 20 70 65 72 - ). select per 2f90: 2d 63 6f 6e 74 72 61 63 74 20 6f 62 6c 69 67 61 -contract obliga 2fa0: 74 69 6f 6e 0a 2a 20 24 32 34 20 70 61 79 2d 61 tion.* $24 pay-a 2fb0: 6d 6f 75 6e 74 20 28 20 36 34 61 6d 6f 75 6e 74 mount ( 64amount 2fc0: 20 2d 2d 20 29 0a 20 20 61 64 64 2f 73 75 62 74 -- ). add/subt 2fd0: 72 61 63 74 20 61 6d 6f 75 6e 74 20 74 6f 20 63 ract amount to c 2fe0: 75 72 72 65 6e 74 20 61 73 73 65 74 0a 2a 20 24 urrent asset.* $ 2ff0: 32 35 20 70 61 79 2d 64 61 6d 6f 75 6e 74 20 28 25 pay-damount ( 3000: 20 31 32 38 61 6d 6f 75 6e 74 20 2d 2d 20 29 0a 128amount -- ). 3010: 20 20 61 64 64 2f 73 75 62 74 72 61 63 74 20 31 add/subtract 1 3020: 32 38 20 62 69 74 20 61 6d 6f 75 6e 74 0a 2a 20 28 bit amount.* 3030: 24 32 36 20 70 61 79 2d 63 6f 6d 6d 65 6e 74 20 $26 pay-comment 3040: 28 20 24 3a 65 6e 63 2d 63 6f 6d 6d 65 6e 74 20 ( $:enc-comment 3050: 2d 2d 20 29 0a 20 20 63 6f 6d 6d 65 6e 74 2c 20 -- ). comment, 3060: 65 6e 63 72 79 70 74 65 64 20 66 6f 72 20 73 65 encrypted for se 3070: 6c 65 63 74 65 64 20 6b 65 79 0a 2a 20 24 32 37 lected key.* $27 3080: 20 70 61 79 2d 62 61 6c 61 6e 63 65 20 28 20 75 pay-balance ( u 3090: 20 2d 2d 20 29 0a 20 20 73 65 6c 65 63 74 26 62 -- ). select&b 30a0: 61 6c 61 6e 63 65 20 61 73 73 65 74 0a 2a 20 24 alance asset.* $ 30b0: 32 38 20 70 61 79 2d 23 73 6f 75 72 63 65 20 28 28 pay-#source ( 30c0: 20 75 20 2d 2d 20 29 0a 20 20 73 65 6c 65 63 74 u -- ). select 30d0: 20 73 6f 75 72 63 65 0a 0a 23 23 23 20 43 6f 6e source..### Con 30e0: 74 72 61 63 74 73 20 23 23 23 0a 0a 43 6f 6e 74 tracts ###..Cont 30f0: 72 61 63 74 73 20 61 72 65 20 73 74 61 74 65 20 racts are state 3100: 63 68 61 6e 67 65 73 20 74 6f 20 77 61 6c 6c 65 changes to walle 3110: 74 73 2e 20 20 41 20 73 65 72 69 61 6c 69 7a 65 ts. A serialize 3120: 64 20 77 61 6c 6c 65 74 20 69 73 20 61 20 63 6f d wallet is a co 3130: 6e 74 72 61 63 74 0a 74 68 61 74 20 63 6f 6e 74 ntract.that cont 3140: 61 69 6e 73 20 61 6c 6c 20 74 68 65 20 63 68 61 ains all the cha 3150: 6e 67 65 73 20 66 72 6f 6d 20 61 6e 20 65 6d 70 nges from an emp 3160: 74 79 20 77 61 6c 6c 65 74 20 74 6f 20 66 69 6c ty wallet to fil 3170: 6c 20 69 74 3b 20 69 74 20 69 73 20 6e 6f 74 0a l it; it is not. 3180: 63 68 65 63 6b 65 64 20 66 6f 72 20 62 61 6c 61 checked for bala 3190: 6e 63 65 2e 0a 0a 41 20 64 75 6d 62 20 63 6f 6e nce...A dumb con 31a0: 74 72 61 63 74 20 69 73 20 63 68 65 63 6b 65 64 tract is checked 31b0: 20 66 6f 72 20 62 61 6c 61 6e 63 65 2e 20 20 49 for balance. I 31c0: 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 73 65 t consists of se 31d0: 76 65 72 61 6c 20 73 65 6c 65 63 74 6f 72 73 0a veral selectors. 31e0: 28 73 6f 75 72 63 65 2f 61 63 63 6f 75 6e 74 2c (source/account, 31f0: 20 61 73 73 65 74 29 2c 20 74 72 61 6e 73 61 63 asset), transac 3200: 74 69 6f 6e 73 20 28 61 6d 6f 75 6e 74 73 20 61 tions (amounts a 3210: 64 64 65 64 20 6f 72 20 73 75 62 74 72 61 63 74 dded or subtract 3220: 65 64 20 66 72 6f 6d 20 61 6e 0a 61 73 73 65 74 ed from an.asset 3230: 29 2c 20 63 6f 6d 6d 65 6e 74 73 20 28 65 6e 63 ), comments (enc 3240: 6f 64 65 64 20 66 6f 72 20 74 68 65 20 72 65 63 oded for the rec 3250: 65 69 76 65 72 2c 20 77 69 74 68 20 61 20 65 70 eiver, with a ep 3260: 68 65 72 6d 65 72 61 6c 20 70 75 62 6b 65 79 20 hermeral pubkey 3270: 61 73 0a 73 74 61 72 74 20 61 6e 64 20 61 20 48 as.start and a H 3280: 4d 41 43 20 61 73 20 65 6e 64 29 2e 20 43 6f 6d MAC as end). Com 3290: 6d 65 6e 74 73 20 61 72 65 20 66 69 78 65 64 20 ments are fixed 32a0: 36 34 20 62 79 74 65 73 2c 20 65 69 74 68 65 72 64 bytes, either 32b0: 20 70 6c 61 69 6e 20 74 65 78 74 20 6f 72 0a 68 plain text or.h 32c0: 61 73 68 65 73 20 74 6f 20 66 69 6c 65 73 2e 20 ashes to files. 32d0: 20 54 72 61 6e 73 61 63 74 69 6f 6e 73 20 68 61 Transactions ha 32e0: 76 65 20 74 6f 20 62 61 6c 61 6e 63 65 2c 20 77 ve to balance, w 32f0: 68 69 63 68 20 69 73 20 66 61 63 69 6c 69 74 61 hich is facilita 3300: 74 65 64 20 77 69 74 68 0a 74 68 65 20 62 61 6c ted with.the bal 3310: 61 6e 63 65 20 63 6f 6d 6d 61 6e 64 2c 20 77 68 ance command, wh 3320: 69 63 68 20 62 61 6c 61 6e 63 65 73 20 74 68 65 ich balances the 3330: 20 73 65 6c 65 63 74 65 64 20 61 73 73 65 74 2e selected asset. 3340: 0a 0a 54 68 65 20 73 69 67 6e 61 74 75 72 65 20 ..The signature 3350: 6f 66 20 61 20 63 6f 6e 74 72 61 63 74 20 73 69 of a contract si 3360: 67 6e 73 20 74 68 65 20 77 61 6c 6c 65 74 27 73 gns the wallet's 3370: 20 73 74 61 74 65 20 28 73 65 72 69 61 6c 69 7a state (serializ 3380: 65 64 20 69 6e 0a 6e 6f 72 6d 61 6c 69 7a 65 64 ed in.normalized 3390: 20 66 6f 72 6d 29 20 61 66 74 65 72 20 74 68 65 form) after the 33a0: 20 63 6f 6e 74 72 61 63 74 20 68 61 73 20 62 65 contract has be 33b0: 65 6e 20 65 78 65 63 75 74 65 64 2e 20 20 54 68 en executed. Th 33c0: 65 20 63 75 72 72 65 6e 74 0a 63 6f 6e 74 72 61 e current.contra 33d0: 63 74 27 73 20 68 61 73 68 20 69 73 20 70 61 72 ct's hash is par 33e0: 74 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 t of the seriali 33f0: 7a 61 74 69 6f 6e 2e 0a zation..