{
  "id": "dd484a9ef63be101bea576d65160e275",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.8.4",
  "solcLongVersion": "0.8.4+commit.c7e474f2",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/SHA1.sol": {
        "content": "pragma solidity ^0.8.4;\n\nlibrary SHA1 {\n    event Debug(bytes32 x);\n\n    function sha1(bytes memory data) internal pure returns(bytes20 ret) {\n        assembly {\n            // Get a safe scratch location\n            let scratch := mload(0x40)\n\n            // Get the data length, and point data at the first byte\n            let len := mload(data)\n            data := add(data, 32)\n\n            // Find the length after padding\n            let totallen := add(and(add(len, 1), 0xFFFFFFFFFFFFFFC0), 64)\n            switch lt(sub(totallen, len), 9)\n            case 1 { totallen := add(totallen, 64) }\n\n            let h := 0x6745230100EFCDAB890098BADCFE001032547600C3D2E1F0\n\n            function readword(ptr, off, count) -> result {\n                result := 0\n                if lt(off, count) {\n                    result := mload(add(ptr, off))\n                    count := sub(count, off)\n                    if lt(count, 32) {\n                        let mask := not(sub(exp(256, sub(32, count)), 1))\n                        result := and(result, mask)\n                    }\n                }\n            }\n\n            for { let i := 0 } lt(i, totallen) { i := add(i, 64) } {\n                mstore(scratch, readword(data, i, len))\n                mstore(add(scratch, 32), readword(data, add(i, 32), len))\n\n                // If we loaded the last byte, store the terminator byte\n                switch lt(sub(len, i), 64)\n                case 1 { mstore8(add(scratch, sub(len, i)), 0x80) }\n\n                // If this is the last block, store the length\n                switch eq(i, sub(totallen, 64))\n                case 1 { mstore(add(scratch, 32), or(mload(add(scratch, 32)), mul(len, 8))) }\n\n                // Expand the 16 32-bit words into 80\n                for { let j := 64 } lt(j, 128) { j := add(j, 12) } {\n                    let temp := xor(xor(mload(add(scratch, sub(j, 12))), mload(add(scratch, sub(j, 32)))), xor(mload(add(scratch, sub(j, 56))), mload(add(scratch, sub(j, 64)))))\n                    temp := or(and(mul(temp, 2), 0xFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE), and(div(temp, 0x80000000), 0x0000000100000001000000010000000100000001000000010000000100000001))\n                    mstore(add(scratch, j), temp)\n                }\n                for { let j := 128 } lt(j, 320) { j := add(j, 24) } {\n                    let temp := xor(xor(mload(add(scratch, sub(j, 24))), mload(add(scratch, sub(j, 64)))), xor(mload(add(scratch, sub(j, 112))), mload(add(scratch, sub(j, 128)))))\n                    temp := or(and(mul(temp, 4), 0xFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC), and(div(temp, 0x40000000), 0x0000000300000003000000030000000300000003000000030000000300000003))\n                    mstore(add(scratch, j), temp)\n                }\n\n                let x := h\n                let f := 0\n                let k := 0\n                for { let j := 0 } lt(j, 80) { j := add(j, 1) } {\n                    switch div(j, 20)\n                    case 0 {\n                        // f = d xor (b and (c xor d))\n                        f := xor(div(x, 0x100000000000000000000), div(x, 0x10000000000))\n                        f := and(div(x, 0x1000000000000000000000000000000), f)\n                        f := xor(div(x, 0x10000000000), f)\n                        k := 0x5A827999\n                    }\n                    case 1{\n                        // f = b xor c xor d\n                        f := xor(div(x, 0x1000000000000000000000000000000), div(x, 0x100000000000000000000))\n                        f := xor(div(x, 0x10000000000), f)\n                        k := 0x6ED9EBA1\n                    }\n                    case 2 {\n                        // f = (b and c) or (d and (b or c))\n                        f := or(div(x, 0x1000000000000000000000000000000), div(x, 0x100000000000000000000))\n                        f := and(div(x, 0x10000000000), f)\n                        f := or(and(div(x, 0x1000000000000000000000000000000), div(x, 0x100000000000000000000)), f)\n                        k := 0x8F1BBCDC\n                    }\n                    case 3 {\n                        // f = b xor c xor d\n                        f := xor(div(x, 0x1000000000000000000000000000000), div(x, 0x100000000000000000000))\n                        f := xor(div(x, 0x10000000000), f)\n                        k := 0xCA62C1D6\n                    }\n                    // temp = (a leftrotate 5) + f + e + k + w[i]\n                    let temp := and(div(x, 0x80000000000000000000000000000000000000000000000), 0x1F)\n                    temp := or(and(div(x, 0x800000000000000000000000000000000000000), 0xFFFFFFE0), temp)\n                    temp := add(f, temp)\n                    temp := add(and(x, 0xFFFFFFFF), temp)\n                    temp := add(k, temp)\n                    temp := add(div(mload(add(scratch, mul(j, 4))), 0x100000000000000000000000000000000000000000000000000000000), temp)\n                    x := or(div(x, 0x10000000000), mul(temp, 0x10000000000000000000000000000000000000000))\n                    x := or(and(x, 0xFFFFFFFF00FFFFFFFF000000000000FFFFFFFF00FFFFFFFF), mul(or(and(div(x, 0x4000000000000), 0xC0000000), and(div(x, 0x400000000000000000000), 0x3FFFFFFF)), 0x100000000000000000000))\n                }\n\n                h := and(add(h, x), 0xFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF)\n            }\n            ret := mul(or(or(or(or(and(div(h, 0x100000000), 0xFFFFFFFF00000000000000000000000000000000), and(div(h, 0x1000000), 0xFFFFFFFF000000000000000000000000)), and(div(h, 0x10000), 0xFFFFFFFF0000000000000000)), and(div(h, 0x100), 0xFFFFFFFF00000000)), and(h, 0xFFFFFFFF)), 0x1000000000000000000000000)\n        }\n    }\n}\n"
      },
      "test/mocks/SHA1Test.sol": {
        "content": "pragma solidity ^0.8.4;\n\nimport \"./../../contracts/SHA1.sol\";\n\ncontract SHA1Test {\n    function sha1(bytes memory message) public pure returns(bytes20 ret) {\n      return SHA1.sha1(message);\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/SHA1.sol": {
        "SHA1": {
          "abi": [
            {
              "anonymous": false,
              "inputs": [
                {
                  "indexed": false,
                  "internalType": "bytes32",
                  "name": "x",
                  "type": "bytes32"
                }
              ],
              "name": "Debug",
              "type": "event"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069764a457d13f1e4d82dba34c3ecee06dcad508c0b52c6b79ee4222cbaaf2f1164736f6c63430008040033",
              "opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0x764A457D13F1E4D82DBA CALLVALUE 0xC3 0xEC 0xEE MOD 0xDC 0xAD POP DUP13 SIGNEXTEND MSTORE 0xC6 0xB7 SWAP15 0xE4 0x22 0x2C 0xBA 0xAF 0x2F GT PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "25:5711:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122069764a457d13f1e4d82dba34c3ecee06dcad508c0b52c6b79ee4222cbaaf2f1164736f6c63430008040033",
              "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH10 0x764A457D13F1E4D82DBA CALLVALUE 0xC3 0xEC 0xEE MOD 0xDC 0xAD POP DUP13 SIGNEXTEND MSTORE 0xC6 0xB7 SWAP15 0xE4 0x22 0x2C 0xBA 0xAF 0x2F GT PUSH5 0x736F6C6343 STOP ADDMOD DIV STOP CALLER ",
              "sourceMap": "25:5711:0:-:0;;;;;;;;"
            },
            "methodIdentifiers": {}
          }
        }
      },
      "test/mocks/SHA1Test.sol": {
        "SHA1Test": {
          "abi": [
            {
              "inputs": [
                {
                  "internalType": "bytes",
                  "name": "message",
                  "type": "bytes"
                }
              ],
              "name": "sha1",
              "outputs": [
                {
                  "internalType": "bytes20",
                  "name": "ret",
                  "type": "bytes20"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "generatedSources": [],
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b5061079b806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631605782b14610030575b600080fd5b61004a600480360381019061004591906105f8565b610060565b6040516100579190610648565b60405180910390f35b600061006b82610072565b9050919050565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181146100a3576100aa565b6040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610102565b6000838310156100fb57828201519050828403935060208410156100fa576001846020036101000a03198082169150505b5b9392505050565b60005b82811015610510576101188482896100c9565b85526101288460208301896100c9565b60208601526040818503106001811461014057610149565b60808286038701535b506040830381146001811461015d5761016d565b6008850260208701511760208701525b5060405b60808110156101f95760408103860151603882038701511860208203870151600c830388015118187c010000000100000001000000010000000100000001000000010000000163800000008204167ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe6002830216179050808288015250600c81019050610171565b5060805b61014081101561028657608081038601516070820387015118604082038701516018830388015118187c030000000300000003000000030000000300000003000000030000000363400000008204167ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc60048302161790508082880152506018810190506101fd565b508160008060005b60508110156104e25760148104600081146102c0576001811461030a576002811461034757600381146103aa576103e3565b6501000000000085046a01000000000000000000008604189350836f01000000000000000000000000000000860416935083650100000000008604189350635a82799992506103e3565b6a010000000000000000000085046f01000000000000000000000000000000860418935083650100000000008604189350636ed9eba192506103e3565b6a010000000000000000000085046f01000000000000000000000000000000860417935083650100000000008604169350836a010000000000000000000086046f01000000000000000000000000000000870416179350638f1bbcdc92506103e3565b6a010000000000000000000085046f0100000000000000000000000000000086041893508365010000000000860418935063ca62c1d692505b50601f770800000000000000000000000000000000000000000000008504168063ffffffe073080000000000000000000000000000000000000087041617905080840190508063ffffffff86160190508083019050807c0100000000000000000000000000000000000000000000000000000000600484028c0151040190507401000000000000000000000000000000000000000081026501000000000086041794506a0100000000000000000000633fffffff6a040000000000000000000087041663c00000006604000000000000880416170277ffffffff00ffffffff000000000000ffffffff00ffffffff86161794505060018101905061028e565b5077ffffffff00ffffffff00ffffffff00ffffffff00ffffffff838601169450505050604081019050610105565b506c0100000000000000000000000063ffffffff821667ffffffff000000006101008404166bffffffff0000000000000000620100008504166fffffffff000000000000000000000000630100000086041673ffffffff000000000000000000000000000000006401000000008704161717171702945050505050919050565b60006105a361059e84610688565b610663565b9050828152602081018484840111156105bb57600080fd5b6105c68482856106e5565b509392505050565b600082601f8301126105df57600080fd5b81356105ef848260208601610590565b91505092915050565b60006020828403121561060a57600080fd5b600082013567ffffffffffffffff81111561062457600080fd5b610630848285016105ce565b91505092915050565b610642816106b9565b82525050565b600060208201905061065d6000830184610639565b92915050565b600061066d61067e565b905061067982826106f4565b919050565b6000604051905090565b600067ffffffffffffffff8211156106a3576106a2610725565b5b6106ac82610754565b9050602081019050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b82818337600083830152505050565b6106fd82610754565b810181811067ffffffffffffffff8211171561071c5761071b610725565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f830116905091905056fea2646970667358221220ad9e7f60007d09c75331b7468390241a049f191cc89d41c9b8203dd44e35f53e64736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x79B DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1605782B EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x5F8 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x648 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0x6B DUP3 PUSH2 0x72 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP3 MLOAD PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x40 PUSH8 0xFFFFFFFFFFFFFFC0 PUSH1 0x1 DUP4 ADD AND ADD PUSH1 0x9 DUP3 DUP3 SUB LT PUSH1 0x1 DUP2 EQ PUSH2 0xA3 JUMPI PUSH2 0xAA JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP2 POP JUMPDEST POP PUSH24 0x6745230100EFCDAB890098BADCFE001032547600C3D2E1F0 PUSH2 0x102 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 LT ISZERO PUSH2 0xFB JUMPI DUP3 DUP3 ADD MLOAD SWAP1 POP DUP3 DUP5 SUB SWAP4 POP PUSH1 0x20 DUP5 LT ISZERO PUSH2 0xFA JUMPI PUSH1 0x1 DUP5 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT DUP1 DUP3 AND SWAP2 POP POP JUMPDEST JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x510 JUMPI PUSH2 0x118 DUP5 DUP3 DUP10 PUSH2 0xC9 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x128 DUP5 PUSH1 0x20 DUP4 ADD DUP10 PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP2 DUP6 SUB LT PUSH1 0x1 DUP2 EQ PUSH2 0x140 JUMPI PUSH2 0x149 JUMP JUMPDEST PUSH1 0x80 DUP3 DUP7 SUB DUP8 ADD MSTORE8 JUMPDEST POP PUSH1 0x40 DUP4 SUB DUP2 EQ PUSH1 0x1 DUP2 EQ PUSH2 0x15D JUMPI PUSH2 0x16D JUMP JUMPDEST PUSH1 0x8 DUP6 MUL PUSH1 0x20 DUP8 ADD MLOAD OR PUSH1 0x20 DUP8 ADD MSTORE JUMPDEST POP PUSH1 0x40 JUMPDEST PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x40 DUP2 SUB DUP7 ADD MLOAD PUSH1 0x38 DUP3 SUB DUP8 ADD MLOAD XOR PUSH1 0x20 DUP3 SUB DUP8 ADD MLOAD PUSH1 0xC DUP4 SUB DUP9 ADD MLOAD XOR XOR PUSH29 0x100000001000000010000000100000001000000010000000100000001 PUSH4 0x80000000 DUP3 DIV AND PUSH32 0xFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE PUSH1 0x2 DUP4 MUL AND OR SWAP1 POP DUP1 DUP3 DUP9 ADD MSTORE POP PUSH1 0xC DUP2 ADD SWAP1 POP PUSH2 0x171 JUMP JUMPDEST POP PUSH1 0x80 JUMPDEST PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x286 JUMPI PUSH1 0x80 DUP2 SUB DUP7 ADD MLOAD PUSH1 0x70 DUP3 SUB DUP8 ADD MLOAD XOR PUSH1 0x40 DUP3 SUB DUP8 ADD MLOAD PUSH1 0x18 DUP4 SUB DUP9 ADD MLOAD XOR XOR PUSH29 0x300000003000000030000000300000003000000030000000300000003 PUSH4 0x40000000 DUP3 DIV AND PUSH32 0xFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC PUSH1 0x4 DUP4 MUL AND OR SWAP1 POP DUP1 DUP3 DUP9 ADD MSTORE POP PUSH1 0x18 DUP2 ADD SWAP1 POP PUSH2 0x1FD JUMP JUMPDEST POP DUP2 PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x50 DUP2 LT ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x14 DUP2 DIV PUSH1 0x0 DUP2 EQ PUSH2 0x2C0 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x30A JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x347 JUMPI PUSH1 0x3 DUP2 EQ PUSH2 0x3AA JUMPI PUSH2 0x3E3 JUMP JUMPDEST PUSH6 0x10000000000 DUP6 DIV PUSH11 0x100000000000000000000 DUP7 DIV XOR SWAP4 POP DUP4 PUSH16 0x1000000000000000000000000000000 DUP7 DIV AND SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV XOR SWAP4 POP PUSH4 0x5A827999 SWAP3 POP PUSH2 0x3E3 JUMP JUMPDEST PUSH11 0x100000000000000000000 DUP6 DIV PUSH16 0x1000000000000000000000000000000 DUP7 DIV XOR SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV XOR SWAP4 POP PUSH4 0x6ED9EBA1 SWAP3 POP PUSH2 0x3E3 JUMP JUMPDEST PUSH11 0x100000000000000000000 DUP6 DIV PUSH16 0x1000000000000000000000000000000 DUP7 DIV OR SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV AND SWAP4 POP DUP4 PUSH11 0x100000000000000000000 DUP7 DIV PUSH16 0x1000000000000000000000000000000 DUP8 DIV AND OR SWAP4 POP PUSH4 0x8F1BBCDC SWAP3 POP PUSH2 0x3E3 JUMP JUMPDEST PUSH11 0x100000000000000000000 DUP6 DIV PUSH16 0x1000000000000000000000000000000 DUP7 DIV XOR SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV XOR SWAP4 POP PUSH4 0xCA62C1D6 SWAP3 POP JUMPDEST POP PUSH1 0x1F PUSH24 0x80000000000000000000000000000000000000000000000 DUP6 DIV AND DUP1 PUSH4 0xFFFFFFE0 PUSH20 0x800000000000000000000000000000000000000 DUP8 DIV AND OR SWAP1 POP DUP1 DUP5 ADD SWAP1 POP DUP1 PUSH4 0xFFFFFFFF DUP7 AND ADD SWAP1 POP DUP1 DUP4 ADD SWAP1 POP DUP1 PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP5 MUL DUP13 ADD MLOAD DIV ADD SWAP1 POP PUSH21 0x10000000000000000000000000000000000000000 DUP2 MUL PUSH6 0x10000000000 DUP7 DIV OR SWAP5 POP PUSH11 0x100000000000000000000 PUSH4 0x3FFFFFFF PUSH11 0x400000000000000000000 DUP8 DIV AND PUSH4 0xC0000000 PUSH7 0x4000000000000 DUP9 DIV AND OR MUL PUSH24 0xFFFFFFFF00FFFFFFFF000000000000FFFFFFFF00FFFFFFFF DUP7 AND OR SWAP5 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x28E JUMP JUMPDEST POP PUSH24 0xFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF DUP4 DUP7 ADD AND SWAP5 POP POP POP POP PUSH1 0x40 DUP2 ADD SWAP1 POP PUSH2 0x105 JUMP JUMPDEST POP PUSH13 0x1000000000000000000000000 PUSH4 0xFFFFFFFF DUP3 AND PUSH8 0xFFFFFFFF00000000 PUSH2 0x100 DUP5 DIV AND PUSH12 0xFFFFFFFF0000000000000000 PUSH3 0x10000 DUP6 DIV AND PUSH16 0xFFFFFFFF000000000000000000000000 PUSH4 0x1000000 DUP7 DIV AND PUSH20 0xFFFFFFFF00000000000000000000000000000000 PUSH5 0x100000000 DUP8 DIV AND OR OR OR OR MUL SWAP5 POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A3 PUSH2 0x59E DUP5 PUSH2 0x688 JUMP JUMPDEST PUSH2 0x663 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5C6 DUP5 DUP3 DUP6 PUSH2 0x6E5 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5EF DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x590 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x630 DUP5 DUP3 DUP6 ADD PUSH2 0x5CE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x642 DUP2 PUSH2 0x6B9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x65D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x639 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66D PUSH2 0x67E JUMP JUMPDEST SWAP1 POP PUSH2 0x679 DUP3 DUP3 PUSH2 0x6F4 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x6A3 JUMPI PUSH2 0x6A2 PUSH2 0x725 JUMP JUMPDEST JUMPDEST PUSH2 0x6AC DUP3 PUSH2 0x754 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH2 0x6FD DUP3 PUSH2 0x754 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x71C JUMPI PUSH2 0x71B PUSH2 0x725 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD SWAP15 PUSH32 0x60007D09C75331B7468390241A049F191CC89D41C9B8203DD44E35F53E64736F PUSH13 0x63430008040033000000000000 ",
              "sourceMap": "63:135:1:-:0;;;;;;;;;;;;;;;;;;;"
            },
            "deployedBytecode": {
              "generatedSources": [
                {
                  "ast": {
                    "nodeType": "YulBlock",
                    "src": "0:2800:2",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "90:260:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "100:74:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "166:6:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "array_allocation_size_t_bytes_memory_ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "125:40:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "125:48:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "allocate_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "109:15:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "109:65:2"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:5:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "190:5:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "197:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "183:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "183:21:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "183:21:2"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "213:27:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "array",
                                    "nodeType": "YulIdentifier",
                                    "src": "228:5:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "235:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "224:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "224:16:2"
                              },
                              "variables": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulTypedName",
                                  "src": "217:3:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "278:16:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "287:1:2",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "290:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "280:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "280:12:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "280:12:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "259:3:2"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "264:6:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "255:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "255:16:2"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "273:3:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "252:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "252:25:2"
                              },
                              "nodeType": "YulIf",
                              "src": "249:2:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "327:3:2"
                                  },
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "332:3:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "337:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "copy_calldata_to_memory",
                                  "nodeType": "YulIdentifier",
                                  "src": "303:23:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "303:41:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "303:41:2"
                            }
                          ]
                        },
                        "name": "abi_decode_available_length_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "63:3:2",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "68:6:2",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "76:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "84:5:2",
                            "type": ""
                          }
                        ],
                        "src": "7:343:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "430:210:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "479:16:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "488:1:2",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "491:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "481:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "481:12:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "481:12:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "458:6:2"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "466:4:2",
                                            "type": "",
                                            "value": "0x1f"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "454:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "454:17:2"
                                      },
                                      {
                                        "name": "end",
                                        "nodeType": "YulIdentifier",
                                        "src": "473:3:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "slt",
                                      "nodeType": "YulIdentifier",
                                      "src": "450:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "450:27:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "443:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "443:35:2"
                              },
                              "nodeType": "YulIf",
                              "src": "440:2:2"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "504:34:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "offset",
                                    "nodeType": "YulIdentifier",
                                    "src": "531:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldataload",
                                  "nodeType": "YulIdentifier",
                                  "src": "518:12:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "518:20:2"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "508:6:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "547:87:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "607:6:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "615:4:2",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "603:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "603:17:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "622:6:2"
                                  },
                                  {
                                    "name": "end",
                                    "nodeType": "YulIdentifier",
                                    "src": "630:3:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_decode_available_length_t_bytes_memory_ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "556:46:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "556:78:2"
                              },
                              "variableNames": [
                                {
                                  "name": "array",
                                  "nodeType": "YulIdentifier",
                                  "src": "547:5:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "offset",
                            "nodeType": "YulTypedName",
                            "src": "408:6:2",
                            "type": ""
                          },
                          {
                            "name": "end",
                            "nodeType": "YulTypedName",
                            "src": "416:3:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "array",
                            "nodeType": "YulTypedName",
                            "src": "424:5:2",
                            "type": ""
                          }
                        ],
                        "src": "369:271:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "721:298:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "767:16:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "776:1:2",
                                          "type": "",
                                          "value": "0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "779:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "revert",
                                        "nodeType": "YulIdentifier",
                                        "src": "769:6:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "769:12:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "769:12:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "742:7:2"
                                      },
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "751:9:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "738:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "738:23:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "763:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "slt",
                                  "nodeType": "YulIdentifier",
                                  "src": "734:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "734:32:2"
                              },
                              "nodeType": "YulIf",
                              "src": "731:2:2"
                            },
                            {
                              "nodeType": "YulBlock",
                              "src": "793:219:2",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "808:45:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "839:9:2"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "850:1:2",
                                            "type": "",
                                            "value": "0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "835:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "835:17:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "822:12:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "822:31:2"
                                  },
                                  "variables": [
                                    {
                                      "name": "offset",
                                      "nodeType": "YulTypedName",
                                      "src": "812:6:2",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "900:16:2",
                                    "statements": [
                                      {
                                        "expression": {
                                          "arguments": [
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "909:1:2",
                                              "type": "",
                                              "value": "0"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "912:1:2",
                                              "type": "",
                                              "value": "0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "revert",
                                            "nodeType": "YulIdentifier",
                                            "src": "902:6:2"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "902:12:2"
                                        },
                                        "nodeType": "YulExpressionStatement",
                                        "src": "902:12:2"
                                      }
                                    ]
                                  },
                                  "condition": {
                                    "arguments": [
                                      {
                                        "name": "offset",
                                        "nodeType": "YulIdentifier",
                                        "src": "872:6:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "880:18:2",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "869:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "869:30:2"
                                  },
                                  "nodeType": "YulIf",
                                  "src": "866:2:2"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "930:72:2",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "headStart",
                                            "nodeType": "YulIdentifier",
                                            "src": "974:9:2"
                                          },
                                          {
                                            "name": "offset",
                                            "nodeType": "YulIdentifier",
                                            "src": "985:6:2"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "970:3:2"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "970:22:2"
                                      },
                                      {
                                        "name": "dataEnd",
                                        "nodeType": "YulIdentifier",
                                        "src": "994:7:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "abi_decode_t_bytes_memory_ptr",
                                      "nodeType": "YulIdentifier",
                                      "src": "940:29:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "940:62:2"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value0",
                                      "nodeType": "YulIdentifier",
                                      "src": "930:6:2"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        },
                        "name": "abi_decode_tuple_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "691:9:2",
                            "type": ""
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulTypedName",
                            "src": "702:7:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "714:6:2",
                            "type": ""
                          }
                        ],
                        "src": "646:373:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1090:53:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "pos",
                                    "nodeType": "YulIdentifier",
                                    "src": "1107:3:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "1130:5:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "cleanup_t_bytes20",
                                      "nodeType": "YulIdentifier",
                                      "src": "1112:17:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1112:24:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "1100:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1100:37:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1100:37:2"
                            }
                          ]
                        },
                        "name": "abi_encode_t_bytes20_to_t_bytes20_fromStack",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1078:5:2",
                            "type": ""
                          },
                          {
                            "name": "pos",
                            "nodeType": "YulTypedName",
                            "src": "1085:3:2",
                            "type": ""
                          }
                        ],
                        "src": "1025:118:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1247:124:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1257:26:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "headStart",
                                    "nodeType": "YulIdentifier",
                                    "src": "1269:9:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1280:2:2",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1265:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1265:18:2"
                              },
                              "variableNames": [
                                {
                                  "name": "tail",
                                  "nodeType": "YulIdentifier",
                                  "src": "1257:4:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "value0",
                                    "nodeType": "YulIdentifier",
                                    "src": "1337:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "headStart",
                                        "nodeType": "YulIdentifier",
                                        "src": "1350:9:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1361:1:2",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1346:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1346:17:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "abi_encode_t_bytes20_to_t_bytes20_fromStack",
                                  "nodeType": "YulIdentifier",
                                  "src": "1293:43:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1293:71:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1293:71:2"
                            }
                          ]
                        },
                        "name": "abi_encode_tuple_t_bytes20__to_t_bytes20__fromStack_reversed",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "headStart",
                            "nodeType": "YulTypedName",
                            "src": "1219:9:2",
                            "type": ""
                          },
                          {
                            "name": "value0",
                            "nodeType": "YulTypedName",
                            "src": "1231:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "tail",
                            "nodeType": "YulTypedName",
                            "src": "1242:4:2",
                            "type": ""
                          }
                        ],
                        "src": "1149:222:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1418:88:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1428:30:2",
                              "value": {
                                "arguments": [],
                                "functionName": {
                                  "name": "allocate_unbounded",
                                  "nodeType": "YulIdentifier",
                                  "src": "1438:18:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1438:20:2"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1428:6:2"
                                }
                              ]
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "1487:6:2"
                                  },
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "1495:4:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "finalize_allocation",
                                  "nodeType": "YulIdentifier",
                                  "src": "1467:19:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1467:33:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1467:33:2"
                            }
                          ]
                        },
                        "name": "allocate_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "1402:4:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "1411:6:2",
                            "type": ""
                          }
                        ],
                        "src": "1377:129:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1552:35:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1562:19:2",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1578:2:2",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "1572:5:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1572:9:2"
                              },
                              "variableNames": [
                                {
                                  "name": "memPtr",
                                  "nodeType": "YulIdentifier",
                                  "src": "1562:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "allocate_unbounded",
                        "nodeType": "YulFunctionDefinition",
                        "returnVariables": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "1545:6:2",
                            "type": ""
                          }
                        ],
                        "src": "1512:75:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1659:241:2",
                          "statements": [
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1764:22:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "1766:16:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1766:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1766:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1736:6:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1744:18:2",
                                    "type": "",
                                    "value": "0xffffffffffffffff"
                                  }
                                ],
                                "functionName": {
                                  "name": "gt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1733:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1733:30:2"
                              },
                              "nodeType": "YulIf",
                              "src": "1730:2:2"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1796:37:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "1826:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "round_up_to_mul_of_32",
                                  "nodeType": "YulIdentifier",
                                  "src": "1804:21:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1804:29:2"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "1796:4:2"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "1870:23:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "size",
                                    "nodeType": "YulIdentifier",
                                    "src": "1882:4:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1888:4:2",
                                    "type": "",
                                    "value": "0x20"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "1878:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1878:15:2"
                              },
                              "variableNames": [
                                {
                                  "name": "size",
                                  "nodeType": "YulIdentifier",
                                  "src": "1870:4:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "array_allocation_size_t_bytes_memory_ptr",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "1643:6:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "1654:4:2",
                            "type": ""
                          }
                        ],
                        "src": "1593:307:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1951:105:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "1961:89:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "1976:5:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1983:66:2",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "1972:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1972:78:2"
                              },
                              "variableNames": [
                                {
                                  "name": "cleaned",
                                  "nodeType": "YulIdentifier",
                                  "src": "1961:7:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "cleanup_t_bytes20",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "1933:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "cleaned",
                            "nodeType": "YulTypedName",
                            "src": "1943:7:2",
                            "type": ""
                          }
                        ],
                        "src": "1906:150:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2113:103:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dst",
                                    "nodeType": "YulIdentifier",
                                    "src": "2136:3:2"
                                  },
                                  {
                                    "name": "src",
                                    "nodeType": "YulIdentifier",
                                    "src": "2141:3:2"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2146:6:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "calldatacopy",
                                  "nodeType": "YulIdentifier",
                                  "src": "2123:12:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2123:30:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2123:30:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "dst",
                                        "nodeType": "YulIdentifier",
                                        "src": "2194:3:2"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "2199:6:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2190:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2190:16:2"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2208:1:2",
                                    "type": "",
                                    "value": "0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2183:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2183:27:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2183:27:2"
                            }
                          ]
                        },
                        "name": "copy_calldata_to_memory",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "src",
                            "nodeType": "YulTypedName",
                            "src": "2095:3:2",
                            "type": ""
                          },
                          {
                            "name": "dst",
                            "nodeType": "YulTypedName",
                            "src": "2100:3:2",
                            "type": ""
                          },
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "2105:6:2",
                            "type": ""
                          }
                        ],
                        "src": "2062:154:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2265:238:2",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "2275:58:2",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "memPtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2297:6:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "size",
                                        "nodeType": "YulIdentifier",
                                        "src": "2327:4:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "round_up_to_mul_of_32",
                                      "nodeType": "YulIdentifier",
                                      "src": "2305:21:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2305:27:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2293:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2293:40:2"
                              },
                              "variables": [
                                {
                                  "name": "newFreePtr",
                                  "nodeType": "YulTypedName",
                                  "src": "2279:10:2",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "2444:22:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [],
                                      "functionName": {
                                        "name": "panic_error_0x41",
                                        "nodeType": "YulIdentifier",
                                        "src": "2446:16:2"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2446:18:2"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "2446:18:2"
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2387:10:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2399:18:2",
                                        "type": "",
                                        "value": "0xffffffffffffffff"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "gt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2384:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2384:34:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "newFreePtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2423:10:2"
                                      },
                                      {
                                        "name": "memPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "2435:6:2"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "lt",
                                      "nodeType": "YulIdentifier",
                                      "src": "2420:2:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2420:22:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "or",
                                  "nodeType": "YulIdentifier",
                                  "src": "2381:2:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2381:62:2"
                              },
                              "nodeType": "YulIf",
                              "src": "2378:2:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2482:2:2",
                                    "type": "",
                                    "value": "64"
                                  },
                                  {
                                    "name": "newFreePtr",
                                    "nodeType": "YulIdentifier",
                                    "src": "2486:10:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2475:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2475:22:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2475:22:2"
                            }
                          ]
                        },
                        "name": "finalize_allocation",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulTypedName",
                            "src": "2251:6:2",
                            "type": ""
                          },
                          {
                            "name": "size",
                            "nodeType": "YulTypedName",
                            "src": "2259:4:2",
                            "type": ""
                          }
                        ],
                        "src": "2222:281:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2537:152:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2554:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2557:77:2",
                                    "type": "",
                                    "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2547:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2547:88:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2547:88:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2651:1:2",
                                    "type": "",
                                    "value": "4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2654:4:2",
                                    "type": "",
                                    "value": "0x41"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2644:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2644:15:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2644:15:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2675:1:2",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2678:4:2",
                                    "type": "",
                                    "value": "0x24"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2668:6:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2668:15:2"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2668:15:2"
                            }
                          ]
                        },
                        "name": "panic_error_0x41",
                        "nodeType": "YulFunctionDefinition",
                        "src": "2509:180:2"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2743:54:2",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "2753:38:2",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "value",
                                        "nodeType": "YulIdentifier",
                                        "src": "2771:5:2"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2778:2:2",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2767:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2767:14:2"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2787:2:2",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "2783:3:2"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2783:7:2"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "2763:3:2"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2763:28:2"
                              },
                              "variableNames": [
                                {
                                  "name": "result",
                                  "nodeType": "YulIdentifier",
                                  "src": "2753:6:2"
                                }
                              ]
                            }
                          ]
                        },
                        "name": "round_up_to_mul_of_32",
                        "nodeType": "YulFunctionDefinition",
                        "parameters": [
                          {
                            "name": "value",
                            "nodeType": "YulTypedName",
                            "src": "2726:5:2",
                            "type": ""
                          }
                        ],
                        "returnVariables": [
                          {
                            "name": "result",
                            "nodeType": "YulTypedName",
                            "src": "2736:6:2",
                            "type": ""
                          }
                        ],
                        "src": "2695:102:2"
                      }
                    ]
                  },
                  "contents": "{\n\n    function abi_decode_available_length_t_bytes_memory_ptr(src, length, end) -> array {\n        array := allocate_memory(array_allocation_size_t_bytes_memory_ptr(length))\n        mstore(array, length)\n        let dst := add(array, 0x20)\n        if gt(add(src, length), end) { revert(0, 0) }\n        copy_calldata_to_memory(src, dst, length)\n    }\n\n    // bytes\n    function abi_decode_t_bytes_memory_ptr(offset, end) -> array {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let length := calldataload(offset)\n        array := abi_decode_available_length_t_bytes_memory_ptr(add(offset, 0x20), length, end)\n    }\n\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0 {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n\n        {\n\n            let offset := calldataload(add(headStart, 0))\n            if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n\n            value0 := abi_decode_t_bytes_memory_ptr(add(headStart, offset), dataEnd)\n        }\n\n    }\n\n    function abi_encode_t_bytes20_to_t_bytes20_fromStack(value, pos) {\n        mstore(pos, cleanup_t_bytes20(value))\n    }\n\n    function abi_encode_tuple_t_bytes20__to_t_bytes20__fromStack_reversed(headStart , value0) -> tail {\n        tail := add(headStart, 32)\n\n        abi_encode_t_bytes20_to_t_bytes20_fromStack(value0,  add(headStart, 0))\n\n    }\n\n    function allocate_memory(size) -> memPtr {\n        memPtr := allocate_unbounded()\n        finalize_allocation(memPtr, size)\n    }\n\n    function allocate_unbounded() -> memPtr {\n        memPtr := mload(64)\n    }\n\n    function array_allocation_size_t_bytes_memory_ptr(length) -> size {\n        // Make sure we can allocate memory without overflow\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n\n        size := round_up_to_mul_of_32(length)\n\n        // add length slot\n        size := add(size, 0x20)\n\n    }\n\n    function cleanup_t_bytes20(value) -> cleaned {\n        cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000)\n    }\n\n    function copy_calldata_to_memory(src, dst, length) {\n        calldatacopy(dst, src, length)\n        // clear end\n        mstore(add(dst, length), 0)\n    }\n\n    function finalize_allocation(memPtr, size) {\n        let newFreePtr := add(memPtr, round_up_to_mul_of_32(size))\n        // protect against overflow\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n\n    function panic_error_0x41() {\n        mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n\n    function round_up_to_mul_of_32(value) -> result {\n        result := and(add(value, 31), not(31))\n    }\n\n}\n",
                  "id": 2,
                  "language": "Yul",
                  "name": "#utility.yul"
                }
              ],
              "immutableReferences": {},
              "linkReferences": {},
              "object": "608060405234801561001057600080fd5b506004361061002b5760003560e01c80631605782b14610030575b600080fd5b61004a600480360381019061004591906105f8565b610060565b6040516100579190610648565b60405180910390f35b600061006b82610072565b9050919050565b60006040518251602084019350604067ffffffffffffffc0600183011601600982820310600181146100a3576100aa565b6040820191505b50776745230100efcdab890098badcfe001032547600c3d2e1f0610102565b6000838310156100fb57828201519050828403935060208410156100fa576001846020036101000a03198082169150505b5b9392505050565b60005b82811015610510576101188482896100c9565b85526101288460208301896100c9565b60208601526040818503106001811461014057610149565b60808286038701535b506040830381146001811461015d5761016d565b6008850260208701511760208701525b5060405b60808110156101f95760408103860151603882038701511860208203870151600c830388015118187c010000000100000001000000010000000100000001000000010000000163800000008204167ffffffffefffffffefffffffefffffffefffffffefffffffefffffffefffffffe6002830216179050808288015250600c81019050610171565b5060805b61014081101561028657608081038601516070820387015118604082038701516018830388015118187c030000000300000003000000030000000300000003000000030000000363400000008204167ffffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffcfffffffc60048302161790508082880152506018810190506101fd565b508160008060005b60508110156104e25760148104600081146102c0576001811461030a576002811461034757600381146103aa576103e3565b6501000000000085046a01000000000000000000008604189350836f01000000000000000000000000000000860416935083650100000000008604189350635a82799992506103e3565b6a010000000000000000000085046f01000000000000000000000000000000860418935083650100000000008604189350636ed9eba192506103e3565b6a010000000000000000000085046f01000000000000000000000000000000860417935083650100000000008604169350836a010000000000000000000086046f01000000000000000000000000000000870416179350638f1bbcdc92506103e3565b6a010000000000000000000085046f0100000000000000000000000000000086041893508365010000000000860418935063ca62c1d692505b50601f770800000000000000000000000000000000000000000000008504168063ffffffe073080000000000000000000000000000000000000087041617905080840190508063ffffffff86160190508083019050807c0100000000000000000000000000000000000000000000000000000000600484028c0151040190507401000000000000000000000000000000000000000081026501000000000086041794506a0100000000000000000000633fffffff6a040000000000000000000087041663c00000006604000000000000880416170277ffffffff00ffffffff000000000000ffffffff00ffffffff86161794505060018101905061028e565b5077ffffffff00ffffffff00ffffffff00ffffffff00ffffffff838601169450505050604081019050610105565b506c0100000000000000000000000063ffffffff821667ffffffff000000006101008404166bffffffff0000000000000000620100008504166fffffffff000000000000000000000000630100000086041673ffffffff000000000000000000000000000000006401000000008704161717171702945050505050919050565b60006105a361059e84610688565b610663565b9050828152602081018484840111156105bb57600080fd5b6105c68482856106e5565b509392505050565b600082601f8301126105df57600080fd5b81356105ef848260208601610590565b91505092915050565b60006020828403121561060a57600080fd5b600082013567ffffffffffffffff81111561062457600080fd5b610630848285016105ce565b91505092915050565b610642816106b9565b82525050565b600060208201905061065d6000830184610639565b92915050565b600061066d61067e565b905061067982826106f4565b919050565b6000604051905090565b600067ffffffffffffffff8211156106a3576106a2610725565b5b6106ac82610754565b9050602081019050919050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b82818337600083830152505050565b6106fd82610754565b810181811067ffffffffffffffff8211171561071c5761071b610725565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f830116905091905056fea2646970667358221220ad9e7f60007d09c75331b7468390241a049f191cc89d41c9b8203dd44e35f53e64736f6c63430008040033",
              "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x1605782B EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4A PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x5F8 JUMP JUMPDEST PUSH2 0x60 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x57 SWAP2 SWAP1 PUSH2 0x648 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH2 0x6B DUP3 PUSH2 0x72 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD DUP3 MLOAD PUSH1 0x20 DUP5 ADD SWAP4 POP PUSH1 0x40 PUSH8 0xFFFFFFFFFFFFFFC0 PUSH1 0x1 DUP4 ADD AND ADD PUSH1 0x9 DUP3 DUP3 SUB LT PUSH1 0x1 DUP2 EQ PUSH2 0xA3 JUMPI PUSH2 0xAA JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP2 POP JUMPDEST POP PUSH24 0x6745230100EFCDAB890098BADCFE001032547600C3D2E1F0 PUSH2 0x102 JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 LT ISZERO PUSH2 0xFB JUMPI DUP3 DUP3 ADD MLOAD SWAP1 POP DUP3 DUP5 SUB SWAP4 POP PUSH1 0x20 DUP5 LT ISZERO PUSH2 0xFA JUMPI PUSH1 0x1 DUP5 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT DUP1 DUP3 AND SWAP2 POP POP JUMPDEST JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x510 JUMPI PUSH2 0x118 DUP5 DUP3 DUP10 PUSH2 0xC9 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x128 DUP5 PUSH1 0x20 DUP4 ADD DUP10 PUSH2 0xC9 JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP2 DUP6 SUB LT PUSH1 0x1 DUP2 EQ PUSH2 0x140 JUMPI PUSH2 0x149 JUMP JUMPDEST PUSH1 0x80 DUP3 DUP7 SUB DUP8 ADD MSTORE8 JUMPDEST POP PUSH1 0x40 DUP4 SUB DUP2 EQ PUSH1 0x1 DUP2 EQ PUSH2 0x15D JUMPI PUSH2 0x16D JUMP JUMPDEST PUSH1 0x8 DUP6 MUL PUSH1 0x20 DUP8 ADD MLOAD OR PUSH1 0x20 DUP8 ADD MSTORE JUMPDEST POP PUSH1 0x40 JUMPDEST PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x1F9 JUMPI PUSH1 0x40 DUP2 SUB DUP7 ADD MLOAD PUSH1 0x38 DUP3 SUB DUP8 ADD MLOAD XOR PUSH1 0x20 DUP3 SUB DUP8 ADD MLOAD PUSH1 0xC DUP4 SUB DUP9 ADD MLOAD XOR XOR PUSH29 0x100000001000000010000000100000001000000010000000100000001 PUSH4 0x80000000 DUP3 DIV AND PUSH32 0xFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE PUSH1 0x2 DUP4 MUL AND OR SWAP1 POP DUP1 DUP3 DUP9 ADD MSTORE POP PUSH1 0xC DUP2 ADD SWAP1 POP PUSH2 0x171 JUMP JUMPDEST POP PUSH1 0x80 JUMPDEST PUSH2 0x140 DUP2 LT ISZERO PUSH2 0x286 JUMPI PUSH1 0x80 DUP2 SUB DUP7 ADD MLOAD PUSH1 0x70 DUP3 SUB DUP8 ADD MLOAD XOR PUSH1 0x40 DUP3 SUB DUP8 ADD MLOAD PUSH1 0x18 DUP4 SUB DUP9 ADD MLOAD XOR XOR PUSH29 0x300000003000000030000000300000003000000030000000300000003 PUSH4 0x40000000 DUP3 DIV AND PUSH32 0xFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC PUSH1 0x4 DUP4 MUL AND OR SWAP1 POP DUP1 DUP3 DUP9 ADD MSTORE POP PUSH1 0x18 DUP2 ADD SWAP1 POP PUSH2 0x1FD JUMP JUMPDEST POP DUP2 PUSH1 0x0 DUP1 PUSH1 0x0 JUMPDEST PUSH1 0x50 DUP2 LT ISZERO PUSH2 0x4E2 JUMPI PUSH1 0x14 DUP2 DIV PUSH1 0x0 DUP2 EQ PUSH2 0x2C0 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x30A JUMPI PUSH1 0x2 DUP2 EQ PUSH2 0x347 JUMPI PUSH1 0x3 DUP2 EQ PUSH2 0x3AA JUMPI PUSH2 0x3E3 JUMP JUMPDEST PUSH6 0x10000000000 DUP6 DIV PUSH11 0x100000000000000000000 DUP7 DIV XOR SWAP4 POP DUP4 PUSH16 0x1000000000000000000000000000000 DUP7 DIV AND SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV XOR SWAP4 POP PUSH4 0x5A827999 SWAP3 POP PUSH2 0x3E3 JUMP JUMPDEST PUSH11 0x100000000000000000000 DUP6 DIV PUSH16 0x1000000000000000000000000000000 DUP7 DIV XOR SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV XOR SWAP4 POP PUSH4 0x6ED9EBA1 SWAP3 POP PUSH2 0x3E3 JUMP JUMPDEST PUSH11 0x100000000000000000000 DUP6 DIV PUSH16 0x1000000000000000000000000000000 DUP7 DIV OR SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV AND SWAP4 POP DUP4 PUSH11 0x100000000000000000000 DUP7 DIV PUSH16 0x1000000000000000000000000000000 DUP8 DIV AND OR SWAP4 POP PUSH4 0x8F1BBCDC SWAP3 POP PUSH2 0x3E3 JUMP JUMPDEST PUSH11 0x100000000000000000000 DUP6 DIV PUSH16 0x1000000000000000000000000000000 DUP7 DIV XOR SWAP4 POP DUP4 PUSH6 0x10000000000 DUP7 DIV XOR SWAP4 POP PUSH4 0xCA62C1D6 SWAP3 POP JUMPDEST POP PUSH1 0x1F PUSH24 0x80000000000000000000000000000000000000000000000 DUP6 DIV AND DUP1 PUSH4 0xFFFFFFE0 PUSH20 0x800000000000000000000000000000000000000 DUP8 DIV AND OR SWAP1 POP DUP1 DUP5 ADD SWAP1 POP DUP1 PUSH4 0xFFFFFFFF DUP7 AND ADD SWAP1 POP DUP1 DUP4 ADD SWAP1 POP DUP1 PUSH29 0x100000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP5 MUL DUP13 ADD MLOAD DIV ADD SWAP1 POP PUSH21 0x10000000000000000000000000000000000000000 DUP2 MUL PUSH6 0x10000000000 DUP7 DIV OR SWAP5 POP PUSH11 0x100000000000000000000 PUSH4 0x3FFFFFFF PUSH11 0x400000000000000000000 DUP8 DIV AND PUSH4 0xC0000000 PUSH7 0x4000000000000 DUP9 DIV AND OR MUL PUSH24 0xFFFFFFFF00FFFFFFFF000000000000FFFFFFFF00FFFFFFFF DUP7 AND OR SWAP5 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x28E JUMP JUMPDEST POP PUSH24 0xFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF DUP4 DUP7 ADD AND SWAP5 POP POP POP POP PUSH1 0x40 DUP2 ADD SWAP1 POP PUSH2 0x105 JUMP JUMPDEST POP PUSH13 0x1000000000000000000000000 PUSH4 0xFFFFFFFF DUP3 AND PUSH8 0xFFFFFFFF00000000 PUSH2 0x100 DUP5 DIV AND PUSH12 0xFFFFFFFF0000000000000000 PUSH3 0x10000 DUP6 DIV AND PUSH16 0xFFFFFFFF000000000000000000000000 PUSH4 0x1000000 DUP7 DIV AND PUSH20 0xFFFFFFFF00000000000000000000000000000000 PUSH5 0x100000000 DUP8 DIV AND OR OR OR OR MUL SWAP5 POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A3 PUSH2 0x59E DUP5 PUSH2 0x688 JUMP JUMPDEST PUSH2 0x663 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x5C6 DUP5 DUP3 DUP6 PUSH2 0x6E5 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x5DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH2 0x5EF DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x590 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x60A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x624 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x630 DUP5 DUP3 DUP6 ADD PUSH2 0x5CE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x642 DUP2 PUSH2 0x6B9 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x65D PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x639 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x66D PUSH2 0x67E JUMP JUMPDEST SWAP1 POP PUSH2 0x679 DUP3 DUP3 PUSH2 0x6F4 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x6A3 JUMPI PUSH2 0x6A2 PUSH2 0x725 JUMP JUMPDEST JUMPDEST PUSH2 0x6AC DUP3 PUSH2 0x754 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH2 0x6FD DUP3 PUSH2 0x754 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x71C JUMPI PUSH2 0x71B PUSH2 0x725 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAD SWAP15 PUSH32 0x60007D09C75331B7468390241A049F191CC89D41C9B8203DD44E35F53E64736F PUSH13 0x63430008040033000000000000 ",
              "sourceMap": "63:135:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;87:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;143:11;171:18;181:7;171:9;:18::i;:::-;164:25;;87:109;;;:::o;73:5661:0:-;128:11;238:4;232:11;343:4;337:11;379:2;373:4;369:13;361:21;;499:2;478:18;474:1;469:3;465:11;461:36;457:45;545:1;539:3;529:8;525:18;522:25;565:1;560:40;;;;515:85;;560:40;595:2;585:8;581:17;569:29;;515:85;;623:50;687:425;;;725:6;789:5;784:3;781:14;778:2;;;843:3;838;834:13;828:20;818:30;;889:3;882:5;878:15;869:24;;927:2;920:5;917:13;914:2;;;1003:1;994:5;990:2;986:14;981:3;977:24;973:32;969:37;1053:4;1045:6;1041:17;1031:27;;931:149;914:2;778;732:380;;;;;:::o;:::-;1141:1;1126:4284;1151:8;1148:1;1145:15;1126:4284;;;1215:22;1233:3;1230:1;1224:4;1215:22;:::i;:::-;1206:7;1199:39;1280:31;1307:3;1302:2;1299:1;1295:10;1289:4;1280:31;:::i;:::-;1275:2;1266:7;1262:16;1255:57;1426:2;1422:1;1417:3;1413:11;1410:19;1451:1;1446:51;;;;1403:94;;1446:51;1490:4;1485:1;1480:3;1476:11;1467:7;1463:25;1455:40;1403:94;;1605:2;1595:8;1591:17;1588:1;1585:24;1631:1;1626:77;;;;1578:125;;1626:77;1697:1;1692:3;1688:11;1682:2;1673:7;1669:16;1663:23;1660:40;1655:2;1646:7;1642:16;1635:66;1578:125;;1790:2;1775:512;1801:3;1798:1;1795:10;1775:512;;;1998:2;1995:1;1991:10;1982:7;1978:24;1972:31;1965:2;1962:1;1958:10;1949:7;1945:24;1939:31;1935:69;1927:2;1924:1;1920:10;1911:7;1907:24;1901:31;1894:2;1891:1;1887:10;1878:7;1874:24;1868:31;1864:69;1860:145;2151:66;2138:10;2132:4;2128:21;2124:94;2055:66;2051:1;2045:4;2041:12;2037:85;2034:185;2026:193;;2264:4;2260:1;2251:7;2247:15;2240:29;1826:461;1820:2;1817:1;1813:10;1808:15;;1775:512;;;1779:15;2319:3;2304:515;2331:3;2328:1;2325:10;2304:515;;;2529:3;2526:1;2522:11;2513:7;2509:25;2503:32;2495:3;2492:1;2488:11;2479:7;2475:25;2469:32;2465:71;2457:2;2454:1;2450:10;2441:7;2437:24;2431:31;2424:2;2421:1;2417:10;2408:7;2404:24;2398:31;2394:69;2390:147;2683:66;2670:10;2664:4;2660:21;2656:94;2587:66;2583:1;2577:4;2573:12;2569:85;2566:185;2558:193;;2796:4;2792:1;2783:7;2779:15;2772:29;2356:463;2350:2;2347:1;2343:10;2338:15;;2304:515;;;2308:16;2846:1;2873;2900;2933;2918:2389;2943:2;2940:1;2937:9;2918:2389;;;3002:2;2999:1;2995:10;3031:1;3026:352;;;;3404:1;3399:282;;;;3707:1;3702:414;;;;4142:1;4137:283;;;;2988:1432;;3026:352;3163:13;3160:1;3156:21;3130:23;3127:1;3123:31;3119:59;3114:64;;3255:1;3219:33;3216:1;3212:41;3208:49;3203:54;;3314:1;3298:13;3295:1;3291:21;3287:29;3282:34;;3346:10;3341:15;;3026:352;;3399:282;3535:23;3532:1;3528:31;3492:33;3489:1;3485:41;3481:79;3476:84;;3617:1;3601:13;3598:1;3594:21;3590:29;3585:34;;3649:10;3644:15;;3399:282;;3702:414;3854:23;3851:1;3847:31;3811:33;3808:1;3804:41;3801:78;3796:83;;3936:1;3920:13;3917:1;3913:21;3909:29;3904:34;;4052:1;4025:23;4022:1;4018:31;3982:33;3979:1;3975:41;3971:79;3968:86;3963:91;;4084:10;4079:15;;3702:414;;4137:283;4274:23;4271:1;4267:31;4231:33;4228:1;4224:41;4220:79;4215:84;;4356:1;4340:13;4337:1;4333:21;4329:29;4324:34;;4388:10;4383:15;;2988:1432;;4582:4;4530:49;4527:1;4523:57;4519:68;4687:4;4674:10;4630:41;4627:1;4623:49;4619:66;4616:76;4608:84;;4728:4;4725:1;4721:12;4713:20;;4786:4;4773:10;4770:1;4766:18;4762:29;4754:37;;4827:4;4824:1;4820:12;4812:20;;4963:4;4901:59;4895:1;4892;4888:9;4879:7;4875:23;4869:30;4865:96;4861:107;4853:115;;5030:43;5024:4;5020:54;5004:13;5001:1;4997:21;4994:81;4989:86;;5264:23;5250:10;5224:23;5221:1;5217:31;5213:48;5200:10;5182:15;5179:1;5175:23;5171:40;5168:94;5164:124;5111:50;5108:1;5104:58;5101:188;5096:193;;2966:2341;2961:1;2958;2954:9;2949:14;;2918:2389;;;2922:14;5345:50;5341:1;5338;5334:9;5330:66;5325:71;;1181:4229;;;1175:2;1172:1;1168:10;1163:15;;1126:4284;;;1130:14;5690:27;5676:10;5673:1;5669:18;5647;5639:5;5636:1;5632:13;5628:38;5598:26;5588:7;5585:1;5581:15;5577:48;5539:34;5527:9;5524:1;5520:17;5516:58;5471:42;5457:11;5454:1;5450:19;5446:68;5443:132;5440:186;5437:230;5434:254;5430:288;5423:295;;160:5568;;;;;;;:::o;7:343:2:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;369:271::-;424:5;473:3;466:4;458:6;454:17;450:27;440:2;;491:1;488;481:12;440:2;531:6;518:20;556:78;630:3;622:6;615:4;607:6;603:17;556:78;:::i;:::-;547:87;;430:210;;;;;:::o;646:373::-;714:6;763:2;751:9;742:7;738:23;734:32;731:2;;;779:1;776;769:12;731:2;850:1;839:9;835:17;822:31;880:18;872:6;869:30;866:2;;;912:1;909;902:12;866:2;940:62;994:7;985:6;974:9;970:22;940:62;:::i;:::-;930:72;;793:219;721:298;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1090:53;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1247:124;;;;:::o;1377:129::-;1411:6;1438:20;;:::i;:::-;1428:30;;1467:33;1495:4;1487:6;1467:33;:::i;:::-;1418:88;;;:::o;1512:75::-;1545:6;1578:2;1572:9;1562:19;;1552:35;:::o;1593:307::-;1654:4;1744:18;1736:6;1733:30;1730:2;;;1766:18;;:::i;:::-;1730:2;1804:29;1826:6;1804:29;:::i;:::-;1796:37;;1888:4;1882;1878:15;1870:23;;1659:241;;;:::o;1906:150::-;1943:7;1983:66;1976:5;1972:78;1961:89;;1951:105;;;:::o;2062:154::-;2146:6;2141:3;2136;2123:30;2208:1;2199:6;2194:3;2190:16;2183:27;2113:103;;;:::o;2222:281::-;2305:27;2327:4;2305:27;:::i;:::-;2297:6;2293:40;2435:6;2423:10;2420:22;2399:18;2387:10;2384:34;2381:62;2378:2;;;2446:18;;:::i;:::-;2378:2;2486:10;2482:2;2475:22;2265:238;;;:::o;2509:180::-;2557:77;2554:1;2547:88;2654:4;2651:1;2644:15;2678:4;2675:1;2668:15;2695:102;2736:6;2787:2;2783:7;2778:2;2771:5;2767:14;2763:28;2753:38;;2743:54;;;:::o"
            },
            "methodIdentifiers": {
              "sha1(bytes)": "1605782b"
            }
          }
        }
      }
    },
    "errors": [
      {
        "component": "general",
        "errorCode": "1878",
        "formattedMessage": "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> contracts/SHA1.sol\n\n",
        "message": "SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.",
        "severity": "warning",
        "sourceLocation": {
          "end": -1,
          "file": "contracts/SHA1.sol",
          "start": -1
        },
        "type": "Warning"
      },
      {
        "component": "general",
        "errorCode": "1878",
        "formattedMessage": "Warning: SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.\n--> test/mocks/SHA1Test.sol\n\n",
        "message": "SPDX license identifier not provided in source file. Before publishing, consider adding a comment containing \"SPDX-License-Identifier: <SPDX-License>\" to each source file. Use \"SPDX-License-Identifier: UNLICENSED\" for non-open-source code. Please see https://spdx.org for more information.",
        "severity": "warning",
        "sourceLocation": {
          "end": -1,
          "file": "test/mocks/SHA1Test.sol",
          "start": -1
        },
        "type": "Warning"
      }
    ],
    "sources": {
      "contracts/SHA1.sol": {
        "ast": {
          "absolutePath": "contracts/SHA1.sol",
          "exportedSymbols": {
            "SHA1": [
              15
            ]
          },
          "id": 16,
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "0:23:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "library",
              "fullyImplemented": true,
              "id": 15,
              "linearizedBaseContracts": [
                15
              ],
              "name": "SHA1",
              "nameLocation": "33:4:0",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "anonymous": false,
                  "id": 5,
                  "name": "Debug",
                  "nameLocation": "50:5:0",
                  "nodeType": "EventDefinition",
                  "parameters": {
                    "id": 4,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 3,
                        "indexed": false,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "64:1:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 5,
                        "src": "56:9:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 2,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "56:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "55:11:0"
                  },
                  "src": "44:23:0"
                },
                {
                  "body": {
                    "id": 13,
                    "nodeType": "Block",
                    "src": "141:5593:0",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "160:5568:0",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "217:26:0",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "238:4:0",
                                    "type": "",
                                    "value": "0x40"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "232:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "232:11:0"
                              },
                              "variables": [
                                {
                                  "name": "scratch",
                                  "nodeType": "YulTypedName",
                                  "src": "221:7:0",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "326:22:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "343:4:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "337:5:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "337:11:0"
                              },
                              "variables": [
                                {
                                  "name": "len",
                                  "nodeType": "YulTypedName",
                                  "src": "330:3:0",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "361:21:0",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "data",
                                    "nodeType": "YulIdentifier",
                                    "src": "373:4:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "379:2:0",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "369:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "369:13:0"
                              },
                              "variableNames": [
                                {
                                  "name": "data",
                                  "nodeType": "YulIdentifier",
                                  "src": "361:4:0"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "441:61:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "len",
                                            "nodeType": "YulIdentifier",
                                            "src": "469:3:0"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "474:1:0",
                                            "type": "",
                                            "value": "1"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "465:3:0"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "465:11:0"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "478:18:0",
                                        "type": "",
                                        "value": "0xFFFFFFFFFFFFFFC0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "and",
                                      "nodeType": "YulIdentifier",
                                      "src": "461:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "461:36:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "499:2:0",
                                    "type": "",
                                    "value": "64"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "457:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "457:45:0"
                              },
                              "variables": [
                                {
                                  "name": "totallen",
                                  "nodeType": "YulTypedName",
                                  "src": "445:8:0",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "cases": [
                                {
                                  "body": {
                                    "nodeType": "YulBlock",
                                    "src": "567:33:0",
                                    "statements": [
                                      {
                                        "nodeType": "YulAssignment",
                                        "src": "569:29:0",
                                        "value": {
                                          "arguments": [
                                            {
                                              "name": "totallen",
                                              "nodeType": "YulIdentifier",
                                              "src": "585:8:0"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "595:2:0",
                                              "type": "",
                                              "value": "64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "581:3:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "581:17:0"
                                        },
                                        "variableNames": [
                                          {
                                            "name": "totallen",
                                            "nodeType": "YulIdentifier",
                                            "src": "569:8:0"
                                          }
                                        ]
                                      }
                                    ]
                                  },
                                  "nodeType": "YulCase",
                                  "src": "560:40:0",
                                  "value": {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "565:1:0",
                                    "type": "",
                                    "value": "1"
                                  }
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "totallen",
                                        "nodeType": "YulIdentifier",
                                        "src": "529:8:0"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "539:3:0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sub",
                                      "nodeType": "YulIdentifier",
                                      "src": "525:3:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "525:18:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "545:1:0",
                                    "type": "",
                                    "value": "9"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "522:2:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "522:25:0"
                              },
                              "nodeType": "YulSwitch",
                              "src": "515:85:0"
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "614:59:0",
                              "value": {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "623:50:0",
                                "type": "",
                                "value": "0x6745230100EFCDAB890098BADCFE001032547600C3D2E1F0"
                              },
                              "variables": [
                                {
                                  "name": "h",
                                  "nodeType": "YulTypedName",
                                  "src": "618:1:0",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "732:380:0",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "750:11:0",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "760:1:0",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "result",
                                        "nodeType": "YulIdentifier",
                                        "src": "750:6:0"
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "796:302:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "818:30:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "838:3:0"
                                                  },
                                                  {
                                                    "name": "off",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "843:3:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "834:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "834:13:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mload",
                                              "nodeType": "YulIdentifier",
                                              "src": "828:5:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "828:20:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "result",
                                              "nodeType": "YulIdentifier",
                                              "src": "818:6:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "869:24:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "count",
                                                "nodeType": "YulIdentifier",
                                                "src": "882:5:0"
                                              },
                                              {
                                                "name": "off",
                                                "nodeType": "YulIdentifier",
                                                "src": "889:3:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "sub",
                                              "nodeType": "YulIdentifier",
                                              "src": "878:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "878:15:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "count",
                                              "nodeType": "YulIdentifier",
                                              "src": "869:5:0"
                                            }
                                          ]
                                        },
                                        {
                                          "body": {
                                            "nodeType": "YulBlock",
                                            "src": "931:149:0",
                                            "statements": [
                                              {
                                                "nodeType": "YulVariableDeclaration",
                                                "src": "957:49:0",
                                                "value": {
                                                  "arguments": [
                                                    {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "981:3:0",
                                                              "type": "",
                                                              "value": "256"
                                                            },
                                                            {
                                                              "arguments": [
                                                                {
                                                                  "kind": "number",
                                                                  "nodeType": "YulLiteral",
                                                                  "src": "990:2:0",
                                                                  "type": "",
                                                                  "value": "32"
                                                                },
                                                                {
                                                                  "name": "count",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "994:5:0"
                                                                }
                                                              ],
                                                              "functionName": {
                                                                "name": "sub",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "986:3:0"
                                                              },
                                                              "nodeType": "YulFunctionCall",
                                                              "src": "986:14:0"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "exp",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "977:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "977:24:0"
                                                        },
                                                        {
                                                          "kind": "number",
                                                          "nodeType": "YulLiteral",
                                                          "src": "1003:1:0",
                                                          "type": "",
                                                          "value": "1"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "sub",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "973:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "973:32:0"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "not",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "969:3:0"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "969:37:0"
                                                },
                                                "variables": [
                                                  {
                                                    "name": "mask",
                                                    "nodeType": "YulTypedName",
                                                    "src": "961:4:0",
                                                    "type": ""
                                                  }
                                                ]
                                              },
                                              {
                                                "nodeType": "YulAssignment",
                                                "src": "1031:27:0",
                                                "value": {
                                                  "arguments": [
                                                    {
                                                      "name": "result",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1045:6:0"
                                                    },
                                                    {
                                                      "name": "mask",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1053:4:0"
                                                    }
                                                  ],
                                                  "functionName": {
                                                    "name": "and",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1041:3:0"
                                                  },
                                                  "nodeType": "YulFunctionCall",
                                                  "src": "1041:17:0"
                                                },
                                                "variableNames": [
                                                  {
                                                    "name": "result",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "1031:6:0"
                                                  }
                                                ]
                                              }
                                            ]
                                          },
                                          "condition": {
                                            "arguments": [
                                              {
                                                "name": "count",
                                                "nodeType": "YulIdentifier",
                                                "src": "920:5:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "927:2:0",
                                                "type": "",
                                                "value": "32"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "lt",
                                              "nodeType": "YulIdentifier",
                                              "src": "917:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "917:13:0"
                                          },
                                          "nodeType": "YulIf",
                                          "src": "914:2:0"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "off",
                                          "nodeType": "YulIdentifier",
                                          "src": "784:3:0"
                                        },
                                        {
                                          "name": "count",
                                          "nodeType": "YulIdentifier",
                                          "src": "789:5:0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "781:2:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "781:14:0"
                                    },
                                    "nodeType": "YulIf",
                                    "src": "778:2:0"
                                  }
                                ]
                              },
                              "name": "readword",
                              "nodeType": "YulFunctionDefinition",
                              "parameters": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulTypedName",
                                  "src": "705:3:0",
                                  "type": ""
                                },
                                {
                                  "name": "off",
                                  "nodeType": "YulTypedName",
                                  "src": "710:3:0",
                                  "type": ""
                                },
                                {
                                  "name": "count",
                                  "nodeType": "YulTypedName",
                                  "src": "715:5:0",
                                  "type": ""
                                }
                              ],
                              "returnVariables": [
                                {
                                  "name": "result",
                                  "nodeType": "YulTypedName",
                                  "src": "725:6:0",
                                  "type": ""
                                }
                              ],
                              "src": "687:425:0"
                            },
                            {
                              "body": {
                                "nodeType": "YulBlock",
                                "src": "1181:4229:0",
                                "statements": [
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "scratch",
                                          "nodeType": "YulIdentifier",
                                          "src": "1206:7:0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "data",
                                              "nodeType": "YulIdentifier",
                                              "src": "1224:4:0"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "1230:1:0"
                                            },
                                            {
                                              "name": "len",
                                              "nodeType": "YulIdentifier",
                                              "src": "1233:3:0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "readword",
                                            "nodeType": "YulIdentifier",
                                            "src": "1215:8:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1215:22:0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1199:6:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1199:39:0"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1199:39:0"
                                  },
                                  {
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "scratch",
                                              "nodeType": "YulIdentifier",
                                              "src": "1266:7:0"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1275:2:0",
                                              "type": "",
                                              "value": "32"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "1262:3:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1262:16:0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "data",
                                              "nodeType": "YulIdentifier",
                                              "src": "1289:4:0"
                                            },
                                            {
                                              "arguments": [
                                                {
                                                  "name": "i",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1299:1:0"
                                                },
                                                {
                                                  "kind": "number",
                                                  "nodeType": "YulLiteral",
                                                  "src": "1302:2:0",
                                                  "type": "",
                                                  "value": "32"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "add",
                                                "nodeType": "YulIdentifier",
                                                "src": "1295:3:0"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "1295:10:0"
                                            },
                                            {
                                              "name": "len",
                                              "nodeType": "YulIdentifier",
                                              "src": "1307:3:0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "readword",
                                            "nodeType": "YulIdentifier",
                                            "src": "1280:8:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1280:31:0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mstore",
                                        "nodeType": "YulIdentifier",
                                        "src": "1255:6:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1255:57:0"
                                    },
                                    "nodeType": "YulExpressionStatement",
                                    "src": "1255:57:0"
                                  },
                                  {
                                    "cases": [
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "1453:44:0",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "scratch",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1467:7:0"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "len",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1480:3:0"
                                                          },
                                                          {
                                                            "name": "i",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1485:1:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "sub",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1476:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1476:11:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1463:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1463:25:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "1490:4:0",
                                                    "type": "",
                                                    "value": "0x80"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore8",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1455:7:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1455:40:0"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "1455:40:0"
                                            }
                                          ]
                                        },
                                        "nodeType": "YulCase",
                                        "src": "1446:51:0",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1451:1:0",
                                          "type": "",
                                          "value": "1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "len",
                                              "nodeType": "YulIdentifier",
                                              "src": "1417:3:0"
                                            },
                                            {
                                              "name": "i",
                                              "nodeType": "YulIdentifier",
                                              "src": "1422:1:0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sub",
                                            "nodeType": "YulIdentifier",
                                            "src": "1413:3:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1413:11:0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1426:2:0",
                                          "type": "",
                                          "value": "64"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "1410:2:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1410:19:0"
                                    },
                                    "nodeType": "YulSwitch",
                                    "src": "1403:94:0"
                                  },
                                  {
                                    "cases": [
                                      {
                                        "body": {
                                          "nodeType": "YulBlock",
                                          "src": "1633:70:0",
                                          "statements": [
                                            {
                                              "expression": {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "scratch",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "1646:7:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "1655:2:0",
                                                        "type": "",
                                                        "value": "32"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "add",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1642:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1642:16:0"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "scratch",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1673:7:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1682:2:0",
                                                                "type": "",
                                                                "value": "32"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "add",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1669:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1669:16:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "mload",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1663:5:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1663:23:0"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "len",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1692:3:0"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "1697:1:0",
                                                            "type": "",
                                                            "value": "8"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "mul",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1688:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1688:11:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "or",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1660:2:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1660:40:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mstore",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1635:6:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1635:66:0"
                                              },
                                              "nodeType": "YulExpressionStatement",
                                              "src": "1635:66:0"
                                            }
                                          ]
                                        },
                                        "nodeType": "YulCase",
                                        "src": "1626:77:0",
                                        "value": {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1631:1:0",
                                          "type": "",
                                          "value": "1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1588:1:0"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "name": "totallen",
                                              "nodeType": "YulIdentifier",
                                              "src": "1595:8:0"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "1605:2:0",
                                              "type": "",
                                              "value": "64"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "sub",
                                            "nodeType": "YulIdentifier",
                                            "src": "1591:3:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "1591:17:0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "eq",
                                        "nodeType": "YulIdentifier",
                                        "src": "1585:2:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1585:24:0"
                                    },
                                    "nodeType": "YulSwitch",
                                    "src": "1578:125:0"
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "1826:461:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "1848:157:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1878:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1891:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1894:2:0",
                                                                "type": "",
                                                                "value": "12"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1887:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1887:10:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1874:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1874:24:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1868:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1868:31:0"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1911:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1924:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1927:2:0",
                                                                "type": "",
                                                                "value": "32"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1920:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1920:10:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1907:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1907:24:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1901:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1901:31:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "xor",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1864:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1864:69:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1949:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1962:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1965:2:0",
                                                                "type": "",
                                                                "value": "56"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1958:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1958:10:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1945:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1945:24:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1939:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1939:31:0"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "1982:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "1995:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "1998:2:0",
                                                                "type": "",
                                                                "value": "64"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "1991:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "1991:10:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "1978:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "1978:24:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "1972:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "1972:31:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "xor",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "1935:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "1935:69:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "xor",
                                              "nodeType": "YulIdentifier",
                                              "src": "1860:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1860:145:0"
                                          },
                                          "variables": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulTypedName",
                                              "src": "1852:4:0",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2026:193:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "temp",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2045:4:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2051:1:0",
                                                        "type": "",
                                                        "value": "2"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mul",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2041:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2041:12:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2055:66:0",
                                                    "type": "",
                                                    "value": "0xFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFEFFFFFFFE"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2037:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2037:85:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "temp",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2132:4:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2138:10:0",
                                                        "type": "",
                                                        "value": "0x80000000"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "div",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2128:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2128:21:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2151:66:0",
                                                    "type": "",
                                                    "value": "0x0000000100000001000000010000000100000001000000010000000100000001"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2124:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2124:94:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "or",
                                              "nodeType": "YulIdentifier",
                                              "src": "2034:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2034:185:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "2026:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "scratch",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2251:7:0"
                                                  },
                                                  {
                                                    "name": "j",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2260:1:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2247:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2247:15:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "2264:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "2240:6:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2240:29:0"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2240:29:0"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "j",
                                          "nodeType": "YulIdentifier",
                                          "src": "1798:1:0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1801:3:0",
                                          "type": "",
                                          "value": "128"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "1795:2:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1795:10:0"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "1806:19:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "1808:15:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "j",
                                                "nodeType": "YulIdentifier",
                                                "src": "1817:1:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "1820:2:0",
                                                "type": "",
                                                "value": "12"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "1813:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "1813:10:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "j",
                                              "nodeType": "YulIdentifier",
                                              "src": "1808:1:0"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "1779:15:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "1781:11:0",
                                          "value": {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "1790:2:0",
                                            "type": "",
                                            "value": "64"
                                          },
                                          "variables": [
                                            {
                                              "name": "j",
                                              "nodeType": "YulTypedName",
                                              "src": "1785:1:0",
                                              "type": ""
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "src": "1775:512:0"
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "2356:463:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "2378:159:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2408:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2421:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "2424:2:0",
                                                                "type": "",
                                                                "value": "24"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2417:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2417:10:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2404:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2404:24:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2398:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2398:31:0"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2441:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2454:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "2457:2:0",
                                                                "type": "",
                                                                "value": "64"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2450:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2450:10:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2437:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2437:24:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2431:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2431:31:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "xor",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2394:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2394:69:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2479:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2492:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "2495:3:0",
                                                                "type": "",
                                                                "value": "112"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2488:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2488:11:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2475:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2475:25:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2469:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2469:32:0"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "2513:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "2526:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "2529:3:0",
                                                                "type": "",
                                                                "value": "128"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "sub",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "2522:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "2522:11:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "2509:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "2509:25:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2503:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2503:32:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "xor",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2465:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2465:71:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "xor",
                                              "nodeType": "YulIdentifier",
                                              "src": "2390:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2390:147:0"
                                          },
                                          "variables": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulTypedName",
                                              "src": "2382:4:0",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2558:193:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "temp",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2577:4:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2583:1:0",
                                                        "type": "",
                                                        "value": "4"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mul",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2573:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2573:12:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2587:66:0",
                                                    "type": "",
                                                    "value": "0xFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFCFFFFFFFC"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2569:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2569:85:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "temp",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "2664:4:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "2670:10:0",
                                                        "type": "",
                                                        "value": "0x40000000"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "div",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "2660:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "2660:21:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "2683:66:0",
                                                    "type": "",
                                                    "value": "0x0000000300000003000000030000000300000003000000030000000300000003"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2656:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2656:94:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "or",
                                              "nodeType": "YulIdentifier",
                                              "src": "2566:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2566:185:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "2558:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "expression": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "scratch",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2783:7:0"
                                                  },
                                                  {
                                                    "name": "j",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "2792:1:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "2779:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "2779:15:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "2796:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "mstore",
                                              "nodeType": "YulIdentifier",
                                              "src": "2772:6:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2772:29:0"
                                          },
                                          "nodeType": "YulExpressionStatement",
                                          "src": "2772:29:0"
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "j",
                                          "nodeType": "YulIdentifier",
                                          "src": "2328:1:0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2331:3:0",
                                          "type": "",
                                          "value": "320"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "2325:2:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2325:10:0"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "2336:19:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2338:15:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "j",
                                                "nodeType": "YulIdentifier",
                                                "src": "2347:1:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2350:2:0",
                                                "type": "",
                                                "value": "24"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2343:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2343:10:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "j",
                                              "nodeType": "YulIdentifier",
                                              "src": "2338:1:0"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "2308:16:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "2310:12:0",
                                          "value": {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2319:3:0",
                                            "type": "",
                                            "value": "128"
                                          },
                                          "variables": [
                                            {
                                              "name": "j",
                                              "nodeType": "YulTypedName",
                                              "src": "2314:1:0",
                                              "type": ""
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "src": "2304:515:0"
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2837:10:0",
                                    "value": {
                                      "name": "h",
                                      "nodeType": "YulIdentifier",
                                      "src": "2846:1:0"
                                    },
                                    "variables": [
                                      {
                                        "name": "x",
                                        "nodeType": "YulTypedName",
                                        "src": "2841:1:0",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2864:10:0",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "2873:1:0",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "f",
                                        "nodeType": "YulTypedName",
                                        "src": "2868:1:0",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "2891:10:0",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "2900:1:0",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "k",
                                        "nodeType": "YulTypedName",
                                        "src": "2895:1:0",
                                        "type": ""
                                      }
                                    ]
                                  },
                                  {
                                    "body": {
                                      "nodeType": "YulBlock",
                                      "src": "2966:2341:0",
                                      "statements": [
                                        {
                                          "cases": [
                                            {
                                              "body": {
                                                "nodeType": "YulBlock",
                                                "src": "3033:345:0",
                                                "statements": [
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3114:64:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3127:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3130:23:0",
                                                              "type": "",
                                                              "value": "0x100000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3123:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3123:31:0"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3160:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3163:13:0",
                                                              "type": "",
                                                              "value": "0x10000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3156:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3156:21:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "xor",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3119:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3119:59:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3114:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3203:54:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3216:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3219:33:0",
                                                              "type": "",
                                                              "value": "0x1000000000000000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3212:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3212:41:0"
                                                        },
                                                        {
                                                          "name": "f",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3255:1:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3208:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3208:49:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3203:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3282:34:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3295:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3298:13:0",
                                                              "type": "",
                                                              "value": "0x10000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3291:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3291:21:0"
                                                        },
                                                        {
                                                          "name": "f",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3314:1:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "xor",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3287:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3287:29:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3282:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3341:15:0",
                                                    "value": {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3346:10:0",
                                                      "type": "",
                                                      "value": "0x5A827999"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "k",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3341:1:0"
                                                      }
                                                    ]
                                                  }
                                                ]
                                              },
                                              "nodeType": "YulCase",
                                              "src": "3026:352:0",
                                              "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3031:1:0",
                                                "type": "",
                                                "value": "0"
                                              }
                                            },
                                            {
                                              "body": {
                                                "nodeType": "YulBlock",
                                                "src": "3405:276:0",
                                                "statements": [
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3476:84:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3489:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3492:33:0",
                                                              "type": "",
                                                              "value": "0x1000000000000000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3485:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3485:41:0"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3532:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3535:23:0",
                                                              "type": "",
                                                              "value": "0x100000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3528:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3528:31:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "xor",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3481:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3481:79:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3476:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3585:34:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3598:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3601:13:0",
                                                              "type": "",
                                                              "value": "0x10000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3594:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3594:21:0"
                                                        },
                                                        {
                                                          "name": "f",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3617:1:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "xor",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3590:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3590:29:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3585:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3644:15:0",
                                                    "value": {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "3649:10:0",
                                                      "type": "",
                                                      "value": "0x6ED9EBA1"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "k",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3644:1:0"
                                                      }
                                                    ]
                                                  }
                                                ]
                                              },
                                              "nodeType": "YulCase",
                                              "src": "3399:282:0",
                                              "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3404:1:0",
                                                "type": "",
                                                "value": "1"
                                              }
                                            },
                                            {
                                              "body": {
                                                "nodeType": "YulBlock",
                                                "src": "3709:407:0",
                                                "statements": [
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3796:83:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3808:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3811:33:0",
                                                              "type": "",
                                                              "value": "0x1000000000000000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3804:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3804:41:0"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3851:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3854:23:0",
                                                              "type": "",
                                                              "value": "0x100000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3847:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3847:31:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "or",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3801:2:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3801:78:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3796:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3904:34:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "3917:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "3920:13:0",
                                                              "type": "",
                                                              "value": "0x10000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3913:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3913:21:0"
                                                        },
                                                        {
                                                          "name": "f",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "3936:1:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "and",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3909:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3909:29:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3904:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "3963:91:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "arguments": [
                                                                {
                                                                  "name": "x",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "3979:1:0"
                                                                },
                                                                {
                                                                  "kind": "number",
                                                                  "nodeType": "YulLiteral",
                                                                  "src": "3982:33:0",
                                                                  "type": "",
                                                                  "value": "0x1000000000000000000000000000000"
                                                                }
                                                              ],
                                                              "functionName": {
                                                                "name": "div",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "3975:3:0"
                                                              },
                                                              "nodeType": "YulFunctionCall",
                                                              "src": "3975:41:0"
                                                            },
                                                            {
                                                              "arguments": [
                                                                {
                                                                  "name": "x",
                                                                  "nodeType": "YulIdentifier",
                                                                  "src": "4022:1:0"
                                                                },
                                                                {
                                                                  "kind": "number",
                                                                  "nodeType": "YulLiteral",
                                                                  "src": "4025:23:0",
                                                                  "type": "",
                                                                  "value": "0x100000000000000000000"
                                                                }
                                                              ],
                                                              "functionName": {
                                                                "name": "div",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4018:3:0"
                                                              },
                                                              "nodeType": "YulFunctionCall",
                                                              "src": "4018:31:0"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "and",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "3971:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "3971:79:0"
                                                        },
                                                        {
                                                          "name": "f",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "4052:1:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "or",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3968:2:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "3968:86:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "3963:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "4079:15:0",
                                                    "value": {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "4084:10:0",
                                                      "type": "",
                                                      "value": "0x8F1BBCDC"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "k",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4079:1:0"
                                                      }
                                                    ]
                                                  }
                                                ]
                                              },
                                              "nodeType": "YulCase",
                                              "src": "3702:414:0",
                                              "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3707:1:0",
                                                "type": "",
                                                "value": "2"
                                              }
                                            },
                                            {
                                              "body": {
                                                "nodeType": "YulBlock",
                                                "src": "4144:276:0",
                                                "statements": [
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "4215:84:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4228:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "4231:33:0",
                                                              "type": "",
                                                              "value": "0x1000000000000000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4224:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4224:41:0"
                                                        },
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4271:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "4274:23:0",
                                                              "type": "",
                                                              "value": "0x100000000000000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4267:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4267:31:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "xor",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4220:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "4220:79:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4215:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "4324:34:0",
                                                    "value": {
                                                      "arguments": [
                                                        {
                                                          "arguments": [
                                                            {
                                                              "name": "x",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4337:1:0"
                                                            },
                                                            {
                                                              "kind": "number",
                                                              "nodeType": "YulLiteral",
                                                              "src": "4340:13:0",
                                                              "type": "",
                                                              "value": "0x10000000000"
                                                            }
                                                          ],
                                                          "functionName": {
                                                            "name": "div",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4333:3:0"
                                                          },
                                                          "nodeType": "YulFunctionCall",
                                                          "src": "4333:21:0"
                                                        },
                                                        {
                                                          "name": "f",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "4356:1:0"
                                                        }
                                                      ],
                                                      "functionName": {
                                                        "name": "xor",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4329:3:0"
                                                      },
                                                      "nodeType": "YulFunctionCall",
                                                      "src": "4329:29:0"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "f",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4324:1:0"
                                                      }
                                                    ]
                                                  },
                                                  {
                                                    "nodeType": "YulAssignment",
                                                    "src": "4383:15:0",
                                                    "value": {
                                                      "kind": "number",
                                                      "nodeType": "YulLiteral",
                                                      "src": "4388:10:0",
                                                      "type": "",
                                                      "value": "0xCA62C1D6"
                                                    },
                                                    "variableNames": [
                                                      {
                                                        "name": "k",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4383:1:0"
                                                      }
                                                    ]
                                                  }
                                                ]
                                              },
                                              "nodeType": "YulCase",
                                              "src": "4137:283:0",
                                              "value": {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4142:1:0",
                                                "type": "",
                                                "value": "3"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "arguments": [
                                              {
                                                "name": "j",
                                                "nodeType": "YulIdentifier",
                                                "src": "2999:1:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "3002:2:0",
                                                "type": "",
                                                "value": "20"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "div",
                                              "nodeType": "YulIdentifier",
                                              "src": "2995:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2995:10:0"
                                          },
                                          "nodeType": "YulSwitch",
                                          "src": "2988:1432:0"
                                        },
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "4507:80:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "x",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4527:1:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4530:49:0",
                                                    "type": "",
                                                    "value": "0x80000000000000000000000000000000000000000000000"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "div",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4523:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4523:57:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "4582:4:0",
                                                "type": "",
                                                "value": "0x1F"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "4519:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4519:68:0"
                                          },
                                          "variables": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulTypedName",
                                              "src": "4511:4:0",
                                              "type": ""
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4608:84:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "x",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "4627:1:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "4630:41:0",
                                                        "type": "",
                                                        "value": "0x800000000000000000000000000000000000000"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "div",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "4623:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4623:49:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4674:10:0",
                                                    "type": "",
                                                    "value": "0xFFFFFFE0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4619:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4619:66:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "4687:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "or",
                                              "nodeType": "YulIdentifier",
                                              "src": "4616:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4616:76:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "4608:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4713:20:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "f",
                                                "nodeType": "YulIdentifier",
                                                "src": "4725:1:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "4728:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4721:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4721:12:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "4713:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4754:37:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "x",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "4770:1:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4773:10:0",
                                                    "type": "",
                                                    "value": "0xFFFFFFFF"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4766:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4766:18:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "4786:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4762:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4762:29:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "4754:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4812:20:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "k",
                                                "nodeType": "YulIdentifier",
                                                "src": "4824:1:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "4827:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4820:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4820:12:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "4812:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4853:115:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "scratch",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "4879:7:0"
                                                          },
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "j",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "4892:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "4895:1:0",
                                                                "type": "",
                                                                "value": "4"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "mul",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "4888:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "4888:9:0"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "add",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "4875:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "4875:23:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "mload",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "4869:5:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "4869:30:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "4901:59:0",
                                                    "type": "",
                                                    "value": "0x100000000000000000000000000000000000000000000000000000000"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "div",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4865:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4865:96:0"
                                              },
                                              {
                                                "name": "temp",
                                                "nodeType": "YulIdentifier",
                                                "src": "4963:4:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "4861:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4861:107:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "temp",
                                              "nodeType": "YulIdentifier",
                                              "src": "4853:4:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "4989:86:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "x",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5001:1:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5004:13:0",
                                                    "type": "",
                                                    "value": "0x10000000000"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "div",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "4997:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "4997:21:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "temp",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5024:4:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5030:43:0",
                                                    "type": "",
                                                    "value": "0x10000000000000000000000000000000000000000"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mul",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5020:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5020:54:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "or",
                                              "nodeType": "YulIdentifier",
                                              "src": "4994:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "4994:81:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "x",
                                              "nodeType": "YulIdentifier",
                                              "src": "4989:1:0"
                                            }
                                          ]
                                        },
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "5096:193:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "x",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5108:1:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5111:50:0",
                                                    "type": "",
                                                    "value": "0xFFFFFFFF00FFFFFFFF000000000000FFFFFFFF00FFFFFFFF"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5104:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5104:58:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "x",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "5179:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "5182:15:0",
                                                                "type": "",
                                                                "value": "0x4000000000000"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "div",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "5175:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "5175:23:0"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5200:10:0",
                                                            "type": "",
                                                            "value": "0xC0000000"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "and",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5171:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5171:40:0"
                                                      },
                                                      {
                                                        "arguments": [
                                                          {
                                                            "arguments": [
                                                              {
                                                                "name": "x",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "5221:1:0"
                                                              },
                                                              {
                                                                "kind": "number",
                                                                "nodeType": "YulLiteral",
                                                                "src": "5224:23:0",
                                                                "type": "",
                                                                "value": "0x400000000000000000000"
                                                              }
                                                            ],
                                                            "functionName": {
                                                              "name": "div",
                                                              "nodeType": "YulIdentifier",
                                                              "src": "5217:3:0"
                                                            },
                                                            "nodeType": "YulFunctionCall",
                                                            "src": "5217:31:0"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5250:10:0",
                                                            "type": "",
                                                            "value": "0x3FFFFFFF"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "and",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5213:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5213:48:0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "or",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5168:2:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5168:94:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5264:23:0",
                                                    "type": "",
                                                    "value": "0x100000000000000000000"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mul",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5164:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5164:124:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "or",
                                              "nodeType": "YulIdentifier",
                                              "src": "5101:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5101:188:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "x",
                                              "nodeType": "YulIdentifier",
                                              "src": "5096:1:0"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "condition": {
                                      "arguments": [
                                        {
                                          "name": "j",
                                          "nodeType": "YulIdentifier",
                                          "src": "2940:1:0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "2943:2:0",
                                          "type": "",
                                          "value": "80"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "lt",
                                        "nodeType": "YulIdentifier",
                                        "src": "2937:2:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "2937:9:0"
                                    },
                                    "nodeType": "YulForLoop",
                                    "post": {
                                      "nodeType": "YulBlock",
                                      "src": "2947:18:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "2949:14:0",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "j",
                                                "nodeType": "YulIdentifier",
                                                "src": "2958:1:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "2961:1:0",
                                                "type": "",
                                                "value": "1"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "2954:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "2954:9:0"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "j",
                                              "nodeType": "YulIdentifier",
                                              "src": "2949:1:0"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "pre": {
                                      "nodeType": "YulBlock",
                                      "src": "2922:14:0",
                                      "statements": [
                                        {
                                          "nodeType": "YulVariableDeclaration",
                                          "src": "2924:10:0",
                                          "value": {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "2933:1:0",
                                            "type": "",
                                            "value": "0"
                                          },
                                          "variables": [
                                            {
                                              "name": "j",
                                              "nodeType": "YulTypedName",
                                              "src": "2928:1:0",
                                              "type": ""
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "src": "2918:2389:0"
                                  },
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "5325:71:0",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "h",
                                              "nodeType": "YulIdentifier",
                                              "src": "5338:1:0"
                                            },
                                            {
                                              "name": "x",
                                              "nodeType": "YulIdentifier",
                                              "src": "5341:1:0"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "5334:3:0"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "5334:9:0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "5345:50:0",
                                          "type": "",
                                          "value": "0xFFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF00FFFFFFFF"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "5330:3:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "5330:66:0"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "h",
                                        "nodeType": "YulIdentifier",
                                        "src": "5325:1:0"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "condition": {
                                "arguments": [
                                  {
                                    "name": "i",
                                    "nodeType": "YulIdentifier",
                                    "src": "1148:1:0"
                                  },
                                  {
                                    "name": "totallen",
                                    "nodeType": "YulIdentifier",
                                    "src": "1151:8:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "lt",
                                  "nodeType": "YulIdentifier",
                                  "src": "1145:2:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1145:15:0"
                              },
                              "nodeType": "YulForLoop",
                              "post": {
                                "nodeType": "YulBlock",
                                "src": "1161:19:0",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "1163:15:0",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "1172:1:0"
                                        },
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "1175:2:0",
                                          "type": "",
                                          "value": "64"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "1168:3:0"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "1168:10:0"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "1163:1:0"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "pre": {
                                "nodeType": "YulBlock",
                                "src": "1130:14:0",
                                "statements": [
                                  {
                                    "nodeType": "YulVariableDeclaration",
                                    "src": "1132:10:0",
                                    "value": {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "1141:1:0",
                                      "type": "",
                                      "value": "0"
                                    },
                                    "variables": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulTypedName",
                                        "src": "1136:1:0",
                                        "type": ""
                                      }
                                    ]
                                  }
                                ]
                              },
                              "src": "1126:4284:0"
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "5423:295:0",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "h",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "5454:1:0"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5457:11:0",
                                                            "type": "",
                                                            "value": "0x100000000"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "div",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5450:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5450:19:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5471:42:0",
                                                        "type": "",
                                                        "value": "0xFFFFFFFF00000000000000000000000000000000"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5446:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5446:68:0"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "name": "h",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "5524:1:0"
                                                          },
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "5527:9:0",
                                                            "type": "",
                                                            "value": "0x1000000"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "div",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "5520:3:0"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "5520:17:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5539:34:0",
                                                        "type": "",
                                                        "value": "0xFFFFFFFF000000000000000000000000"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5516:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5516:58:0"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "or",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5443:2:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5443:132:0"
                                              },
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "name": "h",
                                                        "nodeType": "YulIdentifier",
                                                        "src": "5585:1:0"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "5588:7:0",
                                                        "type": "",
                                                        "value": "0x10000"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "div",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "5581:3:0"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "5581:15:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5598:26:0",
                                                    "type": "",
                                                    "value": "0xFFFFFFFF0000000000000000"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "and",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5577:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5577:48:0"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "or",
                                              "nodeType": "YulIdentifier",
                                              "src": "5440:2:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5440:186:0"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "h",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "5636:1:0"
                                                  },
                                                  {
                                                    "kind": "number",
                                                    "nodeType": "YulLiteral",
                                                    "src": "5639:5:0",
                                                    "type": "",
                                                    "value": "0x100"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "div",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "5632:3:0"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "5632:13:0"
                                              },
                                              {
                                                "kind": "number",
                                                "nodeType": "YulLiteral",
                                                "src": "5647:18:0",
                                                "type": "",
                                                "value": "0xFFFFFFFF00000000"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "5628:3:0"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "5628:38:0"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "or",
                                          "nodeType": "YulIdentifier",
                                          "src": "5437:2:0"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5437:230:0"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "h",
                                            "nodeType": "YulIdentifier",
                                            "src": "5673:1:0"
                                          },
                                          {
                                            "kind": "number",
                                            "nodeType": "YulLiteral",
                                            "src": "5676:10:0",
                                            "type": "",
                                            "value": "0xFFFFFFFF"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "5669:3:0"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "5669:18:0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "or",
                                      "nodeType": "YulIdentifier",
                                      "src": "5434:2:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "5434:254:0"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5690:27:0",
                                    "type": "",
                                    "value": "0x1000000000000000000000000"
                                  }
                                ],
                                "functionName": {
                                  "name": "mul",
                                  "nodeType": "YulIdentifier",
                                  "src": "5430:3:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5430:288:0"
                              },
                              "variableNames": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "5423:3:0"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "istanbul",
                        "externalReferences": [
                          {
                            "declaration": 7,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1224:4:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1289:4:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "343:4:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "361:4:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 7,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "373:4:0",
                            "valueSize": 1
                          },
                          {
                            "declaration": 10,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "5423:3:0",
                            "valueSize": 1
                          }
                        ],
                        "id": 12,
                        "nodeType": "InlineAssembly",
                        "src": "151:5577:0"
                      }
                    ]
                  },
                  "id": 14,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sha1",
                  "nameLocation": "82:4:0",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 8,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 7,
                        "mutability": "mutable",
                        "name": "data",
                        "nameLocation": "100:4:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 14,
                        "src": "87:17:0",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 6,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "87:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "86:19:0"
                  },
                  "returnParameters": {
                    "id": 11,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 10,
                        "mutability": "mutable",
                        "name": "ret",
                        "nameLocation": "136:3:0",
                        "nodeType": "VariableDeclaration",
                        "scope": 14,
                        "src": "128:11:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        "typeName": {
                          "id": 9,
                          "name": "bytes20",
                          "nodeType": "ElementaryTypeName",
                          "src": "128:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "127:13:0"
                  },
                  "scope": 15,
                  "src": "73:5661:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "internal"
                }
              ],
              "scope": 16,
              "src": "25:5711:0",
              "usedErrors": []
            }
          ],
          "src": "0:5737:0"
        },
        "id": 0
      },
      "test/mocks/SHA1Test.sol": {
        "ast": {
          "absolutePath": "test/mocks/SHA1Test.sol",
          "exportedSymbols": {
            "SHA1": [
              15
            ],
            "SHA1Test": [
              32
            ]
          },
          "id": 33,
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 17,
              "literals": [
                "solidity",
                "^",
                "0.8",
                ".4"
              ],
              "nodeType": "PragmaDirective",
              "src": "0:23:1"
            },
            {
              "absolutePath": "contracts/SHA1.sol",
              "file": "./../../contracts/SHA1.sol",
              "id": 18,
              "nameLocation": "-1:-1:-1",
              "nodeType": "ImportDirective",
              "scope": 33,
              "sourceUnit": 16,
              "src": "25:36:1",
              "symbolAliases": [],
              "unitAlias": ""
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "contract",
              "fullyImplemented": true,
              "id": 32,
              "linearizedBaseContracts": [
                32
              ],
              "name": "SHA1Test",
              "nameLocation": "72:8:1",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": {
                    "id": 30,
                    "nodeType": "Block",
                    "src": "156:40:1",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 27,
                              "name": "message",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20,
                              "src": "181:7:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "id": 25,
                              "name": "SHA1",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 15,
                              "src": "171:4:1",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_SHA1_$15_$",
                                "typeString": "type(library SHA1)"
                              }
                            },
                            "id": 26,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sha1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 14,
                            "src": "171:9:1",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes20_$",
                              "typeString": "function (bytes memory) pure returns (bytes20)"
                            }
                          },
                          "id": 28,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "171:18:1",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        },
                        "functionReturnParameters": 24,
                        "id": 29,
                        "nodeType": "Return",
                        "src": "164:25:1"
                      }
                    ]
                  },
                  "functionSelector": "1605782b",
                  "id": 31,
                  "implemented": true,
                  "kind": "function",
                  "modifiers": [],
                  "name": "sha1",
                  "nameLocation": "96:4:1",
                  "nodeType": "FunctionDefinition",
                  "parameters": {
                    "id": 21,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 20,
                        "mutability": "mutable",
                        "name": "message",
                        "nameLocation": "114:7:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 31,
                        "src": "101:20:1",
                        "stateVariable": false,
                        "storageLocation": "memory",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes"
                        },
                        "typeName": {
                          "id": 19,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "101:5:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "100:22:1"
                  },
                  "returnParameters": {
                    "id": 24,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 23,
                        "mutability": "mutable",
                        "name": "ret",
                        "nameLocation": "151:3:1",
                        "nodeType": "VariableDeclaration",
                        "scope": 31,
                        "src": "143:11:1",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        },
                        "typeName": {
                          "id": 22,
                          "name": "bytes20",
                          "nodeType": "ElementaryTypeName",
                          "src": "143:7:1",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes20",
                            "typeString": "bytes20"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "src": "142:13:1"
                  },
                  "scope": 32,
                  "src": "87:109:1",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "public"
                }
              ],
              "scope": 33,
              "src": "63:135:1",
              "usedErrors": []
            }
          ],
          "src": "0:199:1"
        },
        "id": 1
      }
    }
  }
}
