{
  "contractName": "MultiCurrency",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.8.0+commit.c7dfd78e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/token/MultiCurrency.sol\":\"MultiCurrency\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/token/MultiCurrency.sol\":{\"keccak256\":\"0x7c72d006b384a4d9ea46fdb44487830344b279cfaa21089e38072fae434016ae\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d9d3c819db7d8890cfe4a898ef02516d80d77416f987d0bb80eadbd7bac37ab7\",\"dweb:/ipfs/QmZNxxC9MYu4n3YDywsZ77SUKp4isQS8zfhk17u86wTYvi\"]}},\"version\":1}",
  "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209eb2940bfa4cc584963b7f00a9b1d0e64928ad55088b831b3974d69477222d7864736f6c63430008000033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209eb2940bfa4cc584963b7f00a9b1d0e64928ad55088b831b3974d69477222d7864736f6c63430008000033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "71:2374:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "71:2374:10:-:0;;;;;;;;",
  "source": "// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.0;\n\nlibrary MultiCurrency {\n    address constant private precompile = address(0x0000000000000000000000000000000000000400);\n\n    function name() internal view returns (string memory) {\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"name()\"));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (string));\n    }\n\n    function symbol() internal view returns (string memory) {\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"symbol()\"));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (string));\n    }\n\n    function decimals() internal view returns (uint8) {\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"decimals()\"));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint8));\n    }\n\n    function totalSupply() internal view returns (uint256) {\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"totalSupply()\"));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint256));\n    }\n\n    function balanceOf(address account) internal view returns (uint256) {\n        (bool success, bytes memory returnData) = precompile.staticcall(abi.encodeWithSignature(\"balanceOf(address)\", account));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n\n        return abi.decode(returnData, (uint256));\n    }\n\n    function transfer(address sender, address recipient, uint256 amount) internal {\n        (bool success, bytes memory returnData) = precompile.call(abi.encodeWithSignature(\"transfer(address,address,uint256)\", sender, recipient, amount));\n        assembly {\n            if eq(success, 0) {\n                revert(add(returnData, 0x20), returndatasize())\n            }\n        }\n    }\n}\n",
  "sourcePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/token/MultiCurrency.sol",
  "ast": {
    "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/token/MultiCurrency.sol",
    "exportedSymbols": {
      "MultiCurrency": [
        1557
      ]
    },
    "id": 1558,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1386,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:10"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "id": 1557,
        "linearizedBaseContracts": [
          1557
        ],
        "name": "MultiCurrency",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 1392,
            "mutability": "constant",
            "name": "precompile",
            "nodeType": "VariableDeclaration",
            "scope": 1557,
            "src": "99:89:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1387,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "99:7:10",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030343030",
                  "id": 1390,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "145:42:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x0000000000000000000000000000000000000400"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 1389,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "137:7:10",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 1388,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "137:7:10",
                  "typeDescriptions": {}
                }
              },
              "id": 1391,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "137:51:10",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 1418,
              "nodeType": "Block",
              "src": "249:304:10",
              "statements": [
                {
                  "assignments": [
                    1398,
                    1400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1398,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1418,
                      "src": "260:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1397,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "260:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1400,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1418,
                      "src": "274:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1399,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "274:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1408,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6e616d652829",
                            "id": 1405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "347:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796",
                              "typeString": "literal_string \"name()\""
                            },
                            "value": "name()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796",
                              "typeString": "literal_string \"name()\""
                            }
                          ],
                          "expression": {
                            "id": 1403,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "323:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "323:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1406,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "323:33:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1401,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "301:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "301:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "301:56:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "259:98:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "376:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "408:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "437:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "449:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "433:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "433:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "456:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "456:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "426:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "426:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "426:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "396:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "405:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "393:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "393:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "390:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1400,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "437:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1398,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "396:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1409,
                  "nodeType": "InlineAssembly",
                  "src": "367:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1412,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "525:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1414,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "538:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1413,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "538:6:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1415,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "537:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      ],
                      "expression": {
                        "id": 1410,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "514:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "514:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "514:32:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1396,
                  "id": 1417,
                  "nodeType": "Return",
                  "src": "507:39:10"
                }
              ]
            },
            "id": 1419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1393,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "208:2:10"
            },
            "returnParameters": {
              "id": 1396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1395,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1419,
                  "src": "234:13:10",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1394,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "234:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "233:15:10"
            },
            "scope": 1557,
            "src": "195:358:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1445,
              "nodeType": "Block",
              "src": "615:306:10",
              "statements": [
                {
                  "assignments": [
                    1425,
                    1427
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1425,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1445,
                      "src": "626:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1424,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "626:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1427,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1445,
                      "src": "640:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1426,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "640:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1435,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "73796d626f6c2829",
                            "id": 1432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "713:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec",
                              "typeString": "literal_string \"symbol()\""
                            },
                            "value": "symbol()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec",
                              "typeString": "literal_string \"symbol()\""
                            }
                          ],
                          "expression": {
                            "id": 1430,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "689:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "689:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "689:35:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1428,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "667:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "667:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "667:58:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "625:100:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "744:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "776:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "805:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "817:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "801:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "801:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "824:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "824:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "764:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "773:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "761:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "761:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "758:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1427,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "805:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1425,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "764:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1436,
                  "nodeType": "InlineAssembly",
                  "src": "735:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1439,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1427,
                        "src": "893:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "906:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1440,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "906:6:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1442,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "905:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      ],
                      "expression": {
                        "id": 1437,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "882:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1438,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "882:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "882:32:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1423,
                  "id": 1444,
                  "nodeType": "Return",
                  "src": "875:39:10"
                }
              ]
            },
            "id": 1446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "574:2:10"
            },
            "returnParameters": {
              "id": 1423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1422,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1446,
                  "src": "600:13:10",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1421,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "599:15:10"
            },
            "scope": 1557,
            "src": "559:362:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1472,
              "nodeType": "Block",
              "src": "977:307:10",
              "statements": [
                {
                  "assignments": [
                    1452,
                    1454
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1452,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1472,
                      "src": "988:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1451,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "988:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1454,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1472,
                      "src": "1002:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1453,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1002:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1462,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "646563696d616c732829",
                            "id": 1459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1075:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9",
                              "typeString": "literal_string \"decimals()\""
                            },
                            "value": "decimals()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9",
                              "typeString": "literal_string \"decimals()\""
                            }
                          ],
                          "expression": {
                            "id": 1457,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1051:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1051:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1051:37:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1455,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "1029:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1029:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1029:60:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "987:102:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1108:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1140:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1169:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1181:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1165:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1165:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1188:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1188:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1158:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1158:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1158:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1128:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1137:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1125:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1125:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "1122:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1454,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1169:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1452,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1128:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1463,
                  "nodeType": "InlineAssembly",
                  "src": "1099:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1466,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1454,
                        "src": "1257:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1270:5:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 1467,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "1270:5:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1469,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1269:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        }
                      ],
                      "expression": {
                        "id": 1464,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "1246:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "1246:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1246:31:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 1450,
                  "id": 1471,
                  "nodeType": "Return",
                  "src": "1239:38:10"
                }
              ]
            },
            "id": 1473,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1447,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "944:2:10"
            },
            "returnParameters": {
              "id": 1450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1449,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1473,
                  "src": "970:5:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1448,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:5:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "969:7:10"
            },
            "scope": 1557,
            "src": "927:357:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1499,
              "nodeType": "Block",
              "src": "1345:312:10",
              "statements": [
                {
                  "assignments": [
                    1479,
                    1481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1479,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1499,
                      "src": "1356:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1478,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1356:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1481,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1499,
                      "src": "1370:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1480,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1370:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1489,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "746f74616c537570706c792829",
                            "id": 1486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1443:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932",
                              "typeString": "literal_string \"totalSupply()\""
                            },
                            "value": "totalSupply()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932",
                              "typeString": "literal_string \"totalSupply()\""
                            }
                          ],
                          "expression": {
                            "id": 1484,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1419:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1419:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1419:40:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1482,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "1397:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1397:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1397:63:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1355:105:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1479:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1511:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1540:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1552:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1536:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1536:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1559:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1559:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1529:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1529:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1529:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1499:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1508:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1496:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1496:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "1493:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1481,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1540:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1479,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1499:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1490,
                  "nodeType": "InlineAssembly",
                  "src": "1470:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1493,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1481,
                        "src": "1628:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1641:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1494,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1641:7:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1496,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1640:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 1491,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "1617:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "1617:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1617:33:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1477,
                  "id": 1498,
                  "nodeType": "Return",
                  "src": "1610:40:10"
                }
              ]
            },
            "id": 1500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1310:2:10"
            },
            "returnParameters": {
              "id": 1477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1476,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1500,
                  "src": "1336:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1475,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1336:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1335:9:10"
            },
            "scope": 1557,
            "src": "1290:367:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1529,
              "nodeType": "Block",
              "src": "1731:326:10",
              "statements": [
                {
                  "assignments": [
                    1508,
                    1510
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1508,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1529,
                      "src": "1742:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1507,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1742:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1510,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1529,
                      "src": "1756:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1509,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1756:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1519,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "62616c616e63654f66286164647265737329",
                            "id": 1515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1829:20:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be",
                              "typeString": "literal_string \"balanceOf(address)\""
                            },
                            "value": "balanceOf(address)"
                          },
                          {
                            "id": 1516,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1502,
                            "src": "1851:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be",
                              "typeString": "literal_string \"balanceOf(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 1513,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1805:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1805:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1517,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1805:54:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1511,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "1783:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1783:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1783:77:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1741:119:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1879:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1911:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1940:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1952:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1936:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1936:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1959:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1959:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1929:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1929:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1929:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1899:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1908:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1896:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1896:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "1893:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1510,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1940:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1508,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1899:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1520,
                  "nodeType": "InlineAssembly",
                  "src": "1870:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1523,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1510,
                        "src": "2028:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2041:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1524,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2041:7:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1526,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2040:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 1521,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "2017:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1522,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "2017:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2017:33:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1506,
                  "id": 1528,
                  "nodeType": "Return",
                  "src": "2010:40:10"
                }
              ]
            },
            "id": 1530,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1503,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1502,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1530,
                  "src": "1682:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1501,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1682:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1681:17:10"
            },
            "returnParameters": {
              "id": 1506,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1505,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1530,
                  "src": "1722:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1504,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1722:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1721:9:10"
            },
            "scope": 1557,
            "src": "1663:394:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1555,
              "nodeType": "Block",
              "src": "2141:302:10",
              "statements": [
                {
                  "assignments": [
                    1540,
                    1542
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1540,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1555,
                      "src": "2152:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1539,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2152:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1542,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1555,
                      "src": "2166:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1541,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2166:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1553,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "7472616e7366657228616464726573732c616464726573732c75696e7432353629",
                            "id": 1547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2233:35:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_beabacc8ffedac16e9a60acdb2ca743d80c2ebb44977a93fa8e483c74d2b35a8",
                              "typeString": "literal_string \"transfer(address,address,uint256)\""
                            },
                            "value": "transfer(address,address,uint256)"
                          },
                          {
                            "id": 1548,
                            "name": "sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1532,
                            "src": "2270:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1549,
                            "name": "recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1534,
                            "src": "2278:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1550,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1536,
                            "src": "2289:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_beabacc8ffedac16e9a60acdb2ca743d80c2ebb44977a93fa8e483c74d2b35a8",
                              "typeString": "literal_string \"transfer(address,address,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1545,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2209:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "2209:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2209:87:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1543,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "2193:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "2193:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 1552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2193:104:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2151:146:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2316:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2348:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "2377:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2389:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2373:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2373:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "2396:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2396:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2366:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2366:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2366:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "2336:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2345:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "2333:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2333:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "2330:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1542,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2377:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1540,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2336:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1554,
                  "nodeType": "InlineAssembly",
                  "src": "2307:130:10"
                }
              ]
            },
            "id": 1556,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1532,
                  "mutability": "mutable",
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1556,
                  "src": "2081:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1531,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2081:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1534,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1556,
                  "src": "2097:17:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1536,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1556,
                  "src": "2116:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1535,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2080:51:10"
            },
            "returnParameters": {
              "id": 1538,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2141:0:10"
            },
            "scope": 1557,
            "src": "2063:380:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1558,
        "src": "71:2374:10"
      }
    ],
    "src": "46:2400:10"
  },
  "legacyAST": {
    "absolutePath": "/home/runner/work/predeploy-contracts/predeploy-contracts/contracts/token/MultiCurrency.sol",
    "exportedSymbols": {
      "MultiCurrency": [
        1557
      ]
    },
    "id": 1558,
    "license": "GPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1386,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:10"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "id": 1557,
        "linearizedBaseContracts": [
          1557
        ],
        "name": "MultiCurrency",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 1392,
            "mutability": "constant",
            "name": "precompile",
            "nodeType": "VariableDeclaration",
            "scope": 1557,
            "src": "99:89:10",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 1387,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "99:7:10",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307830303030303030303030303030303030303030303030303030303030303030303030303030343030",
                  "id": 1390,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "145:42:10",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x0000000000000000000000000000000000000400"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 1389,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "137:7:10",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_address_$",
                  "typeString": "type(address)"
                },
                "typeName": {
                  "id": 1388,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "137:7:10",
                  "typeDescriptions": {}
                }
              },
              "id": 1391,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "137:51:10",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 1418,
              "nodeType": "Block",
              "src": "249:304:10",
              "statements": [
                {
                  "assignments": [
                    1398,
                    1400
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1398,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1418,
                      "src": "260:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1397,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "260:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1400,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1418,
                      "src": "274:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1399,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "274:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1408,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "6e616d652829",
                            "id": 1405,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "347:8:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796",
                              "typeString": "literal_string \"name()\""
                            },
                            "value": "name()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796",
                              "typeString": "literal_string \"name()\""
                            }
                          ],
                          "expression": {
                            "id": 1403,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "323:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1404,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "323:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1406,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "323:33:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1401,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "301:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1402,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "301:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "301:56:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "259:98:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "376:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "408:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "437:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "449:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "433:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "433:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "456:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "456:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "426:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "426:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "426:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "396:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "405:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "393:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "393:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "390:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1400,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "437:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1398,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "396:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1409,
                  "nodeType": "InlineAssembly",
                  "src": "367:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1412,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1400,
                        "src": "525:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1414,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "538:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1413,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "538:6:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1415,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "537:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      ],
                      "expression": {
                        "id": 1410,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "514:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1411,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "514:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "514:32:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1396,
                  "id": 1417,
                  "nodeType": "Return",
                  "src": "507:39:10"
                }
              ]
            },
            "id": 1419,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1393,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "208:2:10"
            },
            "returnParameters": {
              "id": 1396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1395,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1419,
                  "src": "234:13:10",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1394,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "234:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "233:15:10"
            },
            "scope": 1557,
            "src": "195:358:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1445,
              "nodeType": "Block",
              "src": "615:306:10",
              "statements": [
                {
                  "assignments": [
                    1425,
                    1427
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1425,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1445,
                      "src": "626:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1424,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "626:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1427,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1445,
                      "src": "640:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1426,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "640:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1435,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "73796d626f6c2829",
                            "id": 1432,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "713:10:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec",
                              "typeString": "literal_string \"symbol()\""
                            },
                            "value": "symbol()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec",
                              "typeString": "literal_string \"symbol()\""
                            }
                          ],
                          "expression": {
                            "id": 1430,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "689:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "689:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1433,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "689:35:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1428,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "667:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "667:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "667:58:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "625:100:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "744:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "776:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "805:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "817:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "801:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "801:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "824:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "824:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "794:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "794:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "794:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "764:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "773:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "761:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "761:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "758:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1427,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "805:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1425,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "764:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1436,
                  "nodeType": "InlineAssembly",
                  "src": "735:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1439,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1427,
                        "src": "893:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1441,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "906:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 1440,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "906:6:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1442,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "905:8:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        }
                      ],
                      "expression": {
                        "id": 1437,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "882:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1438,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "882:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "882:32:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1423,
                  "id": 1444,
                  "nodeType": "Return",
                  "src": "875:39:10"
                }
              ]
            },
            "id": 1446,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "574:2:10"
            },
            "returnParameters": {
              "id": 1423,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1422,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1446,
                  "src": "600:13:10",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1421,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "599:15:10"
            },
            "scope": 1557,
            "src": "559:362:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1472,
              "nodeType": "Block",
              "src": "977:307:10",
              "statements": [
                {
                  "assignments": [
                    1452,
                    1454
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1452,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1472,
                      "src": "988:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1451,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "988:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1454,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1472,
                      "src": "1002:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1453,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1002:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1462,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "646563696d616c732829",
                            "id": 1459,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1075:12:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9",
                              "typeString": "literal_string \"decimals()\""
                            },
                            "value": "decimals()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9",
                              "typeString": "literal_string \"decimals()\""
                            }
                          ],
                          "expression": {
                            "id": 1457,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1051:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1458,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1051:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1460,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1051:37:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1455,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "1029:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1456,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1029:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1461,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1029:60:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "987:102:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1108:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1140:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1169:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1181:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1165:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1165:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1188:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1188:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1158:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1158:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1158:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1128:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1137:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1125:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1125:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "1122:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1454,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1169:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1452,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1128:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1463,
                  "nodeType": "InlineAssembly",
                  "src": "1099:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1466,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1454,
                        "src": "1257:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1468,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1270:5:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": {
                              "id": 1467,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "1270:5:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1469,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1269:7:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        }
                      ],
                      "expression": {
                        "id": 1464,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "1246:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "1246:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1470,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1246:31:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 1450,
                  "id": 1471,
                  "nodeType": "Return",
                  "src": "1239:38:10"
                }
              ]
            },
            "id": 1473,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1447,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "944:2:10"
            },
            "returnParameters": {
              "id": 1450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1449,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1473,
                  "src": "970:5:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 1448,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:5:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "969:7:10"
            },
            "scope": 1557,
            "src": "927:357:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1499,
              "nodeType": "Block",
              "src": "1345:312:10",
              "statements": [
                {
                  "assignments": [
                    1479,
                    1481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1479,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1499,
                      "src": "1356:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1478,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1356:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1481,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1499,
                      "src": "1370:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1480,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1370:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1489,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "746f74616c537570706c792829",
                            "id": 1486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1443:15:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932",
                              "typeString": "literal_string \"totalSupply()\""
                            },
                            "value": "totalSupply()"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932",
                              "typeString": "literal_string \"totalSupply()\""
                            }
                          ],
                          "expression": {
                            "id": 1484,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1419:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1485,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1419:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1487,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1419:40:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1482,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "1397:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1483,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1397:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1397:63:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1355:105:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1479:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1511:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1540:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1552:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1536:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1536:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1559:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1559:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1529:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1529:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1529:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1499:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1508:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1496:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1496:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "1493:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1481,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1540:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1479,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1499:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1490,
                  "nodeType": "InlineAssembly",
                  "src": "1470:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1493,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1481,
                        "src": "1628:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1495,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "1641:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1494,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "1641:7:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1496,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "1640:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 1491,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "1617:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "1617:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1617:33:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1477,
                  "id": 1498,
                  "nodeType": "Return",
                  "src": "1610:40:10"
                }
              ]
            },
            "id": 1500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1474,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1310:2:10"
            },
            "returnParameters": {
              "id": 1477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1476,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1500,
                  "src": "1336:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1475,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1336:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1335:9:10"
            },
            "scope": 1557,
            "src": "1290:367:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1529,
              "nodeType": "Block",
              "src": "1731:326:10",
              "statements": [
                {
                  "assignments": [
                    1508,
                    1510
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1508,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1529,
                      "src": "1742:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1507,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "1742:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1510,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1529,
                      "src": "1756:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1509,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "1756:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1519,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "62616c616e63654f66286164647265737329",
                            "id": 1515,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "1829:20:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be",
                              "typeString": "literal_string \"balanceOf(address)\""
                            },
                            "value": "balanceOf(address)"
                          },
                          {
                            "id": 1516,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1502,
                            "src": "1851:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be",
                              "typeString": "literal_string \"balanceOf(address)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 1513,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "1805:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "1805:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1517,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1805:54:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1511,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "1783:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "staticcall",
                      "nodeType": "MemberAccess",
                      "src": "1783:21:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) view returns (bool,bytes memory)"
                      }
                    },
                    "id": 1518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1783:77:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1741:119:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1879:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "1911:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "1940:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "1952:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "1936:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1936:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "1959:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "1959:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "1929:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1929:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "1929:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "1899:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1908:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "1896:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1896:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "1893:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1510,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1940:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1508,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1899:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1520,
                  "nodeType": "InlineAssembly",
                  "src": "1870:130:10"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1523,
                        "name": "returnData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1510,
                        "src": "2028:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 1525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2041:7:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1524,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2041:7:10",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 1526,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2040:9:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_uint256_$",
                          "typeString": "type(uint256)"
                        }
                      ],
                      "expression": {
                        "id": 1521,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "2017:3:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 1522,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "2017:10:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 1527,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2017:33:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1506,
                  "id": 1528,
                  "nodeType": "Return",
                  "src": "2010:40:10"
                }
              ]
            },
            "id": 1530,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1503,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1502,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "scope": 1530,
                  "src": "1682:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1501,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1682:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1681:17:10"
            },
            "returnParameters": {
              "id": 1506,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1505,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1530,
                  "src": "1722:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1504,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1722:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1721:9:10"
            },
            "scope": 1557,
            "src": "1663:394:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1555,
              "nodeType": "Block",
              "src": "2141:302:10",
              "statements": [
                {
                  "assignments": [
                    1540,
                    1542
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1540,
                      "mutability": "mutable",
                      "name": "success",
                      "nodeType": "VariableDeclaration",
                      "scope": 1555,
                      "src": "2152:12:10",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1539,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "2152:4:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 1542,
                      "mutability": "mutable",
                      "name": "returnData",
                      "nodeType": "VariableDeclaration",
                      "scope": 1555,
                      "src": "2166:23:10",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1541,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "2166:5:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1553,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "7472616e7366657228616464726573732c616464726573732c75696e7432353629",
                            "id": 1547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2233:35:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_beabacc8ffedac16e9a60acdb2ca743d80c2ebb44977a93fa8e483c74d2b35a8",
                              "typeString": "literal_string \"transfer(address,address,uint256)\""
                            },
                            "value": "transfer(address,address,uint256)"
                          },
                          {
                            "id": 1548,
                            "name": "sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1532,
                            "src": "2270:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1549,
                            "name": "recipient",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1534,
                            "src": "2278:9:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1550,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1536,
                            "src": "2289:6:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_beabacc8ffedac16e9a60acdb2ca743d80c2ebb44977a93fa8e483c74d2b35a8",
                              "typeString": "literal_string \"transfer(address,address,uint256)\""
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 1545,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "2209:3:10",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1546,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSignature",
                          "nodeType": "MemberAccess",
                          "src": "2209:23:10",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (string memory) pure returns (bytes memory)"
                          }
                        },
                        "id": 1551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2209:87:10",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1543,
                        "name": "precompile",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1392,
                        "src": "2193:10:10",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 1544,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "call",
                      "nodeType": "MemberAccess",
                      "src": "2193:15:10",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 1552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2193:104:10",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2151:146:10"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2316:121:10",
                    "statements": [
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "2348:79:10",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "returnData",
                                        "nodeType": "YulIdentifier",
                                        "src": "2377:10:10"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "2389:4:10",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "2373:3:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2373:21:10"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "2396:14:10"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2396:16:10"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nodeType": "YulIdentifier",
                                  "src": "2366:6:10"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2366:47:10"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2366:47:10"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "success",
                              "nodeType": "YulIdentifier",
                              "src": "2336:7:10"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2345:1:10",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "2333:2:10"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2333:14:10"
                        },
                        "nodeType": "YulIf",
                        "src": "2330:2:10"
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 1542,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2377:10:10",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1540,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2336:7:10",
                      "valueSize": 1
                    }
                  ],
                  "id": 1554,
                  "nodeType": "InlineAssembly",
                  "src": "2307:130:10"
                }
              ]
            },
            "id": 1556,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1532,
                  "mutability": "mutable",
                  "name": "sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 1556,
                  "src": "2081:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1531,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2081:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1534,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 1556,
                  "src": "2097:17:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2097:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1536,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1556,
                  "src": "2116:14:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1535,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2080:51:10"
            },
            "returnParameters": {
              "id": 1538,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2141:0:10"
            },
            "scope": 1557,
            "src": "2063:380:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1558,
        "src": "71:2374:10"
      }
    ],
    "src": "46:2400:10"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.0+commit.c7dfd78e.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.1",
  "updatedAt": "2021-11-23T02:17:24.111Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}