Make WAT purely S-expressions

Make WAT purely S-expressions

(module
  ;; 0-64 reserved for param block
  (memory (export "memory") 10 1000)

  (func (export "blake2b_init") (param $ptr i32) (param $outlen i32)
    ;; setup param block (expect memory to be cleared)

    ;; b array: 0-128
    (i64.store (get_local $ptr) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 8)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 16)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 24)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 32)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 40)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 48)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 56)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 64)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 72)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 80)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 88)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 96)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 104)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 112)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 120)) (i64.const 0))

    ;; h array: 128-192, (8 * i64)
    ;; TODO: support xor against param block and stuff, for now just xor against length

    (i64.store (i32.add (get_local $ptr) (i32.const 128)) (i64.xor (i64.const 0x6a09e667f3bcc908) (i64.load (i32.const 0))))
    (i64.store (i32.add (get_local $ptr) (i32.const 136)) (i64.xor (i64.const 0xbb67ae8584caa73b) (i64.load (i32.const 8))))
    (i64.store (i32.add (get_local $ptr) (i32.const 144)) (i64.xor (i64.const 0x3c6ef372fe94f82b) (i64.load (i32.const 16))))
    (i64.store (i32.add (get_local $ptr) (i32.const 152)) (i64.xor (i64.const 0xa54ff53a5f1d36f1) (i64.load (i32.const 24))))
    (i64.store (i32.add (get_local $ptr) (i32.const 160)) (i64.xor (i64.const 0x510e527fade682d1) (i64.load (i32.const 32))))
    (i64.store (i32.add (get_local $ptr) (i32.const 168)) (i64.xor (i64.const 0x9b05688c2b3e6c1f) (i64.load (i32.const 40))))
    (i64.store (i32.add (get_local $ptr) (i32.const 176)) (i64.xor (i64.const 0x1f83d9abfb41bd6b) (i64.load (i32.const 48))))
    (i64.store (i32.add (get_local $ptr) (i32.const 184)) (i64.xor (i64.const 0x5be0cd19137e2179) (i64.load (i32.const 56))))

    ;; t int.64: 192-200
    (i64.store (i32.add (get_local $ptr) (i32.const 192)) (i64.const 0))

    ;; c int.64: 200-208
    (i64.store (i32.add (get_local $ptr) (i32.const 200)) (i64.const 0))

    ;; f int.64: 208-216
    (i64.store (i32.add (get_local $ptr) (i32.const 208)) (i64.const 0))
  )

  (func (export "blake2b_update") (param $ctx i32) (param $input i32) (param $input_end i32)
    (local $t i32)
    (local $c i32)
    (local $i i32)

    ;; load ctx.t, ctx.c
    (set_local $t (i32.add (get_local $ctx) (i32.const 192)))
    (set_local $c (i32.add (get_local $ctx) (i32.const 200)))

    ;; i = ctx.c
    (set_local $i (i32.wrap/i64 (i64.load (get_local $c))))

    (block $end
      (loop $start
        (br_if $end (i32.eq (get_local $input) (get_local $input_end)))

        (if (i32.eq (get_local $i) (i32.const 128))
          (then
            (i64.store (get_local $t) (i64.add (i64.load (get_local $t)) (i64.extend_u/i32 (get_local $i))))
            (set_local $i (i32.const 0))

            (call $blake2b_compress (get_local $ctx))
          )
        )

        (i32.store8 (i32.add (get_local $ctx) (get_local $i)) (i32.load8_u (get_local $input)))
        (set_local $i (i32.add (get_local $i) (i32.const 1)))
        (set_local $input (i32.add (get_local $input) (i32.const 1)))

        (br $start)
      )
    )

    (i64.store (get_local $c) (i64.extend_u/i32 (get_local $i)))
  )

  (func (export "blake2b_final") (param $ctx i32)
    (local $t i32)
    (local $c i32)
    (local $i i32)

    ;; load ctx.t, ctx.c
    (set_local $t (i32.add (get_local $ctx) (i32.const 192)))
    (set_local $c (i32.add (get_local $ctx) (i32.const 200)))

    ;; ctx.t += ctx.c
    (i64.store (get_local $t) (i64.add (i64.load (get_local $t)) (i64.load (get_local $c))))

    ;; set ctx.f to last_block
    (i64.store (i32.add (get_local $ctx) (i32.const 208)) (i64.const 0xffffffffffffffff))

    ;; i = ctx.c
    (set_local $i (i32.wrap/i64 (i64.load (get_local $c))))

    ;; zero out remaining, i..128
    (block $end
      (loop $start
        (br_if $end (i32.eq (get_local $i) (i32.const 128)))
        (i32.store8 (i32.add (get_local $ctx) (get_local $i)) (i32.const 0))
        (set_local $i (i32.add (get_local $i) (i32.const 1)))
        (br $start)
      )
    )

    ;; ctx.c = i (for good meassure)
    (i64.store (get_local $c) (i64.extend_u/i32 (get_local $i)))

    (call $blake2b_compress (get_local $ctx))
  )

  (func $blake2b_compress (export "blake2b_compress") (param $ctx i32)
    (local $v0 i64)
    (local $v1 i64)
    (local $v2 i64)
    (local $v3 i64)
    (local $v4 i64)
    (local $v5 i64)
    (local $v6 i64)
    (local $v7 i64)
    (local $v8 i64)
    (local $v9 i64)
    (local $v10 i64)
    (local $v11 i64)
    (local $v12 i64)
    (local $v13 i64)
    (local $v14 i64)
    (local $v15 i64)

    (local $m0 i64)
    (local $m1 i64)
    (local $m2 i64)
    (local $m3 i64)
    (local $m4 i64)
    (local $m5 i64)
    (local $m6 i64)
    (local $m7 i64)
    (local $m8 i64)
    (local $m9 i64)
    (local $m10 i64)
    (local $m11 i64)
    (local $m12 i64)
    (local $m13 i64)
    (local $m14 i64)
    (local $m15 i64)

    (local $h0 i32)
    (local $h1 i32)
    (local $h2 i32)
    (local $h3 i32)
    (local $h4 i32)
    (local $h5 i32)
    (local $h6 i32)
    (local $h7 i32)
    (local $h8 i32)

    ;; set h ptrs
    (set_local $h0 (i32.add (get_local $ctx) (i32.const 128)))
    (set_local $h1 (i32.add (get_local $ctx) (i32.const 136)))
    (set_local $h2 (i32.add (get_local $ctx) (i32.const 144)))
    (set_local $h3 (i32.add (get_local $ctx) (i32.const 152)))
    (set_local $h4 (i32.add (get_local $ctx) (i32.const 160)))
    (set_local $h5 (i32.add (get_local $ctx) (i32.const 168)))
    (set_local $h6 (i32.add (get_local $ctx) (i32.const 176)))
    (set_local $h7 (i32.add (get_local $ctx) (i32.const 184)))

    ;; set v[0-8] to ctx.h[0-8]
    (set_local $v0 (i64.load (get_local $h0)))
    (set_local $v1 (i64.load (get_local $h1)))
    (set_local $v2 (i64.load (get_local $h2)))
    (set_local $v3 (i64.load (get_local $h3)))
    (set_local $v4 (i64.load (get_local $h4)))
    (set_local $v5 (i64.load (get_local $h5)))
    (set_local $v6 (i64.load (get_local $h6)))
    (set_local $v7 (i64.load (get_local $h7)))

    ;; set v[8-16] to init vectors
    (set_local $v8 (i64.const 0x6a09e667f3bcc908))
    (set_local $v9 (i64.const 0xbb67ae8584caa73b))
    (set_local $v10 (i64.const 0x3c6ef372fe94f82b))
    (set_local $v11 (i64.const 0xa54ff53a5f1d36f1))
    (set_local $v12 (i64.const 0x510e527fade682d1))
    (set_local $v13 (i64.const 0x9b05688c2b3e6c1f))
    (set_local $v14 (i64.const 0x1f83d9abfb41bd6b))
    (set_local $v15 (i64.const 0x5be0cd19137e2179))

    ;; set m[0-16] to ctx[0-128]
    (set_local $m0 (i64.load (get_local $ctx)))
    (set_local $m1 (i64.load (i32.add (get_local $ctx) (i32.const 8))))
    (set_local $m2 (i64.load (i32.add (get_local $ctx) (i32.const 16))))
    (set_local $m3 (i64.load (i32.add (get_local $ctx) (i32.const 24))))
    (set_local $m4 (i64.load (i32.add (get_local $ctx) (i32.const 32))))
    (set_local $m5 (i64.load (i32.add (get_local $ctx) (i32.const 40))))
    (set_local $m6 (i64.load (i32.add (get_local $ctx) (i32.const 48))))
    (set_local $m7 (i64.load (i32.add (get_local $ctx) (i32.const 56))))
    (set_local $m8 (i64.load (i32.add (get_local $ctx) (i32.const 64))))
    (set_local $m9 (i64.load (i32.add (get_local $ctx) (i32.const 72))))
    (set_local $m10 (i64.load (i32.add (get_local $ctx) (i32.const 80))))
    (set_local $m11 (i64.load (i32.add (get_local $ctx) (i32.const 88))))
    (set_local $m12 (i64.load (i32.add (get_local $ctx) (i32.const 96))))
    (set_local $m13 (i64.load (i32.add (get_local $ctx) (i32.const 104))))
    (set_local $m14 (i64.load (i32.add (get_local $ctx) (i32.const 112))))
    (set_local $m15 (i64.load (i32.add (get_local $ctx) (i32.const 120))))

    ;; v12 = v12 ^ ctx.t
    (set_local $v12
      (i64.xor
        (get_local $v12)
        (i64.load (i32.add (get_local $ctx) (i32.const 192)))
      )
    )

    ;; v14 = v14 ^ ctx.f
    (set_local $v14
      (i64.xor
        (get_local $v14)
        (i64.load (i32.add (get_local $ctx) (i32.const 208)))
      )
    )

    ;; ROUNDS GENERATED BY `node generate-rounds.js`

    ;; ROUND(0)

    ;; G(0, 0)

    ;; $v0 = $v0 + $v4 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m1))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(0, 1)

    ;; $v1 = $v1 + $v5 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(0, 2)

    ;; $v2 = $v2 + $v6 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m5
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(0, 3)

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m7
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(0, 4)

    ;; $v0 = $v0 + $v5 + $m8
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m9))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(0, 5)

    ;; $v1 = $v1 + $v6 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m11
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(0, 6)

    ;; $v2 = $v2 + $v7 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(0, 7)

    ;; $v3 = $v3 + $v4 + $m14
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(1)

    ;; G(1, 0)

    ;; $v0 = $v0 + $v4 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(1, 1)

    ;; $v1 = $v1 + $v5 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m8
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(1, 2)

    ;; $v2 = $v2 + $v6 + $m9
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m15
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(1, 3)

    ;; $v3 = $v3 + $v7 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(1, 4)

    ;; $v0 = $v0 + $v5 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(1, 5)

    ;; $v1 = $v1 + $v6 + $m0
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(1, 6)

    ;; $v2 = $v2 + $v7 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m11))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(1, 7)

    ;; $v3 = $v3 + $v4 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(2)

    ;; G(2, 0)

    ;; $v0 = $v0 + $v4 + $m11
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m8
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m8))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(2, 1)

    ;; $v1 = $v1 + $v5 + $m12
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m0
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m0))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(2, 2)

    ;; $v2 = $v2 + $v6 + $m5
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m2
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(2, 3)

    ;; $v3 = $v3 + $v7 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m15))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(2, 4)

    ;; $v0 = $v0 + $v5 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m10))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(2, 5)

    ;; $v1 = $v1 + $v6 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m3))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m6
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m6))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(2, 6)

    ;; $v2 = $v2 + $v7 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m1
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(2, 7)

    ;; $v3 = $v3 + $v4 + $m9
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m4
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(3)

    ;; G(3, 0)

    ;; $v0 = $v0 + $v4 + $m7
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m7))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(3, 1)

    ;; $v1 = $v1 + $v5 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m1
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(3, 2)

    ;; $v2 = $v2 + $v6 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m12))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(3, 3)

    ;; $v3 = $v3 + $v7 + $m11
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m11))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m14
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m14))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(3, 4)

    ;; $v0 = $v0 + $v5 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m6
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(3, 5)

    ;; $v1 = $v1 + $v6 + $m5
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(3, 6)

    ;; $v2 = $v2 + $v7 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m0
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m0))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(3, 7)

    ;; $v3 = $v3 + $v4 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m8))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(4)

    ;; G(4, 0)

    ;; $v0 = $v0 + $v4 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(4, 1)

    ;; $v1 = $v1 + $v5 + $m5
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m5))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(4, 2)

    ;; $v2 = $v2 + $v6 + $m2
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(4, 3)

    ;; $v3 = $v3 + $v7 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m10))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m15))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(4, 4)

    ;; $v0 = $v0 + $v5 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(4, 5)

    ;; $v1 = $v1 + $v6 + $m11
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m12
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m12))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(4, 6)

    ;; $v2 = $v2 + $v7 + $m6
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m8
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(4, 7)

    ;; $v3 = $v3 + $v4 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(5)

    ;; G(5, 0)

    ;; $v0 = $v0 + $v4 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m12))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(5, 1)

    ;; $v1 = $v1 + $v5 + $m6
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m6))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m10))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(5, 2)

    ;; $v2 = $v2 + $v6 + $m0
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m0))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(5, 3)

    ;; $v3 = $v3 + $v7 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m3))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(5, 4)

    ;; $v0 = $v0 + $v5 + $m4
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m13
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(5, 5)

    ;; $v1 = $v1 + $v6 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m7))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m5
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(5, 6)

    ;; $v2 = $v2 + $v7 + $m15
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m15))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m14
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m14))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(5, 7)

    ;; $v3 = $v3 + $v4 + $m1
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m1))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m9
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(6)

    ;; G(6, 0)

    ;; $v0 = $v0 + $v4 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m12))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m5
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(6, 1)

    ;; $v1 = $v1 + $v5 + $m1
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m15
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m15))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(6, 2)

    ;; $v2 = $v2 + $v6 + $m14
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m14))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(6, 3)

    ;; $v3 = $v3 + $v7 + $m4
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m4))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m10))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(6, 4)

    ;; $v0 = $v0 + $v5 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m0))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m7
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m7))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(6, 5)

    ;; $v1 = $v1 + $v6 + $m6
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m6))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m3))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(6, 6)

    ;; $v2 = $v2 + $v7 + $m9
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m9))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m2
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m2))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(6, 7)

    ;; $v3 = $v3 + $v4 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m8))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m11
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m11))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(7)

    ;; G(7, 0)

    ;; $v0 = $v0 + $v4 + $m13
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m13))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m11
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(7, 1)

    ;; $v1 = $v1 + $v5 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m14
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(7, 2)

    ;; $v2 = $v2 + $v6 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m12))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m1
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m1))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(7, 3)

    ;; $v3 = $v3 + $v7 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m3))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m9
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m9))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(7, 4)

    ;; $v0 = $v0 + $v5 + $m5
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m5))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m0))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(7, 5)

    ;; $v1 = $v1 + $v6 + $m15
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m15))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(7, 6)

    ;; $v2 = $v2 + $v7 + $m8
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m6
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(7, 7)

    ;; $v3 = $v3 + $v4 + $m2
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m2))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(8)

    ;; G(8, 0)

    ;; $v0 = $v0 + $v4 + $m6
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m6))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m15
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(8, 1)

    ;; $v1 = $v1 + $v5 + $m14
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m9
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m9))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(8, 2)

    ;; $v2 = $v2 + $v6 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m3
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(8, 3)

    ;; $v3 = $v3 + $v7 + $m0
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m0))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(8, 4)

    ;; $v0 = $v0 + $v5 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(8, 5)

    ;; $v1 = $v1 + $v6 + $m13
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m13))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m7))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(8, 6)

    ;; $v2 = $v2 + $v7 + $m1
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(8, 7)

    ;; $v3 = $v3 + $v4 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(9)

    ;; G(9, 0)

    ;; $v0 = $v0 + $v4 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(9, 1)

    ;; $v1 = $v1 + $v5 + $m8
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(9, 2)

    ;; $v2 = $v2 + $v6 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m7))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m6
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m6))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(9, 3)

    ;; $v3 = $v3 + $v7 + $m1
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m5))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(9, 4)

    ;; $v0 = $v0 + $v5 + $m15
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m15))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m11
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m11))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(9, 5)

    ;; $v1 = $v1 + $v6 + $m9
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m9))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m14
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m14))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(9, 6)

    ;; $v2 = $v2 + $v7 + $m3
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(9, 7)

    ;; $v3 = $v3 + $v4 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m0
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(10)

    ;; G(10, 0)

    ;; $v0 = $v0 + $v4 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m1))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(10, 1)

    ;; $v1 = $v1 + $v5 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(10, 2)

    ;; $v2 = $v2 + $v6 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m5
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(10, 3)

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m7
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(10, 4)

    ;; $v0 = $v0 + $v5 + $m8
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m9))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(10, 5)

    ;; $v1 = $v1 + $v6 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m11
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(10, 6)

    ;; $v2 = $v2 + $v7 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(10, 7)

    ;; $v3 = $v3 + $v4 + $m14
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(11)

    ;; G(11, 0)

    ;; $v0 = $v0 + $v4 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(11, 1)

    ;; $v1 = $v1 + $v5 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m8
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(11, 2)

    ;; $v2 = $v2 + $v6 + $m9
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m15
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(11, 3)

    ;; $v3 = $v3 + $v7 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(11, 4)

    ;; $v0 = $v0 + $v5 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(11, 5)

    ;; $v1 = $v1 + $v6 + $m0
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(11, 6)

    ;; $v2 = $v2 + $v7 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m11))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(11, 7)

    ;; $v3 = $v3 + $v4 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; END OF GENERATED CODE

    (i64.store (get_local $h0)
      (i64.xor
        (i64.load (get_local $h0))
        (i64.xor
          (get_local $v0)
          (get_local $v8)
        )
      )
    )

    (i64.store (get_local $h1)
      (i64.xor
        (i64.load (get_local $h1))
        (i64.xor
          (get_local $v1)
          (get_local $v9)
        )
      )
    )

    (i64.store (get_local $h2)
      (i64.xor
        (i64.load (get_local $h2))
        (i64.xor
          (get_local $v2)
          (get_local $v10)
        )
      )
    )

    (i64.store (get_local $h3)
      (i64.xor
        (i64.load (get_local $h3))
        (i64.xor
          (get_local $v3)
          (get_local $v11)
        )
      )
    )

    (i64.store (get_local $h4)
      (i64.xor
        (i64.load (get_local $h4))
        (i64.xor
          (get_local $v4)
          (get_local $v12)
        )
      )
    )

    (i64.store (get_local $h5)
      (i64.xor
        (i64.load (get_local $h5))
        (i64.xor
          (get_local $v5)
          (get_local $v13)
        )
      )
    )

    (i64.store (get_local $h6)
      (i64.xor
        (i64.load (get_local $h6))
        (i64.xor
          (get_local $v6)
          (get_local $v14)
        )
      )
    )

    (i64.store (get_local $h7)
      (i64.xor
        (i64.load (get_local $h7))
        (i64.xor
          (get_local $v7)
          (get_local $v15)
        )
      )
    )
  )
)

(module
  ;; 0-64 reserved for param block
  (memory (export "memory") 10 1000)

  (func (export "blake2b_init") (param $ptr i32) (param $outlen i32)
    ;; setup param block (expect memory to be cleared)

    ;; b array: 0-128
    (i64.store (get_local $ptr) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 8)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 16)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 24)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 32)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 40)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 48)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 56)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 64)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 72)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 80)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 88)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 96)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 104)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 112)) (i64.const 0))
    (i64.store (i32.add (get_local $ptr) (i32.const 120)) (i64.const 0))

    ;; h array: 128-192, (8 * i64)
    ;; TODO: support xor against param block and stuff, for now just xor against length

    (i64.store (i32.add (get_local $ptr) (i32.const 128)) (i64.xor (i64.const 0x6a09e667f3bcc908) (i64.load (i32.const 0))))
    (i64.store (i32.add (get_local $ptr) (i32.const 136)) (i64.xor (i64.const 0xbb67ae8584caa73b) (i64.load (i32.const 8))))
    (i64.store (i32.add (get_local $ptr) (i32.const 144)) (i64.xor (i64.const 0x3c6ef372fe94f82b) (i64.load (i32.const 16))))
    (i64.store (i32.add (get_local $ptr) (i32.const 152)) (i64.xor (i64.const 0xa54ff53a5f1d36f1) (i64.load (i32.const 24))))
    (i64.store (i32.add (get_local $ptr) (i32.const 160)) (i64.xor (i64.const 0x510e527fade682d1) (i64.load (i32.const 32))))
    (i64.store (i32.add (get_local $ptr) (i32.const 168)) (i64.xor (i64.const 0x9b05688c2b3e6c1f) (i64.load (i32.const 40))))
    (i64.store (i32.add (get_local $ptr) (i32.const 176)) (i64.xor (i64.const 0x1f83d9abfb41bd6b) (i64.load (i32.const 48))))
    (i64.store (i32.add (get_local $ptr) (i32.const 184)) (i64.xor (i64.const 0x5be0cd19137e2179) (i64.load (i32.const 56))))

    ;; t int.64: 192-200
    (i64.store (i32.add (get_local $ptr) (i32.const 192)) (i64.const 0))

    ;; c int.64: 200-208
    (i64.store (i32.add (get_local $ptr) (i32.const 200)) (i64.const 0))

    ;; f int.64: 208-216
    (i64.store (i32.add (get_local $ptr) (i32.const 208)) (i64.const 0))
  )

  (func (export "blake2b_update") (param $ctx i32) (param $input i32) (param $input_end i32)
    (local $t i32)
    (local $c i32)
    (local $i i32)

    ;; load ctx.t, ctx.c
    (set_local $t (i32.add (get_local $ctx) (i32.const 192)))
    (set_local $c (i32.add (get_local $ctx) (i32.const 200)))

    ;; i = ctx.c
    (set_local $i (i32.wrap/i64 (i64.load (get_local $c))))

    (block $end
      (loop $start
        (br_if $end (i32.eq (get_local $input) (get_local $input_end)))

        (if (i32.eq (get_local $i) (i32.const 128))
          (then
            (i64.store (get_local $t) (i64.add (i64.load (get_local $t)) (i64.extend_u/i32 (get_local $i))))
            (set_local $i (i32.const 0))
            get_local $ctx
            call $blake2b_compress
          )
        )

        (i32.store8 (i32.add (get_local $ctx) (get_local $i)) (i32.load8_u (get_local $input)))
        (set_local $i (i32.add (get_local $i) (i32.const 1)))
        (set_local $input (i32.add (get_local $input) (i32.const 1)))

        (br $start)
      )
    )

    (i64.store (get_local $c) (i64.extend_u/i32 (get_local $i)))
  )

  (func (export "blake2b_final") (param $ctx i32)
    (local $t i32)
    (local $c i32)
    (local $i i32)

    ;; load ctx.t, ctx.c
    (set_local $t (i32.add (get_local $ctx) (i32.const 192)))
    (set_local $c (i32.add (get_local $ctx) (i32.const 200)))

    ;; ctx.t += ctx.c
    (i64.store (get_local $t) (i64.add (i64.load (get_local $t)) (i64.load (get_local $c))))

    ;; set ctx.f to last_block
    (i64.store (i32.add (get_local $ctx) (i32.const 208)) (i64.const 0xffffffffffffffff))

    ;; i = ctx.c
    (set_local $i (i32.wrap/i64 (i64.load (get_local $c))))

    ;; zero out remaining, i..128
    (block $end
      (loop $start
        (br_if $end (i32.eq (get_local $i) (i32.const 128)))
        (i32.store8 (i32.add (get_local $ctx) (get_local $i)) (i32.const 0))
        (set_local $i (i32.add (get_local $i) (i32.const 1)))
        (br $start)
      )
    )

    ;; ctx.c = i (for good meassure)
    (i64.store (get_local $c) (i64.extend_u/i32 (get_local $i)))

    get_local $ctx
    call $blake2b_compress
  )

  (func $blake2b_compress (export "blake2b_compress") (param $ctx i32)
    (local $v0 i64)
    (local $v1 i64)
    (local $v2 i64)
    (local $v3 i64)
    (local $v4 i64)
    (local $v5 i64)
    (local $v6 i64)
    (local $v7 i64)
    (local $v8 i64)
    (local $v9 i64)
    (local $v10 i64)
    (local $v11 i64)
    (local $v12 i64)
    (local $v13 i64)
    (local $v14 i64)
    (local $v15 i64)

    (local $m0 i64)
    (local $m1 i64)
    (local $m2 i64)
    (local $m3 i64)
    (local $m4 i64)
    (local $m5 i64)
    (local $m6 i64)
    (local $m7 i64)
    (local $m8 i64)
    (local $m9 i64)
    (local $m10 i64)
    (local $m11 i64)
    (local $m12 i64)
    (local $m13 i64)
    (local $m14 i64)
    (local $m15 i64)

    (local $h0 i32)
    (local $h1 i32)
    (local $h2 i32)
    (local $h3 i32)
    (local $h4 i32)
    (local $h5 i32)
    (local $h6 i32)
    (local $h7 i32)
    (local $h8 i32)

    ;; set h ptrs
    (set_local $h0 (i32.add (get_local $ctx) (i32.const 128)))
    (set_local $h1 (i32.add (get_local $ctx) (i32.const 136)))
    (set_local $h2 (i32.add (get_local $ctx) (i32.const 144)))
    (set_local $h3 (i32.add (get_local $ctx) (i32.const 152)))
    (set_local $h4 (i32.add (get_local $ctx) (i32.const 160)))
    (set_local $h5 (i32.add (get_local $ctx) (i32.const 168)))
    (set_local $h6 (i32.add (get_local $ctx) (i32.const 176)))
    (set_local $h7 (i32.add (get_local $ctx) (i32.const 184)))

    ;; set v[0-8] to ctx.h[0-8]
    (set_local $v0 (i64.load (get_local $h0)))
    (set_local $v1 (i64.load (get_local $h1)))
    (set_local $v2 (i64.load (get_local $h2)))
    (set_local $v3 (i64.load (get_local $h3)))
    (set_local $v4 (i64.load (get_local $h4)))
    (set_local $v5 (i64.load (get_local $h5)))
    (set_local $v6 (i64.load (get_local $h6)))
    (set_local $v7 (i64.load (get_local $h7)))

    ;; set v[8-16] to init vectors
    (set_local $v8 (i64.const 0x6a09e667f3bcc908))
    (set_local $v9 (i64.const 0xbb67ae8584caa73b))
    (set_local $v10 (i64.const 0x3c6ef372fe94f82b))
    (set_local $v11 (i64.const 0xa54ff53a5f1d36f1))
    (set_local $v12 (i64.const 0x510e527fade682d1))
    (set_local $v13 (i64.const 0x9b05688c2b3e6c1f))
    (set_local $v14 (i64.const 0x1f83d9abfb41bd6b))
    (set_local $v15 (i64.const 0x5be0cd19137e2179))

    ;; set m[0-16] to ctx[0-128]
    (set_local $m0 (i64.load (get_local $ctx)))
    (set_local $m1 (i64.load (i32.add (get_local $ctx) (i32.const 8))))
    (set_local $m2 (i64.load (i32.add (get_local $ctx) (i32.const 16))))
    (set_local $m3 (i64.load (i32.add (get_local $ctx) (i32.const 24))))
    (set_local $m4 (i64.load (i32.add (get_local $ctx) (i32.const 32))))
    (set_local $m5 (i64.load (i32.add (get_local $ctx) (i32.const 40))))
    (set_local $m6 (i64.load (i32.add (get_local $ctx) (i32.const 48))))
    (set_local $m7 (i64.load (i32.add (get_local $ctx) (i32.const 56))))
    (set_local $m8 (i64.load (i32.add (get_local $ctx) (i32.const 64))))
    (set_local $m9 (i64.load (i32.add (get_local $ctx) (i32.const 72))))
    (set_local $m10 (i64.load (i32.add (get_local $ctx) (i32.const 80))))
    (set_local $m11 (i64.load (i32.add (get_local $ctx) (i32.const 88))))
    (set_local $m12 (i64.load (i32.add (get_local $ctx) (i32.const 96))))
    (set_local $m13 (i64.load (i32.add (get_local $ctx) (i32.const 104))))
    (set_local $m14 (i64.load (i32.add (get_local $ctx) (i32.const 112))))
    (set_local $m15 (i64.load (i32.add (get_local $ctx) (i32.const 120))))

    ;; v12 = v12 ^ ctx.t
    (set_local $v12
      (i64.xor
        (get_local $v12)
        (i64.load (i32.add (get_local $ctx) (i32.const 192)))
      )
    )

    ;; v14 = v14 ^ ctx.f
    (set_local $v14
      (i64.xor
        (get_local $v14)
        (i64.load (i32.add (get_local $ctx) (i32.const 208)))
      )
    )

    ;; ROUNDS GENERATED BY `node generate-rounds.js`

    ;; ROUND(0)

    ;; G(0, 0)

    ;; $v0 = $v0 + $v4 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m1))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(0, 1)

    ;; $v1 = $v1 + $v5 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(0, 2)

    ;; $v2 = $v2 + $v6 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m5
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(0, 3)

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m7
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(0, 4)

    ;; $v0 = $v0 + $v5 + $m8
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m9))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(0, 5)

    ;; $v1 = $v1 + $v6 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m11
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(0, 6)

    ;; $v2 = $v2 + $v7 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(0, 7)

    ;; $v3 = $v3 + $v4 + $m14
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(1)

    ;; G(1, 0)

    ;; $v0 = $v0 + $v4 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(1, 1)

    ;; $v1 = $v1 + $v5 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m8
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(1, 2)

    ;; $v2 = $v2 + $v6 + $m9
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m15
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(1, 3)

    ;; $v3 = $v3 + $v7 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(1, 4)

    ;; $v0 = $v0 + $v5 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(1, 5)

    ;; $v1 = $v1 + $v6 + $m0
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(1, 6)

    ;; $v2 = $v2 + $v7 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m11))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(1, 7)

    ;; $v3 = $v3 + $v4 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(2)

    ;; G(2, 0)

    ;; $v0 = $v0 + $v4 + $m11
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m8
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m8))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(2, 1)

    ;; $v1 = $v1 + $v5 + $m12
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m0
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m0))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(2, 2)

    ;; $v2 = $v2 + $v6 + $m5
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m2
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(2, 3)

    ;; $v3 = $v3 + $v7 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m15))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(2, 4)

    ;; $v0 = $v0 + $v5 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m10))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(2, 5)

    ;; $v1 = $v1 + $v6 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m3))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m6
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m6))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(2, 6)

    ;; $v2 = $v2 + $v7 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m1
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(2, 7)

    ;; $v3 = $v3 + $v4 + $m9
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m4
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(3)

    ;; G(3, 0)

    ;; $v0 = $v0 + $v4 + $m7
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m7))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(3, 1)

    ;; $v1 = $v1 + $v5 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m1
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(3, 2)

    ;; $v2 = $v2 + $v6 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m12))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(3, 3)

    ;; $v3 = $v3 + $v7 + $m11
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m11))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m14
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m14))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(3, 4)

    ;; $v0 = $v0 + $v5 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m6
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(3, 5)

    ;; $v1 = $v1 + $v6 + $m5
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(3, 6)

    ;; $v2 = $v2 + $v7 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m0
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m0))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(3, 7)

    ;; $v3 = $v3 + $v4 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m8))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(4)

    ;; G(4, 0)

    ;; $v0 = $v0 + $v4 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(4, 1)

    ;; $v1 = $v1 + $v5 + $m5
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m5))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(4, 2)

    ;; $v2 = $v2 + $v6 + $m2
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(4, 3)

    ;; $v3 = $v3 + $v7 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m10))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m15))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(4, 4)

    ;; $v0 = $v0 + $v5 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(4, 5)

    ;; $v1 = $v1 + $v6 + $m11
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m12
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m12))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(4, 6)

    ;; $v2 = $v2 + $v7 + $m6
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m8
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(4, 7)

    ;; $v3 = $v3 + $v4 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(5)

    ;; G(5, 0)

    ;; $v0 = $v0 + $v4 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m12))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(5, 1)

    ;; $v1 = $v1 + $v5 + $m6
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m6))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m10))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(5, 2)

    ;; $v2 = $v2 + $v6 + $m0
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m0))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(5, 3)

    ;; $v3 = $v3 + $v7 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m3))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(5, 4)

    ;; $v0 = $v0 + $v5 + $m4
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m13
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(5, 5)

    ;; $v1 = $v1 + $v6 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m7))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m5
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(5, 6)

    ;; $v2 = $v2 + $v7 + $m15
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m15))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m14
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m14))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(5, 7)

    ;; $v3 = $v3 + $v4 + $m1
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m1))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m9
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(6)

    ;; G(6, 0)

    ;; $v0 = $v0 + $v4 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m12))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m5
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(6, 1)

    ;; $v1 = $v1 + $v5 + $m1
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m15
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m15))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(6, 2)

    ;; $v2 = $v2 + $v6 + $m14
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m14))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(6, 3)

    ;; $v3 = $v3 + $v7 + $m4
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m4))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m10))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(6, 4)

    ;; $v0 = $v0 + $v5 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m0))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m7
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m7))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(6, 5)

    ;; $v1 = $v1 + $v6 + $m6
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m6))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m3))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(6, 6)

    ;; $v2 = $v2 + $v7 + $m9
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m9))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m2
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m2))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(6, 7)

    ;; $v3 = $v3 + $v4 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m8))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m11
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m11))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(7)

    ;; G(7, 0)

    ;; $v0 = $v0 + $v4 + $m13
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m13))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m11
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(7, 1)

    ;; $v1 = $v1 + $v5 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m14
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(7, 2)

    ;; $v2 = $v2 + $v6 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m12))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m1
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m1))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(7, 3)

    ;; $v3 = $v3 + $v7 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m3))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m9
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m9))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(7, 4)

    ;; $v0 = $v0 + $v5 + $m5
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m5))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m0))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(7, 5)

    ;; $v1 = $v1 + $v6 + $m15
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m15))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(7, 6)

    ;; $v2 = $v2 + $v7 + $m8
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m6
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(7, 7)

    ;; $v3 = $v3 + $v4 + $m2
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m2))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(8)

    ;; G(8, 0)

    ;; $v0 = $v0 + $v4 + $m6
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m6))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m15
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(8, 1)

    ;; $v1 = $v1 + $v5 + $m14
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m14))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m9
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m9))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(8, 2)

    ;; $v2 = $v2 + $v6 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m3
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(8, 3)

    ;; $v3 = $v3 + $v7 + $m0
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m0))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m8
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(8, 4)

    ;; $v0 = $v0 + $v5 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(8, 5)

    ;; $v1 = $v1 + $v6 + $m13
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m13))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m7
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m7))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(8, 6)

    ;; $v2 = $v2 + $v7 + $m1
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m1))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(8, 7)

    ;; $v3 = $v3 + $v4 + $m10
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(9)

    ;; G(9, 0)

    ;; $v0 = $v0 + $v4 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m2
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(9, 1)

    ;; $v1 = $v1 + $v5 + $m8
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(9, 2)

    ;; $v2 = $v2 + $v6 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m7))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m6
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m6))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(9, 3)

    ;; $v3 = $v3 + $v7 + $m1
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m5))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(9, 4)

    ;; $v0 = $v0 + $v5 + $m15
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m15))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m11
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m11))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(9, 5)

    ;; $v1 = $v1 + $v6 + $m9
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m9))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m14
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m14))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(9, 6)

    ;; $v2 = $v2 + $v7 + $m3
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(9, 7)

    ;; $v3 = $v3 + $v4 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m13))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m0
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(10)

    ;; G(10, 0)

    ;; $v0 = $v0 + $v4 + $m0
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m1))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(10, 1)

    ;; $v1 = $v1 + $v5 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m2))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m3
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m3))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(10, 2)

    ;; $v2 = $v2 + $v6 + $m4
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m4))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m5
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(10, 3)

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m7
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(10, 4)

    ;; $v0 = $v0 + $v5 + $m8
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m9
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m9))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(10, 5)

    ;; $v1 = $v1 + $v6 + $m10
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m11
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m11))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(10, 6)

    ;; $v2 = $v2 + $v7 + $m12
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m12))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m13
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(10, 7)

    ;; $v3 = $v3 + $v4 + $m14
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m15
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; ROUND(11)

    ;; G(11, 0)

    ;; $v0 = $v0 + $v4 + $m14
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m14))))

    ;; $v12 = rotr64($v12 ^ $v0, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 32)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 24)))

    ;; $v0 = $v0 + $v4 + $m10
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v4) (get_local $m10))))

    ;; $v12 = rotr64($v12 ^ $v0, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v0)) (i64.const 16)))

    ;; $v8 = $v8 + $v12
    (set_local $v8 (i64.add (get_local $v8) (get_local $v12)))

    ;; $v4 = rotr64($v4 ^ $v8, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v8)) (i64.const 63)))

    ;; G(11, 1)

    ;; $v1 = $v1 + $v5 + $m4
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m4))))

    ;; $v13 = rotr64($v13 ^ $v1, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 32)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 24)))

    ;; $v1 = $v1 + $v5 + $m8
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v5) (get_local $m8))))

    ;; $v13 = rotr64($v13 ^ $v1, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v1)) (i64.const 16)))

    ;; $v9 = $v9 + $v13
    (set_local $v9 (i64.add (get_local $v9) (get_local $v13)))

    ;; $v5 = rotr64($v5 ^ $v9, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v9)) (i64.const 63)))

    ;; G(11, 2)

    ;; $v2 = $v2 + $v6 + $m9
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m9))))

    ;; $v14 = rotr64($v14 ^ $v2, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 32)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 24)))

    ;; $v2 = $v2 + $v6 + $m15
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v6) (get_local $m15))))

    ;; $v14 = rotr64($v14 ^ $v2, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v2)) (i64.const 16)))

    ;; $v10 = $v10 + $v14
    (set_local $v10 (i64.add (get_local $v10) (get_local $v14)))

    ;; $v6 = rotr64($v6 ^ $v10, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v10)) (i64.const 63)))

    ;; G(11, 3)

    ;; $v3 = $v3 + $v7 + $m13
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m13))))

    ;; $v15 = rotr64($v15 ^ $v3, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 32)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 24)))

    ;; $v3 = $v3 + $v7 + $m6
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v7) (get_local $m6))))

    ;; $v15 = rotr64($v15 ^ $v3, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v3)) (i64.const 16)))

    ;; $v11 = $v11 + $v15
    (set_local $v11 (i64.add (get_local $v11) (get_local $v15)))

    ;; $v7 = rotr64($v7 ^ $v11, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v11)) (i64.const 63)))

    ;; G(11, 4)

    ;; $v0 = $v0 + $v5 + $m1
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m1))))

    ;; $v15 = rotr64($v15 ^ $v0, 32)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 32)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 24)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 24)))

    ;; $v0 = $v0 + $v5 + $m12
    (set_local $v0 (i64.add (get_local $v0) (i64.add (get_local $v5) (get_local $m12))))

    ;; $v15 = rotr64($v15 ^ $v0, 16)
    (set_local $v15 (i64.rotr (i64.xor (get_local $v15) (get_local $v0)) (i64.const 16)))

    ;; $v10 = $v10 + $v15
    (set_local $v10 (i64.add (get_local $v10) (get_local $v15)))

    ;; $v5 = rotr64($v5 ^ $v10, 63)
    (set_local $v5 (i64.rotr (i64.xor (get_local $v5) (get_local $v10)) (i64.const 63)))

    ;; G(11, 5)

    ;; $v1 = $v1 + $v6 + $m0
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m0))))

    ;; $v12 = rotr64($v12 ^ $v1, 32)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 32)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 24)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 24)))

    ;; $v1 = $v1 + $v6 + $m2
    (set_local $v1 (i64.add (get_local $v1) (i64.add (get_local $v6) (get_local $m2))))

    ;; $v12 = rotr64($v12 ^ $v1, 16)
    (set_local $v12 (i64.rotr (i64.xor (get_local $v12) (get_local $v1)) (i64.const 16)))

    ;; $v11 = $v11 + $v12
    (set_local $v11 (i64.add (get_local $v11) (get_local $v12)))

    ;; $v6 = rotr64($v6 ^ $v11, 63)
    (set_local $v6 (i64.rotr (i64.xor (get_local $v6) (get_local $v11)) (i64.const 63)))

    ;; G(11, 6)

    ;; $v2 = $v2 + $v7 + $m11
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m11))))

    ;; $v13 = rotr64($v13 ^ $v2, 32)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 32)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 24)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 24)))

    ;; $v2 = $v2 + $v7 + $m7
    (set_local $v2 (i64.add (get_local $v2) (i64.add (get_local $v7) (get_local $m7))))

    ;; $v13 = rotr64($v13 ^ $v2, 16)
    (set_local $v13 (i64.rotr (i64.xor (get_local $v13) (get_local $v2)) (i64.const 16)))

    ;; $v8 = $v8 + $v13
    (set_local $v8 (i64.add (get_local $v8) (get_local $v13)))

    ;; $v7 = rotr64($v7 ^ $v8, 63)
    (set_local $v7 (i64.rotr (i64.xor (get_local $v7) (get_local $v8)) (i64.const 63)))

    ;; G(11, 7)

    ;; $v3 = $v3 + $v4 + $m5
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m5))))

    ;; $v14 = rotr64($v14 ^ $v3, 32)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 32)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 24)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 24)))

    ;; $v3 = $v3 + $v4 + $m3
    (set_local $v3 (i64.add (get_local $v3) (i64.add (get_local $v4) (get_local $m3))))

    ;; $v14 = rotr64($v14 ^ $v3, 16)
    (set_local $v14 (i64.rotr (i64.xor (get_local $v14) (get_local $v3)) (i64.const 16)))

    ;; $v9 = $v9 + $v14
    (set_local $v9 (i64.add (get_local $v9) (get_local $v14)))

    ;; $v4 = rotr64($v4 ^ $v9, 63)
    (set_local $v4 (i64.rotr (i64.xor (get_local $v4) (get_local $v9)) (i64.const 63)))

    ;; END OF GENERATED CODE

    (i64.store (get_local $h0)
      (i64.xor
        (i64.load (get_local $h0))
        (i64.xor
          (get_local $v0)
          (get_local $v8)
        )
      )
    )

    (i64.store (get_local $h1)
      (i64.xor
        (i64.load (get_local $h1))
        (i64.xor
          (get_local $v1)
          (get_local $v9)
        )
      )
    )

    (i64.store (get_local $h2)
      (i64.xor
        (i64.load (get_local $h2))
        (i64.xor
          (get_local $v2)
          (get_local $v10)
        )
      )
    )

    (i64.store (get_local $h3)
      (i64.xor
        (i64.load (get_local $h3))
        (i64.xor
          (get_local $v3)
          (get_local $v11)
        )
      )
    )

    (i64.store (get_local $h4)
      (i64.xor
        (i64.load (get_local $h4))
        (i64.xor
          (get_local $v4)
          (get_local $v12)
        )
      )
    )

    (i64.store (get_local $h5)
      (i64.xor
        (i64.load (get_local $h5))
        (i64.xor
          (get_local $v5)
          (get_local $v13)
        )
      )
    )

    (i64.store (get_local $h6)
      (i64.xor
        (i64.load (get_local $h6))
        (i64.xor
          (get_local $v6)
          (get_local $v14)
        )
      )
    )

    (i64.store (get_local $h7)
      (i64.xor
        (i64.load (get_local $h7))
        (i64.xor
          (get_local $v7)
          (get_local $v15)
        )
      )
    )
  )
)