{
    "contractName": "ERC20",
    "abi": [
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "symbol_",
                    "type": "string"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "recipient",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "metadata": "{\"compiler\":{\"version\":\"0.7.3+commit.9bfce1f6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"constructor\":{\"details\":\"Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":\"ERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://248246ac66e6479dce1ad7d4945ec5540c98ceb09881e93c93f7c48d5772925c\",\"dweb:/ipfs/QmXr8tmUiZgEYid6ixeeBRmTdUnASWjKzhP3KRxMPy8fRt\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xba96bc371ba999f452985a98717cca1e4c4abb598dc038a9a9c3db08129b1ba4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://26e50e3f7b6482fb6f598f2e006994a74aa492687daa4b3eee7fd4fb5398ce7f\",\"dweb:/ipfs/QmZudqoPSkA4USLMFsBBmt19dDPZFS8aaAmL5R7pECXu6t\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x482b6d82ba1c9c73758ae15068a438361d4187b7a4e342db17ef0f828cb5e21a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89725e56bc9c6cfb69521ceaa4a489561b928e930b71e30db85b24024c1c2c03\",\"dweb:/ipfs/QmNvpotZA1Fe48msV6TShSTVxeQ2dkaDS9MTKP4bNxyUG3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xbd74f587ab9b9711801baf667db1426e4a03fd2d7f15af33e0e0d0394e7cef76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2d0913dfbfce90d170df0d496ad7596c0778518e5fa7aba6c32562522546f66b\",\"dweb:/ipfs/QmR6B8nLj2PJf5e1JWD9Nk7ErkAwkqUwadCnvE82FJr1RU\"]}},\"version\":1}",
    "bytecode": "0x60806040523480156200001157600080fd5b50604051620013a5380380620013a5833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040525050508160039080519060200190620001cd9291906200020b565b508060049080519060200190620001e69291906200020b565b506012600560006101000a81548160ff021916908360ff1602179055505050620002b1565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200024e57805160ff19168380011785556200027f565b828001600101855582156200027f579182015b828111156200027e57825182559160200191906001019062000261565b5b5090506200028e919062000292565b5090565b5b80821115620002ad57600081600090555060010162000293565b5090565b6110e480620002c16000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461025857806370a08231146102bc57806395d89b4114610314578063a457c2d714610397578063a9059cbb146103fb578063dd62ed3e1461045f576100a9565b806306fdde03146100ae578063095ea7b31461013157806318160ddd1461019557806323b872dd146101b3578063313ce56714610237575b600080fd5b6100b66104d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f65780820151818401526020810190506100db565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561014757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610579565b60405180821515815260200191505060405180910390f35b61019d610597565b6040518082815260200191505060405180910390f35b61021f600480360360608110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105a1565b60405180821515815260200191505060405180910390f35b61023f61067a565b604051808260ff16815260200191505060405180910390f35b6102a46004803603604081101561026e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610691565b60405180821515815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610744565b6040518082815260200191505060405180910390f35b61031c61078c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061082e565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108fb565b60405180821515815260200191505060405180910390f35b6104c16004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610919565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058d6105866109a0565b84846109a8565b6001905092915050565b6000600254905090565b60006105ae848484610b9f565b61066f846105ba6109a0565b61066a8560405180606001604052806028815260200161101960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106206109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061073a61069e6109a0565b8461073585600160006106af6109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2090919063ffffffff16565b6109a8565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108f161083b6109a0565b846108ec8560405180606001604052806025815260200161108a60259139600160006108656109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b6001905092915050565b600061090f6109086109a0565b8484610b9f565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110666024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610fd16022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806110416025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610fae6023913960400191505060405180910390fd5b610cb6838383610fa8565b610d2181604051806060016040528060268152602001610ff3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ed2578082015181840152602081019050610eb7565b50505050905090810190601f168015610eff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015610f9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220878f53a01fce2944f31c5c940d9ab317185802319e9121966f7a29b3f2db365864736f6c63430007030033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80633950935111610071578063395093511461025857806370a08231146102bc57806395d89b4114610314578063a457c2d714610397578063a9059cbb146103fb578063dd62ed3e1461045f576100a9565b806306fdde03146100ae578063095ea7b31461013157806318160ddd1461019557806323b872dd146101b3578063313ce56714610237575b600080fd5b6100b66104d7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100f65780820151818401526020810190506100db565b50505050905090810190601f1680156101235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61017d6004803603604081101561014757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610579565b60405180821515815260200191505060405180910390f35b61019d610597565b6040518082815260200191505060405180910390f35b61021f600480360360608110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506105a1565b60405180821515815260200191505060405180910390f35b61023f61067a565b604051808260ff16815260200191505060405180910390f35b6102a46004803603604081101561026e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610691565b60405180821515815260200191505060405180910390f35b6102fe600480360360208110156102d257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610744565b6040518082815260200191505060405180910390f35b61031c61078c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561035c578082015181840152602081019050610341565b50505050905090810190601f1680156103895780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103e3600480360360408110156103ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061082e565b60405180821515815260200191505060405180910390f35b6104476004803603604081101561041157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506108fb565b60405180821515815260200191505060405180910390f35b6104c16004803603604081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610919565b6040518082815260200191505060405180910390f35b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561056f5780601f106105445761010080835404028352916020019161056f565b820191906000526020600020905b81548152906001019060200180831161055257829003601f168201915b5050505050905090565b600061058d6105866109a0565b84846109a8565b6001905092915050565b6000600254905090565b60006105ae848484610b9f565b61066f846105ba6109a0565b61066a8560405180606001604052806028815260200161101960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106206109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b600190509392505050565b6000600560009054906101000a900460ff16905090565b600061073a61069e6109a0565b8461073585600160006106af6109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2090919063ffffffff16565b6109a8565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b60006108f161083b6109a0565b846108ec8560405180606001604052806025815260200161108a60259139600160006108656109a0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6109a8565b6001905092915050565b600061090f6109086109a0565b8484610b9f565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806110666024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610fd16022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806110416025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610fae6023913960400191505060405180910390fd5b610cb6838383610fa8565b610d2181604051806060016040528060268152602001610ff3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e609092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610db4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290610f0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ed2578082015181840152602081019050610eb7565b50505050905090810190601f168015610eff5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015610f9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220878f53a01fce2944f31c5c940d9ab317185802319e9121966f7a29b3f2db365864736f6c63430007030033",
    "immutableReferences": {},
    "generatedSources": [],
    "deployedGeneratedSources": [],
    "sourceMap": "1311:9419:41:-:0;;;1948:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2023:5;2015;:13;;;;;;;;;;;;:::i;:::-;;2048:7;2038;:17;;;;;;;;;;;;:::i;:::-;;2077:2;2065:9;;:14;;;;;;;;;;;;;;;;;;1948:138;;1311:9419;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
    "deployedSourceMap": "1311:9419:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4187:166;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3194:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4820:317;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3053:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5532:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3350:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2345:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6234:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3670:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3900:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2151:81;2188:13;2220:5;2213:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:81;:::o;4187:166::-;4270:4;4286:39;4295:12;:10;:12::i;:::-;4309:7;4318:6;4286:8;:39::i;:::-;4342:4;4335:11;;4187:166;;;;:::o;3194:98::-;3247:7;3273:12;;3266:19;;3194:98;:::o;4820:317::-;4926:4;4942:36;4952:6;4960:9;4971:6;4942:9;:36::i;:::-;4988:121;4997:6;5005:12;:10;:12::i;:::-;5019:89;5057:6;5019:89;;;;;;;;;;;;;;;;;:11;:19;5031:6;5019:19;;;;;;;;;;;;;;;:33;5039:12;:10;:12::i;:::-;5019:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;4988:8;:121::i;:::-;5126:4;5119:11;;4820:317;;;;;:::o;3053:81::-;3094:5;3118:9;;;;;;;;;;;3111:16;;3053:81;:::o;5532:215::-;5620:4;5636:83;5645:12;:10;:12::i;:::-;5659:7;5668:50;5707:10;5668:11;:25;5680:12;:10;:12::i;:::-;5668:25;;;;;;;;;;;;;;;:34;5694:7;5668:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;5636:8;:83::i;:::-;5736:4;5729:11;;5532:215;;;;:::o;3350:117::-;3416:7;3442:9;:18;3452:7;3442:18;;;;;;;;;;;;;;;;3435:25;;3350:117;;;:::o;2345:85::-;2384:13;2416:7;2409:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:85;:::o;6234:266::-;6327:4;6343:129;6352:12;:10;:12::i;:::-;6366:7;6375:96;6414:15;6375:96;;;;;;;;;;;;;;;;;:11;:25;6387:12;:10;:12::i;:::-;6375:25;;;;;;;;;;;;;;;:34;6401:7;6375:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6343:8;:129::i;:::-;6489:4;6482:11;;6234:266;;;;:::o;3670:172::-;3756:4;3772:42;3782:12;:10;:12::i;:::-;3796:9;3807:6;3772:9;:42::i;:::-;3831:4;3824:11;;3670:172;;;;:::o;3900:149::-;3989:7;4015:11;:18;4027:5;4015:18;;;;;;;;;;;;;;;:27;4034:7;4015:27;;;;;;;;;;;;;;;;4008:34;;3900:149;;;;:::o;590:104:38:-;643:15;677:10;670:17;;590:104;:::o;9298:340:41:-;9416:1;9399:19;;:5;:19;;;;9391:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9496:1;9477:21;;:7;:21;;;;9469:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9578:6;9548:11;:18;9560:5;9548:18;;;;;;;;;;;;;;;:27;9567:7;9548:27;;;;;;;;;;;;;;;:36;;;;9615:7;9599:32;;9608:5;9599:32;;;9624:6;9599:32;;;;;;;;;;;;;;;;;;9298:340;;;:::o;6974:530::-;7097:1;7079:20;;:6;:20;;;;7071:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7180:1;7159:23;;:9;:23;;;;7151:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7233:47;7254:6;7262:9;7273:6;7233:20;:47::i;:::-;7311:71;7333:6;7311:71;;;;;;;;;;;;;;;;;:9;:17;7321:6;7311:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7291:9;:17;7301:6;7291:17;;;;;;;;;;;;;;;:91;;;;7415:32;7440:6;7415:9;:20;7425:9;7415:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7392:9;:20;7402:9;7392:20;;;;;;;;;;;;;;;:55;;;;7479:9;7462:35;;7471:6;7462:35;;;7490:6;7462:35;;;;;;;;;;;;;;;;;;6974:530;;;:::o;1746:187:40:-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;874:176::-;932:7;951:9;967:1;963;:5;951:17;;991:1;986;:6;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;1035:8;;;874:176;;;;:::o;10636:92:41:-;;;;:::o",
    "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"../../GSN/Context.sol\";\nimport \"./IERC20.sol\";\nimport \"../../math/SafeMath.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20 {\n    using SafeMath for uint256;\n\n    mapping (address => uint256) private _balances;\n\n    mapping (address => mapping (address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n    uint8 private _decimals;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n     * a default value of 18.\n     *\n     * To select a different value for {decimals}, use {_setupDecimals}.\n     *\n     * All three of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor (string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n        _decimals = 18;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n     * called.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view returns (uint8) {\n        return _decimals;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `recipient` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * Requirements:\n     *\n     * - `sender` and `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``sender``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n        _transfer(sender, recipient, amount);\n        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n        return true;\n    }\n\n    /**\n     * @dev Moves tokens `amount` from `sender` to `recipient`.\n     *\n     * This is internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * Requirements:\n     *\n     * - `sender` cannot be the zero address.\n     * - `recipient` cannot be the zero address.\n     * - `sender` must have a balance of at least `amount`.\n     */\n    function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n        _balances[recipient] = _balances[recipient].add(amount);\n        emit Transfer(sender, recipient, amount);\n    }\n\n    /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n     * the total supply.\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     */\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply = _totalSupply.add(amount);\n        _balances[account] = _balances[account].add(amount);\n        emit Transfer(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, reducing the\n     * total supply.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * Requirements:\n     *\n     * - `account` cannot be the zero address.\n     * - `account` must have at least `amount` tokens.\n     */\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n        _totalSupply = _totalSupply.sub(amount);\n        emit Transfer(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Sets {decimals} to a value other than the default one of 18.\n     *\n     * WARNING: This function should only be called from the constructor. Most\n     * applications that interact with token contracts will not expect\n     * {decimals} to ever change, and may work incorrectly if it does.\n     */\n    function _setupDecimals(uint8 decimals_) internal {\n        _decimals = decimals_;\n    }\n\n    /**\n     * @dev Hook that is called before any transfer of tokens. This includes\n     * minting and burning.\n     *\n     * Calling conditions:\n     *\n     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n     * will be to transferred to `to`.\n     * - when `from` is zero, `amount` tokens will be minted for `to`.\n     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n     * - `from` and `to` are never both zero.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n}\n",
    "sourcePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
    "ast": {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
        "exportedSymbols": {
            "Context": [
                5279
            ],
            "ERC20": [
                6087
            ],
            "IERC20": [
                6165
            ],
            "SafeMath": [
                5584
            ]
        },
        "id": 6088,
        "license": "MIT",
        "nodeType": "SourceUnit",
        "nodes": [
            {
                "id": 5586,
                "literals": [
                    "solidity",
                    "^",
                    "0.7",
                    ".0"
                ],
                "nodeType": "PragmaDirective",
                "src": "33:23:41"
            },
            {
                "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
                "file": "../../GSN/Context.sol",
                "id": 5587,
                "nodeType": "ImportDirective",
                "scope": 6088,
                "sourceUnit": 5280,
                "src": "58:31:41",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                "file": "./IERC20.sol",
                "id": 5588,
                "nodeType": "ImportDirective",
                "scope": 6088,
                "sourceUnit": 6166,
                "src": "90:22:41",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                "file": "../../math/SafeMath.sol",
                "id": 5589,
                "nodeType": "ImportDirective",
                "scope": 6088,
                "sourceUnit": 5585,
                "src": "113:33:41",
                "symbolAliases": [],
                "unitAlias": ""
            },
            {
                "abstract": false,
                "baseContracts": [
                    {
                        "baseName": {
                            "id": 5591,
                            "name": "Context",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 5279,
                            "src": "1329:7:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_Context_$5279",
                                "typeString": "contract Context"
                            }
                        },
                        "id": 5592,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1329:7:41"
                    },
                    {
                        "baseName": {
                            "id": 5593,
                            "name": "IERC20",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 6165,
                            "src": "1338:6:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$6165",
                                "typeString": "contract IERC20"
                            }
                        },
                        "id": 5594,
                        "nodeType": "InheritanceSpecifier",
                        "src": "1338:6:41"
                    }
                ],
                "contractDependencies": [
                    5279,
                    6165
                ],
                "contractKind": "contract",
                "documentation": {
                    "id": 5590,
                    "nodeType": "StructuredDocumentation",
                    "src": "148:1162:41",
                    "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
                },
                "fullyImplemented": true,
                "id": 6087,
                "linearizedBaseContracts": [
                    6087,
                    6165,
                    5279
                ],
                "name": "ERC20",
                "nodeType": "ContractDefinition",
                "nodes": [
                    {
                        "id": 5597,
                        "libraryName": {
                            "id": 5595,
                            "name": "SafeMath",
                            "nodeType": "UserDefinedTypeName",
                            "referencedDeclaration": 5584,
                            "src": "1357:8:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_contract$_SafeMath_$5584",
                                "typeString": "library SafeMath"
                            }
                        },
                        "nodeType": "UsingForDirective",
                        "src": "1351:27:41",
                        "typeName": {
                            "id": 5596,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1370:7:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        }
                    },
                    {
                        "constant": false,
                        "id": 5601,
                        "mutability": "mutable",
                        "name": "_balances",
                        "nodeType": "VariableDeclaration",
                        "scope": 6087,
                        "src": "1384:46:41",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                        },
                        "typeName": {
                            "id": 5600,
                            "keyType": {
                                "id": 5598,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1393:7:41",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1384:28:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                            },
                            "valueType": {
                                "id": 5599,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "1404:7:41",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                }
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "id": 5607,
                        "mutability": "mutable",
                        "name": "_allowances",
                        "nodeType": "VariableDeclaration",
                        "scope": 6087,
                        "src": "1437:69:41",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                        },
                        "typeName": {
                            "id": 5606,
                            "keyType": {
                                "id": 5602,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "1446:7:41",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                }
                            },
                            "nodeType": "Mapping",
                            "src": "1437:49:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                            },
                            "valueType": {
                                "id": 5605,
                                "keyType": {
                                    "id": 5603,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1466:7:41",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    }
                                },
                                "nodeType": "Mapping",
                                "src": "1457:28:41",
                                "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                },
                                "valueType": {
                                    "id": 5604,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1477:7:41",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    }
                                }
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "id": 5609,
                        "mutability": "mutable",
                        "name": "_totalSupply",
                        "nodeType": "VariableDeclaration",
                        "scope": 6087,
                        "src": "1513:28:41",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                        },
                        "typeName": {
                            "id": 5608,
                            "name": "uint256",
                            "nodeType": "ElementaryTypeName",
                            "src": "1513:7:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "id": 5611,
                        "mutability": "mutable",
                        "name": "_name",
                        "nodeType": "VariableDeclaration",
                        "scope": 6087,
                        "src": "1548:20:41",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 5610,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "1548:6:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "id": 5613,
                        "mutability": "mutable",
                        "name": "_symbol",
                        "nodeType": "VariableDeclaration",
                        "scope": 6087,
                        "src": "1574:22:41",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_string_storage",
                            "typeString": "string"
                        },
                        "typeName": {
                            "id": 5612,
                            "name": "string",
                            "nodeType": "ElementaryTypeName",
                            "src": "1574:6:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "constant": false,
                        "id": 5615,
                        "mutability": "mutable",
                        "name": "_decimals",
                        "nodeType": "VariableDeclaration",
                        "scope": 6087,
                        "src": "1602:23:41",
                        "stateVariable": true,
                        "storageLocation": "default",
                        "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                        },
                        "typeName": {
                            "id": 5614,
                            "name": "uint8",
                            "nodeType": "ElementaryTypeName",
                            "src": "1602:5:41",
                            "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                            }
                        },
                        "visibility": "private"
                    },
                    {
                        "body": {
                            "id": 5635,
                            "nodeType": "Block",
                            "src": "2005:81:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 5625,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 5623,
                                            "name": "_name",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5611,
                                            "src": "2015:5:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 5624,
                                            "name": "name_",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5618,
                                            "src": "2023:5:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                            }
                                        },
                                        "src": "2015:13:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "id": 5626,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2015:13:41"
                                },
                                {
                                    "expression": {
                                        "id": 5629,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 5627,
                                            "name": "_symbol",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5613,
                                            "src": "2038:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_storage",
                                                "typeString": "string storage ref"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 5628,
                                            "name": "symbol_",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5620,
                                            "src": "2048:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_string_memory_ptr",
                                                "typeString": "string memory"
                                            }
                                        },
                                        "src": "2038:17:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "id": 5630,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2038:17:41"
                                },
                                {
                                    "expression": {
                                        "id": 5633,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 5631,
                                            "name": "_decimals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5615,
                                            "src": "2065:9:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "hexValue": "3138",
                                            "id": 5632,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "2077:2:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_rational_18_by_1",
                                                "typeString": "int_const 18"
                                            },
                                            "value": "18"
                                        },
                                        "src": "2065:14:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "id": 5634,
                                    "nodeType": "ExpressionStatement",
                                    "src": "2065:14:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5616,
                            "nodeType": "StructuredDocumentation",
                            "src": "1632:311:41",
                            "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                        },
                        "id": 5636,
                        "implemented": true,
                        "kind": "constructor",
                        "modifiers": [],
                        "name": "",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5621,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5618,
                                    "mutability": "mutable",
                                    "name": "name_",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5636,
                                    "src": "1961:19:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5617,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1961:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5620,
                                    "mutability": "mutable",
                                    "name": "symbol_",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5636,
                                    "src": "1982:21:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5619,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "1982:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "1960:44:41"
                        },
                        "returnParameters": {
                            "id": 5622,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2005:0:41"
                        },
                        "scope": 6087,
                        "src": "1948:138:41",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 5644,
                            "nodeType": "Block",
                            "src": "2203:29:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 5642,
                                        "name": "_name",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5611,
                                        "src": "2220:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 5641,
                                    "id": 5643,
                                    "nodeType": "Return",
                                    "src": "2213:12:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5637,
                            "nodeType": "StructuredDocumentation",
                            "src": "2092:54:41",
                            "text": " @dev Returns the name of the token."
                        },
                        "functionSelector": "06fdde03",
                        "id": 5645,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "name",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5638,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2164:2:41"
                        },
                        "returnParameters": {
                            "id": 5641,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5640,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5645,
                                    "src": "2188:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5639,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2188:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2187:15:41"
                        },
                        "scope": 6087,
                        "src": "2151:81:41",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 5653,
                            "nodeType": "Block",
                            "src": "2399:31:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 5651,
                                        "name": "_symbol",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5613,
                                        "src": "2416:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage",
                                            "typeString": "string storage ref"
                                        }
                                    },
                                    "functionReturnParameters": 5650,
                                    "id": 5652,
                                    "nodeType": "Return",
                                    "src": "2409:14:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5646,
                            "nodeType": "StructuredDocumentation",
                            "src": "2238:102:41",
                            "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                        },
                        "functionSelector": "95d89b41",
                        "id": 5654,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "symbol",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5647,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "2360:2:41"
                        },
                        "returnParameters": {
                            "id": 5650,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5649,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5654,
                                    "src": "2384:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "memory",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_string_memory_ptr",
                                        "typeString": "string"
                                    },
                                    "typeName": {
                                        "id": 5648,
                                        "name": "string",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "2384:6:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_string_storage_ptr",
                                            "typeString": "string"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "2383:15:41"
                        },
                        "scope": 6087,
                        "src": "2345:85:41",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 5662,
                            "nodeType": "Block",
                            "src": "3101:33:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 5660,
                                        "name": "_decimals",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5615,
                                        "src": "3118:9:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "functionReturnParameters": 5659,
                                    "id": 5661,
                                    "nodeType": "Return",
                                    "src": "3111:16:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5655,
                            "nodeType": "StructuredDocumentation",
                            "src": "2436:612:41",
                            "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                        },
                        "functionSelector": "313ce567",
                        "id": 5663,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "decimals",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5656,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3070:2:41"
                        },
                        "returnParameters": {
                            "id": 5659,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5658,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5663,
                                    "src": "3094:5:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 5657,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3094:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3093:7:41"
                        },
                        "scope": 6087,
                        "src": "3053:81:41",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6096
                        ],
                        "body": {
                            "id": 5672,
                            "nodeType": "Block",
                            "src": "3256:36:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 5670,
                                        "name": "_totalSupply",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5609,
                                        "src": "3273:12:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 5669,
                                    "id": 5671,
                                    "nodeType": "Return",
                                    "src": "3266:19:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5664,
                            "nodeType": "StructuredDocumentation",
                            "src": "3140:49:41",
                            "text": " @dev See {IERC20-totalSupply}."
                        },
                        "functionSelector": "18160ddd",
                        "id": 5673,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "totalSupply",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 5666,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3229:8:41"
                        },
                        "parameters": {
                            "id": 5665,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "3214:2:41"
                        },
                        "returnParameters": {
                            "id": 5669,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5668,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5673,
                                    "src": "3247:7:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5667,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3247:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3246:9:41"
                        },
                        "scope": 6087,
                        "src": "3194:98:41",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6104
                        ],
                        "body": {
                            "id": 5686,
                            "nodeType": "Block",
                            "src": "3425:42:41",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "id": 5682,
                                            "name": "_balances",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5601,
                                            "src": "3442:9:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 5684,
                                        "indexExpression": {
                                            "id": 5683,
                                            "name": "account",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5676,
                                            "src": "3452:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3442:18:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 5681,
                                    "id": 5685,
                                    "nodeType": "Return",
                                    "src": "3435:25:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5674,
                            "nodeType": "StructuredDocumentation",
                            "src": "3298:47:41",
                            "text": " @dev See {IERC20-balanceOf}."
                        },
                        "functionSelector": "70a08231",
                        "id": 5687,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "balanceOf",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 5678,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3398:8:41"
                        },
                        "parameters": {
                            "id": 5677,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5676,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5687,
                                    "src": "3369:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5675,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3369:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3368:17:41"
                        },
                        "returnParameters": {
                            "id": 5681,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5680,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5687,
                                    "src": "3416:7:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5679,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3416:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3415:9:41"
                        },
                        "scope": 6087,
                        "src": "3350:117:41",
                        "stateMutability": "view",
                        "virtual": false,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6114
                        ],
                        "body": {
                            "id": 5707,
                            "nodeType": "Block",
                            "src": "3762:80:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 5699,
                                                    "name": "_msgSender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5267,
                                                    "src": "3782:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                        "typeString": "function () view returns (address payable)"
                                                    }
                                                },
                                                "id": 5700,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "3782:12:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5701,
                                                "name": "recipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5690,
                                                "src": "3796:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5702,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5692,
                                                "src": "3807:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5698,
                                            "name": "_transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5908,
                                            "src": "3772:9:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5703,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "3772:42:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5704,
                                    "nodeType": "ExpressionStatement",
                                    "src": "3772:42:41"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 5705,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "3831:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 5697,
                                    "id": 5706,
                                    "nodeType": "Return",
                                    "src": "3824:11:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5688,
                            "nodeType": "StructuredDocumentation",
                            "src": "3473:192:41",
                            "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                        },
                        "functionSelector": "a9059cbb",
                        "id": 5708,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transfer",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 5694,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3738:8:41"
                        },
                        "parameters": {
                            "id": 5693,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5690,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5708,
                                    "src": "3688:17:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5689,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3688:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5692,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5708,
                                    "src": "3707:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5691,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3707:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3687:35:41"
                        },
                        "returnParameters": {
                            "id": 5697,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5696,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5708,
                                    "src": "3756:4:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5695,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3756:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3755:6:41"
                        },
                        "scope": 6087,
                        "src": "3670:172:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6124
                        ],
                        "body": {
                            "id": 5725,
                            "nodeType": "Block",
                            "src": "3998:51:41",
                            "statements": [
                                {
                                    "expression": {
                                        "baseExpression": {
                                            "baseExpression": {
                                                "id": 5719,
                                                "name": "_allowances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5607,
                                                "src": "4015:11:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                }
                                            },
                                            "id": 5721,
                                            "indexExpression": {
                                                "id": 5720,
                                                "name": "owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5711,
                                                "src": "4027:5:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "4015:18:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                "typeString": "mapping(address => uint256)"
                                            }
                                        },
                                        "id": 5723,
                                        "indexExpression": {
                                            "id": 5722,
                                            "name": "spender",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5713,
                                            "src": "4034:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_address",
                                                "typeString": "address"
                                            }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "4015:27:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "functionReturnParameters": 5718,
                                    "id": 5724,
                                    "nodeType": "Return",
                                    "src": "4008:34:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5709,
                            "nodeType": "StructuredDocumentation",
                            "src": "3848:47:41",
                            "text": " @dev See {IERC20-allowance}."
                        },
                        "functionSelector": "dd62ed3e",
                        "id": 5726,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "allowance",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 5715,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "3971:8:41"
                        },
                        "parameters": {
                            "id": 5714,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5711,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5726,
                                    "src": "3919:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5710,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3919:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5713,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5726,
                                    "src": "3934:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5712,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3934:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3918:32:41"
                        },
                        "returnParameters": {
                            "id": 5718,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5717,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5726,
                                    "src": "3989:7:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5716,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "3989:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "3988:9:41"
                        },
                        "scope": 6087,
                        "src": "3900:149:41",
                        "stateMutability": "view",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6134
                        ],
                        "body": {
                            "id": 5746,
                            "nodeType": "Block",
                            "src": "4276:77:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 5738,
                                                    "name": "_msgSender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5267,
                                                    "src": "4295:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                        "typeString": "function () view returns (address payable)"
                                                    }
                                                },
                                                "id": 5739,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "4295:12:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5740,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5729,
                                                "src": "4309:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5741,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5731,
                                                "src": "4318:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5737,
                                            "name": "_approve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6064,
                                            "src": "4286:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5742,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4286:39:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5743,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4286:39:41"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 5744,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "4342:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 5736,
                                    "id": 5745,
                                    "nodeType": "Return",
                                    "src": "4335:11:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5727,
                            "nodeType": "StructuredDocumentation",
                            "src": "4055:127:41",
                            "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                        },
                        "functionSelector": "095ea7b3",
                        "id": 5747,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "approve",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 5733,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4252:8:41"
                        },
                        "parameters": {
                            "id": 5732,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5729,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5747,
                                    "src": "4204:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5728,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4204:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5731,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5747,
                                    "src": "4221:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5730,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4221:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4203:33:41"
                        },
                        "returnParameters": {
                            "id": 5736,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5735,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5747,
                                    "src": "4270:4:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5734,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4270:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4269:6:41"
                        },
                        "scope": 6087,
                        "src": "4187:166:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "baseFunctions": [
                            6146
                        ],
                        "body": {
                            "id": 5784,
                            "nodeType": "Block",
                            "src": "4932:205:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 5761,
                                                "name": "sender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5750,
                                                "src": "4952:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5762,
                                                "name": "recipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5752,
                                                "src": "4960:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5763,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5754,
                                                "src": "4971:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5760,
                                            "name": "_transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5908,
                                            "src": "4942:9:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5764,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4942:36:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5765,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4942:36:41"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 5767,
                                                "name": "sender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5750,
                                                "src": "4997:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 5768,
                                                    "name": "_msgSender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5267,
                                                    "src": "5005:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                        "typeString": "function () view returns (address payable)"
                                                    }
                                                },
                                                "id": 5769,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5005:12:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 5777,
                                                        "name": "amount",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5754,
                                                        "src": "5057:6:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                                        "id": 5778,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "5065:42:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                                            "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                                        },
                                                        "value": "ERC20: transfer amount exceeds allowance"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                                            "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "baseExpression": {
                                                            "baseExpression": {
                                                                "id": 5770,
                                                                "name": "_allowances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5607,
                                                                "src": "5019:11:41",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                                }
                                                            },
                                                            "id": 5772,
                                                            "indexExpression": {
                                                                "id": 5771,
                                                                "name": "sender",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5750,
                                                                "src": "5031:6:41",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "5019:19:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 5775,
                                                        "indexExpression": {
                                                            "arguments": [],
                                                            "expression": {
                                                                "argumentTypes": [],
                                                                "id": 5773,
                                                                "name": "_msgSender",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5267,
                                                                "src": "5039:10:41",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                                    "typeString": "function () view returns (address payable)"
                                                                }
                                                            },
                                                            "id": 5774,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "5039:12:41",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address_payable",
                                                                "typeString": "address payable"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "5019:33:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 5776,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sub",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5462,
                                                    "src": "5019:37:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 5779,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5019:89:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5766,
                                            "name": "_approve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6064,
                                            "src": "4988:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5780,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "4988:121:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5781,
                                    "nodeType": "ExpressionStatement",
                                    "src": "4988:121:41"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 5782,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5126:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 5759,
                                    "id": 5783,
                                    "nodeType": "Return",
                                    "src": "5119:11:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5748,
                            "nodeType": "StructuredDocumentation",
                            "src": "4359:456:41",
                            "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                        },
                        "functionSelector": "23b872dd",
                        "id": 5785,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "transferFrom",
                        "nodeType": "FunctionDefinition",
                        "overrides": {
                            "id": 5756,
                            "nodeType": "OverrideSpecifier",
                            "overrides": [],
                            "src": "4908:8:41"
                        },
                        "parameters": {
                            "id": 5755,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5750,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5785,
                                    "src": "4842:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5749,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4842:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5752,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5785,
                                    "src": "4858:17:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5751,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4858:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5754,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5785,
                                    "src": "4877:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5753,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4877:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4841:51:41"
                        },
                        "returnParameters": {
                            "id": 5759,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5758,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5785,
                                    "src": "4926:4:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5757,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "4926:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "4925:6:41"
                        },
                        "scope": 6087,
                        "src": "4820:317:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 5812,
                            "nodeType": "Block",
                            "src": "5626:121:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 5796,
                                                    "name": "_msgSender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5267,
                                                    "src": "5645:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                        "typeString": "function () view returns (address payable)"
                                                    }
                                                },
                                                "id": 5797,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5645:12:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5798,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5788,
                                                "src": "5659:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 5806,
                                                        "name": "addedValue",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5790,
                                                        "src": "5707:10:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "baseExpression": {
                                                            "baseExpression": {
                                                                "id": 5799,
                                                                "name": "_allowances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5607,
                                                                "src": "5668:11:41",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                                }
                                                            },
                                                            "id": 5802,
                                                            "indexExpression": {
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "id": 5800,
                                                                    "name": "_msgSender",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5267,
                                                                    "src": "5680:10:41",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                                        "typeString": "function () view returns (address payable)"
                                                                    }
                                                                },
                                                                "id": 5801,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "5680:12:41",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "5668:25:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 5804,
                                                        "indexExpression": {
                                                            "id": 5803,
                                                            "name": "spender",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5788,
                                                            "src": "5694:7:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "5668:34:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 5805,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "add",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5417,
                                                    "src": "5668:38:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 5807,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "5668:50:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5795,
                                            "name": "_approve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6064,
                                            "src": "5636:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5808,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "5636:83:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5809,
                                    "nodeType": "ExpressionStatement",
                                    "src": "5636:83:41"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 5810,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "5736:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 5794,
                                    "id": 5811,
                                    "nodeType": "Return",
                                    "src": "5729:11:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5786,
                            "nodeType": "StructuredDocumentation",
                            "src": "5143:384:41",
                            "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                        },
                        "functionSelector": "39509351",
                        "id": 5813,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "increaseAllowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5791,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5788,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5813,
                                    "src": "5559:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5787,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5559:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5790,
                                    "mutability": "mutable",
                                    "name": "addedValue",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5813,
                                    "src": "5576:18:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5789,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5576:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5558:37:41"
                        },
                        "returnParameters": {
                            "id": 5794,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5793,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5813,
                                    "src": "5620:4:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5792,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "5620:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "5619:6:41"
                        },
                        "scope": 6087,
                        "src": "5532:215:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 5841,
                            "nodeType": "Block",
                            "src": "6333:167:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [],
                                                "expression": {
                                                    "argumentTypes": [],
                                                    "id": 5824,
                                                    "name": "_msgSender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5267,
                                                    "src": "6352:10:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                        "typeString": "function () view returns (address payable)"
                                                    }
                                                },
                                                "id": 5825,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6352:12:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5826,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5816,
                                                "src": "6366:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "id": 5834,
                                                        "name": "subtractedValue",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5818,
                                                        "src": "6414:15:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    {
                                                        "hexValue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                                        "id": 5835,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "string",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "6431:39:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                                            "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                                        },
                                                        "value": "ERC20: decreased allowance below zero"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        },
                                                        {
                                                            "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                                            "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                                        }
                                                    ],
                                                    "expression": {
                                                        "baseExpression": {
                                                            "baseExpression": {
                                                                "id": 5827,
                                                                "name": "_allowances",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 5607,
                                                                "src": "6375:11:41",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                                    "typeString": "mapping(address => mapping(address => uint256))"
                                                                }
                                                            },
                                                            "id": 5830,
                                                            "indexExpression": {
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "id": 5828,
                                                                    "name": "_msgSender",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": 5267,
                                                                    "src": "6387:10:41",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                                                        "typeString": "function () view returns (address payable)"
                                                                    }
                                                                },
                                                                "id": 5829,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "6387:12:41",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                }
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "nodeType": "IndexAccess",
                                                            "src": "6375:25:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                                "typeString": "mapping(address => uint256)"
                                                            }
                                                        },
                                                        "id": 5832,
                                                        "indexExpression": {
                                                            "id": 5831,
                                                            "name": "spender",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5816,
                                                            "src": "6401:7:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        "isConstant": false,
                                                        "isLValue": true,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "IndexAccess",
                                                        "src": "6375:34:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                        }
                                                    },
                                                    "id": 5833,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "memberName": "sub",
                                                    "nodeType": "MemberAccess",
                                                    "referencedDeclaration": 5462,
                                                    "src": "6375:38:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                        "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                    }
                                                },
                                                "id": 5836,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "kind": "functionCall",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "6375:96:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5823,
                                            "name": "_approve",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6064,
                                            "src": "6343:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5837,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "6343:129:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5838,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6343:129:41"
                                },
                                {
                                    "expression": {
                                        "hexValue": "74727565",
                                        "id": 5839,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6489:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        },
                                        "value": "true"
                                    },
                                    "functionReturnParameters": 5822,
                                    "id": 5840,
                                    "nodeType": "Return",
                                    "src": "6482:11:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5814,
                            "nodeType": "StructuredDocumentation",
                            "src": "5753:476:41",
                            "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                        },
                        "functionSelector": "a457c2d7",
                        "id": 5842,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "decreaseAllowance",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5819,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5816,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5842,
                                    "src": "6261:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5815,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6261:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5818,
                                    "mutability": "mutable",
                                    "name": "subtractedValue",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5842,
                                    "src": "6278:23:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5817,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6278:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6260:42:41"
                        },
                        "returnParameters": {
                            "id": 5822,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5821,
                                    "mutability": "mutable",
                                    "name": "",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5842,
                                    "src": "6327:4:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                    },
                                    "typeName": {
                                        "id": 5820,
                                        "name": "bool",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6327:4:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_bool",
                                            "typeString": "bool"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6326:6:41"
                        },
                        "scope": 6087,
                        "src": "6234:266:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "public"
                    },
                    {
                        "body": {
                            "id": 5907,
                            "nodeType": "Block",
                            "src": "7061:443:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 5858,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 5853,
                                                    "name": "sender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5845,
                                                    "src": "7079:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 5856,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7097:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 5855,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7089:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 5854,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7089:7:41",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 5857,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7089:10:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "7079:20:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                                                "id": 5859,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7101:39:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                                    "typeString": "literal_string \"ERC20: transfer from the zero address\""
                                                },
                                                "value": "ERC20: transfer from the zero address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                                    "typeString": "literal_string \"ERC20: transfer from the zero address\""
                                                }
                                            ],
                                            "id": 5852,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "7071:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 5860,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7071:70:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5861,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7071:70:41"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 5868,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 5863,
                                                    "name": "recipient",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5847,
                                                    "src": "7159:9:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 5866,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7180:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 5865,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7172:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 5864,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7172:7:41",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 5867,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7172:10:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "7159:23:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                                                "id": 5869,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7184:37:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                                    "typeString": "literal_string \"ERC20: transfer to the zero address\""
                                                },
                                                "value": "ERC20: transfer to the zero address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                                    "typeString": "literal_string \"ERC20: transfer to the zero address\""
                                                }
                                            ],
                                            "id": 5862,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "7151:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 5870,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7151:71:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5871,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7151:71:41"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 5873,
                                                "name": "sender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5845,
                                                "src": "7254:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5874,
                                                "name": "recipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5847,
                                                "src": "7262:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5875,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5849,
                                                "src": "7273:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5872,
                                            "name": "_beforeTokenTransfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6086,
                                            "src": "7233:20:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5876,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7233:47:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5877,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7233:47:41"
                                },
                                {
                                    "expression": {
                                        "id": 5888,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 5878,
                                                "name": "_balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5601,
                                                "src": "7291:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 5880,
                                            "indexExpression": {
                                                "id": 5879,
                                                "name": "sender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5845,
                                                "src": "7301:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7291:17:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 5885,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5849,
                                                    "src": "7333:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "hexValue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                                    "id": 5886,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "string",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "7341:40:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                                        "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                                    },
                                                    "value": "ERC20: transfer amount exceeds balance"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                                        "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                                    }
                                                ],
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 5881,
                                                        "name": "_balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5601,
                                                        "src": "7311:9:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 5883,
                                                    "indexExpression": {
                                                        "id": 5882,
                                                        "name": "sender",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5845,
                                                        "src": "7321:6:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "7311:17:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 5884,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5462,
                                                "src": "7311:21:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                }
                                            },
                                            "id": 5887,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "7311:71:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7291:91:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 5889,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7291:91:41"
                                },
                                {
                                    "expression": {
                                        "id": 5899,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 5890,
                                                "name": "_balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5601,
                                                "src": "7392:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 5892,
                                            "indexExpression": {
                                                "id": 5891,
                                                "name": "recipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5847,
                                                "src": "7402:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "7392:20:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 5897,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5849,
                                                    "src": "7440:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 5893,
                                                        "name": "_balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5601,
                                                        "src": "7415:9:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 5895,
                                                    "indexExpression": {
                                                        "id": 5894,
                                                        "name": "recipient",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5847,
                                                        "src": "7425:9:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "7415:20:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 5896,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5417,
                                                "src": "7415:24:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 5898,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "7415:32:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7392:55:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 5900,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7392:55:41"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 5902,
                                                "name": "sender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5845,
                                                "src": "7471:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5903,
                                                "name": "recipient",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5847,
                                                "src": "7479:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5904,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5849,
                                                "src": "7490:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5901,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6155,
                                            "src": "7462:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5905,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7462:35:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5906,
                                    "nodeType": "EmitStatement",
                                    "src": "7457:40:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5843,
                            "nodeType": "StructuredDocumentation",
                            "src": "6506:463:41",
                            "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                        },
                        "id": 5908,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_transfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5850,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5845,
                                    "mutability": "mutable",
                                    "name": "sender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5908,
                                    "src": "6993:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5844,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "6993:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5847,
                                    "mutability": "mutable",
                                    "name": "recipient",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5908,
                                    "src": "7009:17:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5846,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7009:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5849,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5908,
                                    "src": "7028:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5848,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7028:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "6992:51:41"
                        },
                        "returnParameters": {
                            "id": 5851,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7061:0:41"
                        },
                        "scope": 6087,
                        "src": "6974:530:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 5962,
                            "nodeType": "Block",
                            "src": "7840:305:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 5922,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 5917,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5911,
                                                    "src": "7858:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 5920,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "7877:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 5919,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "7869:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 5918,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "7869:7:41",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 5921,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "7869:10:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "7858:21:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                                                "id": 5923,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "7881:33:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                                    "typeString": "literal_string \"ERC20: mint to the zero address\""
                                                },
                                                "value": "ERC20: mint to the zero address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                                    "typeString": "literal_string \"ERC20: mint to the zero address\""
                                                }
                                            ],
                                            "id": 5916,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "7850:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 5924,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7850:65:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5925,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7850:65:41"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 5929,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "7955:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 5928,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "7947:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 5927,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "7947:7:41",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5930,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "7947:10:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5931,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5911,
                                                "src": "7959:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5932,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5913,
                                                "src": "7968:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5926,
                                            "name": "_beforeTokenTransfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6086,
                                            "src": "7926:20:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5933,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "7926:49:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5934,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7926:49:41"
                                },
                                {
                                    "expression": {
                                        "id": 5940,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 5935,
                                            "name": "_totalSupply",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5609,
                                            "src": "7986:12:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 5938,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5913,
                                                    "src": "8018:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 5936,
                                                    "name": "_totalSupply",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5609,
                                                    "src": "8001:12:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 5937,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5417,
                                                "src": "8001:16:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 5939,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "8001:24:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "7986:39:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 5941,
                                    "nodeType": "ExpressionStatement",
                                    "src": "7986:39:41"
                                },
                                {
                                    "expression": {
                                        "id": 5951,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 5942,
                                                "name": "_balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5601,
                                                "src": "8035:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 5944,
                                            "indexExpression": {
                                                "id": 5943,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5911,
                                                "src": "8045:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "8035:18:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 5949,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5913,
                                                    "src": "8079:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 5945,
                                                        "name": "_balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5601,
                                                        "src": "8056:9:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 5947,
                                                    "indexExpression": {
                                                        "id": 5946,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5911,
                                                        "src": "8066:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8056:18:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 5948,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "add",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5417,
                                                "src": "8056:22:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 5950,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "8056:30:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8035:51:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 5952,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8035:51:41"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 5956,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8118:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 5955,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "8110:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 5954,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "8110:7:41",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5957,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8110:10:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5958,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5911,
                                                "src": "8122:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 5959,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5913,
                                                "src": "8131:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5953,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6155,
                                            "src": "8101:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5960,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8101:37:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5961,
                                    "nodeType": "EmitStatement",
                                    "src": "8096:42:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5909,
                            "nodeType": "StructuredDocumentation",
                            "src": "7510:260:41",
                            "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."
                        },
                        "id": 5963,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_mint",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5914,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5911,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5963,
                                    "src": "7790:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5910,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7790:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5913,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 5963,
                                    "src": "7807:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5912,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "7807:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "7789:33:41"
                        },
                        "returnParameters": {
                            "id": 5915,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "7840:0:41"
                        },
                        "scope": 6087,
                        "src": "7775:370:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6018,
                            "nodeType": "Block",
                            "src": "8530:345:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 5977,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 5972,
                                                    "name": "account",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5966,
                                                    "src": "8548:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 5975,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "8567:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 5974,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "8559:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 5973,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "8559:7:41",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 5976,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "8559:10:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "8548:21:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                                                "id": 5978,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8571:35:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                                    "typeString": "literal_string \"ERC20: burn from the zero address\""
                                                },
                                                "value": "ERC20: burn from the zero address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                                    "typeString": "literal_string \"ERC20: burn from the zero address\""
                                                }
                                            ],
                                            "id": 5971,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "8540:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 5979,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8540:67:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5980,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8540:67:41"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "id": 5982,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5966,
                                                "src": "8639:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 5985,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8656:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 5984,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "8648:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 5983,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "8648:7:41",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 5986,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8648:10:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 5987,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5968,
                                                "src": "8660:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 5981,
                                            "name": "_beforeTokenTransfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6086,
                                            "src": "8618:20:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 5988,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8618:49:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 5989,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8618:49:41"
                                },
                                {
                                    "expression": {
                                        "id": 6000,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "id": 5990,
                                                "name": "_balances",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5601,
                                                "src": "8678:9:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 5992,
                                            "indexExpression": {
                                                "id": 5991,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5966,
                                                "src": "8688:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "8678:18:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 5997,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5968,
                                                    "src": "8722:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                {
                                                    "hexValue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                                    "id": 5998,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "string",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "8730:36:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                                        "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                                    },
                                                    "value": "ERC20: burn amount exceeds balance"
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    },
                                                    {
                                                        "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                                        "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                                    }
                                                ],
                                                "expression": {
                                                    "baseExpression": {
                                                        "id": 5993,
                                                        "name": "_balances",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5601,
                                                        "src": "8699:9:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                            "typeString": "mapping(address => uint256)"
                                                        }
                                                    },
                                                    "id": 5995,
                                                    "indexExpression": {
                                                        "id": 5994,
                                                        "name": "account",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5966,
                                                        "src": "8709:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "IndexAccess",
                                                    "src": "8699:18:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 5996,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5462,
                                                "src": "8699:22:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_string_memory_ptr_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                }
                                            },
                                            "id": 5999,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "8699:68:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8678:89:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 6001,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8678:89:41"
                                },
                                {
                                    "expression": {
                                        "id": 6007,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6002,
                                            "name": "_totalSupply",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5609,
                                            "src": "8777:12:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "arguments": [
                                                {
                                                    "id": 6005,
                                                    "name": "amount",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5968,
                                                    "src": "8809:6:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                }
                                            ],
                                            "expression": {
                                                "argumentTypes": [
                                                    {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                ],
                                                "expression": {
                                                    "id": 6003,
                                                    "name": "_totalSupply",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5609,
                                                    "src": "8792:12:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                    }
                                                },
                                                "id": 6004,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "sub",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 5434,
                                                "src": "8792:16:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                                }
                                            },
                                            "id": 6006,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "8792:24:41",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "8777:39:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 6008,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8777:39:41"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 6010,
                                                "name": "account",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5966,
                                                "src": "8840:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "arguments": [
                                                    {
                                                        "hexValue": "30",
                                                        "id": 6013,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8857:1:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        },
                                                        "value": "0"
                                                    }
                                                ],
                                                "expression": {
                                                    "argumentTypes": [
                                                        {
                                                            "typeIdentifier": "t_rational_0_by_1",
                                                            "typeString": "int_const 0"
                                                        }
                                                    ],
                                                    "id": 6012,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "nodeType": "ElementaryTypeNameExpression",
                                                    "src": "8849:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_type$_t_address_$",
                                                        "typeString": "type(address)"
                                                    },
                                                    "typeName": {
                                                        "id": 6011,
                                                        "name": "address",
                                                        "nodeType": "ElementaryTypeName",
                                                        "src": "8849:7:41",
                                                        "typeDescriptions": {}
                                                    }
                                                },
                                                "id": 6014,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "typeConversion",
                                                "lValueRequested": false,
                                                "names": [],
                                                "nodeType": "FunctionCall",
                                                "src": "8849:10:41",
                                                "tryCall": false,
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                }
                                            },
                                            {
                                                "id": 6015,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5968,
                                                "src": "8861:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address_payable",
                                                    "typeString": "address payable"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 6009,
                                            "name": "Transfer",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6155,
                                            "src": "8831:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 6016,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "8831:37:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6017,
                                    "nodeType": "EmitStatement",
                                    "src": "8826:42:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 5964,
                            "nodeType": "StructuredDocumentation",
                            "src": "8151:309:41",
                            "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                        },
                        "id": 6019,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_burn",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 5969,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 5966,
                                    "mutability": "mutable",
                                    "name": "account",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6019,
                                    "src": "8480:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 5965,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8480:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 5968,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6019,
                                    "src": "8497:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 5967,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "8497:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "8479:33:41"
                        },
                        "returnParameters": {
                            "id": 5970,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "8530:0:41"
                        },
                        "scope": 6087,
                        "src": "8465:410:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6063,
                            "nodeType": "Block",
                            "src": "9381:257:41",
                            "statements": [
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 6035,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 6030,
                                                    "name": "owner",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6022,
                                                    "src": "9399:5:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 6033,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "9416:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 6032,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "9408:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6031,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "9408:7:41",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6034,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "9408:10:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "9399:19:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                                                "id": 6036,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9420:38:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                                    "typeString": "literal_string \"ERC20: approve from the zero address\""
                                                },
                                                "value": "ERC20: approve from the zero address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                                    "typeString": "literal_string \"ERC20: approve from the zero address\""
                                                }
                                            ],
                                            "id": 6029,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "9391:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6037,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9391:68:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6038,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9391:68:41"
                                },
                                {
                                    "expression": {
                                        "arguments": [
                                            {
                                                "commonType": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "id": 6045,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                    "id": 6040,
                                                    "name": "spender",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6024,
                                                    "src": "9477:7:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "!=",
                                                "rightExpression": {
                                                    "arguments": [
                                                        {
                                                            "hexValue": "30",
                                                            "id": 6043,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "number",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "9496:1:41",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            },
                                                            "value": "0"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_rational_0_by_1",
                                                                "typeString": "int_const 0"
                                                            }
                                                        ],
                                                        "id": 6042,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "lValueRequested": false,
                                                        "nodeType": "ElementaryTypeNameExpression",
                                                        "src": "9488:7:41",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_address_$",
                                                            "typeString": "type(address)"
                                                        },
                                                        "typeName": {
                                                            "id": 6041,
                                                            "name": "address",
                                                            "nodeType": "ElementaryTypeName",
                                                            "src": "9488:7:41",
                                                            "typeDescriptions": {}
                                                        }
                                                    },
                                                    "id": 6044,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "9488:10:41",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address_payable",
                                                        "typeString": "address payable"
                                                    }
                                                },
                                                "src": "9477:21:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                }
                                            },
                                            {
                                                "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                                                "id": 6046,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "string",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "9500:36:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                                    "typeString": "literal_string \"ERC20: approve to the zero address\""
                                                },
                                                "value": "ERC20: approve to the zero address"
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_bool",
                                                    "typeString": "bool"
                                                },
                                                {
                                                    "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                                    "typeString": "literal_string \"ERC20: approve to the zero address\""
                                                }
                                            ],
                                            "id": 6039,
                                            "name": "require",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [
                                                -18,
                                                -18
                                            ],
                                            "referencedDeclaration": -18,
                                            "src": "9469:7:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                "typeString": "function (bool,string memory) pure"
                                            }
                                        },
                                        "id": 6047,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9469:68:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6048,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9469:68:41"
                                },
                                {
                                    "expression": {
                                        "id": 6055,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "baseExpression": {
                                                "baseExpression": {
                                                    "id": 6049,
                                                    "name": "_allowances",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 5607,
                                                    "src": "9548:11:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                                        "typeString": "mapping(address => mapping(address => uint256))"
                                                    }
                                                },
                                                "id": 6052,
                                                "indexExpression": {
                                                    "id": 6050,
                                                    "name": "owner",
                                                    "nodeType": "Identifier",
                                                    "overloadedDeclarations": [],
                                                    "referencedDeclaration": 6022,
                                                    "src": "9560:5:41",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "IndexAccess",
                                                "src": "9548:18:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                                    "typeString": "mapping(address => uint256)"
                                                }
                                            },
                                            "id": 6053,
                                            "indexExpression": {
                                                "id": 6051,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6024,
                                                "src": "9567:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": true,
                                            "nodeType": "IndexAccess",
                                            "src": "9548:27:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6054,
                                            "name": "amount",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6026,
                                            "src": "9578:6:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                            }
                                        },
                                        "src": "9548:36:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "id": 6056,
                                    "nodeType": "ExpressionStatement",
                                    "src": "9548:36:41"
                                },
                                {
                                    "eventCall": {
                                        "arguments": [
                                            {
                                                "id": 6058,
                                                "name": "owner",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6022,
                                                "src": "9608:5:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 6059,
                                                "name": "spender",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6024,
                                                "src": "9615:7:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                }
                                            },
                                            {
                                                "id": 6060,
                                                "name": "amount",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 6026,
                                                "src": "9624:6:41",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            }
                                        ],
                                        "expression": {
                                            "argumentTypes": [
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                }
                                            ],
                                            "id": 6057,
                                            "name": "Approval",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6164,
                                            "src": "9599:8:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                                "typeString": "function (address,address,uint256)"
                                            }
                                        },
                                        "id": 6061,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "9599:32:41",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                        }
                                    },
                                    "id": 6062,
                                    "nodeType": "EmitStatement",
                                    "src": "9594:37:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 6020,
                            "nodeType": "StructuredDocumentation",
                            "src": "8881:412:41",
                            "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                        },
                        "id": 6064,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_approve",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6027,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6022,
                                    "mutability": "mutable",
                                    "name": "owner",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6064,
                                    "src": "9316:13:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6021,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9316:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6024,
                                    "mutability": "mutable",
                                    "name": "spender",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6064,
                                    "src": "9331:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6023,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9331:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6026,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6064,
                                    "src": "9348:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6025,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9348:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9315:48:41"
                        },
                        "returnParameters": {
                            "id": 6028,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "9381:0:41"
                        },
                        "scope": 6087,
                        "src": "9298:340:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6074,
                            "nodeType": "Block",
                            "src": "10011:38:41",
                            "statements": [
                                {
                                    "expression": {
                                        "id": 6072,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                            "id": 6070,
                                            "name": "_decimals",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 5615,
                                            "src": "10021:9:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "=",
                                        "rightHandSide": {
                                            "id": 6071,
                                            "name": "decimals_",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 6067,
                                            "src": "10033:9:41",
                                            "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                            }
                                        },
                                        "src": "10021:21:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "id": 6073,
                                    "nodeType": "ExpressionStatement",
                                    "src": "10021:21:41"
                                }
                            ]
                        },
                        "documentation": {
                            "id": 6065,
                            "nodeType": "StructuredDocumentation",
                            "src": "9644:312:41",
                            "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                        },
                        "id": 6075,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_setupDecimals",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6068,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6067,
                                    "mutability": "mutable",
                                    "name": "decimals_",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6075,
                                    "src": "9985:15:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                    },
                                    "typeName": {
                                        "id": 6066,
                                        "name": "uint8",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "9985:5:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "9984:17:41"
                        },
                        "returnParameters": {
                            "id": 6069,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10011:0:41"
                        },
                        "scope": 6087,
                        "src": "9961:88:41",
                        "stateMutability": "nonpayable",
                        "virtual": false,
                        "visibility": "internal"
                    },
                    {
                        "body": {
                            "id": 6085,
                            "nodeType": "Block",
                            "src": "10725:3:41",
                            "statements": []
                        },
                        "documentation": {
                            "id": 6076,
                            "nodeType": "StructuredDocumentation",
                            "src": "10055:576:41",
                            "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                        },
                        "id": 6086,
                        "implemented": true,
                        "kind": "function",
                        "modifiers": [],
                        "name": "_beforeTokenTransfer",
                        "nodeType": "FunctionDefinition",
                        "parameters": {
                            "id": 6083,
                            "nodeType": "ParameterList",
                            "parameters": [
                                {
                                    "constant": false,
                                    "id": 6078,
                                    "mutability": "mutable",
                                    "name": "from",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6086,
                                    "src": "10666:12:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6077,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10666:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6080,
                                    "mutability": "mutable",
                                    "name": "to",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6086,
                                    "src": "10680:10:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 6079,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10680:7:41",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "internal"
                                },
                                {
                                    "constant": false,
                                    "id": 6082,
                                    "mutability": "mutable",
                                    "name": "amount",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 6086,
                                    "src": "10692:14:41",
                                    "stateVariable": false,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                    },
                                    "typeName": {
                                        "id": 6081,
                                        "name": "uint256",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "10692:7:41",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                        }
                                    },
                                    "visibility": "internal"
                                }
                            ],
                            "src": "10665:42:41"
                        },
                        "returnParameters": {
                            "id": 6084,
                            "nodeType": "ParameterList",
                            "parameters": [],
                            "src": "10725:0:41"
                        },
                        "scope": 6087,
                        "src": "10636:92:41",
                        "stateMutability": "nonpayable",
                        "virtual": true,
                        "visibility": "internal"
                    }
                ],
                "scope": 6088,
                "src": "1311:9419:41"
            }
        ],
        "src": "33:10698:41"
    },
    "legacyAST": {
        "attributes": {
            "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
            "exportedSymbols": {
                "Context": [
                    5279
                ],
                "ERC20": [
                    6087
                ],
                "IERC20": [
                    6165
                ],
                "SafeMath": [
                    5584
                ]
            },
            "license": "MIT"
        },
        "children": [
            {
                "attributes": {
                    "literals": [
                        "solidity",
                        "^",
                        "0.7",
                        ".0"
                    ]
                },
                "id": 5586,
                "name": "PragmaDirective",
                "src": "33:23:41"
            },
            {
                "attributes": {
                    "SourceUnit": 5280,
                    "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
                    "file": "../../GSN/Context.sol",
                    "scope": 6088,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 5587,
                "name": "ImportDirective",
                "src": "58:31:41"
            },
            {
                "attributes": {
                    "SourceUnit": 6166,
                    "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
                    "file": "./IERC20.sol",
                    "scope": 6088,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 5588,
                "name": "ImportDirective",
                "src": "90:22:41"
            },
            {
                "attributes": {
                    "SourceUnit": 5585,
                    "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
                    "file": "../../math/SafeMath.sol",
                    "scope": 6088,
                    "symbolAliases": [
                        null
                    ],
                    "unitAlias": ""
                },
                "id": 5589,
                "name": "ImportDirective",
                "src": "113:33:41"
            },
            {
                "attributes": {
                    "abstract": false,
                    "contractDependencies": [
                        5279,
                        6165
                    ],
                    "contractKind": "contract",
                    "fullyImplemented": true,
                    "linearizedBaseContracts": [
                        6087,
                        6165,
                        5279
                    ],
                    "name": "ERC20",
                    "scope": 6088
                },
                "children": [
                    {
                        "attributes": {
                            "text": " @dev Implementation of the {IERC20} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n For a generic mechanism see {ERC20PresetMinterPauser}.\n TIP: For a detailed writeup see our guide\n https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n to implement supply mechanisms].\n We have followed general OpenZeppelin guidelines: functions revert instead\n of returning `false` on failure. This behavior is nonetheless conventional\n and does not conflict with the expectations of ERC20 applications.\n Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n This allows applications to reconstruct the allowance for all accounts just\n by listening to said events. Other implementations of the EIP may not emit\n these events, as it isn't required by the specification.\n Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n functions have been added to mitigate the well-known issues around setting\n allowances. See {IERC20-approve}."
                        },
                        "id": 5590,
                        "name": "StructuredDocumentation",
                        "src": "148:1162:41"
                    },
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "Context",
                                    "referencedDeclaration": 5279,
                                    "type": "contract Context"
                                },
                                "id": 5591,
                                "name": "UserDefinedTypeName",
                                "src": "1329:7:41"
                            }
                        ],
                        "id": 5592,
                        "name": "InheritanceSpecifier",
                        "src": "1329:7:41"
                    },
                    {
                        "attributes": {},
                        "children": [
                            {
                                "attributes": {
                                    "name": "IERC20",
                                    "referencedDeclaration": 6165,
                                    "type": "contract IERC20"
                                },
                                "id": 5593,
                                "name": "UserDefinedTypeName",
                                "src": "1338:6:41"
                            }
                        ],
                        "id": 5594,
                        "name": "InheritanceSpecifier",
                        "src": "1338:6:41"
                    },
                    {
                        "children": [
                            {
                                "attributes": {
                                    "name": "SafeMath",
                                    "referencedDeclaration": 5584,
                                    "type": "library SafeMath"
                                },
                                "id": 5595,
                                "name": "UserDefinedTypeName",
                                "src": "1357:8:41"
                            },
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 5596,
                                "name": "ElementaryTypeName",
                                "src": "1370:7:41"
                            }
                        ],
                        "id": 5597,
                        "name": "UsingForDirective",
                        "src": "1351:27:41"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_balances",
                            "scope": 6087,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "mapping(address => uint256)",
                            "visibility": "private"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "type": "mapping(address => uint256)"
                                },
                                "children": [
                                    {
                                        "attributes": {
                                            "name": "address",
                                            "type": "address"
                                        },
                                        "id": 5598,
                                        "name": "ElementaryTypeName",
                                        "src": "1393:7:41"
                                    },
                                    {
                                        "attributes": {
                                            "name": "uint256",
                                            "type": "uint256"
                                        },
                                        "id": 5599,
                                        "name": "ElementaryTypeName",
                                        "src": "1404:7:41"
                                    }
                                ],
                                "id": 5600,
                                "name": "Mapping",
                                "src": "1384:28:41"
                            }
                        ],
                        "id": 5601,
                        "name": "VariableDeclaration",
                        "src": "1384:46:41"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_allowances",
                            "scope": 6087,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "mapping(address => mapping(address => uint256))",
                            "visibility": "private"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "type": "mapping(address => mapping(address => uint256))"
                                },
                                "children": [
                                    {
                                        "attributes": {
                                            "name": "address",
                                            "type": "address"
                                        },
                                        "id": 5602,
                                        "name": "ElementaryTypeName",
                                        "src": "1446:7:41"
                                    },
                                    {
                                        "attributes": {
                                            "type": "mapping(address => uint256)"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "type": "address"
                                                },
                                                "id": 5603,
                                                "name": "ElementaryTypeName",
                                                "src": "1466:7:41"
                                            },
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5604,
                                                "name": "ElementaryTypeName",
                                                "src": "1477:7:41"
                                            }
                                        ],
                                        "id": 5605,
                                        "name": "Mapping",
                                        "src": "1457:28:41"
                                    }
                                ],
                                "id": 5606,
                                "name": "Mapping",
                                "src": "1437:49:41"
                            }
                        ],
                        "id": 5607,
                        "name": "VariableDeclaration",
                        "src": "1437:69:41"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_totalSupply",
                            "scope": 6087,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "uint256",
                            "visibility": "private"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "uint256",
                                    "type": "uint256"
                                },
                                "id": 5608,
                                "name": "ElementaryTypeName",
                                "src": "1513:7:41"
                            }
                        ],
                        "id": 5609,
                        "name": "VariableDeclaration",
                        "src": "1513:28:41"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_name",
                            "scope": 6087,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "string",
                            "visibility": "private"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "string",
                                    "type": "string"
                                },
                                "id": 5610,
                                "name": "ElementaryTypeName",
                                "src": "1548:6:41"
                            }
                        ],
                        "id": 5611,
                        "name": "VariableDeclaration",
                        "src": "1548:20:41"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_symbol",
                            "scope": 6087,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "string",
                            "visibility": "private"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "string",
                                    "type": "string"
                                },
                                "id": 5612,
                                "name": "ElementaryTypeName",
                                "src": "1574:6:41"
                            }
                        ],
                        "id": 5613,
                        "name": "VariableDeclaration",
                        "src": "1574:22:41"
                    },
                    {
                        "attributes": {
                            "constant": false,
                            "mutability": "mutable",
                            "name": "_decimals",
                            "scope": 6087,
                            "stateVariable": true,
                            "storageLocation": "default",
                            "type": "uint8",
                            "visibility": "private"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "name": "uint8",
                                    "type": "uint8"
                                },
                                "id": 5614,
                                "name": "ElementaryTypeName",
                                "src": "1602:5:41"
                            }
                        ],
                        "id": 5615,
                        "name": "VariableDeclaration",
                        "src": "1602:23:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": true,
                            "kind": "constructor",
                            "modifiers": [
                                null
                            ],
                            "name": "",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n a default value of 18.\n To select a different value for {decimals}, use {_setupDecimals}.\n All three of these values are immutable: they can only be set once during\n construction."
                                },
                                "id": 5616,
                                "name": "StructuredDocumentation",
                                "src": "1632:311:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "name_",
                                            "scope": 5636,
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "type": "string",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "string",
                                                    "type": "string"
                                                },
                                                "id": 5617,
                                                "name": "ElementaryTypeName",
                                                "src": "1961:6:41"
                                            }
                                        ],
                                        "id": 5618,
                                        "name": "VariableDeclaration",
                                        "src": "1961:19:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "symbol_",
                                            "scope": 5636,
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "type": "string",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "string",
                                                    "type": "string"
                                                },
                                                "id": 5619,
                                                "name": "ElementaryTypeName",
                                                "src": "1982:6:41"
                                            }
                                        ],
                                        "id": 5620,
                                        "name": "VariableDeclaration",
                                        "src": "1982:21:41"
                                    }
                                ],
                                "id": 5621,
                                "name": "ParameterList",
                                "src": "1960:44:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5622,
                                "name": "ParameterList",
                                "src": "2005:0:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "string storage ref"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5611,
                                                            "type": "string storage ref",
                                                            "value": "_name"
                                                        },
                                                        "id": 5623,
                                                        "name": "Identifier",
                                                        "src": "2015:5:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5618,
                                                            "type": "string memory",
                                                            "value": "name_"
                                                        },
                                                        "id": 5624,
                                                        "name": "Identifier",
                                                        "src": "2023:5:41"
                                                    }
                                                ],
                                                "id": 5625,
                                                "name": "Assignment",
                                                "src": "2015:13:41"
                                            }
                                        ],
                                        "id": 5626,
                                        "name": "ExpressionStatement",
                                        "src": "2015:13:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "string storage ref"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5613,
                                                            "type": "string storage ref",
                                                            "value": "_symbol"
                                                        },
                                                        "id": 5627,
                                                        "name": "Identifier",
                                                        "src": "2038:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5620,
                                                            "type": "string memory",
                                                            "value": "symbol_"
                                                        },
                                                        "id": 5628,
                                                        "name": "Identifier",
                                                        "src": "2048:7:41"
                                                    }
                                                ],
                                                "id": 5629,
                                                "name": "Assignment",
                                                "src": "2038:17:41"
                                            }
                                        ],
                                        "id": 5630,
                                        "name": "ExpressionStatement",
                                        "src": "2038:17:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint8"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5615,
                                                            "type": "uint8",
                                                            "value": "_decimals"
                                                        },
                                                        "id": 5631,
                                                        "name": "Identifier",
                                                        "src": "2065:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "3138",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "number",
                                                            "type": "int_const 18",
                                                            "value": "18"
                                                        },
                                                        "id": 5632,
                                                        "name": "Literal",
                                                        "src": "2077:2:41"
                                                    }
                                                ],
                                                "id": 5633,
                                                "name": "Assignment",
                                                "src": "2065:14:41"
                                            }
                                        ],
                                        "id": 5634,
                                        "name": "ExpressionStatement",
                                        "src": "2065:14:41"
                                    }
                                ],
                                "id": 5635,
                                "name": "Block",
                                "src": "2005:81:41"
                            }
                        ],
                        "id": 5636,
                        "name": "FunctionDefinition",
                        "src": "1948:138:41"
                    },
                    {
                        "attributes": {
                            "functionSelector": "06fdde03",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "name",
                            "scope": 6087,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Returns the name of the token."
                                },
                                "id": 5637,
                                "name": "StructuredDocumentation",
                                "src": "2092:54:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5638,
                                "name": "ParameterList",
                                "src": "2164:2:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5645,
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "type": "string",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "string",
                                                    "type": "string"
                                                },
                                                "id": 5639,
                                                "name": "ElementaryTypeName",
                                                "src": "2188:6:41"
                                            }
                                        ],
                                        "id": 5640,
                                        "name": "VariableDeclaration",
                                        "src": "2188:13:41"
                                    }
                                ],
                                "id": 5641,
                                "name": "ParameterList",
                                "src": "2187:15:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5641
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 5611,
                                                    "type": "string storage ref",
                                                    "value": "_name"
                                                },
                                                "id": 5642,
                                                "name": "Identifier",
                                                "src": "2220:5:41"
                                            }
                                        ],
                                        "id": 5643,
                                        "name": "Return",
                                        "src": "2213:12:41"
                                    }
                                ],
                                "id": 5644,
                                "name": "Block",
                                "src": "2203:29:41"
                            }
                        ],
                        "id": 5645,
                        "name": "FunctionDefinition",
                        "src": "2151:81:41"
                    },
                    {
                        "attributes": {
                            "functionSelector": "95d89b41",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "symbol",
                            "scope": 6087,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
                                },
                                "id": 5646,
                                "name": "StructuredDocumentation",
                                "src": "2238:102:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5647,
                                "name": "ParameterList",
                                "src": "2360:2:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5654,
                                            "stateVariable": false,
                                            "storageLocation": "memory",
                                            "type": "string",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "string",
                                                    "type": "string"
                                                },
                                                "id": 5648,
                                                "name": "ElementaryTypeName",
                                                "src": "2384:6:41"
                                            }
                                        ],
                                        "id": 5649,
                                        "name": "VariableDeclaration",
                                        "src": "2384:13:41"
                                    }
                                ],
                                "id": 5650,
                                "name": "ParameterList",
                                "src": "2383:15:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5650
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 5613,
                                                    "type": "string storage ref",
                                                    "value": "_symbol"
                                                },
                                                "id": 5651,
                                                "name": "Identifier",
                                                "src": "2416:7:41"
                                            }
                                        ],
                                        "id": 5652,
                                        "name": "Return",
                                        "src": "2409:14:41"
                                    }
                                ],
                                "id": 5653,
                                "name": "Block",
                                "src": "2399:31:41"
                            }
                        ],
                        "id": 5654,
                        "name": "FunctionDefinition",
                        "src": "2345:85:41"
                    },
                    {
                        "attributes": {
                            "functionSelector": "313ce567",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "decimals",
                            "scope": 6087,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
                                },
                                "id": 5655,
                                "name": "StructuredDocumentation",
                                "src": "2436:612:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5656,
                                "name": "ParameterList",
                                "src": "3070:2:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5663,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint8",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint8",
                                                    "type": "uint8"
                                                },
                                                "id": 5657,
                                                "name": "ElementaryTypeName",
                                                "src": "3094:5:41"
                                            }
                                        ],
                                        "id": 5658,
                                        "name": "VariableDeclaration",
                                        "src": "3094:5:41"
                                    }
                                ],
                                "id": 5659,
                                "name": "ParameterList",
                                "src": "3093:7:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5659
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 5615,
                                                    "type": "uint8",
                                                    "value": "_decimals"
                                                },
                                                "id": 5660,
                                                "name": "Identifier",
                                                "src": "3118:9:41"
                                            }
                                        ],
                                        "id": 5661,
                                        "name": "Return",
                                        "src": "3111:16:41"
                                    }
                                ],
                                "id": 5662,
                                "name": "Block",
                                "src": "3101:33:41"
                            }
                        ],
                        "id": 5663,
                        "name": "FunctionDefinition",
                        "src": "3053:81:41"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                6096
                            ],
                            "functionSelector": "18160ddd",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "totalSupply",
                            "scope": 6087,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev See {IERC20-totalSupply}."
                                },
                                "id": 5664,
                                "name": "StructuredDocumentation",
                                "src": "3140:49:41"
                            },
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 5666,
                                "name": "OverrideSpecifier",
                                "src": "3229:8:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5665,
                                "name": "ParameterList",
                                "src": "3214:2:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5673,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5667,
                                                "name": "ElementaryTypeName",
                                                "src": "3247:7:41"
                                            }
                                        ],
                                        "id": 5668,
                                        "name": "VariableDeclaration",
                                        "src": "3247:7:41"
                                    }
                                ],
                                "id": 5669,
                                "name": "ParameterList",
                                "src": "3246:9:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5669
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "overloadedDeclarations": [
                                                        null
                                                    ],
                                                    "referencedDeclaration": 5609,
                                                    "type": "uint256",
                                                    "value": "_totalSupply"
                                                },
                                                "id": 5670,
                                                "name": "Identifier",
                                                "src": "3273:12:41"
                                            }
                                        ],
                                        "id": 5671,
                                        "name": "Return",
                                        "src": "3266:19:41"
                                    }
                                ],
                                "id": 5672,
                                "name": "Block",
                                "src": "3256:36:41"
                            }
                        ],
                        "id": 5673,
                        "name": "FunctionDefinition",
                        "src": "3194:98:41"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                6104
                            ],
                            "functionSelector": "70a08231",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "balanceOf",
                            "scope": 6087,
                            "stateMutability": "view",
                            "virtual": false,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev See {IERC20-balanceOf}."
                                },
                                "id": 5674,
                                "name": "StructuredDocumentation",
                                "src": "3298:47:41"
                            },
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 5678,
                                "name": "OverrideSpecifier",
                                "src": "3398:8:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "scope": 5687,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5675,
                                                "name": "ElementaryTypeName",
                                                "src": "3369:7:41"
                                            }
                                        ],
                                        "id": 5676,
                                        "name": "VariableDeclaration",
                                        "src": "3369:15:41"
                                    }
                                ],
                                "id": 5677,
                                "name": "ParameterList",
                                "src": "3368:17:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5687,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5679,
                                                "name": "ElementaryTypeName",
                                                "src": "3416:7:41"
                                            }
                                        ],
                                        "id": 5680,
                                        "name": "VariableDeclaration",
                                        "src": "3416:7:41"
                                    }
                                ],
                                "id": 5681,
                                "name": "ParameterList",
                                "src": "3415:9:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5681
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5601,
                                                            "type": "mapping(address => uint256)",
                                                            "value": "_balances"
                                                        },
                                                        "id": 5682,
                                                        "name": "Identifier",
                                                        "src": "3442:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5676,
                                                            "type": "address",
                                                            "value": "account"
                                                        },
                                                        "id": 5683,
                                                        "name": "Identifier",
                                                        "src": "3452:7:41"
                                                    }
                                                ],
                                                "id": 5684,
                                                "name": "IndexAccess",
                                                "src": "3442:18:41"
                                            }
                                        ],
                                        "id": 5685,
                                        "name": "Return",
                                        "src": "3435:25:41"
                                    }
                                ],
                                "id": 5686,
                                "name": "Block",
                                "src": "3425:42:41"
                            }
                        ],
                        "id": 5687,
                        "name": "FunctionDefinition",
                        "src": "3350:117:41"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                6114
                            ],
                            "functionSelector": "a9059cbb",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "transfer",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev See {IERC20-transfer}.\n Requirements:\n - `recipient` cannot be the zero address.\n - the caller must have a balance of at least `amount`."
                                },
                                "id": 5688,
                                "name": "StructuredDocumentation",
                                "src": "3473:192:41"
                            },
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 5694,
                                "name": "OverrideSpecifier",
                                "src": "3738:8:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "recipient",
                                            "scope": 5708,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5689,
                                                "name": "ElementaryTypeName",
                                                "src": "3688:7:41"
                                            }
                                        ],
                                        "id": 5690,
                                        "name": "VariableDeclaration",
                                        "src": "3688:17:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 5708,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5691,
                                                "name": "ElementaryTypeName",
                                                "src": "3707:7:41"
                                            }
                                        ],
                                        "id": 5692,
                                        "name": "VariableDeclaration",
                                        "src": "3707:14:41"
                                    }
                                ],
                                "id": 5693,
                                "name": "ParameterList",
                                "src": "3687:35:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5708,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 5695,
                                                "name": "ElementaryTypeName",
                                                "src": "3756:4:41"
                                            }
                                        ],
                                        "id": 5696,
                                        "name": "VariableDeclaration",
                                        "src": "3756:4:41"
                                    }
                                ],
                                "id": 5697,
                                "name": "ParameterList",
                                "src": "3755:6:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5908,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_transfer"
                                                        },
                                                        "id": 5698,
                                                        "name": "Identifier",
                                                        "src": "3772:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5267,
                                                                    "type": "function () view returns (address payable)",
                                                                    "value": "_msgSender"
                                                                },
                                                                "id": 5699,
                                                                "name": "Identifier",
                                                                "src": "3782:10:41"
                                                            }
                                                        ],
                                                        "id": 5700,
                                                        "name": "FunctionCall",
                                                        "src": "3782:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5690,
                                                            "type": "address",
                                                            "value": "recipient"
                                                        },
                                                        "id": 5701,
                                                        "name": "Identifier",
                                                        "src": "3796:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5692,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5702,
                                                        "name": "Identifier",
                                                        "src": "3807:6:41"
                                                    }
                                                ],
                                                "id": 5703,
                                                "name": "FunctionCall",
                                                "src": "3772:42:41"
                                            }
                                        ],
                                        "id": 5704,
                                        "name": "ExpressionStatement",
                                        "src": "3772:42:41"
                                    },
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5697
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "74727565",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "bool",
                                                    "type": "bool",
                                                    "value": "true"
                                                },
                                                "id": 5705,
                                                "name": "Literal",
                                                "src": "3831:4:41"
                                            }
                                        ],
                                        "id": 5706,
                                        "name": "Return",
                                        "src": "3824:11:41"
                                    }
                                ],
                                "id": 5707,
                                "name": "Block",
                                "src": "3762:80:41"
                            }
                        ],
                        "id": 5708,
                        "name": "FunctionDefinition",
                        "src": "3670:172:41"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                6124
                            ],
                            "functionSelector": "dd62ed3e",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "allowance",
                            "scope": 6087,
                            "stateMutability": "view",
                            "virtual": true,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev See {IERC20-allowance}."
                                },
                                "id": 5709,
                                "name": "StructuredDocumentation",
                                "src": "3848:47:41"
                            },
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 5715,
                                "name": "OverrideSpecifier",
                                "src": "3971:8:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "owner",
                                            "scope": 5726,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5710,
                                                "name": "ElementaryTypeName",
                                                "src": "3919:7:41"
                                            }
                                        ],
                                        "id": 5711,
                                        "name": "VariableDeclaration",
                                        "src": "3919:13:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "spender",
                                            "scope": 5726,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5712,
                                                "name": "ElementaryTypeName",
                                                "src": "3934:7:41"
                                            }
                                        ],
                                        "id": 5713,
                                        "name": "VariableDeclaration",
                                        "src": "3934:15:41"
                                    }
                                ],
                                "id": 5714,
                                "name": "ParameterList",
                                "src": "3918:32:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5726,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5716,
                                                "name": "ElementaryTypeName",
                                                "src": "3989:7:41"
                                            }
                                        ],
                                        "id": 5717,
                                        "name": "VariableDeclaration",
                                        "src": "3989:7:41"
                                    }
                                ],
                                "id": 5718,
                                "name": "ParameterList",
                                "src": "3988:9:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5718
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": true,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "type": "mapping(address => uint256)"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5607,
                                                                    "type": "mapping(address => mapping(address => uint256))",
                                                                    "value": "_allowances"
                                                                },
                                                                "id": 5719,
                                                                "name": "Identifier",
                                                                "src": "4015:11:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5711,
                                                                    "type": "address",
                                                                    "value": "owner"
                                                                },
                                                                "id": 5720,
                                                                "name": "Identifier",
                                                                "src": "4027:5:41"
                                                            }
                                                        ],
                                                        "id": 5721,
                                                        "name": "IndexAccess",
                                                        "src": "4015:18:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5713,
                                                            "type": "address",
                                                            "value": "spender"
                                                        },
                                                        "id": 5722,
                                                        "name": "Identifier",
                                                        "src": "4034:7:41"
                                                    }
                                                ],
                                                "id": 5723,
                                                "name": "IndexAccess",
                                                "src": "4015:27:41"
                                            }
                                        ],
                                        "id": 5724,
                                        "name": "Return",
                                        "src": "4008:34:41"
                                    }
                                ],
                                "id": 5725,
                                "name": "Block",
                                "src": "3998:51:41"
                            }
                        ],
                        "id": 5726,
                        "name": "FunctionDefinition",
                        "src": "3900:149:41"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                6134
                            ],
                            "functionSelector": "095ea7b3",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "approve",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev See {IERC20-approve}.\n Requirements:\n - `spender` cannot be the zero address."
                                },
                                "id": 5727,
                                "name": "StructuredDocumentation",
                                "src": "4055:127:41"
                            },
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 5733,
                                "name": "OverrideSpecifier",
                                "src": "4252:8:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "spender",
                                            "scope": 5747,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5728,
                                                "name": "ElementaryTypeName",
                                                "src": "4204:7:41"
                                            }
                                        ],
                                        "id": 5729,
                                        "name": "VariableDeclaration",
                                        "src": "4204:15:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 5747,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5730,
                                                "name": "ElementaryTypeName",
                                                "src": "4221:7:41"
                                            }
                                        ],
                                        "id": 5731,
                                        "name": "VariableDeclaration",
                                        "src": "4221:14:41"
                                    }
                                ],
                                "id": 5732,
                                "name": "ParameterList",
                                "src": "4203:33:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5747,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 5734,
                                                "name": "ElementaryTypeName",
                                                "src": "4270:4:41"
                                            }
                                        ],
                                        "id": 5735,
                                        "name": "VariableDeclaration",
                                        "src": "4270:4:41"
                                    }
                                ],
                                "id": 5736,
                                "name": "ParameterList",
                                "src": "4269:6:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6064,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_approve"
                                                        },
                                                        "id": 5737,
                                                        "name": "Identifier",
                                                        "src": "4286:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5267,
                                                                    "type": "function () view returns (address payable)",
                                                                    "value": "_msgSender"
                                                                },
                                                                "id": 5738,
                                                                "name": "Identifier",
                                                                "src": "4295:10:41"
                                                            }
                                                        ],
                                                        "id": 5739,
                                                        "name": "FunctionCall",
                                                        "src": "4295:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5729,
                                                            "type": "address",
                                                            "value": "spender"
                                                        },
                                                        "id": 5740,
                                                        "name": "Identifier",
                                                        "src": "4309:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5731,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5741,
                                                        "name": "Identifier",
                                                        "src": "4318:6:41"
                                                    }
                                                ],
                                                "id": 5742,
                                                "name": "FunctionCall",
                                                "src": "4286:39:41"
                                            }
                                        ],
                                        "id": 5743,
                                        "name": "ExpressionStatement",
                                        "src": "4286:39:41"
                                    },
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5736
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "74727565",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "bool",
                                                    "type": "bool",
                                                    "value": "true"
                                                },
                                                "id": 5744,
                                                "name": "Literal",
                                                "src": "4342:4:41"
                                            }
                                        ],
                                        "id": 5745,
                                        "name": "Return",
                                        "src": "4335:11:41"
                                    }
                                ],
                                "id": 5746,
                                "name": "Block",
                                "src": "4276:77:41"
                            }
                        ],
                        "id": 5747,
                        "name": "FunctionDefinition",
                        "src": "4187:166:41"
                    },
                    {
                        "attributes": {
                            "baseFunctions": [
                                6146
                            ],
                            "functionSelector": "23b872dd",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "transferFrom",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev See {IERC20-transferFrom}.\n Emits an {Approval} event indicating the updated allowance. This is not\n required by the EIP. See the note at the beginning of {ERC20}.\n Requirements:\n - `sender` and `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`.\n - the caller must have allowance for ``sender``'s tokens of at least\n `amount`."
                                },
                                "id": 5748,
                                "name": "StructuredDocumentation",
                                "src": "4359:456:41"
                            },
                            {
                                "attributes": {
                                    "overrides": [
                                        null
                                    ]
                                },
                                "id": 5756,
                                "name": "OverrideSpecifier",
                                "src": "4908:8:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "sender",
                                            "scope": 5785,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5749,
                                                "name": "ElementaryTypeName",
                                                "src": "4842:7:41"
                                            }
                                        ],
                                        "id": 5750,
                                        "name": "VariableDeclaration",
                                        "src": "4842:14:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "recipient",
                                            "scope": 5785,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5751,
                                                "name": "ElementaryTypeName",
                                                "src": "4858:7:41"
                                            }
                                        ],
                                        "id": 5752,
                                        "name": "VariableDeclaration",
                                        "src": "4858:17:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 5785,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5753,
                                                "name": "ElementaryTypeName",
                                                "src": "4877:7:41"
                                            }
                                        ],
                                        "id": 5754,
                                        "name": "VariableDeclaration",
                                        "src": "4877:14:41"
                                    }
                                ],
                                "id": 5755,
                                "name": "ParameterList",
                                "src": "4841:51:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5785,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 5757,
                                                "name": "ElementaryTypeName",
                                                "src": "4926:4:41"
                                            }
                                        ],
                                        "id": 5758,
                                        "name": "VariableDeclaration",
                                        "src": "4926:4:41"
                                    }
                                ],
                                "id": 5759,
                                "name": "ParameterList",
                                "src": "4925:6:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5908,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_transfer"
                                                        },
                                                        "id": 5760,
                                                        "name": "Identifier",
                                                        "src": "4942:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5750,
                                                            "type": "address",
                                                            "value": "sender"
                                                        },
                                                        "id": 5761,
                                                        "name": "Identifier",
                                                        "src": "4952:6:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5752,
                                                            "type": "address",
                                                            "value": "recipient"
                                                        },
                                                        "id": 5762,
                                                        "name": "Identifier",
                                                        "src": "4960:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5754,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5763,
                                                        "name": "Identifier",
                                                        "src": "4971:6:41"
                                                    }
                                                ],
                                                "id": 5764,
                                                "name": "FunctionCall",
                                                "src": "4942:36:41"
                                            }
                                        ],
                                        "id": 5765,
                                        "name": "ExpressionStatement",
                                        "src": "4942:36:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6064,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_approve"
                                                        },
                                                        "id": 5766,
                                                        "name": "Identifier",
                                                        "src": "4988:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5750,
                                                            "type": "address",
                                                            "value": "sender"
                                                        },
                                                        "id": 5767,
                                                        "name": "Identifier",
                                                        "src": "4997:6:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5267,
                                                                    "type": "function () view returns (address payable)",
                                                                    "value": "_msgSender"
                                                                },
                                                                "id": 5768,
                                                                "name": "Identifier",
                                                                "src": "5005:10:41"
                                                            }
                                                        ],
                                                        "id": 5769,
                                                        "name": "FunctionCall",
                                                        "src": "5005:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_stringliteral_974d1b4421da69cc60b481194f0dad36a5bb4e23da810da7a7fb30cdba178330",
                                                                            "typeString": "literal_string \"ERC20: transfer amount exceeds allowance\""
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "sub",
                                                                    "referencedDeclaration": 5462,
                                                                    "type": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "type": "mapping(address => uint256)"
                                                                                },
                                                                                "children": [
                                                                                    {
                                                                                        "attributes": {
                                                                                            "overloadedDeclarations": [
                                                                                                null
                                                                                            ],
                                                                                            "referencedDeclaration": 5607,
                                                                                            "type": "mapping(address => mapping(address => uint256))",
                                                                                            "value": "_allowances"
                                                                                        },
                                                                                        "id": 5770,
                                                                                        "name": "Identifier",
                                                                                        "src": "5019:11:41"
                                                                                    },
                                                                                    {
                                                                                        "attributes": {
                                                                                            "overloadedDeclarations": [
                                                                                                null
                                                                                            ],
                                                                                            "referencedDeclaration": 5750,
                                                                                            "type": "address",
                                                                                            "value": "sender"
                                                                                        },
                                                                                        "id": 5771,
                                                                                        "name": "Identifier",
                                                                                        "src": "5031:6:41"
                                                                                    }
                                                                                ],
                                                                                "id": 5772,
                                                                                "name": "IndexAccess",
                                                                                "src": "5019:19:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "arguments": [
                                                                                        null
                                                                                    ],
                                                                                    "isConstant": false,
                                                                                    "isLValue": false,
                                                                                    "isPure": false,
                                                                                    "isStructConstructorCall": false,
                                                                                    "lValueRequested": false,
                                                                                    "names": [
                                                                                        null
                                                                                    ],
                                                                                    "tryCall": false,
                                                                                    "type": "address payable",
                                                                                    "type_conversion": false
                                                                                },
                                                                                "children": [
                                                                                    {
                                                                                        "attributes": {
                                                                                            "argumentTypes": [
                                                                                                null
                                                                                            ],
                                                                                            "overloadedDeclarations": [
                                                                                                null
                                                                                            ],
                                                                                            "referencedDeclaration": 5267,
                                                                                            "type": "function () view returns (address payable)",
                                                                                            "value": "_msgSender"
                                                                                        },
                                                                                        "id": 5773,
                                                                                        "name": "Identifier",
                                                                                        "src": "5039:10:41"
                                                                                    }
                                                                                ],
                                                                                "id": 5774,
                                                                                "name": "FunctionCall",
                                                                                "src": "5039:12:41"
                                                                            }
                                                                        ],
                                                                        "id": 5775,
                                                                        "name": "IndexAccess",
                                                                        "src": "5019:33:41"
                                                                    }
                                                                ],
                                                                "id": 5776,
                                                                "name": "MemberAccess",
                                                                "src": "5019:37:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5754,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 5777,
                                                                "name": "Identifier",
                                                                "src": "5057:6:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "string",
                                                                    "type": "literal_string \"ERC20: transfer amount exceeds allowance\"",
                                                                    "value": "ERC20: transfer amount exceeds allowance"
                                                                },
                                                                "id": 5778,
                                                                "name": "Literal",
                                                                "src": "5065:42:41"
                                                            }
                                                        ],
                                                        "id": 5779,
                                                        "name": "FunctionCall",
                                                        "src": "5019:89:41"
                                                    }
                                                ],
                                                "id": 5780,
                                                "name": "FunctionCall",
                                                "src": "4988:121:41"
                                            }
                                        ],
                                        "id": 5781,
                                        "name": "ExpressionStatement",
                                        "src": "4988:121:41"
                                    },
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5759
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "74727565",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "bool",
                                                    "type": "bool",
                                                    "value": "true"
                                                },
                                                "id": 5782,
                                                "name": "Literal",
                                                "src": "5126:4:41"
                                            }
                                        ],
                                        "id": 5783,
                                        "name": "Return",
                                        "src": "5119:11:41"
                                    }
                                ],
                                "id": 5784,
                                "name": "Block",
                                "src": "4932:205:41"
                            }
                        ],
                        "id": 5785,
                        "name": "FunctionDefinition",
                        "src": "4820:317:41"
                    },
                    {
                        "attributes": {
                            "functionSelector": "39509351",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "increaseAllowance",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Atomically increases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address."
                                },
                                "id": 5786,
                                "name": "StructuredDocumentation",
                                "src": "5143:384:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "spender",
                                            "scope": 5813,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5787,
                                                "name": "ElementaryTypeName",
                                                "src": "5559:7:41"
                                            }
                                        ],
                                        "id": 5788,
                                        "name": "VariableDeclaration",
                                        "src": "5559:15:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "addedValue",
                                            "scope": 5813,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5789,
                                                "name": "ElementaryTypeName",
                                                "src": "5576:7:41"
                                            }
                                        ],
                                        "id": 5790,
                                        "name": "VariableDeclaration",
                                        "src": "5576:18:41"
                                    }
                                ],
                                "id": 5791,
                                "name": "ParameterList",
                                "src": "5558:37:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5813,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 5792,
                                                "name": "ElementaryTypeName",
                                                "src": "5620:4:41"
                                            }
                                        ],
                                        "id": 5793,
                                        "name": "VariableDeclaration",
                                        "src": "5620:4:41"
                                    }
                                ],
                                "id": 5794,
                                "name": "ParameterList",
                                "src": "5619:6:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6064,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_approve"
                                                        },
                                                        "id": 5795,
                                                        "name": "Identifier",
                                                        "src": "5636:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5267,
                                                                    "type": "function () view returns (address payable)",
                                                                    "value": "_msgSender"
                                                                },
                                                                "id": 5796,
                                                                "name": "Identifier",
                                                                "src": "5645:10:41"
                                                            }
                                                        ],
                                                        "id": 5797,
                                                        "name": "FunctionCall",
                                                        "src": "5645:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5788,
                                                            "type": "address",
                                                            "value": "spender"
                                                        },
                                                        "id": 5798,
                                                        "name": "Identifier",
                                                        "src": "5659:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "add",
                                                                    "referencedDeclaration": 5417,
                                                                    "type": "function (uint256,uint256) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "type": "mapping(address => uint256)"
                                                                                },
                                                                                "children": [
                                                                                    {
                                                                                        "attributes": {
                                                                                            "overloadedDeclarations": [
                                                                                                null
                                                                                            ],
                                                                                            "referencedDeclaration": 5607,
                                                                                            "type": "mapping(address => mapping(address => uint256))",
                                                                                            "value": "_allowances"
                                                                                        },
                                                                                        "id": 5799,
                                                                                        "name": "Identifier",
                                                                                        "src": "5668:11:41"
                                                                                    },
                                                                                    {
                                                                                        "attributes": {
                                                                                            "arguments": [
                                                                                                null
                                                                                            ],
                                                                                            "isConstant": false,
                                                                                            "isLValue": false,
                                                                                            "isPure": false,
                                                                                            "isStructConstructorCall": false,
                                                                                            "lValueRequested": false,
                                                                                            "names": [
                                                                                                null
                                                                                            ],
                                                                                            "tryCall": false,
                                                                                            "type": "address payable",
                                                                                            "type_conversion": false
                                                                                        },
                                                                                        "children": [
                                                                                            {
                                                                                                "attributes": {
                                                                                                    "argumentTypes": [
                                                                                                        null
                                                                                                    ],
                                                                                                    "overloadedDeclarations": [
                                                                                                        null
                                                                                                    ],
                                                                                                    "referencedDeclaration": 5267,
                                                                                                    "type": "function () view returns (address payable)",
                                                                                                    "value": "_msgSender"
                                                                                                },
                                                                                                "id": 5800,
                                                                                                "name": "Identifier",
                                                                                                "src": "5680:10:41"
                                                                                            }
                                                                                        ],
                                                                                        "id": 5801,
                                                                                        "name": "FunctionCall",
                                                                                        "src": "5680:12:41"
                                                                                    }
                                                                                ],
                                                                                "id": 5802,
                                                                                "name": "IndexAccess",
                                                                                "src": "5668:25:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5788,
                                                                                    "type": "address",
                                                                                    "value": "spender"
                                                                                },
                                                                                "id": 5803,
                                                                                "name": "Identifier",
                                                                                "src": "5694:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5804,
                                                                        "name": "IndexAccess",
                                                                        "src": "5668:34:41"
                                                                    }
                                                                ],
                                                                "id": 5805,
                                                                "name": "MemberAccess",
                                                                "src": "5668:38:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5790,
                                                                    "type": "uint256",
                                                                    "value": "addedValue"
                                                                },
                                                                "id": 5806,
                                                                "name": "Identifier",
                                                                "src": "5707:10:41"
                                                            }
                                                        ],
                                                        "id": 5807,
                                                        "name": "FunctionCall",
                                                        "src": "5668:50:41"
                                                    }
                                                ],
                                                "id": 5808,
                                                "name": "FunctionCall",
                                                "src": "5636:83:41"
                                            }
                                        ],
                                        "id": 5809,
                                        "name": "ExpressionStatement",
                                        "src": "5636:83:41"
                                    },
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5794
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "74727565",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "bool",
                                                    "type": "bool",
                                                    "value": "true"
                                                },
                                                "id": 5810,
                                                "name": "Literal",
                                                "src": "5736:4:41"
                                            }
                                        ],
                                        "id": 5811,
                                        "name": "Return",
                                        "src": "5729:11:41"
                                    }
                                ],
                                "id": 5812,
                                "name": "Block",
                                "src": "5626:121:41"
                            }
                        ],
                        "id": 5813,
                        "name": "FunctionDefinition",
                        "src": "5532:215:41"
                    },
                    {
                        "attributes": {
                            "functionSelector": "a457c2d7",
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "decreaseAllowance",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "public"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Atomically decreases the allowance granted to `spender` by the caller.\n This is an alternative to {approve} that can be used as a mitigation for\n problems described in {IERC20-approve}.\n Emits an {Approval} event indicating the updated allowance.\n Requirements:\n - `spender` cannot be the zero address.\n - `spender` must have allowance for the caller of at least\n `subtractedValue`."
                                },
                                "id": 5814,
                                "name": "StructuredDocumentation",
                                "src": "5753:476:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "spender",
                                            "scope": 5842,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5815,
                                                "name": "ElementaryTypeName",
                                                "src": "6261:7:41"
                                            }
                                        ],
                                        "id": 5816,
                                        "name": "VariableDeclaration",
                                        "src": "6261:15:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "subtractedValue",
                                            "scope": 5842,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5817,
                                                "name": "ElementaryTypeName",
                                                "src": "6278:7:41"
                                            }
                                        ],
                                        "id": 5818,
                                        "name": "VariableDeclaration",
                                        "src": "6278:23:41"
                                    }
                                ],
                                "id": 5819,
                                "name": "ParameterList",
                                "src": "6260:42:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "",
                                            "scope": 5842,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "bool",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "bool",
                                                    "type": "bool"
                                                },
                                                "id": 5820,
                                                "name": "ElementaryTypeName",
                                                "src": "6327:4:41"
                                            }
                                        ],
                                        "id": 5821,
                                        "name": "VariableDeclaration",
                                        "src": "6327:4:41"
                                    }
                                ],
                                "id": 5822,
                                "name": "ParameterList",
                                "src": "6326:6:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6064,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_approve"
                                                        },
                                                        "id": 5823,
                                                        "name": "Identifier",
                                                        "src": "6343:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "arguments": [
                                                                null
                                                            ],
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        null
                                                                    ],
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5267,
                                                                    "type": "function () view returns (address payable)",
                                                                    "value": "_msgSender"
                                                                },
                                                                "id": 5824,
                                                                "name": "Identifier",
                                                                "src": "6352:10:41"
                                                            }
                                                        ],
                                                        "id": 5825,
                                                        "name": "FunctionCall",
                                                        "src": "6352:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5816,
                                                            "type": "address",
                                                            "value": "spender"
                                                        },
                                                        "id": 5826,
                                                        "name": "Identifier",
                                                        "src": "6366:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_stringliteral_f8b476f7d28209d77d4a4ac1fe36b9f8259aa1bb6bddfa6e89de7e51615cf8a8",
                                                                            "typeString": "literal_string \"ERC20: decreased allowance below zero\""
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "sub",
                                                                    "referencedDeclaration": 5462,
                                                                    "type": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "isConstant": false,
                                                                                    "isLValue": true,
                                                                                    "isPure": false,
                                                                                    "lValueRequested": false,
                                                                                    "type": "mapping(address => uint256)"
                                                                                },
                                                                                "children": [
                                                                                    {
                                                                                        "attributes": {
                                                                                            "overloadedDeclarations": [
                                                                                                null
                                                                                            ],
                                                                                            "referencedDeclaration": 5607,
                                                                                            "type": "mapping(address => mapping(address => uint256))",
                                                                                            "value": "_allowances"
                                                                                        },
                                                                                        "id": 5827,
                                                                                        "name": "Identifier",
                                                                                        "src": "6375:11:41"
                                                                                    },
                                                                                    {
                                                                                        "attributes": {
                                                                                            "arguments": [
                                                                                                null
                                                                                            ],
                                                                                            "isConstant": false,
                                                                                            "isLValue": false,
                                                                                            "isPure": false,
                                                                                            "isStructConstructorCall": false,
                                                                                            "lValueRequested": false,
                                                                                            "names": [
                                                                                                null
                                                                                            ],
                                                                                            "tryCall": false,
                                                                                            "type": "address payable",
                                                                                            "type_conversion": false
                                                                                        },
                                                                                        "children": [
                                                                                            {
                                                                                                "attributes": {
                                                                                                    "argumentTypes": [
                                                                                                        null
                                                                                                    ],
                                                                                                    "overloadedDeclarations": [
                                                                                                        null
                                                                                                    ],
                                                                                                    "referencedDeclaration": 5267,
                                                                                                    "type": "function () view returns (address payable)",
                                                                                                    "value": "_msgSender"
                                                                                                },
                                                                                                "id": 5828,
                                                                                                "name": "Identifier",
                                                                                                "src": "6387:10:41"
                                                                                            }
                                                                                        ],
                                                                                        "id": 5829,
                                                                                        "name": "FunctionCall",
                                                                                        "src": "6387:12:41"
                                                                                    }
                                                                                ],
                                                                                "id": 5830,
                                                                                "name": "IndexAccess",
                                                                                "src": "6375:25:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5816,
                                                                                    "type": "address",
                                                                                    "value": "spender"
                                                                                },
                                                                                "id": 5831,
                                                                                "name": "Identifier",
                                                                                "src": "6401:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5832,
                                                                        "name": "IndexAccess",
                                                                        "src": "6375:34:41"
                                                                    }
                                                                ],
                                                                "id": 5833,
                                                                "name": "MemberAccess",
                                                                "src": "6375:38:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5818,
                                                                    "type": "uint256",
                                                                    "value": "subtractedValue"
                                                                },
                                                                "id": 5834,
                                                                "name": "Identifier",
                                                                "src": "6414:15:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "string",
                                                                    "type": "literal_string \"ERC20: decreased allowance below zero\"",
                                                                    "value": "ERC20: decreased allowance below zero"
                                                                },
                                                                "id": 5835,
                                                                "name": "Literal",
                                                                "src": "6431:39:41"
                                                            }
                                                        ],
                                                        "id": 5836,
                                                        "name": "FunctionCall",
                                                        "src": "6375:96:41"
                                                    }
                                                ],
                                                "id": 5837,
                                                "name": "FunctionCall",
                                                "src": "6343:129:41"
                                            }
                                        ],
                                        "id": 5838,
                                        "name": "ExpressionStatement",
                                        "src": "6343:129:41"
                                    },
                                    {
                                        "attributes": {
                                            "functionReturnParameters": 5822
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "hexvalue": "74727565",
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "lValueRequested": false,
                                                    "token": "bool",
                                                    "type": "bool",
                                                    "value": "true"
                                                },
                                                "id": 5839,
                                                "name": "Literal",
                                                "src": "6489:4:41"
                                            }
                                        ],
                                        "id": 5840,
                                        "name": "Return",
                                        "src": "6482:11:41"
                                    }
                                ],
                                "id": 5841,
                                "name": "Block",
                                "src": "6333:167:41"
                            }
                        ],
                        "id": 5842,
                        "name": "FunctionDefinition",
                        "src": "6234:266:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "_transfer",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Moves tokens `amount` from `sender` to `recipient`.\n This is internal function is equivalent to {transfer}, and can be used to\n e.g. implement automatic token fees, slashing mechanisms, etc.\n Emits a {Transfer} event.\n Requirements:\n - `sender` cannot be the zero address.\n - `recipient` cannot be the zero address.\n - `sender` must have a balance of at least `amount`."
                                },
                                "id": 5843,
                                "name": "StructuredDocumentation",
                                "src": "6506:463:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "sender",
                                            "scope": 5908,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5844,
                                                "name": "ElementaryTypeName",
                                                "src": "6993:7:41"
                                            }
                                        ],
                                        "id": 5845,
                                        "name": "VariableDeclaration",
                                        "src": "6993:14:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "recipient",
                                            "scope": 5908,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5846,
                                                "name": "ElementaryTypeName",
                                                "src": "7009:7:41"
                                            }
                                        ],
                                        "id": 5847,
                                        "name": "VariableDeclaration",
                                        "src": "7009:17:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 5908,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5848,
                                                "name": "ElementaryTypeName",
                                                "src": "7028:7:41"
                                            }
                                        ],
                                        "id": 5849,
                                        "name": "VariableDeclaration",
                                        "src": "7028:14:41"
                                    }
                                ],
                                "id": 5850,
                                "name": "ParameterList",
                                "src": "6992:51:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5851,
                                "name": "ParameterList",
                                "src": "7061:0:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                                                                    "typeString": "literal_string \"ERC20: transfer from the zero address\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 5852,
                                                        "name": "Identifier",
                                                        "src": "7071:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5845,
                                                                    "type": "address",
                                                                    "value": "sender"
                                                                },
                                                                "id": 5853,
                                                                "name": "Identifier",
                                                                "src": "7079:6:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address payable",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 5854,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "7089:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5855,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "7089:7:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "hexvalue": "30",
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "token": "number",
                                                                            "type": "int_const 0",
                                                                            "value": "0"
                                                                        },
                                                                        "id": 5856,
                                                                        "name": "Literal",
                                                                        "src": "7097:1:41"
                                                                    }
                                                                ],
                                                                "id": 5857,
                                                                "name": "FunctionCall",
                                                                "src": "7089:10:41"
                                                            }
                                                        ],
                                                        "id": 5858,
                                                        "name": "BinaryOperation",
                                                        "src": "7079:20:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"ERC20: transfer from the zero address\"",
                                                            "value": "ERC20: transfer from the zero address"
                                                        },
                                                        "id": 5859,
                                                        "name": "Literal",
                                                        "src": "7101:39:41"
                                                    }
                                                ],
                                                "id": 5860,
                                                "name": "FunctionCall",
                                                "src": "7071:70:41"
                                            }
                                        ],
                                        "id": 5861,
                                        "name": "ExpressionStatement",
                                        "src": "7071:70:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                                                                    "typeString": "literal_string \"ERC20: transfer to the zero address\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 5862,
                                                        "name": "Identifier",
                                                        "src": "7151:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5847,
                                                                    "type": "address",
                                                                    "value": "recipient"
                                                                },
                                                                "id": 5863,
                                                                "name": "Identifier",
                                                                "src": "7159:9:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address payable",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 5864,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "7172:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5865,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "7172:7:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "hexvalue": "30",
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "token": "number",
                                                                            "type": "int_const 0",
                                                                            "value": "0"
                                                                        },
                                                                        "id": 5866,
                                                                        "name": "Literal",
                                                                        "src": "7180:1:41"
                                                                    }
                                                                ],
                                                                "id": 5867,
                                                                "name": "FunctionCall",
                                                                "src": "7172:10:41"
                                                            }
                                                        ],
                                                        "id": 5868,
                                                        "name": "BinaryOperation",
                                                        "src": "7159:23:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"ERC20: transfer to the zero address\"",
                                                            "value": "ERC20: transfer to the zero address"
                                                        },
                                                        "id": 5869,
                                                        "name": "Literal",
                                                        "src": "7184:37:41"
                                                    }
                                                ],
                                                "id": 5870,
                                                "name": "FunctionCall",
                                                "src": "7151:71:41"
                                            }
                                        ],
                                        "id": 5871,
                                        "name": "ExpressionStatement",
                                        "src": "7151:71:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6086,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_beforeTokenTransfer"
                                                        },
                                                        "id": 5872,
                                                        "name": "Identifier",
                                                        "src": "7233:20:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5845,
                                                            "type": "address",
                                                            "value": "sender"
                                                        },
                                                        "id": 5873,
                                                        "name": "Identifier",
                                                        "src": "7254:6:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5847,
                                                            "type": "address",
                                                            "value": "recipient"
                                                        },
                                                        "id": 5874,
                                                        "name": "Identifier",
                                                        "src": "7262:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5849,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5875,
                                                        "name": "Identifier",
                                                        "src": "7273:6:41"
                                                    }
                                                ],
                                                "id": 5876,
                                                "name": "FunctionCall",
                                                "src": "7233:47:41"
                                            }
                                        ],
                                        "id": 5877,
                                        "name": "ExpressionStatement",
                                        "src": "7233:47:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "type": "uint256"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5601,
                                                                    "type": "mapping(address => uint256)",
                                                                    "value": "_balances"
                                                                },
                                                                "id": 5878,
                                                                "name": "Identifier",
                                                                "src": "7291:9:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5845,
                                                                    "type": "address",
                                                                    "value": "sender"
                                                                },
                                                                "id": 5879,
                                                                "name": "Identifier",
                                                                "src": "7301:6:41"
                                                            }
                                                        ],
                                                        "id": 5880,
                                                        "name": "IndexAccess",
                                                        "src": "7291:17:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_stringliteral_4107e8a8b9e94bf8ff83080ddec1c0bffe897ebc2241b89d44f66b3d274088b6",
                                                                            "typeString": "literal_string \"ERC20: transfer amount exceeds balance\""
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "sub",
                                                                    "referencedDeclaration": 5462,
                                                                    "type": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5601,
                                                                                    "type": "mapping(address => uint256)",
                                                                                    "value": "_balances"
                                                                                },
                                                                                "id": 5881,
                                                                                "name": "Identifier",
                                                                                "src": "7311:9:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5845,
                                                                                    "type": "address",
                                                                                    "value": "sender"
                                                                                },
                                                                                "id": 5882,
                                                                                "name": "Identifier",
                                                                                "src": "7321:6:41"
                                                                            }
                                                                        ],
                                                                        "id": 5883,
                                                                        "name": "IndexAccess",
                                                                        "src": "7311:17:41"
                                                                    }
                                                                ],
                                                                "id": 5884,
                                                                "name": "MemberAccess",
                                                                "src": "7311:21:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5849,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 5885,
                                                                "name": "Identifier",
                                                                "src": "7333:6:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "string",
                                                                    "type": "literal_string \"ERC20: transfer amount exceeds balance\"",
                                                                    "value": "ERC20: transfer amount exceeds balance"
                                                                },
                                                                "id": 5886,
                                                                "name": "Literal",
                                                                "src": "7341:40:41"
                                                            }
                                                        ],
                                                        "id": 5887,
                                                        "name": "FunctionCall",
                                                        "src": "7311:71:41"
                                                    }
                                                ],
                                                "id": 5888,
                                                "name": "Assignment",
                                                "src": "7291:91:41"
                                            }
                                        ],
                                        "id": 5889,
                                        "name": "ExpressionStatement",
                                        "src": "7291:91:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "type": "uint256"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5601,
                                                                    "type": "mapping(address => uint256)",
                                                                    "value": "_balances"
                                                                },
                                                                "id": 5890,
                                                                "name": "Identifier",
                                                                "src": "7392:9:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5847,
                                                                    "type": "address",
                                                                    "value": "recipient"
                                                                },
                                                                "id": 5891,
                                                                "name": "Identifier",
                                                                "src": "7402:9:41"
                                                            }
                                                        ],
                                                        "id": 5892,
                                                        "name": "IndexAccess",
                                                        "src": "7392:20:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "add",
                                                                    "referencedDeclaration": 5417,
                                                                    "type": "function (uint256,uint256) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5601,
                                                                                    "type": "mapping(address => uint256)",
                                                                                    "value": "_balances"
                                                                                },
                                                                                "id": 5893,
                                                                                "name": "Identifier",
                                                                                "src": "7415:9:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5847,
                                                                                    "type": "address",
                                                                                    "value": "recipient"
                                                                                },
                                                                                "id": 5894,
                                                                                "name": "Identifier",
                                                                                "src": "7425:9:41"
                                                                            }
                                                                        ],
                                                                        "id": 5895,
                                                                        "name": "IndexAccess",
                                                                        "src": "7415:20:41"
                                                                    }
                                                                ],
                                                                "id": 5896,
                                                                "name": "MemberAccess",
                                                                "src": "7415:24:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5849,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 5897,
                                                                "name": "Identifier",
                                                                "src": "7440:6:41"
                                                            }
                                                        ],
                                                        "id": 5898,
                                                        "name": "FunctionCall",
                                                        "src": "7415:32:41"
                                                    }
                                                ],
                                                "id": 5899,
                                                "name": "Assignment",
                                                "src": "7392:55:41"
                                            }
                                        ],
                                        "id": 5900,
                                        "name": "ExpressionStatement",
                                        "src": "7392:55:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6155,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "Transfer"
                                                        },
                                                        "id": 5901,
                                                        "name": "Identifier",
                                                        "src": "7462:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5845,
                                                            "type": "address",
                                                            "value": "sender"
                                                        },
                                                        "id": 5902,
                                                        "name": "Identifier",
                                                        "src": "7471:6:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5847,
                                                            "type": "address",
                                                            "value": "recipient"
                                                        },
                                                        "id": 5903,
                                                        "name": "Identifier",
                                                        "src": "7479:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5849,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5904,
                                                        "name": "Identifier",
                                                        "src": "7490:6:41"
                                                    }
                                                ],
                                                "id": 5905,
                                                "name": "FunctionCall",
                                                "src": "7462:35:41"
                                            }
                                        ],
                                        "id": 5906,
                                        "name": "EmitStatement",
                                        "src": "7457:40:41"
                                    }
                                ],
                                "id": 5907,
                                "name": "Block",
                                "src": "7061:443:41"
                            }
                        ],
                        "id": 5908,
                        "name": "FunctionDefinition",
                        "src": "6974:530:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "_mint",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": "@dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address."
                                },
                                "id": 5909,
                                "name": "StructuredDocumentation",
                                "src": "7510:260:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "scope": 5963,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5910,
                                                "name": "ElementaryTypeName",
                                                "src": "7790:7:41"
                                            }
                                        ],
                                        "id": 5911,
                                        "name": "VariableDeclaration",
                                        "src": "7790:15:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 5963,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5912,
                                                "name": "ElementaryTypeName",
                                                "src": "7807:7:41"
                                            }
                                        ],
                                        "id": 5913,
                                        "name": "VariableDeclaration",
                                        "src": "7807:14:41"
                                    }
                                ],
                                "id": 5914,
                                "name": "ParameterList",
                                "src": "7789:33:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5915,
                                "name": "ParameterList",
                                "src": "7840:0:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                                                                    "typeString": "literal_string \"ERC20: mint to the zero address\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 5916,
                                                        "name": "Identifier",
                                                        "src": "7850:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5911,
                                                                    "type": "address",
                                                                    "value": "account"
                                                                },
                                                                "id": 5917,
                                                                "name": "Identifier",
                                                                "src": "7858:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address payable",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 5918,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "7869:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5919,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "7869:7:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "hexvalue": "30",
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "token": "number",
                                                                            "type": "int_const 0",
                                                                            "value": "0"
                                                                        },
                                                                        "id": 5920,
                                                                        "name": "Literal",
                                                                        "src": "7877:1:41"
                                                                    }
                                                                ],
                                                                "id": 5921,
                                                                "name": "FunctionCall",
                                                                "src": "7869:10:41"
                                                            }
                                                        ],
                                                        "id": 5922,
                                                        "name": "BinaryOperation",
                                                        "src": "7858:21:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"ERC20: mint to the zero address\"",
                                                            "value": "ERC20: mint to the zero address"
                                                        },
                                                        "id": 5923,
                                                        "name": "Literal",
                                                        "src": "7881:33:41"
                                                    }
                                                ],
                                                "id": 5924,
                                                "name": "FunctionCall",
                                                "src": "7850:65:41"
                                            }
                                        ],
                                        "id": 5925,
                                        "name": "ExpressionStatement",
                                        "src": "7850:65:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6086,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_beforeTokenTransfer"
                                                        },
                                                        "id": 5926,
                                                        "name": "Identifier",
                                                        "src": "7926:20:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": true
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "type": "type(address)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "name": "address"
                                                                        },
                                                                        "id": 5927,
                                                                        "name": "ElementaryTypeName",
                                                                        "src": "7947:7:41"
                                                                    }
                                                                ],
                                                                "id": 5928,
                                                                "name": "ElementaryTypeNameExpression",
                                                                "src": "7947:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "30",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "number",
                                                                    "type": "int_const 0",
                                                                    "value": "0"
                                                                },
                                                                "id": 5929,
                                                                "name": "Literal",
                                                                "src": "7955:1:41"
                                                            }
                                                        ],
                                                        "id": 5930,
                                                        "name": "FunctionCall",
                                                        "src": "7947:10:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5911,
                                                            "type": "address",
                                                            "value": "account"
                                                        },
                                                        "id": 5931,
                                                        "name": "Identifier",
                                                        "src": "7959:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5913,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5932,
                                                        "name": "Identifier",
                                                        "src": "7968:6:41"
                                                    }
                                                ],
                                                "id": 5933,
                                                "name": "FunctionCall",
                                                "src": "7926:49:41"
                                            }
                                        ],
                                        "id": 5934,
                                        "name": "ExpressionStatement",
                                        "src": "7926:49:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5609,
                                                            "type": "uint256",
                                                            "value": "_totalSupply"
                                                        },
                                                        "id": 5935,
                                                        "name": "Identifier",
                                                        "src": "7986:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "add",
                                                                    "referencedDeclaration": 5417,
                                                                    "type": "function (uint256,uint256) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": 5609,
                                                                            "type": "uint256",
                                                                            "value": "_totalSupply"
                                                                        },
                                                                        "id": 5936,
                                                                        "name": "Identifier",
                                                                        "src": "8001:12:41"
                                                                    }
                                                                ],
                                                                "id": 5937,
                                                                "name": "MemberAccess",
                                                                "src": "8001:16:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5913,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 5938,
                                                                "name": "Identifier",
                                                                "src": "8018:6:41"
                                                            }
                                                        ],
                                                        "id": 5939,
                                                        "name": "FunctionCall",
                                                        "src": "8001:24:41"
                                                    }
                                                ],
                                                "id": 5940,
                                                "name": "Assignment",
                                                "src": "7986:39:41"
                                            }
                                        ],
                                        "id": 5941,
                                        "name": "ExpressionStatement",
                                        "src": "7986:39:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "type": "uint256"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5601,
                                                                    "type": "mapping(address => uint256)",
                                                                    "value": "_balances"
                                                                },
                                                                "id": 5942,
                                                                "name": "Identifier",
                                                                "src": "8035:9:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5911,
                                                                    "type": "address",
                                                                    "value": "account"
                                                                },
                                                                "id": 5943,
                                                                "name": "Identifier",
                                                                "src": "8045:7:41"
                                                            }
                                                        ],
                                                        "id": 5944,
                                                        "name": "IndexAccess",
                                                        "src": "8035:18:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "add",
                                                                    "referencedDeclaration": 5417,
                                                                    "type": "function (uint256,uint256) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5601,
                                                                                    "type": "mapping(address => uint256)",
                                                                                    "value": "_balances"
                                                                                },
                                                                                "id": 5945,
                                                                                "name": "Identifier",
                                                                                "src": "8056:9:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5911,
                                                                                    "type": "address",
                                                                                    "value": "account"
                                                                                },
                                                                                "id": 5946,
                                                                                "name": "Identifier",
                                                                                "src": "8066:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5947,
                                                                        "name": "IndexAccess",
                                                                        "src": "8056:18:41"
                                                                    }
                                                                ],
                                                                "id": 5948,
                                                                "name": "MemberAccess",
                                                                "src": "8056:22:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5913,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 5949,
                                                                "name": "Identifier",
                                                                "src": "8079:6:41"
                                                            }
                                                        ],
                                                        "id": 5950,
                                                        "name": "FunctionCall",
                                                        "src": "8056:30:41"
                                                    }
                                                ],
                                                "id": 5951,
                                                "name": "Assignment",
                                                "src": "8035:51:41"
                                            }
                                        ],
                                        "id": 5952,
                                        "name": "ExpressionStatement",
                                        "src": "8035:51:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6155,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "Transfer"
                                                        },
                                                        "id": 5953,
                                                        "name": "Identifier",
                                                        "src": "8101:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": true
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "type": "type(address)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "name": "address"
                                                                        },
                                                                        "id": 5954,
                                                                        "name": "ElementaryTypeName",
                                                                        "src": "8110:7:41"
                                                                    }
                                                                ],
                                                                "id": 5955,
                                                                "name": "ElementaryTypeNameExpression",
                                                                "src": "8110:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "30",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "number",
                                                                    "type": "int_const 0",
                                                                    "value": "0"
                                                                },
                                                                "id": 5956,
                                                                "name": "Literal",
                                                                "src": "8118:1:41"
                                                            }
                                                        ],
                                                        "id": 5957,
                                                        "name": "FunctionCall",
                                                        "src": "8110:10:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5911,
                                                            "type": "address",
                                                            "value": "account"
                                                        },
                                                        "id": 5958,
                                                        "name": "Identifier",
                                                        "src": "8122:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5913,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5959,
                                                        "name": "Identifier",
                                                        "src": "8131:6:41"
                                                    }
                                                ],
                                                "id": 5960,
                                                "name": "FunctionCall",
                                                "src": "8101:37:41"
                                            }
                                        ],
                                        "id": 5961,
                                        "name": "EmitStatement",
                                        "src": "8096:42:41"
                                    }
                                ],
                                "id": 5962,
                                "name": "Block",
                                "src": "7840:305:41"
                            }
                        ],
                        "id": 5963,
                        "name": "FunctionDefinition",
                        "src": "7775:370:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "_burn",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Destroys `amount` tokens from `account`, reducing the\n total supply.\n Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `account` cannot be the zero address.\n - `account` must have at least `amount` tokens."
                                },
                                "id": 5964,
                                "name": "StructuredDocumentation",
                                "src": "8151:309:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "account",
                                            "scope": 6019,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 5965,
                                                "name": "ElementaryTypeName",
                                                "src": "8480:7:41"
                                            }
                                        ],
                                        "id": 5966,
                                        "name": "VariableDeclaration",
                                        "src": "8480:15:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 6019,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 5967,
                                                "name": "ElementaryTypeName",
                                                "src": "8497:7:41"
                                            }
                                        ],
                                        "id": 5968,
                                        "name": "VariableDeclaration",
                                        "src": "8497:14:41"
                                    }
                                ],
                                "id": 5969,
                                "name": "ParameterList",
                                "src": "8479:33:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 5970,
                                "name": "ParameterList",
                                "src": "8530:0:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                                                                    "typeString": "literal_string \"ERC20: burn from the zero address\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 5971,
                                                        "name": "Identifier",
                                                        "src": "8540:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5966,
                                                                    "type": "address",
                                                                    "value": "account"
                                                                },
                                                                "id": 5972,
                                                                "name": "Identifier",
                                                                "src": "8548:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address payable",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 5973,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "8559:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5974,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "8559:7:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "hexvalue": "30",
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "token": "number",
                                                                            "type": "int_const 0",
                                                                            "value": "0"
                                                                        },
                                                                        "id": 5975,
                                                                        "name": "Literal",
                                                                        "src": "8567:1:41"
                                                                    }
                                                                ],
                                                                "id": 5976,
                                                                "name": "FunctionCall",
                                                                "src": "8559:10:41"
                                                            }
                                                        ],
                                                        "id": 5977,
                                                        "name": "BinaryOperation",
                                                        "src": "8548:21:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"ERC20: burn from the zero address\"",
                                                            "value": "ERC20: burn from the zero address"
                                                        },
                                                        "id": 5978,
                                                        "name": "Literal",
                                                        "src": "8571:35:41"
                                                    }
                                                ],
                                                "id": 5979,
                                                "name": "FunctionCall",
                                                "src": "8540:67:41"
                                            }
                                        ],
                                        "id": 5980,
                                        "name": "ExpressionStatement",
                                        "src": "8540:67:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6086,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "_beforeTokenTransfer"
                                                        },
                                                        "id": 5981,
                                                        "name": "Identifier",
                                                        "src": "8618:20:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5966,
                                                            "type": "address",
                                                            "value": "account"
                                                        },
                                                        "id": 5982,
                                                        "name": "Identifier",
                                                        "src": "8639:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": true
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "type": "type(address)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "name": "address"
                                                                        },
                                                                        "id": 5983,
                                                                        "name": "ElementaryTypeName",
                                                                        "src": "8648:7:41"
                                                                    }
                                                                ],
                                                                "id": 5984,
                                                                "name": "ElementaryTypeNameExpression",
                                                                "src": "8648:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "30",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "number",
                                                                    "type": "int_const 0",
                                                                    "value": "0"
                                                                },
                                                                "id": 5985,
                                                                "name": "Literal",
                                                                "src": "8656:1:41"
                                                            }
                                                        ],
                                                        "id": 5986,
                                                        "name": "FunctionCall",
                                                        "src": "8648:10:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5968,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 5987,
                                                        "name": "Identifier",
                                                        "src": "8660:6:41"
                                                    }
                                                ],
                                                "id": 5988,
                                                "name": "FunctionCall",
                                                "src": "8618:49:41"
                                            }
                                        ],
                                        "id": 5989,
                                        "name": "ExpressionStatement",
                                        "src": "8618:49:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "type": "uint256"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5601,
                                                                    "type": "mapping(address => uint256)",
                                                                    "value": "_balances"
                                                                },
                                                                "id": 5990,
                                                                "name": "Identifier",
                                                                "src": "8678:9:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5966,
                                                                    "type": "address",
                                                                    "value": "account"
                                                                },
                                                                "id": 5991,
                                                                "name": "Identifier",
                                                                "src": "8688:7:41"
                                                            }
                                                        ],
                                                        "id": 5992,
                                                        "name": "IndexAccess",
                                                        "src": "8678:18:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        },
                                                                        {
                                                                            "typeIdentifier": "t_stringliteral_149b126e7125232b4200af45303d04fba8b74653b1a295a6a561a528c33fefdd",
                                                                            "typeString": "literal_string \"ERC20: burn amount exceeds balance\""
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "sub",
                                                                    "referencedDeclaration": 5462,
                                                                    "type": "function (uint256,uint256,string memory) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "isConstant": false,
                                                                            "isLValue": true,
                                                                            "isPure": false,
                                                                            "lValueRequested": false,
                                                                            "type": "uint256"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5601,
                                                                                    "type": "mapping(address => uint256)",
                                                                                    "value": "_balances"
                                                                                },
                                                                                "id": 5993,
                                                                                "name": "Identifier",
                                                                                "src": "8699:9:41"
                                                                            },
                                                                            {
                                                                                "attributes": {
                                                                                    "overloadedDeclarations": [
                                                                                        null
                                                                                    ],
                                                                                    "referencedDeclaration": 5966,
                                                                                    "type": "address",
                                                                                    "value": "account"
                                                                                },
                                                                                "id": 5994,
                                                                                "name": "Identifier",
                                                                                "src": "8709:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 5995,
                                                                        "name": "IndexAccess",
                                                                        "src": "8699:18:41"
                                                                    }
                                                                ],
                                                                "id": 5996,
                                                                "name": "MemberAccess",
                                                                "src": "8699:22:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5968,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 5997,
                                                                "name": "Identifier",
                                                                "src": "8722:6:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "string",
                                                                    "type": "literal_string \"ERC20: burn amount exceeds balance\"",
                                                                    "value": "ERC20: burn amount exceeds balance"
                                                                },
                                                                "id": 5998,
                                                                "name": "Literal",
                                                                "src": "8730:36:41"
                                                            }
                                                        ],
                                                        "id": 5999,
                                                        "name": "FunctionCall",
                                                        "src": "8699:68:41"
                                                    }
                                                ],
                                                "id": 6000,
                                                "name": "Assignment",
                                                "src": "8678:89:41"
                                            }
                                        ],
                                        "id": 6001,
                                        "name": "ExpressionStatement",
                                        "src": "8678:89:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5609,
                                                            "type": "uint256",
                                                            "value": "_totalSupply"
                                                        },
                                                        "id": 6002,
                                                        "name": "Identifier",
                                                        "src": "8777:12:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "uint256",
                                                            "type_conversion": false
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_uint256",
                                                                            "typeString": "uint256"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "member_name": "sub",
                                                                    "referencedDeclaration": 5434,
                                                                    "type": "function (uint256,uint256) pure returns (uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": 5609,
                                                                            "type": "uint256",
                                                                            "value": "_totalSupply"
                                                                        },
                                                                        "id": 6003,
                                                                        "name": "Identifier",
                                                                        "src": "8792:12:41"
                                                                    }
                                                                ],
                                                                "id": 6004,
                                                                "name": "MemberAccess",
                                                                "src": "8792:16:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 5968,
                                                                    "type": "uint256",
                                                                    "value": "amount"
                                                                },
                                                                "id": 6005,
                                                                "name": "Identifier",
                                                                "src": "8809:6:41"
                                                            }
                                                        ],
                                                        "id": 6006,
                                                        "name": "FunctionCall",
                                                        "src": "8792:24:41"
                                                    }
                                                ],
                                                "id": 6007,
                                                "name": "Assignment",
                                                "src": "8777:39:41"
                                            }
                                        ],
                                        "id": 6008,
                                        "name": "ExpressionStatement",
                                        "src": "8777:39:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address_payable",
                                                                    "typeString": "address payable"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6155,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "Transfer"
                                                        },
                                                        "id": 6009,
                                                        "name": "Identifier",
                                                        "src": "8831:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5966,
                                                            "type": "address",
                                                            "value": "account"
                                                        },
                                                        "id": 6010,
                                                        "name": "Identifier",
                                                        "src": "8840:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "isStructConstructorCall": false,
                                                            "lValueRequested": false,
                                                            "names": [
                                                                null
                                                            ],
                                                            "tryCall": false,
                                                            "type": "address payable",
                                                            "type_conversion": true
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_rational_0_by_1",
                                                                            "typeString": "int_const 0"
                                                                        }
                                                                    ],
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "type": "type(address)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "name": "address"
                                                                        },
                                                                        "id": 6011,
                                                                        "name": "ElementaryTypeName",
                                                                        "src": "8849:7:41"
                                                                    }
                                                                ],
                                                                "id": 6012,
                                                                "name": "ElementaryTypeNameExpression",
                                                                "src": "8849:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "hexvalue": "30",
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "token": "number",
                                                                    "type": "int_const 0",
                                                                    "value": "0"
                                                                },
                                                                "id": 6013,
                                                                "name": "Literal",
                                                                "src": "8857:1:41"
                                                            }
                                                        ],
                                                        "id": 6014,
                                                        "name": "FunctionCall",
                                                        "src": "8849:10:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5968,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 6015,
                                                        "name": "Identifier",
                                                        "src": "8861:6:41"
                                                    }
                                                ],
                                                "id": 6016,
                                                "name": "FunctionCall",
                                                "src": "8831:37:41"
                                            }
                                        ],
                                        "id": 6017,
                                        "name": "EmitStatement",
                                        "src": "8826:42:41"
                                    }
                                ],
                                "id": 6018,
                                "name": "Block",
                                "src": "8530:345:41"
                            }
                        ],
                        "id": 6019,
                        "name": "FunctionDefinition",
                        "src": "8465:410:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "_approve",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n This internal function is equivalent to `approve`, and can be used to\n e.g. set automatic allowances for certain subsystems, etc.\n Emits an {Approval} event.\n Requirements:\n - `owner` cannot be the zero address.\n - `spender` cannot be the zero address."
                                },
                                "id": 6020,
                                "name": "StructuredDocumentation",
                                "src": "8881:412:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "owner",
                                            "scope": 6064,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 6021,
                                                "name": "ElementaryTypeName",
                                                "src": "9316:7:41"
                                            }
                                        ],
                                        "id": 6022,
                                        "name": "VariableDeclaration",
                                        "src": "9316:13:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "spender",
                                            "scope": 6064,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 6023,
                                                "name": "ElementaryTypeName",
                                                "src": "9331:7:41"
                                            }
                                        ],
                                        "id": 6024,
                                        "name": "VariableDeclaration",
                                        "src": "9331:15:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 6064,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 6025,
                                                "name": "ElementaryTypeName",
                                                "src": "9348:7:41"
                                            }
                                        ],
                                        "id": 6026,
                                        "name": "VariableDeclaration",
                                        "src": "9348:14:41"
                                    }
                                ],
                                "id": 6027,
                                "name": "ParameterList",
                                "src": "9315:48:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 6028,
                                "name": "ParameterList",
                                "src": "9381:0:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                                                                    "typeString": "literal_string \"ERC20: approve from the zero address\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 6029,
                                                        "name": "Identifier",
                                                        "src": "9391:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 6022,
                                                                    "type": "address",
                                                                    "value": "owner"
                                                                },
                                                                "id": 6030,
                                                                "name": "Identifier",
                                                                "src": "9399:5:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address payable",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 6031,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "9408:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 6032,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "9408:7:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "hexvalue": "30",
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "token": "number",
                                                                            "type": "int_const 0",
                                                                            "value": "0"
                                                                        },
                                                                        "id": 6033,
                                                                        "name": "Literal",
                                                                        "src": "9416:1:41"
                                                                    }
                                                                ],
                                                                "id": 6034,
                                                                "name": "FunctionCall",
                                                                "src": "9408:10:41"
                                                            }
                                                        ],
                                                        "id": 6035,
                                                        "name": "BinaryOperation",
                                                        "src": "9399:19:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"ERC20: approve from the zero address\"",
                                                            "value": "ERC20: approve from the zero address"
                                                        },
                                                        "id": 6036,
                                                        "name": "Literal",
                                                        "src": "9420:38:41"
                                                    }
                                                ],
                                                "id": 6037,
                                                "name": "FunctionCall",
                                                "src": "9391:68:41"
                                            }
                                        ],
                                        "id": 6038,
                                        "name": "ExpressionStatement",
                                        "src": "9391:68:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_bool",
                                                                    "typeString": "bool"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                                                                    "typeString": "literal_string \"ERC20: approve to the zero address\""
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                -18,
                                                                -18
                                                            ],
                                                            "referencedDeclaration": -18,
                                                            "type": "function (bool,string memory) pure",
                                                            "value": "require"
                                                        },
                                                        "id": 6039,
                                                        "name": "Identifier",
                                                        "src": "9469:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "operator": "!=",
                                                            "type": "bool"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 6024,
                                                                    "type": "address",
                                                                    "value": "spender"
                                                                },
                                                                "id": 6040,
                                                                "name": "Identifier",
                                                                "src": "9477:7:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "isStructConstructorCall": false,
                                                                    "lValueRequested": false,
                                                                    "names": [
                                                                        null
                                                                    ],
                                                                    "tryCall": false,
                                                                    "type": "address payable",
                                                                    "type_conversion": true
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "argumentTypes": [
                                                                                {
                                                                                    "typeIdentifier": "t_rational_0_by_1",
                                                                                    "typeString": "int_const 0"
                                                                                }
                                                                            ],
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "type": "type(address)"
                                                                        },
                                                                        "children": [
                                                                            {
                                                                                "attributes": {
                                                                                    "name": "address"
                                                                                },
                                                                                "id": 6041,
                                                                                "name": "ElementaryTypeName",
                                                                                "src": "9488:7:41"
                                                                            }
                                                                        ],
                                                                        "id": 6042,
                                                                        "name": "ElementaryTypeNameExpression",
                                                                        "src": "9488:7:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "hexvalue": "30",
                                                                            "isConstant": false,
                                                                            "isLValue": false,
                                                                            "isPure": true,
                                                                            "lValueRequested": false,
                                                                            "token": "number",
                                                                            "type": "int_const 0",
                                                                            "value": "0"
                                                                        },
                                                                        "id": 6043,
                                                                        "name": "Literal",
                                                                        "src": "9496:1:41"
                                                                    }
                                                                ],
                                                                "id": 6044,
                                                                "name": "FunctionCall",
                                                                "src": "9488:10:41"
                                                            }
                                                        ],
                                                        "id": 6045,
                                                        "name": "BinaryOperation",
                                                        "src": "9477:21:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "hexvalue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "lValueRequested": false,
                                                            "token": "string",
                                                            "type": "literal_string \"ERC20: approve to the zero address\"",
                                                            "value": "ERC20: approve to the zero address"
                                                        },
                                                        "id": 6046,
                                                        "name": "Literal",
                                                        "src": "9500:36:41"
                                                    }
                                                ],
                                                "id": 6047,
                                                "name": "FunctionCall",
                                                "src": "9469:68:41"
                                            }
                                        ],
                                        "id": 6048,
                                        "name": "ExpressionStatement",
                                        "src": "9469:68:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint256"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "isConstant": false,
                                                            "isLValue": true,
                                                            "isPure": false,
                                                            "lValueRequested": true,
                                                            "type": "uint256"
                                                        },
                                                        "children": [
                                                            {
                                                                "attributes": {
                                                                    "isConstant": false,
                                                                    "isLValue": true,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "type": "mapping(address => uint256)"
                                                                },
                                                                "children": [
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": 5607,
                                                                            "type": "mapping(address => mapping(address => uint256))",
                                                                            "value": "_allowances"
                                                                        },
                                                                        "id": 6049,
                                                                        "name": "Identifier",
                                                                        "src": "9548:11:41"
                                                                    },
                                                                    {
                                                                        "attributes": {
                                                                            "overloadedDeclarations": [
                                                                                null
                                                                            ],
                                                                            "referencedDeclaration": 6022,
                                                                            "type": "address",
                                                                            "value": "owner"
                                                                        },
                                                                        "id": 6050,
                                                                        "name": "Identifier",
                                                                        "src": "9560:5:41"
                                                                    }
                                                                ],
                                                                "id": 6052,
                                                                "name": "IndexAccess",
                                                                "src": "9548:18:41"
                                                            },
                                                            {
                                                                "attributes": {
                                                                    "overloadedDeclarations": [
                                                                        null
                                                                    ],
                                                                    "referencedDeclaration": 6024,
                                                                    "type": "address",
                                                                    "value": "spender"
                                                                },
                                                                "id": 6051,
                                                                "name": "Identifier",
                                                                "src": "9567:7:41"
                                                            }
                                                        ],
                                                        "id": 6053,
                                                        "name": "IndexAccess",
                                                        "src": "9548:27:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6026,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 6054,
                                                        "name": "Identifier",
                                                        "src": "9578:6:41"
                                                    }
                                                ],
                                                "id": 6055,
                                                "name": "Assignment",
                                                "src": "9548:36:41"
                                            }
                                        ],
                                        "id": 6056,
                                        "name": "ExpressionStatement",
                                        "src": "9548:36:41"
                                    },
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "isStructConstructorCall": false,
                                                    "lValueRequested": false,
                                                    "names": [
                                                        null
                                                    ],
                                                    "tryCall": false,
                                                    "type": "tuple()",
                                                    "type_conversion": false
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "argumentTypes": [
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                },
                                                                {
                                                                    "typeIdentifier": "t_uint256",
                                                                    "typeString": "uint256"
                                                                }
                                                            ],
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6164,
                                                            "type": "function (address,address,uint256)",
                                                            "value": "Approval"
                                                        },
                                                        "id": 6057,
                                                        "name": "Identifier",
                                                        "src": "9599:8:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6022,
                                                            "type": "address",
                                                            "value": "owner"
                                                        },
                                                        "id": 6058,
                                                        "name": "Identifier",
                                                        "src": "9608:5:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6024,
                                                            "type": "address",
                                                            "value": "spender"
                                                        },
                                                        "id": 6059,
                                                        "name": "Identifier",
                                                        "src": "9615:7:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6026,
                                                            "type": "uint256",
                                                            "value": "amount"
                                                        },
                                                        "id": 6060,
                                                        "name": "Identifier",
                                                        "src": "9624:6:41"
                                                    }
                                                ],
                                                "id": 6061,
                                                "name": "FunctionCall",
                                                "src": "9599:32:41"
                                            }
                                        ],
                                        "id": 6062,
                                        "name": "EmitStatement",
                                        "src": "9594:37:41"
                                    }
                                ],
                                "id": 6063,
                                "name": "Block",
                                "src": "9381:257:41"
                            }
                        ],
                        "id": 6064,
                        "name": "FunctionDefinition",
                        "src": "9298:340:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "_setupDecimals",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": false,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Sets {decimals} to a value other than the default one of 18.\n WARNING: This function should only be called from the constructor. Most\n applications that interact with token contracts will not expect\n {decimals} to ever change, and may work incorrectly if it does."
                                },
                                "id": 6065,
                                "name": "StructuredDocumentation",
                                "src": "9644:312:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "decimals_",
                                            "scope": 6075,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint8",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint8",
                                                    "type": "uint8"
                                                },
                                                "id": 6066,
                                                "name": "ElementaryTypeName",
                                                "src": "9985:5:41"
                                            }
                                        ],
                                        "id": 6067,
                                        "name": "VariableDeclaration",
                                        "src": "9985:15:41"
                                    }
                                ],
                                "id": 6068,
                                "name": "ParameterList",
                                "src": "9984:17:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 6069,
                                "name": "ParameterList",
                                "src": "10011:0:41"
                            },
                            {
                                "children": [
                                    {
                                        "children": [
                                            {
                                                "attributes": {
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "operator": "=",
                                                    "type": "uint8"
                                                },
                                                "children": [
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 5615,
                                                            "type": "uint8",
                                                            "value": "_decimals"
                                                        },
                                                        "id": 6070,
                                                        "name": "Identifier",
                                                        "src": "10021:9:41"
                                                    },
                                                    {
                                                        "attributes": {
                                                            "overloadedDeclarations": [
                                                                null
                                                            ],
                                                            "referencedDeclaration": 6067,
                                                            "type": "uint8",
                                                            "value": "decimals_"
                                                        },
                                                        "id": 6071,
                                                        "name": "Identifier",
                                                        "src": "10033:9:41"
                                                    }
                                                ],
                                                "id": 6072,
                                                "name": "Assignment",
                                                "src": "10021:21:41"
                                            }
                                        ],
                                        "id": 6073,
                                        "name": "ExpressionStatement",
                                        "src": "10021:21:41"
                                    }
                                ],
                                "id": 6074,
                                "name": "Block",
                                "src": "10011:38:41"
                            }
                        ],
                        "id": 6075,
                        "name": "FunctionDefinition",
                        "src": "9961:88:41"
                    },
                    {
                        "attributes": {
                            "implemented": true,
                            "isConstructor": false,
                            "kind": "function",
                            "modifiers": [
                                null
                            ],
                            "name": "_beforeTokenTransfer",
                            "scope": 6087,
                            "stateMutability": "nonpayable",
                            "virtual": true,
                            "visibility": "internal"
                        },
                        "children": [
                            {
                                "attributes": {
                                    "text": " @dev Hook that is called before any transfer of tokens. This includes\n minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                                },
                                "id": 6076,
                                "name": "StructuredDocumentation",
                                "src": "10055:576:41"
                            },
                            {
                                "children": [
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "from",
                                            "scope": 6086,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 6077,
                                                "name": "ElementaryTypeName",
                                                "src": "10666:7:41"
                                            }
                                        ],
                                        "id": 6078,
                                        "name": "VariableDeclaration",
                                        "src": "10666:12:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "to",
                                            "scope": 6086,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "address",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "address",
                                                    "stateMutability": "nonpayable",
                                                    "type": "address"
                                                },
                                                "id": 6079,
                                                "name": "ElementaryTypeName",
                                                "src": "10680:7:41"
                                            }
                                        ],
                                        "id": 6080,
                                        "name": "VariableDeclaration",
                                        "src": "10680:10:41"
                                    },
                                    {
                                        "attributes": {
                                            "constant": false,
                                            "mutability": "mutable",
                                            "name": "amount",
                                            "scope": 6086,
                                            "stateVariable": false,
                                            "storageLocation": "default",
                                            "type": "uint256",
                                            "visibility": "internal"
                                        },
                                        "children": [
                                            {
                                                "attributes": {
                                                    "name": "uint256",
                                                    "type": "uint256"
                                                },
                                                "id": 6081,
                                                "name": "ElementaryTypeName",
                                                "src": "10692:7:41"
                                            }
                                        ],
                                        "id": 6082,
                                        "name": "VariableDeclaration",
                                        "src": "10692:14:41"
                                    }
                                ],
                                "id": 6083,
                                "name": "ParameterList",
                                "src": "10665:42:41"
                            },
                            {
                                "attributes": {
                                    "parameters": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 6084,
                                "name": "ParameterList",
                                "src": "10725:0:41"
                            },
                            {
                                "attributes": {
                                    "statements": [
                                        null
                                    ]
                                },
                                "children": [],
                                "id": 6085,
                                "name": "Block",
                                "src": "10725:3:41"
                            }
                        ],
                        "id": 6086,
                        "name": "FunctionDefinition",
                        "src": "10636:92:41"
                    }
                ],
                "id": 6087,
                "name": "ContractDefinition",
                "src": "1311:9419:41"
            }
        ],
        "id": 6088,
        "name": "SourceUnit",
        "src": "33:10698:41"
    },
    "compiler": {
        "name": "solc",
        "version": "0.7.3+commit.9bfce1f6.Emscripten.clang"
    },
    "networks": {},
    "schemaVersion": "3.3.3",
    "updatedAt": "2021-02-01T23:13:33.278Z",
    "devdoc": {
        "details": "Implementation of the {IERC20} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. For a generic mechanism see {ERC20PresetMinterPauser}. TIP: For a detailed writeup see our guide https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How to implement supply mechanisms]. We have followed general OpenZeppelin guidelines: functions revert instead of returning `false` on failure. This behavior is nonetheless conventional and does not conflict with the expectations of ERC20 applications. Additionally, an {Approval} event is emitted on calls to {transferFrom}. This allows applications to reconstruct the allowance for all accounts just by listening to said events. Other implementations of the EIP may not emit these events, as it isn't required by the specification. Finally, the non-standard {decreaseAllowance} and {increaseAllowance} functions have been added to mitigate the well-known issues around setting allowances. See {IERC20-approve}.",
        "kind": "dev",
        "methods": {
            "allowance(address,address)": {
                "details": "See {IERC20-allowance}."
            },
            "approve(address,uint256)": {
                "details": "See {IERC20-approve}. Requirements: - `spender` cannot be the zero address."
            },
            "balanceOf(address)": {
                "details": "See {IERC20-balanceOf}."
            },
            "constructor": {
                "details": "Sets the values for {name} and {symbol}, initializes {decimals} with a default value of 18. To select a different value for {decimals}, use {_setupDecimals}. All three of these values are immutable: they can only be set once during construction."
            },
            "decimals()": {
                "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is called. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
            },
            "decreaseAllowance(address,uint256)": {
                "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
            },
            "increaseAllowance(address,uint256)": {
                "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
            },
            "name()": {
                "details": "Returns the name of the token."
            },
            "symbol()": {
                "details": "Returns the symbol of the token, usually a shorter version of the name."
            },
            "totalSupply()": {
                "details": "See {IERC20-totalSupply}."
            },
            "transfer(address,uint256)": {
                "details": "See {IERC20-transfer}. Requirements: - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`."
            },
            "transferFrom(address,address,uint256)": {
                "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for ``sender``'s tokens of at least `amount`."
            }
        },
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
    }
}
