Hex Artifact Content
Not logged in

Artifact 2cc4a0badf3a14bb50a1a2dadc136c5a6d95a472:


0000: 2f 2a 0a 54 68 65 20 4b 65 63 63 61 6b 20 73 70  /*.The Keccak sp
0010: 6f 6e 67 65 20 66 75 6e 63 74 69 6f 6e 2c 20 64  onge function, d
0020: 65 73 69 67 6e 65 64 20 62 79 20 47 75 69 64 6f  esigned by Guido
0030: 20 42 65 72 74 6f 6e 69 2c 20 4a 6f 61 6e 20 44   Bertoni, Joan D
0040: 61 65 6d 65 6e 2c 0a 4d 69 63 68 61 c3 ab 6c 20  aemen,.Michaël 
0050: 50 65 65 74 65 72 73 20 61 6e 64 20 47 69 6c 6c  Peeters and Gill
0060: 65 73 20 56 61 6e 20 41 73 73 63 68 65 2e 20 46  es Van Assche. F
0070: 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74  or more informat
0080: 69 6f 6e 2c 20 66 65 65 64 62 61 63 6b 20 6f 72  ion, feedback or
0090: 0a 71 75 65 73 74 69 6f 6e 73 2c 20 70 6c 65 61  .questions, plea
00a0: 73 65 20 72 65 66 65 72 20 74 6f 20 6f 75 72 20  se refer to our 
00b0: 77 65 62 73 69 74 65 3a 20 68 74 74 70 3a 2f 2f  website: http://
00c0: 6b 65 63 63 61 6b 2e 6e 6f 65 6b 65 6f 6e 2e 6f  keccak.noekeon.o
00d0: 72 67 2f 0a 0a 49 6d 70 6c 65 6d 65 6e 74 61 74  rg/..Implementat
00e0: 69 6f 6e 20 62 79 20 74 68 65 20 64 65 73 69 67  ion by the desig
00f0: 6e 65 72 73 2c 0a 68 65 72 65 62 79 20 64 65 6e  ners,.hereby den
0100: 6f 74 65 64 20 61 73 20 22 74 68 65 20 69 6d 70  oted as "the imp
0110: 6c 65 6d 65 6e 74 65 72 22 2e 0a 0a 54 6f 20 74  lementer"...To t
0120: 68 65 20 65 78 74 65 6e 74 20 70 6f 73 73 69 62  he extent possib
0130: 6c 65 20 75 6e 64 65 72 20 6c 61 77 2c 20 74 68  le under law, th
0140: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 72 20 68 61  e implementer ha
0150: 73 20 77 61 69 76 65 64 20 61 6c 6c 20 63 6f 70  s waived all cop
0160: 79 72 69 67 68 74 0a 61 6e 64 20 72 65 6c 61 74  yright.and relat
0170: 65 64 20 6f 72 20 6e 65 69 67 68 62 6f 72 69 6e  ed or neighborin
0180: 67 20 72 69 67 68 74 73 20 74 6f 20 74 68 65 20  g rights to the 
0190: 73 6f 75 72 63 65 20 63 6f 64 65 20 69 6e 20 74  source code in t
01a0: 68 69 73 20 66 69 6c 65 2e 0a 68 74 74 70 3a 2f  his file..http:/
01b0: 2f 63 72 65 61 74 69 76 65 63 6f 6d 6d 6f 6e 73  /creativecommons
01c0: 2e 6f 72 67 2f 70 75 62 6c 69 63 64 6f 6d 61 69  .org/publicdomai
01d0: 6e 2f 7a 65 72 6f 2f 31 2e 30 2f 0a 2a 2f 0a 0a  n/zero/1.0/.*/..
01e0: 23 64 65 66 69 6e 65 20 64 65 63 6c 61 72 65 41  #define declareA
01f0: 42 43 44 45 20 5c 0a 20 20 20 20 56 31 32 38 20  BCDE \.    V128 
0200: 41 62 61 67 65 2c 20 41 62 65 67 69 2c 20 41 62  Abage, Abegi, Ab
0210: 69 67 6f 2c 20 41 62 6f 67 75 2c 20 41 62 75 67  igo, Abogu, Abug
0220: 61 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 41 6b  a; \.    V128 Ak
0230: 61 6d 65 2c 20 41 6b 65 6d 69 2c 20 41 6b 69 6d  ame, Akemi, Akim
0240: 6f 2c 20 41 6b 6f 6d 75 2c 20 41 6b 75 6d 61 3b  o, Akomu, Akuma;
0250: 20 5c 0a 20 20 20 20 56 31 32 38 20 41 62 61 65   \.    V128 Abae
0260: 2c 20 41 62 69 6f 2c 20 41 67 61 65 2c 20 41 67  , Abio, Agae, Ag
0270: 69 6f 2c 20 41 6b 61 65 2c 20 41 6b 69 6f 2c 20  io, Akae, Akio, 
0280: 41 6d 61 65 2c 20 41 6d 69 6f 3b 20 5c 0a 20 20  Amae, Amio; \.  
0290: 20 20 56 36 34 20 41 62 61 2c 20 41 62 65 2c 20    V64 Aba, Abe, 
02a0: 41 62 69 2c 20 41 62 6f 2c 20 41 62 75 3b 20 5c  Abi, Abo, Abu; \
02b0: 0a 20 20 20 20 56 36 34 20 41 67 61 2c 20 41 67  .    V64 Aga, Ag
02c0: 65 2c 20 41 67 69 2c 20 41 67 6f 2c 20 41 67 75  e, Agi, Ago, Agu
02d0: 3b 20 5c 0a 20 20 20 20 56 36 34 20 41 6b 61 2c  ; \.    V64 Aka,
02e0: 20 41 6b 65 2c 20 41 6b 69 2c 20 41 6b 6f 2c 20   Ake, Aki, Ako, 
02f0: 41 6b 75 3b 20 5c 0a 20 20 20 20 56 36 34 20 41  Aku; \.    V64 A
0300: 6d 61 2c 20 41 6d 65 2c 20 41 6d 69 2c 20 41 6d  ma, Ame, Ami, Am
0310: 6f 2c 20 41 6d 75 3b 20 5c 0a 20 20 20 20 56 31  o, Amu; \.    V1
0320: 32 38 20 41 73 61 73 65 2c 20 41 73 69 73 6f 3b  28 Asase, Asiso;
0330: 20 5c 0a 20 20 20 20 56 36 34 20 41 73 75 3b 20   \.    V64 Asu; 
0340: 5c 0a 20 20 20 20 56 31 32 38 20 42 62 61 67 65  \.    V128 Bbage
0350: 2c 20 42 62 65 67 69 2c 20 42 62 69 67 6f 2c 20  , Bbegi, Bbigo, 
0360: 42 62 6f 67 75 2c 20 42 62 75 67 61 3b 20 5c 0a  Bbogu, Bbuga; \.
0370: 20 20 20 20 56 31 32 38 20 42 6b 61 6d 65 2c 20      V128 Bkame, 
0380: 42 6b 65 6d 69 2c 20 42 6b 69 6d 6f 2c 20 42 6b  Bkemi, Bkimo, Bk
0390: 6f 6d 75 2c 20 42 6b 75 6d 61 3b 20 5c 0a 20 20  omu, Bkuma; \.  
03a0: 20 20 56 31 32 38 20 42 73 61 73 65 2c 20 42 73    V128 Bsase, Bs
03b0: 65 73 69 2c 20 42 73 69 73 6f 2c 20 42 73 6f 73  esi, Bsiso, Bsos
03c0: 75 2c 20 42 73 75 73 61 3b 20 5c 0a 20 20 20 20  u, Bsusa; \.    
03d0: 56 31 32 38 20 43 61 65 2c 20 43 65 69 2c 20 43  V128 Cae, Cei, C
03e0: 69 6f 2c 20 43 6f 75 2c 20 43 75 61 3b 20 5c 0a  io, Cou, Cua; \.
03f0: 20 20 20 20 56 31 32 38 20 44 61 75 2c 20 44 65      V128 Dau, De
0400: 61 2c 20 44 69 65 2c 20 44 6f 69 2c 20 44 75 6f  a, Die, Doi, Duo
0410: 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 44 75 61  ; \.    V128 Dua
0420: 2c 20 44 61 65 2c 20 44 65 69 2c 20 44 69 6f 2c  , Dae, Dei, Dio,
0430: 20 44 6f 75 3b 20 5c 0a 20 20 20 20 56 31 32 38   Dou; \.    V128
0440: 20 45 62 61 67 65 2c 20 45 62 65 67 69 2c 20 45   Ebage, Ebegi, E
0450: 62 69 67 6f 2c 20 45 62 6f 67 75 2c 20 45 62 75  bigo, Ebogu, Ebu
0460: 67 61 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 45  ga; \.    V128 E
0470: 6b 61 6d 65 2c 20 45 6b 65 6d 69 2c 20 45 6b 69  kame, Ekemi, Eki
0480: 6d 6f 2c 20 45 6b 6f 6d 75 2c 20 45 6b 75 6d 61  mo, Ekomu, Ekuma
0490: 3b 20 5c 0a 20 20 20 20 56 31 32 38 20 45 73 61  ; \.    V128 Esa
04a0: 73 65 2c 20 45 73 69 73 6f 3b 20 5c 0a 20 20 20  se, Esiso; \.   
04b0: 20 56 36 34 20 45 73 75 3b 20 5c 0a 20 20 20 20   V64 Esu; \.    
04c0: 56 31 32 38 20 5a 65 72 6f 3b 0a 0a 23 64 65 66  V128 Zero;..#def
04d0: 69 6e 65 20 70 72 65 70 61 72 65 54 68 65 74 61  ine prepareTheta
04e0: 0a 0a 23 64 65 66 69 6e 65 20 63 6f 6d 70 75 74  ..#define comput
04f0: 65 44 20 5c 0a 20 20 20 20 43 75 61 20 3d 20 47  eD \.    Cua = G
0500: 45 54 36 34 4c 4f 4c 4f 28 43 75 61 2c 20 43 61  ET64LOLO(Cua, Ca
0510: 65 29 3b 20 5c 0a 20 20 20 20 44 65 69 20 3d 20  e); \.    Dei = 
0520: 58 4f 52 31 32 38 28 43 61 65 2c 20 52 4f 4c 36  XOR128(Cae, ROL6
0530: 34 36 34 73 61 6d 65 28 43 69 6f 2c 20 31 29 29  464same(Cio, 1))
0540: 3b 20 5c 0a 20 20 20 20 44 6f 75 20 3d 20 58 4f  ; \.    Dou = XO
0550: 52 31 32 38 28 43 69 6f 2c 20 52 4f 4c 36 34 36  R128(Cio, ROL646
0560: 34 73 61 6d 65 28 43 75 61 2c 20 31 29 29 3b 20  4same(Cua, 1)); 
0570: 5c 0a 20 20 20 20 43 65 69 20 3d 20 47 45 54 36  \.    Cei = GET6
0580: 34 48 49 4c 4f 28 43 61 65 2c 20 43 69 6f 29 3b  4HILO(Cae, Cio);
0590: 20 5c 0a 20 20 20 20 44 61 65 20 3d 20 58 4f 52   \.    Dae = XOR
05a0: 31 32 38 28 43 75 61 2c 20 52 4f 4c 36 34 36 34  128(Cua, ROL6464
05b0: 73 61 6d 65 28 43 65 69 2c 20 31 29 29 3b 20 5c  same(Cei, 1)); \
05c0: 0a 20 20 20 20 44 61 75 20 3d 20 47 45 54 36 34  .    Dau = GET64
05d0: 4c 4f 48 49 28 44 61 65 2c 20 44 6f 75 29 3b 20  LOHI(Dae, Dou); 
05e0: 5c 0a 20 20 20 20 44 65 61 20 3d 20 53 57 41 50  \.    Dea = SWAP
05f0: 36 34 28 44 61 65 29 3b 20 5c 0a 20 20 20 20 44  64(Dae); \.    D
0600: 69 65 20 3d 20 53 57 41 50 36 34 28 44 65 69 29  ie = SWAP64(Dei)
0610: 3b 20 5c 0a 20 20 20 20 44 6f 69 20 3d 20 47 45  ; \.    Doi = GE
0620: 54 36 34 4c 4f 4c 4f 28 44 6f 75 2c 20 44 69 65  T64LOLO(Dou, Die
0630: 29 3b 20 5c 0a 20 20 20 20 44 75 6f 20 3d 20 53  ); \.    Duo = S
0640: 57 41 50 36 34 28 44 6f 75 29 3b 0a 0a 2f 2f 20  WAP64(Dou);..// 
0650: 2d 2d 2d 20 54 68 65 74 61 20 52 68 6f 20 50 69  --- Theta Rho Pi
0660: 20 43 68 69 20 49 6f 74 61 20 50 72 65 70 61 72   Chi Iota Prepar
0670: 65 2d 74 68 65 74 61 0a 2f 2f 20 2d 2d 2d 20 36  e-theta.// --- 6
0680: 34 2d 62 69 74 20 6c 61 6e 65 73 20 6d 61 70 70  4-bit lanes mapp
0690: 65 64 20 74 6f 20 36 34 2d 62 69 74 20 61 6e 64  ed to 64-bit and
06a0: 20 31 32 38 2d 62 69 74 20 77 6f 72 64 73 0a 23   128-bit words.#
06b0: 64 65 66 69 6e 65 20 74 68 65 74 61 52 68 6f 50  define thetaRhoP
06c0: 69 43 68 69 49 6f 74 61 50 72 65 70 61 72 65 54  iChiIotaPrepareT
06d0: 68 65 74 61 28 69 2c 20 41 2c 20 45 29 20 5c 0a  heta(i, A, E) \.
06e0: 20 20 20 20 63 6f 6d 70 75 74 65 44 20 5c 0a 20      computeD \. 
06f0: 20 20 20 5c 0a 20 20 20 20 42 62 61 67 65 20 3d     \.    Bbage =
0700: 20 58 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 48   XOR128(GET64LOH
0710: 49 28 41 23 23 62 61 67 65 2c 20 41 23 23 62 6f  I(A##bage, A##bo
0720: 67 75 29 2c 20 44 61 75 29 3b 20 5c 0a 20 20 20  gu), Dau); \.   
0730: 20 42 62 61 67 65 20 3d 20 52 4f 4c 36 34 36 34   Bbage = ROL6464
0740: 28 42 62 61 67 65 2c 20 30 2c 20 32 30 29 3b 20  (Bbage, 0, 20); 
0750: 5c 0a 20 20 20 20 42 62 65 67 69 20 3d 20 58 4f  \.    Bbegi = XO
0760: 52 31 32 38 28 47 45 54 36 34 48 49 4c 4f 28 41  R128(GET64HILO(A
0770: 23 23 62 61 67 65 2c 20 41 23 23 6b 61 6d 65 29  ##bage, A##kame)
0780: 2c 20 44 65 61 29 3b 20 5c 0a 20 20 20 20 42 62  , Dea); \.    Bb
0790: 65 67 69 20 3d 20 52 4f 4c 36 34 36 34 28 42 62  egi = ROL6464(Bb
07a0: 65 67 69 2c 20 34 34 2c 20 33 29 3b 20 5c 0a 20  egi, 44, 3); \. 
07b0: 20 20 20 42 62 69 67 6f 20 3d 20 58 4f 52 31 32     Bbigo = XOR12
07c0: 38 28 47 45 54 36 34 4c 4f 48 49 28 41 23 23 6b  8(GET64LOHI(A##k
07d0: 69 6d 6f 2c 20 41 23 23 6b 61 6d 65 29 2c 20 44  imo, A##kame), D
07e0: 69 65 29 3b 20 5c 0a 20 20 20 20 42 62 69 67 6f  ie); \.    Bbigo
07f0: 20 3d 20 52 4f 4c 36 34 36 34 28 42 62 69 67 6f   = ROL6464(Bbigo
0800: 2c 20 34 33 2c 20 34 35 29 3b 20 5c 0a 20 20 20  , 43, 45); \.   
0810: 20 45 23 23 62 61 67 65 20 3d 20 58 4f 52 31 32   E##bage = XOR12
0820: 38 28 42 62 61 67 65 2c 20 41 4e 44 6e 75 31 32  8(Bbage, ANDnu12
0830: 38 28 42 62 65 67 69 2c 20 42 62 69 67 6f 29 29  8(Bbegi, Bbigo))
0840: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38  ; \.    XOReq128
0850: 28 45 23 23 62 61 67 65 2c 20 43 4f 4e 53 54 36  (E##bage, CONST6
0860: 34 28 4b 65 63 63 61 6b 46 31 36 30 30 52 6f 75  4(KeccakF1600Rou
0870: 6e 64 43 6f 6e 73 74 61 6e 74 73 5b 69 5d 29 29  ndConstants[i]))
0880: 3b 20 5c 0a 20 20 20 20 43 61 65 20 3d 20 45 23  ; \.    Cae = E#
0890: 23 62 61 67 65 3b 20 5c 0a 20 20 20 20 42 62 6f  #bage; \.    Bbo
08a0: 67 75 20 3d 20 58 4f 52 31 32 38 28 47 45 54 36  gu = XOR128(GET6
08b0: 34 48 49 4c 4f 28 41 23 23 6b 69 6d 6f 2c 20 41  4HILO(A##kimo, A
08c0: 23 23 73 69 73 6f 29 2c 20 44 6f 69 29 3b 20 5c  ##siso), Doi); \
08d0: 0a 20 20 20 20 42 62 6f 67 75 20 3d 20 52 4f 4c  .    Bbogu = ROL
08e0: 36 34 36 34 28 42 62 6f 67 75 2c 20 32 31 2c 20  6464(Bbogu, 21, 
08f0: 36 31 29 3b 20 5c 0a 20 20 20 20 45 23 23 62 65  61); \.    E##be
0900: 67 69 20 3d 20 58 4f 52 31 32 38 28 42 62 65 67  gi = XOR128(Bbeg
0910: 69 2c 20 41 4e 44 6e 75 31 32 38 28 42 62 69 67  i, ANDnu128(Bbig
0920: 6f 2c 20 42 62 6f 67 75 29 29 3b 20 5c 0a 20 20  o, Bbogu)); \.  
0930: 20 20 43 65 69 20 3d 20 45 23 23 62 65 67 69 3b    Cei = E##begi;
0940: 20 5c 0a 20 20 20 20 42 62 75 67 61 20 3d 20 58   \.    Bbuga = X
0950: 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 4c 4f 28  OR128(GET64LOLO(
0960: 41 23 23 73 75 2c 20 41 23 23 62 6f 67 75 29 2c  A##su, A##bogu),
0970: 20 44 75 6f 29 3b 20 5c 0a 20 20 20 20 42 62 75   Duo); \.    Bbu
0980: 67 61 20 3d 20 52 4f 4c 36 34 36 34 28 42 62 75  ga = ROL6464(Bbu
0990: 67 61 2c 20 31 34 2c 20 32 38 29 3b 20 5c 0a 20  ga, 14, 28); \. 
09a0: 20 20 20 45 23 23 62 69 67 6f 20 3d 20 58 4f 52     E##bigo = XOR
09b0: 31 32 38 28 42 62 69 67 6f 2c 20 41 4e 44 6e 75  128(Bbigo, ANDnu
09c0: 31 32 38 28 42 62 6f 67 75 2c 20 42 62 75 67 61  128(Bbogu, Bbuga
09d0: 29 29 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20  )); \.    Cio = 
09e0: 45 23 23 62 69 67 6f 3b 20 5c 0a 20 20 20 20 45  E##bigo; \.    E
09f0: 23 23 62 6f 67 75 20 3d 20 58 4f 52 31 32 38 28  ##bogu = XOR128(
0a00: 42 62 6f 67 75 2c 20 41 4e 44 6e 75 31 32 38 28  Bbogu, ANDnu128(
0a10: 42 62 75 67 61 2c 20 42 62 61 67 65 29 29 3b 20  Bbuga, Bbage)); 
0a20: 5c 0a 20 20 20 20 43 6f 75 20 3d 20 45 23 23 62  \.    Cou = E##b
0a30: 6f 67 75 3b 20 5c 0a 20 20 20 20 45 23 23 62 75  ogu; \.    E##bu
0a40: 67 61 20 3d 20 58 4f 52 31 32 38 28 42 62 75 67  ga = XOR128(Bbug
0a50: 61 2c 20 41 4e 44 6e 75 31 32 38 28 42 62 61 67  a, ANDnu128(Bbag
0a60: 65 2c 20 42 62 65 67 69 29 29 3b 20 5c 0a 20 20  e, Bbegi)); \.  
0a70: 20 20 43 75 61 20 3d 20 45 23 23 62 75 67 61 3b    Cua = E##buga;
0a80: 20 5c 0a 5c 0a 20 20 20 20 42 6b 61 6d 65 20 3d   \.\.    Bkame =
0a90: 20 58 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 48   XOR128(GET64LOH
0aa0: 49 28 41 23 23 62 65 67 69 2c 20 41 23 23 62 75  I(A##begi, A##bu
0ab0: 67 61 29 2c 20 44 65 61 29 3b 20 5c 0a 20 20 20  ga), Dea); \.   
0ac0: 20 42 6b 61 6d 65 20 3d 20 52 4f 4c 36 34 36 34   Bkame = ROL6464
0ad0: 28 42 6b 61 6d 65 2c 20 31 2c 20 33 36 29 3b 20  (Bkame, 1, 36); 
0ae0: 5c 0a 20 20 20 20 42 6b 65 6d 69 20 3d 20 58 4f  \.    Bkemi = XO
0af0: 52 31 32 38 28 47 45 54 36 34 48 49 4c 4f 28 41  R128(GET64HILO(A
0b00: 23 23 62 65 67 69 2c 20 41 23 23 6b 65 6d 69 29  ##begi, A##kemi)
0b10: 2c 20 44 69 65 29 3b 20 5c 0a 20 20 20 20 42 6b  , Die); \.    Bk
0b20: 65 6d 69 20 3d 20 52 4f 4c 36 34 36 34 28 42 6b  emi = ROL6464(Bk
0b30: 65 6d 69 2c 20 36 2c 20 31 30 29 3b 20 5c 0a 20  emi, 6, 10); \. 
0b40: 20 20 20 42 6b 69 6d 6f 20 3d 20 58 4f 52 31 32     Bkimo = XOR12
0b50: 38 28 47 45 54 36 34 4c 4f 48 49 28 41 23 23 6b  8(GET64LOHI(A##k
0b60: 6f 6d 75 2c 20 41 23 23 6b 65 6d 69 29 2c 20 44  omu, A##kemi), D
0b70: 6f 69 29 3b 20 5c 0a 20 20 20 20 42 6b 69 6d 6f  oi); \.    Bkimo
0b80: 20 3d 20 52 4f 4c 36 34 36 34 28 42 6b 69 6d 6f   = ROL6464(Bkimo
0b90: 2c 20 32 35 2c 20 31 35 29 3b 20 5c 0a 20 20 20  , 25, 15); \.   
0ba0: 20 45 23 23 6b 61 6d 65 20 3d 20 58 4f 52 31 32   E##kame = XOR12
0bb0: 38 28 42 6b 61 6d 65 2c 20 41 4e 44 6e 75 31 32  8(Bkame, ANDnu12
0bc0: 38 28 42 6b 65 6d 69 2c 20 42 6b 69 6d 6f 29 29  8(Bkemi, Bkimo))
0bd0: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38  ; \.    XOReq128
0be0: 28 43 61 65 2c 20 45 23 23 6b 61 6d 65 29 3b 20  (Cae, E##kame); 
0bf0: 5c 0a 20 20 20 20 42 6b 6f 6d 75 20 3d 20 58 4f  \.    Bkomu = XO
0c00: 52 31 32 38 28 47 45 54 36 34 48 49 48 49 28 41  R128(GET64HIHI(A
0c10: 23 23 6b 6f 6d 75 2c 20 41 23 23 73 69 73 6f 29  ##komu, A##siso)
0c20: 2c 20 44 75 6f 29 3b 20 5c 0a 20 20 20 20 42 6b  , Duo); \.    Bk
0c30: 6f 6d 75 20 3d 20 52 4f 4c 36 34 36 34 28 42 6b  omu = ROL6464(Bk
0c40: 6f 6d 75 2c 20 38 2c 20 35 36 29 3b 20 5c 0a 20  omu, 8, 56); \. 
0c50: 20 20 20 45 23 23 6b 65 6d 69 20 3d 20 58 4f 52     E##kemi = XOR
0c60: 31 32 38 28 42 6b 65 6d 69 2c 20 41 4e 44 6e 75  128(Bkemi, ANDnu
0c70: 31 32 38 28 42 6b 69 6d 6f 2c 20 42 6b 6f 6d 75  128(Bkimo, Bkomu
0c80: 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31  )); \.    XOReq1
0c90: 32 38 28 43 65 69 2c 20 45 23 23 6b 65 6d 69 29  28(Cei, E##kemi)
0ca0: 3b 20 5c 0a 20 20 20 20 42 6b 75 6d 61 20 3d 20  ; \.    Bkuma = 
0cb0: 58 4f 52 31 32 38 28 47 45 54 36 34 4c 4f 4c 4f  XOR128(GET64LOLO
0cc0: 28 41 23 23 73 61 73 65 2c 20 41 23 23 62 75 67  (A##sase, A##bug
0cd0: 61 29 2c 20 44 61 75 29 3b 20 5c 0a 20 20 20 20  a), Dau); \.    
0ce0: 42 6b 75 6d 61 20 3d 20 52 4f 4c 36 34 36 34 28  Bkuma = ROL6464(
0cf0: 42 6b 75 6d 61 2c 20 31 38 2c 20 32 37 29 3b 20  Bkuma, 18, 27); 
0d00: 5c 0a 20 20 20 20 45 23 23 6b 69 6d 6f 20 3d 20  \.    E##kimo = 
0d10: 58 4f 52 31 32 38 28 42 6b 69 6d 6f 2c 20 41 4e  XOR128(Bkimo, AN
0d20: 44 6e 75 31 32 38 28 42 6b 6f 6d 75 2c 20 42 6b  Dnu128(Bkomu, Bk
0d30: 75 6d 61 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52  uma)); \.    XOR
0d40: 65 71 31 32 38 28 43 69 6f 2c 20 45 23 23 6b 69  eq128(Cio, E##ki
0d50: 6d 6f 29 3b 20 5c 0a 20 20 20 20 45 23 23 6b 6f  mo); \.    E##ko
0d60: 6d 75 20 3d 20 58 4f 52 31 32 38 28 42 6b 6f 6d  mu = XOR128(Bkom
0d70: 75 2c 20 41 4e 44 6e 75 31 32 38 28 42 6b 75 6d  u, ANDnu128(Bkum
0d80: 61 2c 20 42 6b 61 6d 65 29 29 3b 20 5c 0a 20 20  a, Bkame)); \.  
0d90: 20 20 58 4f 52 65 71 31 32 38 28 43 6f 75 2c 20    XOReq128(Cou, 
0da0: 45 23 23 6b 6f 6d 75 29 3b 20 5c 0a 20 20 20 20  E##komu); \.    
0db0: 45 23 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38  E##kuma = XOR128
0dc0: 28 42 6b 75 6d 61 2c 20 41 4e 44 6e 75 31 32 38  (Bkuma, ANDnu128
0dd0: 28 42 6b 61 6d 65 2c 20 42 6b 65 6d 69 29 29 3b  (Bkame, Bkemi));
0de0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
0df0: 43 75 61 2c 20 45 23 23 6b 75 6d 61 29 3b 20 5c  Cua, E##kuma); \
0e00: 0a 5c 0a 20 20 20 20 42 73 61 73 65 20 3d 20 58  .\.    Bsase = X
0e10: 4f 52 31 32 38 28 41 23 23 62 69 67 6f 2c 20 53  OR128(A##bigo, S
0e20: 57 41 50 36 34 28 44 6f 69 29 29 3b 20 5c 0a 20  WAP64(Doi)); \. 
0e30: 20 20 20 42 73 61 73 65 20 3d 20 52 4f 4c 36 34     Bsase = ROL64
0e40: 36 34 28 42 73 61 73 65 2c 20 36 32 2c 20 35 35  64(Bsase, 62, 55
0e50: 29 3b 20 5c 0a 20 20 20 20 42 73 69 73 6f 20 3d  ); \.    Bsiso =
0e60: 20 58 4f 52 31 32 38 28 41 23 23 6b 75 6d 61 2c   XOR128(A##kuma,
0e70: 20 53 57 41 50 36 34 28 44 61 75 29 29 3b 20 5c   SWAP64(Dau)); \
0e80: 0a 20 20 20 20 42 73 69 73 6f 20 3d 20 52 4f 4c  .    Bsiso = ROL
0e90: 36 34 36 34 28 42 73 69 73 6f 2c 20 33 39 2c 20  6464(Bsiso, 39, 
0ea0: 34 31 29 3b 20 5c 0a 20 20 20 20 42 73 75 73 61  41); \.    Bsusa
0eb0: 20 3d 20 58 4f 52 36 34 28 43 4f 50 59 36 34 48   = XOR64(COPY64H
0ec0: 49 32 4c 4f 28 41 23 23 73 61 73 65 29 2c 20 44  I2LO(A##sase), D
0ed0: 65 69 29 3b 20 5c 0a 20 20 20 20 42 73 75 73 61  ei); \.    Bsusa
0ee0: 20 3d 20 52 4f 4c 36 34 36 34 73 61 6d 65 28 42   = ROL6464same(B
0ef0: 73 75 73 61 2c 20 32 29 3b 20 5c 0a 20 20 20 20  susa, 2); \.    
0f00: 42 73 75 73 61 20 3d 20 47 45 54 36 34 4c 4f 4c  Bsusa = GET64LOL
0f10: 4f 28 42 73 75 73 61 2c 20 42 73 61 73 65 29 3b  O(Bsusa, Bsase);
0f20: 20 5c 0a 20 20 20 20 42 73 65 73 69 20 3d 20 47   \.    Bsesi = G
0f30: 45 54 36 34 48 49 4c 4f 28 42 73 61 73 65 2c 20  ET64HILO(Bsase, 
0f40: 42 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 42 73  Bsiso); \.    Bs
0f50: 6f 73 75 20 3d 20 47 45 54 36 34 48 49 4c 4f 28  osu = GET64HILO(
0f60: 42 73 69 73 6f 2c 20 42 73 75 73 61 29 3b 20 5c  Bsiso, Bsusa); \
0f70: 0a 20 20 20 20 45 23 23 73 61 73 65 20 3d 20 58  .    E##sase = X
0f80: 4f 52 31 32 38 28 42 73 61 73 65 2c 20 41 4e 44  OR128(Bsase, AND
0f90: 6e 75 31 32 38 28 42 73 65 73 69 2c 20 42 73 69  nu128(Bsesi, Bsi
0fa0: 73 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  so)); \.    XORe
0fb0: 71 31 32 38 28 43 61 65 2c 20 45 23 23 73 61 73  q128(Cae, E##sas
0fc0: 65 29 3b 20 5c 0a 20 20 20 20 45 23 23 73 69 73  e); \.    E##sis
0fd0: 6f 20 3d 20 58 4f 52 31 32 38 28 42 73 69 73 6f  o = XOR128(Bsiso
0fe0: 2c 20 41 4e 44 6e 75 31 32 38 28 42 73 6f 73 75  , ANDnu128(Bsosu
0ff0: 2c 20 42 73 75 73 61 29 29 3b 20 5c 0a 20 20 20  , Bsusa)); \.   
1000: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 45   XOReq128(Cio, E
1010: 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 45  ##siso); \.    E
1020: 23 23 73 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  ##su = GET64LOLO
1030: 28 58 4f 52 31 32 38 28 42 73 75 73 61 2c 20 41  (XOR128(Bsusa, A
1040: 4e 44 6e 75 31 32 38 28 42 73 61 73 65 2c 20 42  NDnu128(Bsase, B
1050: 73 65 73 69 29 29 2c 20 5a 65 72 6f 29 3b 20 5c  sesi)), Zero); \
1060: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 75  .    XOReq128(Cu
1070: 61 2c 20 45 23 23 73 75 29 3b 20 5c 0a 5c 0a 20  a, E##su); \.\. 
1080: 20 20 20 5a 65 72 6f 20 3d 20 5a 45 52 4f 31 32     Zero = ZERO12
1090: 38 28 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  8(); \.    XOReq
10a0: 31 32 38 28 43 61 65 2c 20 47 45 54 36 34 48 49  128(Cae, GET64HI
10b0: 48 49 28 43 75 61 2c 20 5a 65 72 6f 29 29 3b 20  HI(Cua, Zero)); 
10c0: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43  \.    XOReq128(C
10d0: 61 65 2c 20 47 45 54 36 34 4c 4f 4c 4f 28 5a 65  ae, GET64LOLO(Ze
10e0: 72 6f 2c 20 43 65 69 29 29 3b 20 5c 0a 20 20 20  ro, Cei)); \.   
10f0: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 47   XOReq128(Cio, G
1100: 45 54 36 34 48 49 48 49 28 43 65 69 2c 20 5a 65  ET64HIHI(Cei, Ze
1110: 72 6f 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  ro)); \.    XORe
1120: 71 31 32 38 28 43 69 6f 2c 20 47 45 54 36 34 4c  q128(Cio, GET64L
1130: 4f 4c 4f 28 5a 65 72 6f 2c 20 43 6f 75 29 29 3b  OLO(Zero, Cou));
1140: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
1150: 43 75 61 2c 20 47 45 54 36 34 48 49 48 49 28 43  Cua, GET64HIHI(C
1160: 6f 75 2c 20 5a 65 72 6f 29 29 3b 20 5c 0a 0a 2f  ou, Zero)); \../
1170: 2f 20 2d 2d 2d 20 54 68 65 74 61 20 52 68 6f 20  / --- Theta Rho 
1180: 50 69 20 43 68 69 20 49 6f 74 61 0a 2f 2f 20 2d  Pi Chi Iota.// -
1190: 2d 2d 20 36 34 2d 62 69 74 20 6c 61 6e 65 73 20  -- 64-bit lanes 
11a0: 6d 61 70 70 65 64 20 74 6f 20 36 34 2d 62 69 74  mapped to 64-bit
11b0: 20 61 6e 64 20 31 32 38 2d 62 69 74 20 77 6f 72   and 128-bit wor
11c0: 64 73 0a 23 64 65 66 69 6e 65 20 74 68 65 74 61  ds.#define theta
11d0: 52 68 6f 50 69 43 68 69 49 6f 74 61 28 69 2c 20  RhoPiChiIota(i, 
11e0: 41 2c 20 45 29 20 74 68 65 74 61 52 68 6f 50 69  A, E) thetaRhoPi
11f0: 43 68 69 49 6f 74 61 50 72 65 70 61 72 65 54 68  ChiIotaPrepareTh
1200: 65 74 61 28 69 2c 20 41 2c 20 45 29 0a 0a 63 6f  eta(i, A, E)..co
1210: 6e 73 74 20 55 49 4e 54 36 34 20 4b 65 63 63 61  nst UINT64 Kecca
1220: 6b 46 31 36 30 30 52 6f 75 6e 64 43 6f 6e 73 74  kF1600RoundConst
1230: 61 6e 74 73 5b 32 34 5d 20 3d 20 7b 0a 20 20 20  ants[24] = {.   
1240: 20 30 78 30 30 30 30 30 30 30 30 30 30 30 30 30   0x0000000000000
1250: 30 30 31 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30  001ULL,.    0x00
1260: 30 30 30 30 30 30 30 30 30 30 38 30 38 32 55 4c  00000000008082UL
1270: 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 30  L,.    0x8000000
1280: 30 30 30 30 30 38 30 38 61 55 4c 4c 2c 0a 20 20  00000808aULL,.  
1290: 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 30    0x800000008000
12a0: 38 30 30 30 55 4c 4c 2c 0a 20 20 20 20 30 78 30  8000ULL,.    0x0
12b0: 30 30 30 30 30 30 30 30 30 30 30 38 30 38 62 55  00000000000808bU
12c0: 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30  LL,.    0x000000
12d0: 30 30 38 30 30 30 30 30 30 31 55 4c 4c 2c 0a 20  0080000001ULL,. 
12e0: 20 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30     0x80000000800
12f0: 30 38 30 38 31 55 4c 4c 2c 0a 20 20 20 20 30 78  08081ULL,.    0x
1300: 38 30 30 30 30 30 30 30 30 30 30 30 38 30 30 39  8000000000008009
1310: 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30  ULL,.    0x00000
1320: 30 30 30 30 30 30 30 30 30 38 61 55 4c 4c 2c 0a  0000000008aULL,.
1330: 20 20 20 20 30 78 30 30 30 30 30 30 30 30 30 30      0x0000000000
1340: 30 30 30 30 38 38 55 4c 4c 2c 0a 20 20 20 20 30  000088ULL,.    0
1350: 78 30 30 30 30 30 30 30 30 38 30 30 30 38 30 30  x000000008000800
1360: 39 55 4c 4c 2c 0a 20 20 20 20 30 78 30 30 30 30  9ULL,.    0x0000
1370: 30 30 30 30 38 30 30 30 30 30 30 61 55 4c 4c 2c  00008000000aULL,
1380: 0a 20 20 20 20 30 78 30 30 30 30 30 30 30 30 38  .    0x000000008
1390: 30 30 30 38 30 38 62 55 4c 4c 2c 0a 20 20 20 20  000808bULL,.    
13a0: 30 78 38 30 30 30 30 30 30 30 30 30 30 30 30 30  0x80000000000000
13b0: 38 62 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30  8bULL,.    0x800
13c0: 30 30 30 30 30 30 30 30 30 38 30 38 39 55 4c 4c  0000000008089ULL
13d0: 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30 30 30  ,.    0x80000000
13e0: 30 30 30 30 38 30 30 33 55 4c 4c 2c 0a 20 20 20  00008003ULL,.   
13f0: 20 30 78 38 30 30 30 30 30 30 30 30 30 30 30 38   0x8000000000008
1400: 30 30 32 55 4c 4c 2c 0a 20 20 20 20 30 78 38 30  002ULL,.    0x80
1410: 30 30 30 30 30 30 30 30 30 30 30 30 38 30 55 4c  00000000000080UL
1420: 4c 2c 0a 20 20 20 20 30 78 30 30 30 30 30 30 30  L,.    0x0000000
1430: 30 30 30 30 30 38 30 30 61 55 4c 4c 2c 0a 20 20  00000800aULL,.  
1440: 20 20 30 78 38 30 30 30 30 30 30 30 38 30 30 30    0x800000008000
1450: 30 30 30 61 55 4c 4c 2c 0a 20 20 20 20 30 78 38  000aULL,.    0x8
1460: 30 30 30 30 30 30 30 38 30 30 30 38 30 38 31 55  000000080008081U
1470: 4c 4c 2c 0a 20 20 20 20 30 78 38 30 30 30 30 30  LL,.    0x800000
1480: 30 30 30 30 30 30 38 30 38 30 55 4c 4c 2c 0a 20  0000008080ULL,. 
1490: 20 20 20 30 78 30 30 30 30 30 30 30 30 38 30 30     0x00000000800
14a0: 30 30 30 30 31 55 4c 4c 2c 0a 20 20 20 20 30 78  00001ULL,.    0x
14b0: 38 30 30 30 30 30 30 30 38 30 30 30 38 30 30 38  8000000080008008
14c0: 55 4c 4c 20 7d 3b 0a 0a 23 64 65 66 69 6e 65 20  ULL };..#define 
14d0: 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64  copyFromStateAnd
14e0: 58 6f 72 35 37 36 62 69 74 73 28 58 2c 20 73 74  Xor576bits(X, st
14f0: 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20  ate, input) \.  
1500: 20 20 58 23 23 62 61 65 20 3d 20 58 4f 52 31 32    X##bae = XOR12
1510: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b  8(LOAD128(state[
1520: 20 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69   0]), LOAD128u(i
1530: 6e 70 75 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20  nput[ 0])); \.  
1540: 20 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65    X##ba = X##bae
1550: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20  ; \.    X##be = 
1560: 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65  GET64HIHI(X##bae
1570: 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20  , X##bae); \.   
1580: 20 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c   Cae = X##bae; \
1590: 0a 20 20 20 20 58 23 23 62 69 6f 20 3d 20 58 4f  .    X##bio = XO
15a0: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61  R128(LOAD128(sta
15b0: 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38  te[ 2]), LOAD128
15c0: 75 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c  u(input[ 2])); \
15d0: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23  .    X##bi = X##
15e0: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f  bio; \.    X##bo
15f0: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23   = GET64HIHI(X##
1600: 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b 20 5c 0a  bio, X##bio); \.
1610: 20 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f      Cio = X##bio
1620: 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20  ; \.    X##bu = 
1630: 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61  XOR64(LOAD64(sta
1640: 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 28  te[ 4]), LOAD64(
1650: 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a 20  input[ 4])); \. 
1660: 20 20 20 43 75 61 20 3d 20 58 23 23 62 75 3b 20     Cua = X##bu; 
1670: 5c 0a 20 20 20 20 58 23 23 67 61 65 20 3d 20 58  \.    X##gae = X
1680: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73  OR128(LOAD128u(s
1690: 74 61 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31  tate[ 5]), LOAD1
16a0: 32 38 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b  28u(input[ 5]));
16b0: 20 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58   \.    X##ga = X
16c0: 23 23 67 61 65 3b 20 5c 0a 20 20 20 20 58 23 23  ##gae; \.    X##
16d0: 62 75 67 61 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  buga = GET64LOLO
16e0: 28 58 23 23 62 75 2c 20 58 23 23 67 61 29 3b 20  (X##bu, X##ga); 
16f0: 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45  \.    X##ge = GE
1700: 54 36 34 48 49 48 49 28 58 23 23 67 61 65 2c 20  T64HIHI(X##gae, 
1710: 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 20 58  X##gae); \.    X
1720: 23 23 62 61 67 65 20 3d 20 47 45 54 36 34 4c 4f  ##bage = GET64LO
1730: 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29  LO(X##ba, X##ge)
1740: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38  ; \.    XOReq128
1750: 28 43 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c  (Cae, X##gae); \
1760: 0a 20 20 20 20 58 23 23 67 69 6f 20 3d 20 58 4f  .    X##gio = XO
1770: 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74  R128(LOAD128u(st
1780: 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32  ate[ 7]), LOAD12
1790: 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20  8u(input[ 7])); 
17a0: 5c 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23  \.    X##gi = X#
17b0: 23 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62  #gio; \.    X##b
17c0: 65 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28  egi = GET64LOLO(
17d0: 58 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c  X##be, X##gi); \
17e0: 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54  .    X##go = GET
17f0: 36 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58  64HIHI(X##gio, X
1800: 23 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23  ##gio); \.    X#
1810: 23 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c  #bigo = GET64LOL
1820: 4f 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b  O(X##bi, X##go);
1830: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
1840: 43 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a  Cio, X##gio); \.
1850: 20 20 20 20 58 23 23 67 75 20 3d 20 4c 4f 41 44      X##gu = LOAD
1860: 36 34 28 73 74 61 74 65 5b 20 39 5d 29 3b 20 5c  64(state[ 9]); \
1870: 0a 20 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47  .    X##bogu = G
1880: 45 54 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20  ET64LOLO(X##bo, 
1890: 58 23 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f  X##gu); \.    XO
18a0: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 67 75  Req64(Cua, X##gu
18b0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20  ); \.    X##kae 
18c0: 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b  = LOAD128(state[
18d0: 31 30 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b  10]); \.    X##k
18e0: 61 20 3d 20 58 23 23 6b 61 65 3b 20 5c 0a 20 20  a = X##kae; \.  
18f0: 20 20 58 23 23 6b 65 20 3d 20 47 45 54 36 34 48    X##ke = GET64H
1900: 49 48 49 28 58 23 23 6b 61 65 2c 20 58 23 23 6b  IHI(X##kae, X##k
1910: 61 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  ae); \.    XOReq
1920: 31 32 38 28 43 61 65 2c 20 58 23 23 6b 61 65 29  128(Cae, X##kae)
1930: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 6f 20 3d  ; \.    X##kio =
1940: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31   LOAD128(state[1
1950: 32 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69  2]); \.    X##ki
1960: 20 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a 20 20 20   = X##kio; \.   
1970: 20 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 48 49   X##ko = GET64HI
1980: 48 49 28 58 23 23 6b 69 6f 2c 20 58 23 23 6b 69  HI(X##kio, X##ki
1990: 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31  o); \.    XOReq1
19a0: 32 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f 29 3b  28(Cio, X##kio);
19b0: 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61 20 3d   \.    X##kuma =
19c0: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31   LOAD128(state[1
19d0: 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  4]); \.    XOReq
19e0: 36 34 28 43 75 61 2c 20 58 23 23 6b 75 6d 61 29  64(Cua, X##kuma)
19f0: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20  ; \.    X##me = 
1a00: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 36 5d  LOAD64(state[16]
1a10: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65  ); \.    X##kame
1a20: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23   = GET64LOLO(X##
1a30: 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20  ka, X##me); \.  
1a40: 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20    XOReq128(Cae, 
1a50: 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d  GET64HIHI(X##kum
1a60: 61 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a  a, X##kame)); \.
1a70: 20 20 20 20 58 23 23 6d 69 6f 20 3d 20 4c 4f 41      X##mio = LOA
1a80: 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29  D128u(state[17])
1a90: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20  ; \.    X##mi = 
1aa0: 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 58 23  X##mio; \.    X#
1ab0: 23 6b 65 6d 69 20 3d 20 47 45 54 36 34 4c 4f 4c  #kemi = GET64LOL
1ac0: 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b  O(X##ke, X##mi);
1ad0: 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47   \.    X##mo = G
1ae0: 45 54 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2c  ET64HIHI(X##mio,
1af0: 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 20 20   X##mio); \.    
1b00: 58 23 23 6b 69 6d 6f 20 3d 20 47 45 54 36 34 4c  X##kimo = GET64L
1b10: 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 23 23 6d 6f  OLO(X##ki, X##mo
1b20: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32  ); \.    XOReq12
1b30: 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20  8(Cio, X##mio); 
1b40: 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f  \.    X##mu = LO
1b50: 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b  AD64(state[19]);
1b60: 20 5c 0a 20 20 20 20 58 23 23 6b 6f 6d 75 20 3d   \.    X##komu =
1b70: 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 6f   GET64LOLO(X##ko
1b80: 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20  , X##mu); \.    
1b90: 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23  XOReq64(Cua, X##
1ba0: 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61  mu); \.    X##sa
1bb0: 73 65 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61  se = LOAD128(sta
1bc0: 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58  te[20]); \.    X
1bd0: 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 23  OReq128(Cae, X##
1be0: 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 23  sase); \.    X##
1bf0: 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 73  siso = LOAD128(s
1c00: 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20  tate[22]); \.   
1c10: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58   XOReq128(Cio, X
1c20: 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 58  ##siso); \.    X
1c30: 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74  ##su = LOAD64(st
1c40: 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20  ate[24]); \.    
1c50: 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23  XOReq64(Cua, X##
1c60: 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20  su); \..#define 
1c70: 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64  copyFromStateAnd
1c80: 58 6f 72 38 33 32 62 69 74 73 28 58 2c 20 73 74  Xor832bits(X, st
1c90: 61 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20  ate, input) \.  
1ca0: 20 20 58 23 23 62 61 65 20 3d 20 58 4f 52 31 32    X##bae = XOR12
1cb0: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b  8(LOAD128(state[
1cc0: 20 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69   0]), LOAD128u(i
1cd0: 6e 70 75 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20  nput[ 0])); \.  
1ce0: 20 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65    X##ba = X##bae
1cf0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20  ; \.    X##be = 
1d00: 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65  GET64HIHI(X##bae
1d10: 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20  , X##bae); \.   
1d20: 20 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c   Cae = X##bae; \
1d30: 0a 20 20 20 20 58 23 23 62 69 6f 20 3d 20 58 4f  .    X##bio = XO
1d40: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61  R128(LOAD128(sta
1d50: 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38  te[ 2]), LOAD128
1d60: 75 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c  u(input[ 2])); \
1d70: 0a 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23  .    X##bi = X##
1d80: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f  bio; \.    X##bo
1d90: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23   = GET64HIHI(X##
1da0: 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b 20 5c 0a  bio, X##bio); \.
1db0: 20 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f      Cio = X##bio
1dc0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20  ; \.    X##bu = 
1dd0: 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61  XOR64(LOAD64(sta
1de0: 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 28  te[ 4]), LOAD64(
1df0: 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a 20  input[ 4])); \. 
1e00: 20 20 20 43 75 61 20 3d 20 58 23 23 62 75 3b 20     Cua = X##bu; 
1e10: 5c 0a 20 20 20 20 58 23 23 67 61 65 20 3d 20 58  \.    X##gae = X
1e20: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73  OR128(LOAD128u(s
1e30: 74 61 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31  tate[ 5]), LOAD1
1e40: 32 38 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b  28u(input[ 5]));
1e50: 20 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58   \.    X##ga = X
1e60: 23 23 67 61 65 3b 20 5c 0a 20 20 20 20 58 23 23  ##gae; \.    X##
1e70: 62 75 67 61 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  buga = GET64LOLO
1e80: 28 58 23 23 62 75 2c 20 58 23 23 67 61 29 3b 20  (X##bu, X##ga); 
1e90: 5c 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45  \.    X##ge = GE
1ea0: 54 36 34 48 49 48 49 28 58 23 23 67 61 65 2c 20  T64HIHI(X##gae, 
1eb0: 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 20 58  X##gae); \.    X
1ec0: 23 23 62 61 67 65 20 3d 20 47 45 54 36 34 4c 4f  ##bage = GET64LO
1ed0: 4c 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29  LO(X##ba, X##ge)
1ee0: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38  ; \.    XOReq128
1ef0: 28 43 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c  (Cae, X##gae); \
1f00: 0a 20 20 20 20 58 23 23 67 69 6f 20 3d 20 58 4f  .    X##gio = XO
1f10: 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74  R128(LOAD128u(st
1f20: 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32  ate[ 7]), LOAD12
1f30: 38 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20  8u(input[ 7])); 
1f40: 5c 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23  \.    X##gi = X#
1f50: 23 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62  #gio; \.    X##b
1f60: 65 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28  egi = GET64LOLO(
1f70: 58 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c  X##be, X##gi); \
1f80: 0a 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54  .    X##go = GET
1f90: 36 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58  64HIHI(X##gio, X
1fa0: 23 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23  ##gio); \.    X#
1fb0: 23 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c  #bigo = GET64LOL
1fc0: 4f 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b  O(X##bi, X##go);
1fd0: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
1fe0: 43 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a  Cio, X##gio); \.
1ff0: 20 20 20 20 58 23 23 67 75 20 3d 20 58 4f 52 36      X##gu = XOR6
2000: 34 28 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 20  4(LOAD64(state[ 
2010: 39 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75  9]), LOAD64(inpu
2020: 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58  t[ 9])); \.    X
2030: 23 23 62 6f 67 75 20 3d 20 47 45 54 36 34 4c 4f  ##bogu = GET64LO
2040: 4c 4f 28 58 23 23 62 6f 2c 20 58 23 23 67 75 29  LO(X##bo, X##gu)
2050: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28  ; \.    XOReq64(
2060: 43 75 61 2c 20 58 23 23 67 75 29 3b 20 5c 0a 20  Cua, X##gu); \. 
2070: 20 20 20 58 23 23 6b 61 65 20 3d 20 58 4f 52 31     X##kae = XOR1
2080: 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65  28(LOAD128(state
2090: 5b 31 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28  [10]), LOAD128u(
20a0: 69 6e 70 75 74 5b 31 30 5d 29 29 3b 20 5c 0a 20  input[10])); \. 
20b0: 20 20 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61     X##ka = X##ka
20c0: 65 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d  e; \.    X##ke =
20d0: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 61   GET64HIHI(X##ka
20e0: 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20  e, X##kae); \.  
20f0: 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20    XOReq128(Cae, 
2100: 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20 20 20 58  X##kae); \.    X
2110: 23 23 6b 69 6f 20 3d 20 58 4f 52 31 32 38 28 4c  ##kio = XOR128(L
2120: 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 5d  OAD128(state[12]
2130: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b  ), LOAD64(input[
2140: 31 32 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23  12])); \.    X##
2150: 6b 69 20 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a 20  ki = X##kio; \. 
2160: 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 54 36 34     X##ko = GET64
2170: 48 49 48 49 28 58 23 23 6b 69 6f 2c 20 58 23 23  HIHI(X##kio, X##
2180: 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  kio); \.    XORe
2190: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f  q128(Cio, X##kio
21a0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61  ); \.    X##kuma
21b0: 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65   = LOAD128(state
21c0: 5b 31 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52  [14]); \.    XOR
21d0: 65 71 36 34 28 43 75 61 2c 20 58 23 23 6b 75 6d  eq64(Cua, X##kum
21e0: 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65 20  a); \.    X##me 
21f0: 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31  = LOAD64(state[1
2200: 36 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61  6]); \.    X##ka
2210: 6d 65 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58  me = GET64LOLO(X
2220: 23 23 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a  ##ka, X##me); \.
2230: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65      XOReq128(Cae
2240: 2c 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b  , GET64HIHI(X##k
2250: 75 6d 61 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20  uma, X##kame)); 
2260: 5c 0a 20 20 20 20 58 23 23 6d 69 6f 20 3d 20 4c  \.    X##mio = L
2270: 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 31 37  OAD128u(state[17
2280: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69 20  ]); \.    X##mi 
2290: 3d 20 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 20  = X##mio; \.    
22a0: 58 23 23 6b 65 6d 69 20 3d 20 47 45 54 36 34 4c  X##kemi = GET64L
22b0: 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d 69  OLO(X##ke, X##mi
22c0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d  ); \.    X##mo =
22d0: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d 69   GET64HIHI(X##mi
22e0: 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20  o, X##mio); \.  
22f0: 20 20 58 23 23 6b 69 6d 6f 20 3d 20 47 45 54 36    X##kimo = GET6
2300: 34 4c 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 23 23  4LOLO(X##ki, X##
2310: 6d 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  mo); \.    XOReq
2320: 31 32 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f 29  128(Cio, X##mio)
2330: 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d 20  ; \.    X##mu = 
2340: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d  LOAD64(state[19]
2350: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 6d 75  ); \.    X##komu
2360: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23   = GET64LOLO(X##
2370: 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20  ko, X##mu); \.  
2380: 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58    XOReq64(Cua, X
2390: 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23 23  ##mu); \.    X##
23a0: 73 61 73 65 20 3d 20 4c 4f 41 44 31 32 38 28 73  sase = LOAD128(s
23b0: 74 61 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20  tate[20]); \.   
23c0: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58   XOReq128(Cae, X
23d0: 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 58  ##sase); \.    X
23e0: 23 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38  ##siso = LOAD128
23f0: 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20  (state[22]); \. 
2400: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c     XOReq128(Cio,
2410: 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20   X##siso); \.   
2420: 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28   X##su = LOAD64(
2430: 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20  state[24]); \.  
2440: 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58    XOReq64(Cua, X
2450: 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e  ##su); \..#defin
2460: 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 41  e copyFromStateA
2470: 6e 64 58 6f 72 31 30 32 34 62 69 74 73 28 58 2c  ndXor1024bits(X,
2480: 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29 20 5c   state, input) \
2490: 0a 20 20 20 20 58 23 23 62 61 65 20 3d 20 58 4f  .    X##bae = XO
24a0: 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61  R128(LOAD128(sta
24b0: 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 32 38  te[ 0]), LOAD128
24c0: 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 20 5c  u(input[ 0])); \
24d0: 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 23 23  .    X##ba = X##
24e0: 62 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 65  bae; \.    X##be
24f0: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23   = GET64HIHI(X##
2500: 62 61 65 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a  bae, X##bae); \.
2510: 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 61 65      Cae = X##bae
2520: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 6f 20 3d  ; \.    X##bio =
2530: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28   XOR128(LOAD128(
2540: 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f 41 44  state[ 2]), LOAD
2550: 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d 29 29  128u(input[ 2]))
2560: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20  ; \.    X##bi = 
2570: 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23  X##bio; \.    X#
2580: 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28  #bo = GET64HIHI(
2590: 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b  X##bio, X##bio);
25a0: 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 23   \.    Cio = X##
25b0: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 75  bio; \.    X##bu
25c0: 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28   = XOR64(LOAD64(
25d0: 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41 44  state[ 4]), LOAD
25e0: 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b 20  64(input[ 4])); 
25f0: 5c 0a 20 20 20 20 43 75 61 20 3d 20 58 23 23 62  \.    Cua = X##b
2600: 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 65 20  u; \.    X##gae 
2610: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38  = XOR128(LOAD128
2620: 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20 4c 4f  u(state[ 5]), LO
2630: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 35 5d  AD128u(input[ 5]
2640: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 20  )); \.    X##ga 
2650: 3d 20 58 23 23 67 61 65 3b 20 5c 0a 20 20 20 20  = X##gae; \.    
2660: 58 23 23 62 75 67 61 20 3d 20 47 45 54 36 34 4c  X##buga = GET64L
2670: 4f 4c 4f 28 58 23 23 62 75 2c 20 58 23 23 67 61  OLO(X##bu, X##ga
2680: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20 3d  ); \.    X##ge =
2690: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 61   GET64HIHI(X##ga
26a0: 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a 20 20  e, X##gae); \.  
26b0: 20 20 58 23 23 62 61 67 65 20 3d 20 47 45 54 36    X##bage = GET6
26c0: 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23 23  4LOLO(X##ba, X##
26d0: 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  ge); \.    XOReq
26e0: 31 32 38 28 43 61 65 2c 20 58 23 23 67 61 65 29  128(Cae, X##gae)
26f0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f 20 3d  ; \.    X##gio =
2700: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 75   XOR128(LOAD128u
2710: 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 4f 41  (state[ 7]), LOA
2720: 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37 5d 29  D128u(input[ 7])
2730: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 20 3d  ); \.    X##gi =
2740: 20 58 23 23 67 69 6f 3b 20 5c 0a 20 20 20 20 58   X##gio; \.    X
2750: 23 23 62 65 67 69 20 3d 20 47 45 54 36 34 4c 4f  ##begi = GET64LO
2760: 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 69 29  LO(X##be, X##gi)
2770: 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d 20  ; \.    X##go = 
2780: 47 45 54 36 34 48 49 48 49 28 58 23 23 67 69 6f  GET64HIHI(X##gio
2790: 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 20 20  , X##gio); \.   
27a0: 20 58 23 23 62 69 67 6f 20 3d 20 47 45 54 36 34   X##bigo = GET64
27b0: 4c 4f 4c 4f 28 58 23 23 62 69 2c 20 58 23 23 67  LOLO(X##bi, X##g
27c0: 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31  o); \.    XOReq1
27d0: 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f 29 3b  28(Cio, X##gio);
27e0: 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20 58   \.    X##gu = X
27f0: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74  OR64(LOAD64(stat
2800: 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 28 69  e[ 9]), LOAD64(i
2810: 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a 20 20  nput[ 9])); \.  
2820: 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45 54 36    X##bogu = GET6
2830: 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58 23 23  4LOLO(X##bo, X##
2840: 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  gu); \.    XOReq
2850: 36 34 28 43 75 61 2c 20 58 23 23 67 75 29 3b 20  64(Cua, X##gu); 
2860: 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d 20 58  \.    X##kae = X
2870: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74  OR128(LOAD128(st
2880: 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44 31 32  ate[10]), LOAD12
2890: 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29 3b 20  8u(input[10])); 
28a0: 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20 58 23  \.    X##ka = X#
28b0: 23 6b 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 6b  #kae; \.    X##k
28c0: 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23  e = GET64HIHI(X#
28d0: 23 6b 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c  #kae, X##kae); \
28e0: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61  .    XOReq128(Ca
28f0: 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20  e, X##kae); \.  
2900: 20 20 58 23 23 6b 69 6f 20 3d 20 58 4f 52 31 32    X##kio = XOR12
2910: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b  8(LOAD128(state[
2920: 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69  12]), LOAD128u(i
2930: 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c 0a 20 20  nput[12])); \.  
2940: 20 20 58 23 23 6b 69 20 3d 20 58 23 23 6b 69 6f    X##ki = X##kio
2950: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d 20  ; \.    X##ko = 
2960: 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 69 6f  GET64HIHI(X##kio
2970: 2c 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20  , X##kio); \.   
2980: 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58   XOReq128(Cio, X
2990: 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23  ##kio); \.    X#
29a0: 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38 28 4c  #kuma = XOR128(L
29b0: 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 34 5d  OAD128(state[14]
29c0: 29 2c 20 4c 4f 41 44 31 32 38 28 69 6e 70 75 74  ), LOAD128(input
29d0: 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20 58 4f  [14])); \.    XO
29e0: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6b 75  Req64(Cua, X##ku
29f0: 6d 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 65  ma); \.    X##me
2a00: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b   = LOAD64(state[
2a10: 31 36 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b  16]); \.    X##k
2a20: 61 6d 65 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28  ame = GET64LOLO(
2a30: 58 23 23 6b 61 2c 20 58 23 23 6d 65 29 3b 20 5c  X##ka, X##me); \
2a40: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61  .    XOReq128(Ca
2a50: 65 2c 20 47 45 54 36 34 48 49 48 49 28 58 23 23  e, GET64HIHI(X##
2a60: 6b 75 6d 61 2c 20 58 23 23 6b 61 6d 65 29 29 3b  kuma, X##kame));
2a70: 20 5c 0a 20 20 20 20 58 23 23 6d 69 6f 20 3d 20   \.    X##mio = 
2a80: 4c 4f 41 44 31 32 38 75 28 73 74 61 74 65 5b 31  LOAD128u(state[1
2a90: 37 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 69  7]); \.    X##mi
2aa0: 20 3d 20 58 23 23 6d 69 6f 3b 20 5c 0a 20 20 20   = X##mio; \.   
2ab0: 20 58 23 23 6b 65 6d 69 20 3d 20 47 45 54 36 34   X##kemi = GET64
2ac0: 4c 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 23 23 6d  LOLO(X##ke, X##m
2ad0: 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f 20  i); \.    X##mo 
2ae0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6d  = GET64HIHI(X##m
2af0: 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20  io, X##mio); \. 
2b00: 20 20 20 58 23 23 6b 69 6d 6f 20 3d 20 47 45 54     X##kimo = GET
2b10: 36 34 4c 4f 4c 4f 28 58 23 23 6b 69 2c 20 58 23  64LOLO(X##ki, X#
2b20: 23 6d 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  #mo); \.    XORe
2b30: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6d 69 6f  q128(Cio, X##mio
2b40: 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20 3d  ); \.    X##mu =
2b50: 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39   LOAD64(state[19
2b60: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 6d  ]); \.    X##kom
2b70: 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23  u = GET64LOLO(X#
2b80: 23 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20  #ko, X##mu); \. 
2b90: 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20     XOReq64(Cua, 
2ba0: 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 23  X##mu); \.    X#
2bb0: 23 73 61 73 65 20 3d 20 4c 4f 41 44 31 32 38 28  #sase = LOAD128(
2bc0: 73 74 61 74 65 5b 32 30 5d 29 3b 20 5c 0a 20 20  state[20]); \.  
2bd0: 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20    XOReq128(Cae, 
2be0: 58 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20  X##sase); \.    
2bf0: 58 23 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32  X##siso = LOAD12
2c00: 38 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a  8(state[22]); \.
2c10: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f      XOReq128(Cio
2c20: 2c 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20  , X##siso); \.  
2c30: 20 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34    X##su = LOAD64
2c40: 28 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20  (state[24]); \. 
2c50: 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20     XOReq64(Cua, 
2c60: 58 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69  X##su); \..#defi
2c70: 6e 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65  ne copyFromState
2c80: 41 6e 64 58 6f 72 31 30 38 38 62 69 74 73 28 58  AndXor1088bits(X
2c90: 2c 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29 20  , state, input) 
2ca0: 5c 0a 20 20 20 20 58 23 23 62 61 65 20 3d 20 58  \.    X##bae = X
2cb0: 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74  OR128(LOAD128(st
2cc0: 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31 32  ate[ 0]), LOAD12
2cd0: 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b 20  8u(input[ 0])); 
2ce0: 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58 23  \.    X##ba = X#
2cf0: 23 62 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62  #bae; \.    X##b
2d00: 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23  e = GET64HIHI(X#
2d10: 23 62 61 65 2c 20 58 23 23 62 61 65 29 3b 20 5c  #bae, X##bae); \
2d20: 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62 61  .    Cae = X##ba
2d30: 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 6f 20  e; \.    X##bio 
2d40: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38  = XOR128(LOAD128
2d50: 28 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f 41  (state[ 2]), LOA
2d60: 44 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d 29  D128u(input[ 2])
2d70: 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d  ); \.    X##bi =
2d80: 20 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58   X##bio; \.    X
2d90: 23 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49  ##bo = GET64HIHI
2da0: 28 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f 29  (X##bio, X##bio)
2db0: 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23  ; \.    Cio = X#
2dc0: 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62  #bio; \.    X##b
2dd0: 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34  u = XOR64(LOAD64
2de0: 28 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f 41  (state[ 4]), LOA
2df0: 44 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29 3b  D64(input[ 4]));
2e00: 20 5c 0a 20 20 20 20 43 75 61 20 3d 20 58 23 23   \.    Cua = X##
2e10: 62 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61 65  bu; \.    X##gae
2e20: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32   = XOR128(LOAD12
2e30: 38 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20 4c  8u(state[ 5]), L
2e40: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 35  OAD128u(input[ 5
2e50: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 61  ])); \.    X##ga
2e60: 20 3d 20 58 23 23 67 61 65 3b 20 5c 0a 20 20 20   = X##gae; \.   
2e70: 20 58 23 23 62 75 67 61 20 3d 20 47 45 54 36 34   X##buga = GET64
2e80: 4c 4f 4c 4f 28 58 23 23 62 75 2c 20 58 23 23 67  LOLO(X##bu, X##g
2e90: 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 65 20  a); \.    X##ge 
2ea0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67  = GET64HIHI(X##g
2eb0: 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a 20  ae, X##gae); \. 
2ec0: 20 20 20 58 23 23 62 61 67 65 20 3d 20 47 45 54     X##bage = GET
2ed0: 36 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58 23  64LOLO(X##ba, X#
2ee0: 23 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  #ge); \.    XORe
2ef0: 71 31 32 38 28 43 61 65 2c 20 58 23 23 67 61 65  q128(Cae, X##gae
2f00: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f 20  ); \.    X##gio 
2f10: 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38  = XOR128(LOAD128
2f20: 75 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c 4f  u(state[ 7]), LO
2f30: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37 5d  AD128u(input[ 7]
2f40: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 20  )); \.    X##gi 
2f50: 3d 20 58 23 23 67 69 6f 3b 20 5c 0a 20 20 20 20  = X##gio; \.    
2f60: 58 23 23 62 65 67 69 20 3d 20 47 45 54 36 34 4c  X##begi = GET64L
2f70: 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67 69  OLO(X##be, X##gi
2f80: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20 3d  ); \.    X##go =
2f90: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67 69   GET64HIHI(X##gi
2fa0: 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20 20  o, X##gio); \.  
2fb0: 20 20 58 23 23 62 69 67 6f 20 3d 20 47 45 54 36    X##bigo = GET6
2fc0: 34 4c 4f 4c 4f 28 58 23 23 62 69 2c 20 58 23 23  4LOLO(X##bi, X##
2fd0: 67 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  go); \.    XOReq
2fe0: 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f 29  128(Cio, X##gio)
2ff0: 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d 20  ; \.    X##gu = 
3000: 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61  XOR64(LOAD64(sta
3010: 74 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34 28  te[ 9]), LOAD64(
3020: 69 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a 20  input[ 9])); \. 
3030: 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45 54     X##bogu = GET
3040: 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58 23  64LOLO(X##bo, X#
3050: 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  #gu); \.    XORe
3060: 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 29 3b  q64(Cua, X##gu);
3070: 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d 20   \.    X##kae = 
3080: 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73  XOR128(LOAD128(s
3090: 74 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44 31  tate[10]), LOAD1
30a0: 32 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29 3b  28u(input[10]));
30b0: 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20 58   \.    X##ka = X
30c0: 23 23 6b 61 65 3b 20 5c 0a 20 20 20 20 58 23 23  ##kae; \.    X##
30d0: 6b 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58  ke = GET64HIHI(X
30e0: 23 23 6b 61 65 2c 20 58 23 23 6b 61 65 29 3b 20  ##kae, X##kae); 
30f0: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43  \.    XOReq128(C
3100: 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20  ae, X##kae); \. 
3110: 20 20 20 58 23 23 6b 69 6f 20 3d 20 58 4f 52 31     X##kio = XOR1
3120: 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65  28(LOAD128(state
3130: 5b 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28  [12]), LOAD128u(
3140: 69 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c 0a 20  input[12])); \. 
3150: 20 20 20 58 23 23 6b 69 20 3d 20 58 23 23 6b 69     X##ki = X##ki
3160: 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20 3d  o; \.    X##ko =
3170: 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 69   GET64HIHI(X##ki
3180: 6f 2c 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20  o, X##kio); \.  
3190: 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20    XOReq128(Cio, 
31a0: 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58  X##kio); \.    X
31b0: 23 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38 28  ##kuma = XOR128(
31c0: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 34  LOAD128(state[14
31d0: 5d 29 2c 20 4c 4f 41 44 31 32 38 28 69 6e 70 75  ]), LOAD128(inpu
31e0: 74 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20 58  t[14])); \.    X
31f0: 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6b  OReq64(Cua, X##k
3200: 75 6d 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d  uma); \.    X##m
3210: 65 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36 34  e = XOR64(LOAD64
3220: 28 73 74 61 74 65 5b 31 36 5d 29 2c 20 4c 4f 41  (state[16]), LOA
3230: 44 36 34 28 69 6e 70 75 74 5b 31 36 5d 29 29 3b  D64(input[16]));
3240: 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 20 3d   \.    X##kame =
3250: 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 61   GET64LOLO(X##ka
3260: 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 20 20  , X##me); \.    
3270: 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47 45  XOReq128(Cae, GE
3280: 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d 61 2c  T64HIHI(X##kuma,
3290: 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a 20 20   X##kame)); \.  
32a0: 20 20 58 23 23 6d 69 6f 20 3d 20 4c 4f 41 44 31    X##mio = LOAD1
32b0: 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b 20  28u(state[17]); 
32c0: 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23  \.    X##mi = X#
32d0: 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b  #mio; \.    X##k
32e0: 65 6d 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28  emi = GET64LOLO(
32f0: 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20 5c  X##ke, X##mi); \
3300: 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 45 54  .    X##mo = GET
3310: 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2c 20 58  64HIHI(X##mio, X
3320: 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23  ##mio); \.    X#
3330: 23 6b 69 6d 6f 20 3d 20 47 45 54 36 34 4c 4f 4c  #kimo = GET64LOL
3340: 4f 28 58 23 23 6b 69 2c 20 58 23 23 6d 6f 29 3b  O(X##ki, X##mo);
3350: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
3360: 43 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a  Cio, X##mio); \.
3370: 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41 44      X##mu = LOAD
3380: 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20 5c  64(state[19]); \
3390: 0a 20 20 20 20 58 23 23 6b 6f 6d 75 20 3d 20 47  .    X##komu = G
33a0: 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 6f 2c 20  ET64LOLO(X##ko, 
33b0: 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58 4f  X##mu); \.    XO
33c0: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6d 75  Req64(Cua, X##mu
33d0: 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 73 65  ); \.    X##sase
33e0: 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65   = LOAD128(state
33f0: 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52  [20]); \.    XOR
3400: 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 73 61  eq128(Cae, X##sa
3410: 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 69  se); \.    X##si
3420: 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61  so = LOAD128(sta
3430: 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20 58  te[22]); \.    X
3440: 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23  OReq128(Cio, X##
3450: 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23  siso); \.    X##
3460: 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74  su = LOAD64(stat
3470: 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 58 4f  e[24]); \.    XO
3480: 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 73 75  Req64(Cua, X##su
3490: 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63 6f  ); \..#define co
34a0: 70 79 46 72 6f 6d 53 74 61 74 65 41 6e 64 58 6f  pyFromStateAndXo
34b0: 72 31 31 35 32 62 69 74 73 28 58 2c 20 73 74 61  r1152bits(X, sta
34c0: 74 65 2c 20 69 6e 70 75 74 29 20 5c 0a 20 20 20  te, input) \.   
34d0: 20 58 23 23 62 61 65 20 3d 20 58 4f 52 31 32 38   X##bae = XOR128
34e0: 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 20  (LOAD128(state[ 
34f0: 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e  0]), LOAD128u(in
3500: 70 75 74 5b 20 30 5d 29 29 3b 20 5c 0a 20 20 20  put[ 0])); \.   
3510: 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65 3b   X##ba = X##bae;
3520: 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20 47   \.    X##be = G
3530: 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65 2c  ET64HIHI(X##bae,
3540: 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20 20   X##bae); \.    
3550: 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c 0a  Cae = X##bae; \.
3560: 20 20 20 20 58 23 23 62 69 6f 20 3d 20 58 4f 52      X##bio = XOR
3570: 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74  128(LOAD128(stat
3580: 65 5b 20 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75  e[ 2]), LOAD128u
3590: 28 69 6e 70 75 74 5b 20 32 5d 29 29 3b 20 5c 0a  (input[ 2])); \.
35a0: 20 20 20 20 58 23 23 62 69 20 3d 20 58 23 23 62      X##bi = X##b
35b0: 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 6f 20  io; \.    X##bo 
35c0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 62  = GET64HIHI(X##b
35d0: 69 6f 2c 20 58 23 23 62 69 6f 29 3b 20 5c 0a 20  io, X##bio); \. 
35e0: 20 20 20 43 69 6f 20 3d 20 58 23 23 62 69 6f 3b     Cio = X##bio;
35f0: 20 5c 0a 20 20 20 20 58 23 23 62 75 20 3d 20 58   \.    X##bu = X
3600: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74  OR64(LOAD64(stat
3610: 65 5b 20 34 5d 29 2c 20 4c 4f 41 44 36 34 28 69  e[ 4]), LOAD64(i
3620: 6e 70 75 74 5b 20 34 5d 29 29 3b 20 5c 0a 20 20  nput[ 4])); \.  
3630: 20 20 43 75 61 20 3d 20 58 23 23 62 75 3b 20 5c    Cua = X##bu; \
3640: 0a 20 20 20 20 58 23 23 67 61 65 20 3d 20 58 4f  .    X##gae = XO
3650: 52 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74  R128(LOAD128u(st
3660: 61 74 65 5b 20 35 5d 29 2c 20 4c 4f 41 44 31 32  ate[ 5]), LOAD12
3670: 38 75 28 69 6e 70 75 74 5b 20 35 5d 29 29 3b 20  8u(input[ 5])); 
3680: 5c 0a 20 20 20 20 58 23 23 67 61 20 3d 20 58 23  \.    X##ga = X#
3690: 23 67 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62  #gae; \.    X##b
36a0: 75 67 61 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28  uga = GET64LOLO(
36b0: 58 23 23 62 75 2c 20 58 23 23 67 61 29 3b 20 5c  X##bu, X##ga); \
36c0: 0a 20 20 20 20 58 23 23 67 65 20 3d 20 47 45 54  .    X##ge = GET
36d0: 36 34 48 49 48 49 28 58 23 23 67 61 65 2c 20 58  64HIHI(X##gae, X
36e0: 23 23 67 61 65 29 3b 20 5c 0a 20 20 20 20 58 23  ##gae); \.    X#
36f0: 23 62 61 67 65 20 3d 20 47 45 54 36 34 4c 4f 4c  #bage = GET64LOL
3700: 4f 28 58 23 23 62 61 2c 20 58 23 23 67 65 29 3b  O(X##ba, X##ge);
3710: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
3720: 43 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a  Cae, X##gae); \.
3730: 20 20 20 20 58 23 23 67 69 6f 20 3d 20 58 4f 52      X##gio = XOR
3740: 31 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61  128(LOAD128u(sta
3750: 74 65 5b 20 37 5d 29 2c 20 4c 4f 41 44 31 32 38  te[ 7]), LOAD128
3760: 75 28 69 6e 70 75 74 5b 20 37 5d 29 29 3b 20 5c  u(input[ 7])); \
3770: 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23 23  .    X##gi = X##
3780: 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 65  gio; \.    X##be
3790: 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58  gi = GET64LOLO(X
37a0: 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c 0a  ##be, X##gi); \.
37b0: 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54 36      X##go = GET6
37c0: 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58 23  4HIHI(X##gio, X#
37d0: 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23  #gio); \.    X##
37e0: 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  bigo = GET64LOLO
37f0: 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b 20  (X##bi, X##go); 
3800: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43  \.    XOReq128(C
3810: 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20  io, X##gio); \. 
3820: 20 20 20 58 23 23 67 75 20 3d 20 58 4f 52 36 34     X##gu = XOR64
3830: 28 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 20 39  (LOAD64(state[ 9
3840: 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74  ]), LOAD64(input
3850: 5b 20 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23  [ 9])); \.    X#
3860: 23 62 6f 67 75 20 3d 20 47 45 54 36 34 4c 4f 4c  #bogu = GET64LOL
3870: 4f 28 58 23 23 62 6f 2c 20 58 23 23 67 75 29 3b  O(X##bo, X##gu);
3880: 20 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43   \.    XOReq64(C
3890: 75 61 2c 20 58 23 23 67 75 29 3b 20 5c 0a 20 20  ua, X##gu); \.  
38a0: 20 20 58 23 23 6b 61 65 20 3d 20 58 4f 52 31 32    X##kae = XOR12
38b0: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b  8(LOAD128(state[
38c0: 31 30 5d 29 2c 20 4c 4f 41 44 31 32 38 75 28 69  10]), LOAD128u(i
38d0: 6e 70 75 74 5b 31 30 5d 29 29 3b 20 5c 0a 20 20  nput[10])); \.  
38e0: 20 20 58 23 23 6b 61 20 3d 20 58 23 23 6b 61 65    X##ka = X##kae
38f0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 20 3d 20  ; \.    X##ke = 
3900: 47 45 54 36 34 48 49 48 49 28 58 23 23 6b 61 65  GET64HIHI(X##kae
3910: 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a 20 20 20  , X##kae); \.   
3920: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58   XOReq128(Cae, X
3930: 23 23 6b 61 65 29 3b 20 5c 0a 20 20 20 20 58 23  ##kae); \.    X#
3940: 23 6b 69 6f 20 3d 20 58 4f 52 31 32 38 28 4c 4f  #kio = XOR128(LO
3950: 41 44 31 32 38 28 73 74 61 74 65 5b 31 32 5d 29  AD128(state[12])
3960: 2c 20 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74  , LOAD128u(input
3970: 5b 31 32 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23  [12])); \.    X#
3980: 23 6b 69 20 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a  #ki = X##kio; \.
3990: 20 20 20 20 58 23 23 6b 6f 20 3d 20 47 45 54 36      X##ko = GET6
39a0: 34 48 49 48 49 28 58 23 23 6b 69 6f 2c 20 58 23  4HIHI(X##kio, X#
39b0: 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52  #kio); \.    XOR
39c0: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6b 69  eq128(Cio, X##ki
39d0: 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d  o); \.    X##kum
39e0: 61 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31  a = XOR128(LOAD1
39f0: 32 38 28 73 74 61 74 65 5b 31 34 5d 29 2c 20 4c  28(state[14]), L
3a00: 4f 41 44 31 32 38 28 69 6e 70 75 74 5b 31 34 5d  OAD128(input[14]
3a10: 29 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36  )); \.    XOReq6
3a20: 34 28 43 75 61 2c 20 58 23 23 6b 75 6d 61 29 3b  4(Cua, X##kuma);
3a30: 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 58   \.    X##me = X
3a40: 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74 61 74  OR64(LOAD64(stat
3a50: 65 5b 31 36 5d 29 2c 20 4c 4f 41 44 36 34 28 69  e[16]), LOAD64(i
3a60: 6e 70 75 74 5b 31 36 5d 29 29 3b 20 5c 0a 20 20  nput[16])); \.  
3a70: 20 20 58 23 23 6b 61 6d 65 20 3d 20 47 45 54 36    X##kame = GET6
3a80: 34 4c 4f 4c 4f 28 58 23 23 6b 61 2c 20 58 23 23  4LOLO(X##ka, X##
3a90: 6d 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71  me); \.    XOReq
3aa0: 31 32 38 28 43 61 65 2c 20 47 45 54 36 34 48 49  128(Cae, GET64HI
3ab0: 48 49 28 58 23 23 6b 75 6d 61 2c 20 58 23 23 6b  HI(X##kuma, X##k
3ac0: 61 6d 65 29 29 3b 20 5c 0a 20 20 20 20 58 23 23  ame)); \.    X##
3ad0: 6d 69 6f 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41  mio = XOR128(LOA
3ae0: 44 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29  D128u(state[17])
3af0: 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b 31  , LOAD64(input[1
3b00: 37 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d  7])); \.    X##m
3b10: 69 20 3d 20 58 23 23 6d 69 6f 3b 20 5c 0a 20 20  i = X##mio; \.  
3b20: 20 20 58 23 23 6b 65 6d 69 20 3d 20 47 45 54 36    X##kemi = GET6
3b30: 34 4c 4f 4c 4f 28 58 23 23 6b 65 2c 20 58 23 23  4LOLO(X##ke, X##
3b40: 6d 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 6f  mi); \.    X##mo
3b50: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23   = GET64HIHI(X##
3b60: 6d 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a  mio, X##mio); \.
3b70: 20 20 20 20 58 23 23 6b 69 6d 6f 20 3d 20 47 45      X##kimo = GE
3b80: 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 69 2c 20 58  T64LOLO(X##ki, X
3b90: 23 23 6d 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52  ##mo); \.    XOR
3ba0: 65 71 31 32 38 28 43 69 6f 2c 20 58 23 23 6d 69  eq128(Cio, X##mi
3bb0: 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 6d 75 20  o); \.    X##mu 
3bc0: 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31  = LOAD64(state[1
3bd0: 39 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f  9]); \.    X##ko
3be0: 6d 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58  mu = GET64LOLO(X
3bf0: 23 23 6b 6f 2c 20 58 23 23 6d 75 29 3b 20 5c 0a  ##ko, X##mu); \.
3c00: 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c      XOReq64(Cua,
3c10: 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58   X##mu); \.    X
3c20: 23 23 73 61 73 65 20 3d 20 4c 4f 41 44 31 32 38  ##sase = LOAD128
3c30: 28 73 74 61 74 65 5b 32 30 5d 29 3b 20 5c 0a 20  (state[20]); \. 
3c40: 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c     XOReq128(Cae,
3c50: 20 58 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20   X##sase); \.   
3c60: 20 58 23 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31   X##siso = LOAD1
3c70: 32 38 28 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c  28(state[22]); \
3c80: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69  .    XOReq128(Ci
3c90: 6f 2c 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20  o, X##siso); \. 
3ca0: 20 20 20 58 23 23 73 75 20 3d 20 4c 4f 41 44 36     X##su = LOAD6
3cb0: 34 28 73 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a  4(state[24]); \.
3cc0: 20 20 20 20 58 4f 52 65 71 36 34 28 43 75 61 2c      XOReq64(Cua,
3cd0: 20 58 23 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66   X##su); \..#def
3ce0: 69 6e 65 20 63 6f 70 79 46 72 6f 6d 53 74 61 74  ine copyFromStat
3cf0: 65 41 6e 64 58 6f 72 31 33 34 34 62 69 74 73 28  eAndXor1344bits(
3d00: 58 2c 20 73 74 61 74 65 2c 20 69 6e 70 75 74 29  X, state, input)
3d10: 20 5c 0a 20 20 20 20 58 23 23 62 61 65 20 3d 20   \.    X##bae = 
3d20: 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28 73  XOR128(LOAD128(s
3d30: 74 61 74 65 5b 20 30 5d 29 2c 20 4c 4f 41 44 31  tate[ 0]), LOAD1
3d40: 32 38 75 28 69 6e 70 75 74 5b 20 30 5d 29 29 3b  28u(input[ 0]));
3d50: 20 5c 0a 20 20 20 20 58 23 23 62 61 20 3d 20 58   \.    X##ba = X
3d60: 23 23 62 61 65 3b 20 5c 0a 20 20 20 20 58 23 23  ##bae; \.    X##
3d70: 62 65 20 3d 20 47 45 54 36 34 48 49 48 49 28 58  be = GET64HIHI(X
3d80: 23 23 62 61 65 2c 20 58 23 23 62 61 65 29 3b 20  ##bae, X##bae); 
3d90: 5c 0a 20 20 20 20 43 61 65 20 3d 20 58 23 23 62  \.    Cae = X##b
3da0: 61 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 6f  ae; \.    X##bio
3db0: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32   = XOR128(LOAD12
3dc0: 38 28 73 74 61 74 65 5b 20 32 5d 29 2c 20 4c 4f  8(state[ 2]), LO
3dd0: 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 32 5d  AD128u(input[ 2]
3de0: 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20  )); \.    X##bi 
3df0: 3d 20 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20  = X##bio; \.    
3e00: 58 23 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48  X##bo = GET64HIH
3e10: 49 28 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f  I(X##bio, X##bio
3e20: 29 3b 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58  ); \.    Cio = X
3e30: 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23  ##bio; \.    X##
3e40: 62 75 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36  bu = XOR64(LOAD6
3e50: 34 28 73 74 61 74 65 5b 20 34 5d 29 2c 20 4c 4f  4(state[ 4]), LO
3e60: 41 44 36 34 28 69 6e 70 75 74 5b 20 34 5d 29 29  AD64(input[ 4]))
3e70: 3b 20 5c 0a 20 20 20 20 43 75 61 20 3d 20 58 23  ; \.    Cua = X#
3e80: 23 62 75 3b 20 5c 0a 20 20 20 20 58 23 23 67 61  #bu; \.    X##ga
3e90: 65 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31  e = XOR128(LOAD1
3ea0: 32 38 75 28 73 74 61 74 65 5b 20 35 5d 29 2c 20  28u(state[ 5]), 
3eb0: 4c 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20  LOAD128u(input[ 
3ec0: 35 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67  5])); \.    X##g
3ed0: 61 20 3d 20 58 23 23 67 61 65 3b 20 5c 0a 20 20  a = X##gae; \.  
3ee0: 20 20 58 23 23 62 75 67 61 20 3d 20 47 45 54 36    X##buga = GET6
3ef0: 34 4c 4f 4c 4f 28 58 23 23 62 75 2c 20 58 23 23  4LOLO(X##bu, X##
3f00: 67 61 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 65  ga); \.    X##ge
3f10: 20 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23   = GET64HIHI(X##
3f20: 67 61 65 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a  gae, X##gae); \.
3f30: 20 20 20 20 58 23 23 62 61 67 65 20 3d 20 47 45      X##bage = GE
3f40: 54 36 34 4c 4f 4c 4f 28 58 23 23 62 61 2c 20 58  T64LOLO(X##ba, X
3f50: 23 23 67 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52  ##ge); \.    XOR
3f60: 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 67 61  eq128(Cae, X##ga
3f70: 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69 6f  e); \.    X##gio
3f80: 20 3d 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32   = XOR128(LOAD12
3f90: 38 75 28 73 74 61 74 65 5b 20 37 5d 29 2c 20 4c  8u(state[ 7]), L
3fa0: 4f 41 44 31 32 38 75 28 69 6e 70 75 74 5b 20 37  OAD128u(input[ 7
3fb0: 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 69  ])); \.    X##gi
3fc0: 20 3d 20 58 23 23 67 69 6f 3b 20 5c 0a 20 20 20   = X##gio; \.   
3fd0: 20 58 23 23 62 65 67 69 20 3d 20 47 45 54 36 34   X##begi = GET64
3fe0: 4c 4f 4c 4f 28 58 23 23 62 65 2c 20 58 23 23 67  LOLO(X##be, X##g
3ff0: 69 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 6f 20  i); \.    X##go 
4000: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 67  = GET64HIHI(X##g
4010: 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20  io, X##gio); \. 
4020: 20 20 20 58 23 23 62 69 67 6f 20 3d 20 47 45 54     X##bigo = GET
4030: 36 34 4c 4f 4c 4f 28 58 23 23 62 69 2c 20 58 23  64LOLO(X##bi, X#
4040: 23 67 6f 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65  #go); \.    XORe
4050: 71 31 32 38 28 43 69 6f 2c 20 58 23 23 67 69 6f  q128(Cio, X##gio
4060: 29 3b 20 5c 0a 20 20 20 20 58 23 23 67 75 20 3d  ); \.    X##gu =
4070: 20 58 4f 52 36 34 28 4c 4f 41 44 36 34 28 73 74   XOR64(LOAD64(st
4080: 61 74 65 5b 20 39 5d 29 2c 20 4c 4f 41 44 36 34  ate[ 9]), LOAD64
4090: 28 69 6e 70 75 74 5b 20 39 5d 29 29 3b 20 5c 0a  (input[ 9])); \.
40a0: 20 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45      X##bogu = GE
40b0: 54 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58  T64LOLO(X##bo, X
40c0: 23 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52  ##gu); \.    XOR
40d0: 65 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 29  eq64(Cua, X##gu)
40e0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d  ; \.    X##kae =
40f0: 20 58 4f 52 31 32 38 28 4c 4f 41 44 31 32 38 28   XOR128(LOAD128(
4100: 73 74 61 74 65 5b 31 30 5d 29 2c 20 4c 4f 41 44  state[10]), LOAD
4110: 31 32 38 75 28 69 6e 70 75 74 5b 31 30 5d 29 29  128u(input[10]))
4120: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 20 3d 20  ; \.    X##ka = 
4130: 58 23 23 6b 61 65 3b 20 5c 0a 20 20 20 20 58 23  X##kae; \.    X#
4140: 23 6b 65 20 3d 20 47 45 54 36 34 48 49 48 49 28  #ke = GET64HIHI(
4150: 58 23 23 6b 61 65 2c 20 58 23 23 6b 61 65 29 3b  X##kae, X##kae);
4160: 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28   \.    XOReq128(
4170: 43 61 65 2c 20 58 23 23 6b 61 65 29 3b 20 5c 0a  Cae, X##kae); \.
4180: 20 20 20 20 58 23 23 6b 69 6f 20 3d 20 58 4f 52      X##kio = XOR
4190: 31 32 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74  128(LOAD128(stat
41a0: 65 5b 31 32 5d 29 2c 20 4c 4f 41 44 31 32 38 75  e[12]), LOAD128u
41b0: 28 69 6e 70 75 74 5b 31 32 5d 29 29 3b 20 5c 0a  (input[12])); \.
41c0: 20 20 20 20 58 23 23 6b 69 20 3d 20 58 23 23 6b      X##ki = X##k
41d0: 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 6f 20  io; \.    X##ko 
41e0: 3d 20 47 45 54 36 34 48 49 48 49 28 58 23 23 6b  = GET64HIHI(X##k
41f0: 69 6f 2c 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20  io, X##kio); \. 
4200: 20 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c     XOReq128(Cio,
4210: 20 58 23 23 6b 69 6f 29 3b 20 5c 0a 20 20 20 20   X##kio); \.    
4220: 58 23 23 6b 75 6d 61 20 3d 20 58 4f 52 31 32 38  X##kuma = XOR128
4230: 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31  (LOAD128(state[1
4240: 34 5d 29 2c 20 4c 4f 41 44 31 32 38 28 69 6e 70  4]), LOAD128(inp
4250: 75 74 5b 31 34 5d 29 29 3b 20 5c 0a 20 20 20 20  ut[14])); \.    
4260: 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23  XOReq64(Cua, X##
4270: 6b 75 6d 61 29 3b 20 5c 0a 20 20 20 20 58 23 23  kuma); \.    X##
4280: 6d 65 20 3d 20 58 4f 52 36 34 28 4c 4f 41 44 36  me = XOR64(LOAD6
4290: 34 28 73 74 61 74 65 5b 31 36 5d 29 2c 20 4c 4f  4(state[16]), LO
42a0: 41 44 36 34 28 69 6e 70 75 74 5b 31 36 5d 29 29  AD64(input[16]))
42b0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 20  ; \.    X##kame 
42c0: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b  = GET64LOLO(X##k
42d0: 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 20  a, X##me); \.   
42e0: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47   XOReq128(Cae, G
42f0: 45 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d 61  ET64HIHI(X##kuma
4300: 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a 20  , X##kame)); \. 
4310: 20 20 20 58 23 23 6d 69 6f 20 3d 20 58 4f 52 31     X##mio = XOR1
4320: 32 38 28 4c 4f 41 44 31 32 38 75 28 73 74 61 74  28(LOAD128u(stat
4330: 65 5b 31 37 5d 29 2c 20 4c 4f 41 44 31 32 38 75  e[17]), LOAD128u
4340: 28 69 6e 70 75 74 5b 31 37 5d 29 29 3b 20 5c 0a  (input[17])); \.
4350: 20 20 20 20 58 23 23 6d 69 20 3d 20 58 23 23 6d      X##mi = X##m
4360: 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 6b 65 6d  io; \.    X##kem
4370: 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23  i = GET64LOLO(X#
4380: 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20 5c 0a 20  #ke, X##mi); \. 
4390: 20 20 20 58 23 23 6d 6f 20 3d 20 47 45 54 36 34     X##mo = GET64
43a0: 48 49 48 49 28 58 23 23 6d 69 6f 2c 20 58 23 23  HIHI(X##mio, X##
43b0: 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b  mio); \.    X##k
43c0: 69 6d 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28  imo = GET64LOLO(
43d0: 58 23 23 6b 69 2c 20 58 23 23 6d 6f 29 3b 20 5c  X##ki, X##mo); \
43e0: 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 69  .    XOReq128(Ci
43f0: 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20  o, X##mio); \.  
4400: 20 20 58 23 23 6d 75 20 3d 20 58 4f 52 36 34 28    X##mu = XOR64(
4410: 4c 4f 41 44 36 34 28 73 74 61 74 65 5b 31 39 5d  LOAD64(state[19]
4420: 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70 75 74 5b  ), LOAD64(input[
4430: 31 39 5d 29 29 3b 20 5c 0a 20 20 20 20 58 23 23  19])); \.    X##
4440: 6b 6f 6d 75 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  komu = GET64LOLO
4450: 28 58 23 23 6b 6f 2c 20 58 23 23 6d 75 29 3b 20  (X##ko, X##mu); 
4460: 5c 0a 20 20 20 20 58 4f 52 65 71 36 34 28 43 75  \.    XOReq64(Cu
4470: 61 2c 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20  a, X##mu); \.   
4480: 20 58 23 23 73 61 73 65 20 3d 20 58 4f 52 31 32   X##sase = XOR12
4490: 38 28 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b  8(LOAD128(state[
44a0: 32 30 5d 29 2c 20 4c 4f 41 44 36 34 28 69 6e 70  20]), LOAD64(inp
44b0: 75 74 5b 32 30 5d 29 29 3b 20 5c 0a 20 20 20 20  ut[20])); \.    
44c0: 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 58 23  XOReq128(Cae, X#
44d0: 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 23  #sase); \.    X#
44e0: 23 73 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28  #siso = LOAD128(
44f0: 73 74 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20  state[22]); \.  
4500: 20 20 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20    XOReq128(Cio, 
4510: 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20  X##siso); \.    
4520: 58 23 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73  X##su = LOAD64(s
4530: 74 61 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20  tate[24]); \.   
4540: 20 58 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23   XOReq64(Cua, X#
4550: 23 73 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65  #su); \..#define
4560: 20 63 6f 70 79 46 72 6f 6d 53 74 61 74 65 28 58   copyFromState(X
4570: 2c 20 73 74 61 74 65 29 20 5c 0a 20 20 20 20 58  , state) \.    X
4580: 23 23 62 61 65 20 3d 20 4c 4f 41 44 31 32 38 28  ##bae = LOAD128(
4590: 73 74 61 74 65 5b 20 30 5d 29 3b 20 5c 0a 20 20  state[ 0]); \.  
45a0: 20 20 58 23 23 62 61 20 3d 20 58 23 23 62 61 65    X##ba = X##bae
45b0: 3b 20 5c 0a 20 20 20 20 58 23 23 62 65 20 3d 20  ; \.    X##be = 
45c0: 47 45 54 36 34 48 49 48 49 28 58 23 23 62 61 65  GET64HIHI(X##bae
45d0: 2c 20 58 23 23 62 61 65 29 3b 20 5c 0a 20 20 20  , X##bae); \.   
45e0: 20 43 61 65 20 3d 20 58 23 23 62 61 65 3b 20 5c   Cae = X##bae; \
45f0: 0a 20 20 20 20 58 23 23 62 69 6f 20 3d 20 4c 4f  .    X##bio = LO
4600: 41 44 31 32 38 28 73 74 61 74 65 5b 20 32 5d 29  AD128(state[ 2])
4610: 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 20 3d 20  ; \.    X##bi = 
4620: 58 23 23 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23  X##bio; \.    X#
4630: 23 62 6f 20 3d 20 47 45 54 36 34 48 49 48 49 28  #bo = GET64HIHI(
4640: 58 23 23 62 69 6f 2c 20 58 23 23 62 69 6f 29 3b  X##bio, X##bio);
4650: 20 5c 0a 20 20 20 20 43 69 6f 20 3d 20 58 23 23   \.    Cio = X##
4660: 62 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 75  bio; \.    X##bu
4670: 20 3d 20 4c 4f 41 44 36 34 28 73 74 61 74 65 5b   = LOAD64(state[
4680: 20 34 5d 29 3b 20 5c 0a 20 20 20 20 43 75 61 20   4]); \.    Cua 
4690: 3d 20 58 23 23 62 75 3b 20 5c 0a 20 20 20 20 58  = X##bu; \.    X
46a0: 23 23 67 61 65 20 3d 20 4c 4f 41 44 31 32 38 75  ##gae = LOAD128u
46b0: 28 73 74 61 74 65 5b 20 35 5d 29 3b 20 5c 0a 20  (state[ 5]); \. 
46c0: 20 20 20 58 23 23 67 61 20 3d 20 58 23 23 67 61     X##ga = X##ga
46d0: 65 3b 20 5c 0a 20 20 20 20 58 23 23 62 75 67 61  e; \.    X##buga
46e0: 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23   = GET64LOLO(X##
46f0: 62 75 2c 20 58 23 23 67 61 29 3b 20 5c 0a 20 20  bu, X##ga); \.  
4700: 20 20 58 23 23 67 65 20 3d 20 47 45 54 36 34 48    X##ge = GET64H
4710: 49 48 49 28 58 23 23 67 61 65 2c 20 58 23 23 67  IHI(X##gae, X##g
4720: 61 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 62 61  ae); \.    X##ba
4730: 67 65 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58  ge = GET64LOLO(X
4740: 23 23 62 61 2c 20 58 23 23 67 65 29 3b 20 5c 0a  ##ba, X##ge); \.
4750: 20 20 20 20 58 4f 52 65 71 31 32 38 28 43 61 65      XOReq128(Cae
4760: 2c 20 58 23 23 67 61 65 29 3b 20 5c 0a 20 20 20  , X##gae); \.   
4770: 20 58 23 23 67 69 6f 20 3d 20 4c 4f 41 44 31 32   X##gio = LOAD12
4780: 38 75 28 73 74 61 74 65 5b 20 37 5d 29 3b 20 5c  8u(state[ 7]); \
4790: 0a 20 20 20 20 58 23 23 67 69 20 3d 20 58 23 23  .    X##gi = X##
47a0: 67 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23 62 65  gio; \.    X##be
47b0: 67 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58  gi = GET64LOLO(X
47c0: 23 23 62 65 2c 20 58 23 23 67 69 29 3b 20 5c 0a  ##be, X##gi); \.
47d0: 20 20 20 20 58 23 23 67 6f 20 3d 20 47 45 54 36      X##go = GET6
47e0: 34 48 49 48 49 28 58 23 23 67 69 6f 2c 20 58 23  4HIHI(X##gio, X#
47f0: 23 67 69 6f 29 3b 20 5c 0a 20 20 20 20 58 23 23  #gio); \.    X##
4800: 62 69 67 6f 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  bigo = GET64LOLO
4810: 28 58 23 23 62 69 2c 20 58 23 23 67 6f 29 3b 20  (X##bi, X##go); 
4820: 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38 28 43  \.    XOReq128(C
4830: 69 6f 2c 20 58 23 23 67 69 6f 29 3b 20 5c 0a 20  io, X##gio); \. 
4840: 20 20 20 58 23 23 67 75 20 3d 20 4c 4f 41 44 36     X##gu = LOAD6
4850: 34 28 73 74 61 74 65 5b 20 39 5d 29 3b 20 5c 0a  4(state[ 9]); \.
4860: 20 20 20 20 58 23 23 62 6f 67 75 20 3d 20 47 45      X##bogu = GE
4870: 54 36 34 4c 4f 4c 4f 28 58 23 23 62 6f 2c 20 58  T64LOLO(X##bo, X
4880: 23 23 67 75 29 3b 20 5c 0a 20 20 20 20 58 4f 52  ##gu); \.    XOR
4890: 65 71 36 34 28 43 75 61 2c 20 58 23 23 67 75 29  eq64(Cua, X##gu)
48a0: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 65 20 3d  ; \.    X##kae =
48b0: 20 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31   LOAD128(state[1
48c0: 30 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61  0]); \.    X##ka
48d0: 20 3d 20 58 23 23 6b 61 65 3b 20 5c 0a 20 20 20   = X##kae; \.   
48e0: 20 58 23 23 6b 65 20 3d 20 47 45 54 36 34 48 49   X##ke = GET64HI
48f0: 48 49 28 58 23 23 6b 61 65 2c 20 58 23 23 6b 61  HI(X##kae, X##ka
4900: 65 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31  e); \.    XOReq1
4910: 32 38 28 43 61 65 2c 20 58 23 23 6b 61 65 29 3b  28(Cae, X##kae);
4920: 20 5c 0a 20 20 20 20 58 23 23 6b 69 6f 20 3d 20   \.    X##kio = 
4930: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 32  LOAD128(state[12
4940: 5d 29 3b 20 5c 0a 20 20 20 20 58 23 23 6b 69 20  ]); \.    X##ki 
4950: 3d 20 58 23 23 6b 69 6f 3b 20 5c 0a 20 20 20 20  = X##kio; \.    
4960: 58 23 23 6b 6f 20 3d 20 47 45 54 36 34 48 49 48  X##ko = GET64HIH
4970: 49 28 58 23 23 6b 69 6f 2c 20 58 23 23 6b 69 6f  I(X##kio, X##kio
4980: 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32  ); \.    XOReq12
4990: 38 28 43 69 6f 2c 20 58 23 23 6b 69 6f 29 3b 20  8(Cio, X##kio); 
49a0: 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61 20 3d 20  \.    X##kuma = 
49b0: 4c 4f 41 44 31 32 38 28 73 74 61 74 65 5b 31 34  LOAD128(state[14
49c0: 5d 29 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 36  ]); \.    XOReq6
49d0: 34 28 43 75 61 2c 20 58 23 23 6b 75 6d 61 29 3b  4(Cua, X##kuma);
49e0: 20 5c 0a 20 20 20 20 58 23 23 6d 65 20 3d 20 4c   \.    X##me = L
49f0: 4f 41 44 36 34 28 73 74 61 74 65 5b 31 36 5d 29  OAD64(state[16])
4a00: 3b 20 5c 0a 20 20 20 20 58 23 23 6b 61 6d 65 20  ; \.    X##kame 
4a10: 3d 20 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b  = GET64LOLO(X##k
4a20: 61 2c 20 58 23 23 6d 65 29 3b 20 5c 0a 20 20 20  a, X##me); \.   
4a30: 20 58 4f 52 65 71 31 32 38 28 43 61 65 2c 20 47   XOReq128(Cae, G
4a40: 45 54 36 34 48 49 48 49 28 58 23 23 6b 75 6d 61  ET64HIHI(X##kuma
4a50: 2c 20 58 23 23 6b 61 6d 65 29 29 3b 20 5c 0a 20  , X##kame)); \. 
4a60: 20 20 20 58 23 23 6d 69 6f 20 3d 20 4c 4f 41 44     X##mio = LOAD
4a70: 31 32 38 75 28 73 74 61 74 65 5b 31 37 5d 29 3b  128u(state[17]);
4a80: 20 5c 0a 20 20 20 20 58 23 23 6d 69 20 3d 20 58   \.    X##mi = X
4a90: 23 23 6d 69 6f 3b 20 5c 0a 20 20 20 20 58 23 23  ##mio; \.    X##
4aa0: 6b 65 6d 69 20 3d 20 47 45 54 36 34 4c 4f 4c 4f  kemi = GET64LOLO
4ab0: 28 58 23 23 6b 65 2c 20 58 23 23 6d 69 29 3b 20  (X##ke, X##mi); 
4ac0: 5c 0a 20 20 20 20 58 23 23 6d 6f 20 3d 20 47 45  \.    X##mo = GE
4ad0: 54 36 34 48 49 48 49 28 58 23 23 6d 69 6f 2c 20  T64HIHI(X##mio, 
4ae0: 58 23 23 6d 69 6f 29 3b 20 5c 0a 20 20 20 20 58  X##mio); \.    X
4af0: 23 23 6b 69 6d 6f 20 3d 20 47 45 54 36 34 4c 4f  ##kimo = GET64LO
4b00: 4c 4f 28 58 23 23 6b 69 2c 20 58 23 23 6d 6f 29  LO(X##ki, X##mo)
4b10: 3b 20 5c 0a 20 20 20 20 58 4f 52 65 71 31 32 38  ; \.    XOReq128
4b20: 28 43 69 6f 2c 20 58 23 23 6d 69 6f 29 3b 20 5c  (Cio, X##mio); \
4b30: 0a 20 20 20 20 58 23 23 6d 75 20 3d 20 4c 4f 41  .    X##mu = LOA
4b40: 44 36 34 28 73 74 61 74 65 5b 31 39 5d 29 3b 20  D64(state[19]); 
4b50: 5c 0a 20 20 20 20 58 23 23 6b 6f 6d 75 20 3d 20  \.    X##komu = 
4b60: 47 45 54 36 34 4c 4f 4c 4f 28 58 23 23 6b 6f 2c  GET64LOLO(X##ko,
4b70: 20 58 23 23 6d 75 29 3b 20 5c 0a 20 20 20 20 58   X##mu); \.    X
4b80: 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 6d  OReq64(Cua, X##m
4b90: 75 29 3b 20 5c 0a 20 20 20 20 58 23 23 73 61 73  u); \.    X##sas
4ba0: 65 20 3d 20 4c 4f 41 44 31 32 38 28 73 74 61 74  e = LOAD128(stat
4bb0: 65 5b 32 30 5d 29 3b 20 5c 0a 20 20 20 20 58 4f  e[20]); \.    XO
4bc0: 52 65 71 31 32 38 28 43 61 65 2c 20 58 23 23 73  Req128(Cae, X##s
4bd0: 61 73 65 29 3b 20 5c 0a 20 20 20 20 58 23 23 73  ase); \.    X##s
4be0: 69 73 6f 20 3d 20 4c 4f 41 44 31 32 38 28 73 74  iso = LOAD128(st
4bf0: 61 74 65 5b 32 32 5d 29 3b 20 5c 0a 20 20 20 20  ate[22]); \.    
4c00: 58 4f 52 65 71 31 32 38 28 43 69 6f 2c 20 58 23  XOReq128(Cio, X#
4c10: 23 73 69 73 6f 29 3b 20 5c 0a 20 20 20 20 58 23  #siso); \.    X#
4c20: 23 73 75 20 3d 20 4c 4f 41 44 36 34 28 73 74 61  #su = LOAD64(sta
4c30: 74 65 5b 32 34 5d 29 3b 20 5c 0a 20 20 20 20 58  te[24]); \.    X
4c40: 4f 52 65 71 36 34 28 43 75 61 2c 20 58 23 23 73  OReq64(Cua, X##s
4c50: 75 29 3b 20 5c 0a 0a 23 64 65 66 69 6e 65 20 63  u); \..#define c
4c60: 6f 70 79 54 6f 53 74 61 74 65 28 73 74 61 74 65  opyToState(state
4c70: 2c 20 58 29 20 5c 0a 20 20 20 20 53 54 4f 52 45  , X) \.    STORE
4c80: 36 34 28 73 74 61 74 65 5b 20 30 5d 2c 20 58 23  64(state[ 0], X#
4c90: 23 62 61 67 65 29 3b 20 5c 0a 20 20 20 20 53 54  #bage); \.    ST
4ca0: 4f 52 45 36 34 28 73 74 61 74 65 5b 20 31 5d 2c  ORE64(state[ 1],
4cb0: 20 58 23 23 62 65 67 69 29 3b 20 5c 0a 20 20 20   X##begi); \.   
4cc0: 20 53 54 4f 52 45 36 34 28 73 74 61 74 65 5b 20   STORE64(state[ 
4cd0: 32 5d 2c 20 58 23 23 62 69 67 6f 29 3b 20 5c 0a  2], X##bigo); \.
4ce0: 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74      STORE64(stat
4cf0: 65 5b 20 33 5d 2c 20 58 23 23 62 6f 67 75 29 3b  e[ 3], X##bogu);
4d00: 20 5c 0a 20 20 20 20 53 54 4f 52 45 31 32 38 28   \.    STORE128(
4d10: 73 74 61 74 65 5b 20 34 5d 2c 20 58 23 23 62 75  state[ 4], X##bu
4d20: 67 61 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  ga); \.    STORE
4d30: 36 34 28 73 74 61 74 65 5b 20 36 5d 2c 20 43 4f  64(state[ 6], CO
4d40: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 61 67  PY64HI2LO(X##bag
4d50: 65 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  e)); \.    STORE
4d60: 36 34 28 73 74 61 74 65 5b 20 37 5d 2c 20 43 4f  64(state[ 7], CO
4d70: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 65 67  PY64HI2LO(X##beg
4d80: 69 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  i)); \.    STORE
4d90: 36 34 28 73 74 61 74 65 5b 20 38 5d 2c 20 43 4f  64(state[ 8], CO
4da0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 69 67  PY64HI2LO(X##big
4db0: 6f 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  o)); \.    STORE
4dc0: 36 34 28 73 74 61 74 65 5b 20 39 5d 2c 20 43 4f  64(state[ 9], CO
4dd0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 62 6f 67  PY64HI2LO(X##bog
4de0: 75 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  u)); \.    STORE
4df0: 36 34 28 73 74 61 74 65 5b 31 30 5d 2c 20 58 23  64(state[10], X#
4e00: 23 6b 61 6d 65 29 3b 20 5c 0a 20 20 20 20 53 54  #kame); \.    ST
4e10: 4f 52 45 36 34 28 73 74 61 74 65 5b 31 31 5d 2c  ORE64(state[11],
4e20: 20 58 23 23 6b 65 6d 69 29 3b 20 5c 0a 20 20 20   X##kemi); \.   
4e30: 20 53 54 4f 52 45 36 34 28 73 74 61 74 65 5b 31   STORE64(state[1
4e40: 32 5d 2c 20 58 23 23 6b 69 6d 6f 29 3b 20 5c 0a  2], X##kimo); \.
4e50: 20 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74      STORE64(stat
4e60: 65 5b 31 33 5d 2c 20 58 23 23 6b 6f 6d 75 29 3b  e[13], X##komu);
4e70: 20 5c 0a 20 20 20 20 53 54 4f 52 45 31 32 38 28   \.    STORE128(
4e80: 73 74 61 74 65 5b 31 34 5d 2c 20 58 23 23 6b 75  state[14], X##ku
4e90: 6d 61 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  ma); \.    STORE
4ea0: 36 34 28 73 74 61 74 65 5b 31 36 5d 2c 20 43 4f  64(state[16], CO
4eb0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 61 6d  PY64HI2LO(X##kam
4ec0: 65 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  e)); \.    STORE
4ed0: 36 34 28 73 74 61 74 65 5b 31 37 5d 2c 20 43 4f  64(state[17], CO
4ee0: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 65 6d  PY64HI2LO(X##kem
4ef0: 69 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  i)); \.    STORE
4f00: 36 34 28 73 74 61 74 65 5b 31 38 5d 2c 20 43 4f  64(state[18], CO
4f10: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 69 6d  PY64HI2LO(X##kim
4f20: 6f 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  o)); \.    STORE
4f30: 36 34 28 73 74 61 74 65 5b 31 39 5d 2c 20 43 4f  64(state[19], CO
4f40: 50 59 36 34 48 49 32 4c 4f 28 58 23 23 6b 6f 6d  PY64HI2LO(X##kom
4f50: 75 29 29 3b 20 5c 0a 20 20 20 20 53 54 4f 52 45  u)); \.    STORE
4f60: 31 32 38 28 73 74 61 74 65 5b 32 30 5d 2c 20 58  128(state[20], X
4f70: 23 23 73 61 73 65 29 3b 20 5c 0a 20 20 20 20 53  ##sase); \.    S
4f80: 54 4f 52 45 31 32 38 28 73 74 61 74 65 5b 32 32  TORE128(state[22
4f90: 5d 2c 20 58 23 23 73 69 73 6f 29 3b 20 5c 0a 20  ], X##siso); \. 
4fa0: 20 20 20 53 54 4f 52 45 36 34 28 73 74 61 74 65     STORE64(state
4fb0: 5b 32 34 5d 2c 20 58 23 23 73 75 29 3b 20 5c 0a  [24], X##su); \.
4fc0: 0a 23 64 65 66 69 6e 65 20 63 6f 70 79 53 74 61  .#define copySta
4fd0: 74 65 56 61 72 69 61 62 6c 65 73 28 58 2c 20 59  teVariables(X, Y
4fe0: 29 20 5c 0a 20 20 20 20 58 23 23 62 61 67 65 20  ) \.    X##bage 
4ff0: 3d 20 59 23 23 62 61 67 65 3b 20 5c 0a 20 20 20  = Y##bage; \.   
5000: 20 58 23 23 62 65 67 69 20 3d 20 59 23 23 62 65   X##begi = Y##be
5010: 67 69 3b 20 5c 0a 20 20 20 20 58 23 23 62 69 67  gi; \.    X##big
5020: 6f 20 3d 20 59 23 23 62 69 67 6f 3b 20 5c 0a 20  o = Y##bigo; \. 
5030: 20 20 20 58 23 23 62 6f 67 75 20 3d 20 59 23 23     X##bogu = Y##
5040: 62 6f 67 75 3b 20 5c 0a 20 20 20 20 58 23 23 62  bogu; \.    X##b
5050: 75 67 61 20 3d 20 59 23 23 62 75 67 61 3b 20 5c  uga = Y##buga; \
5060: 0a 20 20 20 20 58 23 23 6b 61 6d 65 20 3d 20 59  .    X##kame = Y
5070: 23 23 6b 61 6d 65 3b 20 5c 0a 20 20 20 20 58 23  ##kame; \.    X#
5080: 23 6b 65 6d 69 20 3d 20 59 23 23 6b 65 6d 69 3b  #kemi = Y##kemi;
5090: 20 5c 0a 20 20 20 20 58 23 23 6b 69 6d 6f 20 3d   \.    X##kimo =
50a0: 20 59 23 23 6b 69 6d 6f 3b 20 5c 0a 20 20 20 20   Y##kimo; \.    
50b0: 58 23 23 6b 6f 6d 75 20 3d 20 59 23 23 6b 6f 6d  X##komu = Y##kom
50c0: 75 3b 20 5c 0a 20 20 20 20 58 23 23 6b 75 6d 61  u; \.    X##kuma
50d0: 20 3d 20 59 23 23 6b 75 6d 61 3b 20 5c 0a 20 20   = Y##kuma; \.  
50e0: 20 20 58 23 23 73 61 73 65 20 3d 20 59 23 23 73    X##sase = Y##s
50f0: 61 73 65 3b 20 5c 0a 20 20 20 20 58 23 23 73 69  ase; \.    X##si
5100: 73 6f 20 3d 20 59 23 23 73 69 73 6f 3b 20 5c 0a  so = Y##siso; \.
5110: 20 20 20 20 58 23 23 73 75 20 3d 20 59 23 23 73      X##su = Y##s
5120: 75 3b 20 5c 0a 0a                                u; \..