{
  "contractName": "IERC20Permit_EnshroudProtocol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "holder",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "allowed",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/EnshroudProtocol.sol\":\"IERC20Permit_EnshroudProtocol\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/EnshroudProtocol.sol\":{\"keccak256\":\"0xdfc677d83b8b81c9000c35de271d8796cce80eec15e447d486551b0f0e8eacb7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a65342736d41ab0d489386bf3a932ea13d6910ef5b19a9899618288cf5013ee\",\"dweb:/ipfs/QmRxHjngbkyFug24aUozgHYJrPAQEtV4fxN9tss747zsdD\"]},\"project:/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x6a42732aa0a681892f66e5f7b3b3075444378bf937c8e93661df5e7443c5c3dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://778a2ee1360d2ace549ac0f283ccf3f7279bdff8876fdc037c4bcad012652717\",\"dweb:/ipfs/QmTrnghLT57Y3jD9yNR3fycronEc9nVuYEjzxnYtJpjX1F\"]},\"project:/contracts/SafeTransferLib.sol\":{\"keccak256\":\"0xb0500234799f59758b44c78ed63166f2b64a5d8c0c19024fd85208508656164f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f66a271b4ebee7032c91876874f54773a35955249b912621c7321502a365d417\",\"dweb:/ipfs/QmVkYb24oB8BKCebkrQG6eNubX55eUDsyFF7vNTepFjLPi\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.18;\r\n\r\n// This file is strictly provided as-is\r\n// without any express or implied guarantees, representations, or warranties\r\n// as to this file or any deployments hereof\r\n\r\n// Any users of these files are doing so at their own risk.\r\n\r\n/// @notice uses nontransferable ERC1155 NFTs with encrypted metadata to enable private asset deposits, transfers, and withdrawals. Encryption provided by Metadata Validator Oracles.\r\n\r\n// Solbase ReentrancyGuard (https://github.com/Sol-DAO/solbase/blob/main/src/utils/ReentrancyGuard.sol)\r\nimport {ReentrancyGuard} from \"./ReentrancyGuard.sol\";\r\n\r\n// Solbase SafeTransferLib (https://github.com/Sol-DAO/solbase/blob/main/src/utils/SafeTransferLib.sol)\r\nimport {SafeTransferLib} from \"./SafeTransferLib.sol\";\r\n\r\n/*///////////////////////////////////////////////////////////////\r\n                            INTERFACES\r\n//////////////////////////////////////////////////////////////*/\r\n\r\ninterface IERC20Permit_EnshroudProtocol {\r\n    function permit(\r\n        address owner,\r\n        address spender,\r\n        uint256 value,\r\n        uint256 deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n\r\n    // DAI permit\r\n    function permit(\r\n        address holder,\r\n        address spender,\r\n        uint256 nonce,\r\n        uint256 expiry,\r\n        bool allowed,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external;\r\n\r\n\tfunction balanceOf(address owner) external view returns (uint256);\r\n}\r\n\r\ninterface IWETH {\r\n    function deposit() external payable;\r\n\r\n    function withdraw(uint256) external;\r\n}\r\n\r\ninterface IMVOStaking_EnshroudProtocol {\r\n    function awardPoints(string[] calldata mvoIDs) external;\r\n\r\n    function checkMVO(string calldata mvoID) external;\r\n\r\n    function checkMVOSig(\r\n        string calldata mvoID,\r\n        bytes calldata mvoSig,\r\n        bytes32 obHash\r\n    ) external view;\r\n}\r\n\r\n/// @notice Modern, minimalist, and gas-optimized **non-transferable** ERC1155 adaptation.\r\n/// @author Modified from Solbase's ERC1155 (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC1155/ERC1155.sol), removing transferability\r\n/** @dev the following were removed from the Sol-DAO implementation for non-transferability or because they are unused: ApprovalForAll() event, Unauthorized() custom error,\r\n *** 'isApprovedForAll[]' mapping, 'setApprovalForAll()', 'safeTransferFrom()', 'safeBatchTransferFrom()', 'balanceOfBatch()'; '_batchMint()'; 'batchBurn()'; 'TransferBatch' event\r\n *** therefore this is intentionally not fully compliant with the (usually transferable) ERC1155 standard */\r\nabstract contract ERC1155 {\r\n    /// -----------------------------------------------------------------------\r\n    /// Events\r\n    /// -----------------------------------------------------------------------\r\n\r\n    event TransferSingle(\r\n        address indexed operator,\r\n        address indexed from,\r\n        address indexed to,\r\n        uint256 id,\r\n        uint256 amount\r\n    );\r\n\r\n    event URI(string value, uint256 indexed id);\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Custom Errors\r\n    /// -----------------------------------------------------------------------\r\n\r\n    error UnsafeRecipient();\r\n\r\n    error InvalidRecipient();\r\n\r\n    error LengthMismatch();\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// ERC1155 Storage\r\n    /// -----------------------------------------------------------------------\r\n\r\n    mapping(address => mapping(uint256 => uint256)) public balanceOf;\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Metadata Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    function uri(\r\n        string calldata metadata\r\n    ) public view virtual returns (string memory);\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// ERC165 Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    function supportsInterface(\r\n        bytes4 interfaceId\r\n    ) public view virtual returns (bool) {\r\n        return\r\n            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165\r\n            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155\r\n            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI\r\n    }\r\n\r\n    /// -----------------------------------------------------------------------\r\n    /// Internal Mint/Burn Logic\r\n    /// -----------------------------------------------------------------------\r\n\r\n    /// @param to: owning address\r\n    /// @param id: unique ID of eNFT\r\n\t/// @param amount: always 1 (quantity is specified within the eNFT)\r\n\t/// @param data: encrypted eNFT metadata\r\n    function _mint(\r\n        address to,\r\n        uint256 id,\r\n        uint256 amount,\r\n        bytes memory data\r\n    ) internal virtual {\r\n        balanceOf[to][id] += amount;\r\n\r\n        // mint event for MVO layer to detect and act upon\r\n        emit TransferSingle(msg.sender, address(0), to, id, amount);\r\n\r\n        if (to.code.length != 0) {\r\n            if (\r\n                ERC1155TokenReceiver(to).onERC1155Received(\r\n                    msg.sender,\r\n                    address(0),\r\n                    id,\r\n                    amount,\r\n                    data\r\n                ) != ERC1155TokenReceiver.onERC1155Received.selector\r\n            ) revert UnsafeRecipient();\r\n        } else if (to == address(0)) revert InvalidRecipient();\r\n    }\r\n\r\n    /// @param from: owning address burning the eNFT\r\n    /// @param id: unique ID of eNFT\r\n    /// @param amount: always 1 (results in 0 balance)\r\n    function _burn(address from, uint256 id, uint256 amount) internal virtual {\r\n        balanceOf[from][id] -= amount;\r\n\r\n        // burn event for MVO layer to detect and act upon\r\n        emit TransferSingle(msg.sender, from, address(0), id, amount);\r\n    }\r\n}\r\n\r\n/// @author Solbase (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC1155/ERC1155.sol)\r\n/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155/ERC1155.sol)\r\n/// @dev while the ERC1155-like tokens in this protocol are non-transferable, the below are included for minted eNFT receivers\r\nabstract contract ERC1155TokenReceiver {\r\n    function onERC1155Received(\r\n        address,\r\n        address,\r\n        uint256,\r\n        uint256,\r\n        bytes calldata\r\n    ) external virtual returns (bytes4) {\r\n        return ERC1155TokenReceiver.onERC1155Received.selector;\r\n    }\r\n\r\n    function onERC1155BatchReceived(\r\n        address,\r\n        address,\r\n        uint256[] calldata,\r\n        uint256[] calldata,\r\n        bytes calldata\r\n    ) external virtual returns (bytes4) {\r\n        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;\r\n    }\r\n}\r\n\r\n/// @notice Enshroud protocol contract\r\ncontract EnshroudProtocol is ERC1155, ERC1155TokenReceiver, ReentrancyGuard {\r\n    using SafeTransferLib for address;\r\n\r\n\t/// types of eNFT operations\r\n    enum Flag {\r\n        MintFromDeposit,\r\n        Spend,\r\n        Withdraw\r\n    }\r\n\r\n    /// @notice struct of necessary Operations Block information to properly cause eNFT mint(s)\r\n    /// @param recipients: array of addresses to receive minted eNFTs\r\n    /// @param detailsHashes: supplied by MVO layer, hash of address owner, uint256 id, address asset, uint256 amount, and (optional) bytes rand for each eNFT\r\n    /// @param inputIds: array of token IDs of eNFTs to be redeemed and burned\r\n    /// @param outputIds: array of token IDs of eNFTs to be minted -- unique and assigned randomly by the lead MVO\r\n    /// @param metadata: array of metadata strings for each corresponding eNFT ID, passed to uri function\r\n    /// @param amount: amount of tokens to which the Operations Block corresponds\r\n    /// @param obHash: keccak256 hash of the Operations Block\r\n    /// @dev each array must be in the same corresponding order\r\n    struct OpsInfo {\r\n        address[] recipients;\r\n        bytes32[] detailsHashes;\r\n        uint256[] inputIds;\r\n        uint256[] outputIds;\r\n        string[] metadata;\r\n        uint256 amount;\r\n        bytes32 obHash;\r\n    }\r\n\r\n    /// @notice 'mvoSigs' is an array of MVO signatures provided by the MVO server (first is lead MVO); 'mvoIDs' are the IDs of the MVOs, the first of which is the lead MVO which receives the deposit message\r\n    struct MVOinfo {\r\n        bytes[] mvoSigs;\r\n        string[] mvoIDs;\r\n    }\r\n\r\n\t/// types of approvals handled by _isRequestApproved()\r\n\tenum ApprovalTypes { MVOStaking, GreyList, Auditor, Treasury, DaoPool }\r\n\r\n    /// @notice to track admin update requests; addresses truncated to bytes8 for size/gas considerations\r\n    struct Requests {\r\n        bytes8 requester1;\r\n        bytes8 requester2;\r\n\t\tApprovalTypes requestType;\r\n\t\tbytes audID;\r\n    }\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            VARIABLES\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// @dev to enable dai-pattern permit (ETH mainnet, possibly elsewhere)\r\n\taddress internal immutable daiToken;\r\n\r\n    // max limit for dynamic arrays\r\n    uint256 internal constant ARRAY_LIMIT = 20;\r\n    uint256 internal constant FEE_LIMIT = 5e17;\r\n    uint256 internal constant WAD = 1e18;\r\n\r\n    address internal immutable weth;\r\n    uint256 public immutable confirmationBlocks;\r\n\r\n    address payable public daoPool;\r\n    address payable public treasury;\r\n\r\n    string public baseURI;\r\n\r\n    uint256 public requiredSigs;\r\n\r\n    /// @notice initial treasury fee is 5%. To remove, DAO voting app (once added as admin) and two other admins can vote to change treasury address to DAO pool\r\n    uint256 public treasuryFee = 5e16;\r\n\r\n    IMVOStaking_EnshroudProtocol internal iMVOStaking;\r\n    IWETH internal immutable iWeth;\r\n\r\n    mapping(address => Requests) internal updateRequested;\r\n    mapping(address => bool) public adminStatus;\r\n    /// @notice maps a user to a mapping of tokenContract to amount deposited in this contract\r\n    mapping(address => mapping(address => uint256)) public assetBalances;\r\n    mapping(address => uint256) public assetDepositFee;\r\n    mapping(address => uint256) public assetWithdrawFee;\r\n    /// @notice maps auditor Id to their address. Zero address means no such auditor exists.\r\n    mapping(string => address) public auditors;\r\n    /// @notice maps an id number to a bool of whether such id has been used for an eNFT\r\n    mapping(uint256 => bool) internal nftIdUsed;\r\n    /// @notice maps an eNFT's id number to its detailsHash\r\n    mapping(uint256 => bytes32) internal detailsHash;\r\n    /// @notice maps an eNFT's id number to error string; contains the AudId of the Auditor node who so marked it, and may contain a reason code.\r\n    mapping(uint256 => string) public idToAuditorGreylist;\r\n    /// @notice sets dwell time for an eNFT before redemption by mapping eNFT id to (mint block.number + 'confirmationBlocks')\r\n    mapping(uint256 => uint256) public enftUnlockTime;\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            EVENTS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// certain events excluded for contract size considerations, such as unlikely/rare variable updates (iMVOStaking, treasury, etc.)\r\n\r\n    event AdminUpdated(address admin, bool status);\r\n\r\n    event AuditorUpdated(address auditor, string audId);\r\n\r\n    event DepositERC20(\r\n        address indexed sender,\r\n        address tokenContract,\r\n        uint256 amount,\r\n        uint256 chainId\r\n    );\r\n\r\n    event DepositETH(\r\n        address indexed sender,\r\n        uint256 weiAmount,\r\n        uint256 chainId\r\n    );\r\n\r\n    event GreyListAdd(string audId, uint256[] ids);\r\n\r\n    event GreyListDeletion(uint256 id);\r\n\r\n    event WithdrawERC20(\r\n        address indexed withdrawer,\r\n        address tokenContract,\r\n        uint256 amount,\r\n        uint256 chainId\r\n    );\r\n\r\n    event WithdrawETH(\r\n        address indexed withdrawer,\r\n        uint256 weiAmount,\r\n        uint256 chainId\r\n    );\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            MODIFIERS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// @notice requires \"_addr\" to have a true 'adminStatus' mapping\r\n    /// @dev implemented in this manner to allow external contracts to pass an address (i.e. MVOStaking) rather than assuming msg.sender\r\n    modifier onlyAdmin(address _addr) {\r\n        if (!adminStatus[_addr]) revert Enshroud_NotAdmin();\r\n        _;\r\n    }\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            ERRORS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    error Enshroud_AmountMismatch();\r\n    error Enshroud_ArrayTooLong();\r\n    error Enshroud_ENFTStillLocked();\r\n    error Enshroud_FeeTooLarge();\r\n    error Enshroud_Greylisted(uint256 id); // ID number of greylisted eNFT\r\n    error Enshroud_HashDoesNotMatch();\r\n    error Enshroud_InvalidID();\r\n    error Enshroud_MVOSignaturesMissing();\r\n    error Enshroud_NoENFT();\r\n    error Enshroud_NotAuditor();\r\n    error Enshroud_NotAdmin();\r\n    error Enshroud_OnlyWETH();\r\n    error Enshroud_ZeroMsgValue();\r\n\terror Enshroud_OnlyDAOPool();\r\n    error MulWadFailed();\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            FUNCTIONS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// @param _treasury: treasury address to receive 5% of deposit and withdraw fees for project operations.\r\n    /// @param _weth: token contract address for WETH. Immutable. 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 for WETH9 on ETH mainnet.\r\n    /// @param _dai: token contract address for DAI. Immutable. 0x6B175474E89094C44Da98b954EedeAC495271d0F for DAI on ETH mainnet.\r\n    /// @param _initialAdmins: array of initial addresses with admin status. Should be at least 3 total initial admins, in order to initialise the MVOStaking address\r\n    /// @param _depositFee: initial per-asset percentage fee from user upon successful shielding, in 18 decimals (which also corresponds to wei). Must be < 5e17.\r\n    /// @param _withdrawFee: initial per-asset percentage fee from eNFT burner upon successful eNFT burning/withdrawal, in 18 decimals (which also corresponds to wei). Must be < 5e17.\r\n    /// @param _requiredSigs: immutable required number of MVO signatures for a valid Operations Block\r\n    /// @param _confBlocks: set immutable variable 'confirmationBlocks', which provides the minimum \"dwell time\" for an eNFT before redemption\r\n    /// @param _baseUri: baseURI for eNFTs, which does not operate as a normal \"baseURI\" but as a notification to check the event log of this protocol contract for the eNFT's id. This constructor-passed baseURI also removes the need for a uriFetcher\r\n    /// @dev note math of fees. Currently a 5e16 fee corresponds to 5%, as all fees are calculated with a denominator of 1e18.\r\n    constructor(\r\n        address payable _treasury,\r\n        address _weth,\r\n        address _dai,\r\n        address[] memory _initialAdmins,\r\n        uint256 _depositFee,\r\n        uint256 _withdrawFee,\r\n        uint256 _requiredSigs,\r\n        uint256 _confBlocks,\r\n        string memory _baseUri\r\n    ) payable {\r\n        if (_depositFee >= FEE_LIMIT || _withdrawFee >= FEE_LIMIT)\r\n            revert Enshroud_FeeTooLarge(); // cannot have 50% or greater for either fee\r\n        treasury = _treasury;\r\n        weth = _weth;\r\n\t\tdaiToken = _dai;\r\n        confirmationBlocks = _confBlocks;\r\n        baseURI = _baseUri;\r\n        assetDepositFee[address(0)] = _depositFee;\r\n        assetWithdrawFee[address(0)] = _withdrawFee;\r\n        requiredSigs = _requiredSigs;\r\n        adminStatus[address(this)] = true;\r\n        adminStatus[_treasury] = true;\r\n        iWeth = IWETH(_weth);\r\n        for (uint256 i = 0; i < _initialAdmins.length; ) {\r\n            adminStatus[_initialAdmins[i]] = true;\r\n            unchecked {\r\n                ++i;\r\n            }\r\n        }\r\n    }\r\n\r\n    /// @dev address(this) accepts ETH only from the WETH contract; 'depositEth()' must be used for ETH deposits, as ETH sent directly to address(this) will not cause an eNFT mint (and thus its ability to be eventually withdrawn)\r\n    receive() external payable {\r\n        if (msg.sender != weth) revert Enshroud_OnlyWETH();\r\n    }\r\n\r\n    /// @notice initialise (or replace) the MVOStaking contract address, by three different admins\r\n    /// @dev must be set after mvoStaking contract is deployed, and before the protocol is used\r\n    /// @param _mvoStaking: contract address for MVO storage and logic\r\n    function setMVOStakingAddress(\r\n        address _mvoStaking\r\n    ) external onlyAdmin(msg.sender) {\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        if (_isRequestApproved(_mvoStaking, _caller, ApprovalTypes.MVOStaking, \"\")) {\r\n            // only set or update MVOStaking address and interface upon third different admin's call, to thwart a single malicious admin\r\n            adminStatus[_mvoStaking] = true;\r\n            iMVOStaking = IMVOStaking_EnshroudProtocol(_mvoStaking);\r\n\r\n            // reset after variable update\r\n            delete updateRequested[_mvoStaking];\r\n        }\r\n    }\r\n\r\n    /// @notice deposit ETH/applicable native token. Msg.value is amount of deposit, which is in wei (18 decimals).\r\n    /// @dev deposited ETH is immediately converted to WETH to address(this) (except for deposit fee sent to treasury and daoPool, which remains in ETH)\r\n    /// @param _depositor: address of depositor (msg.sender if calling this directly, or can be a specified user if an external contract is calling this function, such as daoPool)\r\n    function depositEth(address _depositor) external payable nonReentrant {\r\n        if (msg.value == 0) revert Enshroud_ZeroMsgValue();\r\n\r\n        uint256 _depositFeeAmount = _mulWadDown(\r\n            msg.value,\r\n            assetDepositFee[address(0)]\r\n        );\r\n        uint256 _treasuryFeeAmount = _mulWadDown(\r\n            _depositFeeAmount,\r\n            treasuryFee\r\n        );\r\n        uint256 _netDeposit;\r\n\r\n        unchecked {\r\n            // will not underflow due to preceding _depositFeeAmount division operation (no fee can be >= 5e17)\r\n            _netDeposit = msg.value - _depositFeeAmount;\r\n            // add to deposit's 'assetBalances'\r\n            assetBalances[_depositor][weth] += _netDeposit;\r\n        }\r\n\r\n        // deposit msg.value - deposit fees to the WETH contract, corresponding WETH sent to address(this) -- number of WETH tokens mirrors amount of wei\r\n        iWeth.deposit{value: _netDeposit}();\r\n\r\n        // send respective deposit fees to treasury and daoPool\r\n        unchecked {\r\n            SafeTransferLib.safeTransferETH(treasury, _treasuryFeeAmount);\r\n            // will not underflow due to preceding _treasuryFeeAmount division operation (no fee can be >= 5e17)\r\n            SafeTransferLib.safeTransferETH(\r\n                daoPool,\r\n                _depositFeeAmount - _treasuryFeeAmount\r\n            );\r\n        }\r\n        emit DepositETH(_depositor, _netDeposit, block.chainid);\r\n    }\r\n\r\n    /// @notice deposit ERC20-compatible tokens after '_depositor' approved address(this) for '_amount' of tokens in the '_tokenContract'\r\n    /// @dev _amount of tokens must first be approved for transferFrom by address(this). While there is no token validity check here, the MVO layer will check when later generating operations block\r\n    /// @param _depositor: address of depositor (msg.sender if calling this directly, or can be a specified user if an external contract is calling this function, such as daoPool)\r\n    /// @param _tokenContract: ERC20-compatible token contract address\r\n    /// @param _amount: amount of tokens deposited, 18 decimals (hardcoded into mulWadDown in _depositTokens())\r\n    function depositTokens(\r\n        address _depositor,\r\n        address _tokenContract,\r\n        uint256 _amount\r\n    ) external nonReentrant {\r\n        // deposit fee is either the global amount (if no specific assetDepositFee set) or specific amount for the _tokenContract\r\n        if (assetDepositFee[_tokenContract] == 0) {\r\n            _depositTokens(\r\n                _depositor,\r\n                _tokenContract,\r\n                _amount,\r\n                assetDepositFee[address(0)]\r\n            );\r\n        } else {\r\n            _depositTokens(\r\n                _depositor,\r\n                _tokenContract,\r\n                _amount,\r\n                assetDepositFee[_tokenContract]\r\n            );\r\n        }\r\n    }\r\n\r\n    /// @notice deposit an ERC20-compatible asset which supports gasless ERC20Permit via EIP2612 to approve this address for transferFrom msg.sender\r\n    /// @param _tokenContract: ERC20-compatible token contract address\r\n    /// @param _depositor: address of depositor, to whom the EIP712 signature corresponds (often, msg.sender)\r\n    /// @param _amount: amount of tokens deposited, 18 decimals (hardcoded into mulWadDown in _depositTokens())\r\n    /// @param _nonce: user's nonce on the erc20 contract, for replay protection\r\n    /// @param _deadline: deadline for permit approval usage\r\n    /// @param v: ECDSA sig param\r\n    /// @param r: ECDSA sig param\r\n    /// @param s: ECDSA sig param\r\n    function depositTokensWithPermit(\r\n        address _tokenContract,\r\n        address _depositor,\r\n        uint256 _amount,\r\n        uint256 _nonce,\r\n        uint256 _deadline,\r\n        uint8 v,\r\n        bytes32 r,\r\n        bytes32 s\r\n    ) external nonReentrant {\r\n        // will revert if the permit is unsuccessful or _tokenContract doesn't support it\r\n        if (_tokenContract == daiToken) {\r\n            IERC20Permit_EnshroudProtocol(_tokenContract).permit(\r\n                _depositor,\r\n                address(this),\r\n                _nonce,\r\n                _deadline,\r\n                true,\r\n                v,\r\n                r,\r\n                s\r\n            );\r\n        } else {\r\n            IERC20Permit_EnshroudProtocol(_tokenContract).permit(\r\n                _depositor,\r\n                address(this),\r\n                _amount,\r\n                _deadline,\r\n                v,\r\n                r,\r\n                s\r\n            );\r\n        }\r\n\r\n        // deposit fee is either the global amount (if no specific assetDepositFee set) or specific amount for the _tokenContract\r\n        uint256 _depositFee = assetDepositFee[_tokenContract];\r\n        if (_depositFee == 0) {\r\n            _depositTokens(\r\n                msg.sender,\r\n                _tokenContract,\r\n                _amount,\r\n                assetDepositFee[address(0)]\r\n            );\r\n        } else {\r\n            _depositTokens(msg.sender, _tokenContract, _amount, _depositFee);\r\n        }\r\n    }\r\n\r\n    /// @notice called by an address which has already deposited assets into this contract to mintENFTs based on some amount of those assets up to msg.sender's 'assetBalances'\r\n    /// @param _opsInfo: OpsInfo struct containing all of the necessary Operations Block information\r\n    /// @param _mvoInfo: MVOinfo struct containing array of signatures and IDs by MVOs that supplied encrypted metadata\r\n    /// @param _tokenContract: ERC20-compatible token contract address; pass the 'weth' address to mint an eNFT for ETH deposits\r\n    /// @dev because msg.sender is used to check the 'assetBalances' mapping (to prevent spoofing on a _depositor variable), other contracts using this function will have to use delegatecall\r\n    function mintENFTsFromDeposit(\r\n        OpsInfo calldata _opsInfo,\r\n        MVOinfo calldata _mvoInfo,\r\n        address _tokenContract\r\n    ) external {\r\n        if (assetBalances[msg.sender][_tokenContract] < _opsInfo.amount)\r\n            revert Enshroud_AmountMismatch();\r\n        unchecked {\r\n            assetBalances[msg.sender][_tokenContract] -= _opsInfo.amount;\r\n        }\r\n        // validate inputs\r\n        _validateInputs(_opsInfo, _mvoInfo, Flag.MintFromDeposit);\r\n        // mint eNFTs\r\n        _mintENFTs(_opsInfo, _opsInfo.outputIds.length, Flag.MintFromDeposit);\r\n\r\n        // on success, award points to relevant MVOs\r\n        iMVOStaking.awardPoints(_mvoInfo.mvoIDs);\r\n    }\r\n\r\n    /// @notice for a holder of eNFT(s) to spend their eNFT(s) (after receiving new OperationsBlock) for new eNFT(s) to be subsequently minted, without publicly compromising the corresponding asset or amount in the subsequently minted eNFTs\r\n    /// @dev only necessary to check msg.sender's balanceOf to burn the spent eNFT -- the new eNFTs will be produced by calling _mintNewENFTs(). Call only after new OperationsBlock received for subsequent eNFT mints.\r\n    /// @param _enftInfo: OpsInfo struct containing all of the necessary OperationsBlock information to mint new eNFTs\r\n    /// @param _mvoInfo: MVOinfo struct containing array of signatures and IDs by MVOs that supplied encrypted metadata to mint new eNFTs\r\n    function spendENFTs(\r\n        OpsInfo calldata _enftInfo,\r\n        MVOinfo calldata _mvoInfo\r\n    ) external nonReentrant {\r\n        // check inputs\r\n        _validateInputs(_enftInfo, _mvoInfo, Flag.Spend);\r\n\r\n        // the length of each array in '_enftInfo' is checked in '_mintENFTs()' rather than here for efficiency\r\n        for (uint256 x = 0; x < _enftInfo.inputIds.length; ) {\r\n            uint256 _spendID = _enftInfo.inputIds[x];\r\n            if (enftUnlockTime[_spendID] > block.number)\r\n                revert Enshroud_ENFTStillLocked();\r\n            if (bytes(idToAuditorGreylist[_spendID]).length != 0)\r\n                revert Enshroud_Greylisted(_spendID); // ensure each _spendID isn't greylisted by checking if the mapped string has a length of 0 when cast to bytes\r\n\r\n            /// @dev entire transaction will revert if msg.sender does not have corresponding eNFT for a _spendID\r\n            if (balanceOf[msg.sender][_spendID] == 0) revert Enshroud_NoENFT();\r\n\r\n            unchecked {\r\n                ++x;\r\n            }\r\n\r\n            // delete mapping and burn eNFT\r\n            delete detailsHash[_spendID];\r\n            delete enftUnlockTime[_spendID];\r\n            _burn(msg.sender, _spendID, 1);\r\n        }\r\n\r\n        // mint new eNFTs\r\n        _mintENFTs(_enftInfo, _enftInfo.recipients.length, Flag.Spend);\r\n\r\n        // on success, award points to relevant MVOs\r\n        iMVOStaking.awardPoints(_mvoInfo.mvoIDs);\r\n    }\r\n\r\n    /// @notice for eNFT holder to redeem their eNFT(s) for asset withdrawal via their decrypted eNFT metadata\r\n    /// @param _opsInfo: OpsInfo struct containing all of the necessary Operations Block information\r\n    /// @param _mvoInfo: MVOinfo struct containing array of signatures and IDs by MVOs that supplied encrypted metadata to mint new eNFTs\r\n    /// @param _amounts: array of amounts of tokens/asset requested for withdrawal, in order by _id\r\n    /// @param _rand: array of optional randomly generated bytes, represented in base64, generated client-side.\r\n    /// @param _tokenContract: token contract address requested for withdraw. Provide zero address for ETH/native token withdrawal.\r\n    /// @dev caller will be able to access decrypted eNFT metadata off chain in order to supply info to this function\r\n    function redeemENFTsAndWithdraw(\r\n        OpsInfo calldata _opsInfo,\r\n        MVOinfo calldata _mvoInfo,\r\n        uint256[] calldata _amounts,\r\n        bytes16[] calldata _rand,\r\n        address _tokenContract\r\n    ) external nonReentrant {\r\n        // counter for amount actually being redeemed from eNFTs\r\n        uint256 _amt;\r\n\r\n        uint256 _redeems = _opsInfo.inputIds.length;\r\n\r\n        if (_redeems != _rand.length || _redeems != _amounts.length)\r\n            revert LengthMismatch();\r\n\r\n        // check inputs\r\n        _validateInputs(_opsInfo, _mvoInfo, Flag.Withdraw);\r\n\r\n        for (uint256 x = 0; x < _redeems; ) {\r\n            uint256 _xId = _opsInfo.inputIds[x];\r\n            if (balanceOf[msg.sender][_xId] == 0) revert Enshroud_NoENFT();\r\n            if (enftUnlockTime[_xId] > block.number)\r\n                revert Enshroud_ENFTStillLocked();\r\n            if (bytes(idToAuditorGreylist[_xId]).length != 0)\r\n                revert Enshroud_Greylisted(_xId); // ensure _id[x] isn't greylisted by checking if the mapped string has a length of 0 when cast to bytes\r\n\r\n            // compare hash of each redemption information against detailsHash mapping created when eNFT was minted\r\n            if (\r\n                detailsHash[_xId] !=\r\n                keccak256(\r\n                    abi.encode(\r\n                        msg.sender,\r\n                        _xId,\r\n                        _tokenContract,\r\n                        _amounts[x],\r\n                        _rand[x]\r\n                    )\r\n                )\r\n            ) revert Enshroud_HashDoesNotMatch();\r\n\r\n            // burn eNFT and delete mappings\r\n            delete detailsHash[_xId];\r\n            delete enftUnlockTime[_xId];\r\n            _burn(msg.sender, _xId, 1);\r\n\r\n            unchecked {\r\n                _amt += _amounts[x]; // detailsHash condition check prevents invalidly high _amount value and thus overflow\r\n                ++x;\r\n            }\r\n        }\r\n\r\n        // revert if the total amount of tokens/asset (across all eNFTs being redeemed) requesting for withdraw is higher than the actual total amount to which the eNFTs correspond\r\n        uint256 _amountTotal = _opsInfo.amount;\r\n        if (_amt < _amountTotal) revert Enshroud_AmountMismatch();\r\n\r\n        // if the user wants to withdraw only part of the total redemption amount, mint an eNFT to msg.sender (per the _opsInfo struct) for the difference by calling '_mintENFTs()'\r\n        /// @dev all relevant members (recipients, detailsHashes, outputIds, metadata) of the _opsInfo struct will have a length of 1, the number of mints is 1, and the Flag value is Withdraw\r\n        if (_amt > _amountTotal) _mintENFTs(_opsInfo, 1, Flag.Withdraw);\r\n\r\n        _withdraw(_amountTotal, msg.sender, _tokenContract);\r\n\r\n        // on success, award points to relevant MVOs\r\n        iMVOStaking.awardPoints(_mvoInfo.mvoIDs);\r\n    }\r\n\r\n    /// @notice for an auditor to change eNFT(s) greylist status\r\n    /// @param _audId: ID of the auditor calling this function\r\n    /// @param _ids: array of eNFT IDs for which the auditor is altering greylist status\r\n    /// @param _reasons: array of strings corresponding to the reason for each respective '_ids' greylisting\r\n    function auditorGreyList(\r\n        string calldata _audId,\r\n        uint256[] calldata _ids,\r\n        string[] calldata _reasons\r\n    ) external {\r\n        if (msg.sender != auditors[_audId]) revert Enshroud_NotAuditor();\r\n        if (_ids.length > ARRAY_LIMIT) revert Enshroud_ArrayTooLong();\r\n        if (_ids.length != _reasons.length) revert LengthMismatch();\r\n\r\n        for (uint256 i = 0; i < _ids.length; ) {\r\n            uint256 _id = _ids[i];\r\n            // store reason only if no value is set\r\n            if (bytes(idToAuditorGreylist[_id]).length == 0)\r\n            \tidToAuditorGreylist[_id] = _reasons[i];\r\n\r\n            // limited to ARRAY_LIMIT so will not overflow\r\n            unchecked {\r\n                ++i;\r\n            }\r\n        }\r\n\r\n        // emit event with all of the greylisted IDs\r\n        emit GreyListAdd(_audId, _ids);\r\n    }\r\n\r\n    /// @notice upon call by three admins, remove an eNFT's greylist status\r\n    /// @param _id: ID of greylisted eNFT, to be removed from greylist\r\n    function removeGreylistStatus(uint256 _id) external onlyAdmin(msg.sender) {\r\n        // truncate and cast '_id' to type address for updateRequests mapping; unlikely to collide with other addresses\r\n        address _addr = address(uint160(_id));\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        if (_isRequestApproved(_addr, _caller, ApprovalTypes.GreyList, \"\")) {\r\n            // only remove greylist status upon third different admin's call, to thwart a single malicious admin\r\n            delete idToAuditorGreylist[_id];\r\n\r\n            // reset after greylist update\r\n            delete updateRequested[_addr];\r\n            emit GreyListDeletion(_id);\r\n        }\r\n    }\r\n\r\n    /// @notice for three admins to update an auditor's status\r\n    /// @param _addr: address of auditor, or zero address to remove an auditor\r\n    /// @param _audId: ID of the auditor being updated by admin\r\n    function updateAuditor(\r\n        address _addr,\r\n        string calldata _audId\r\n    ) external onlyAdmin(msg.sender) {\r\n\t\trequire(bytes(_audId).length > 0);\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        if (_isRequestApproved(_addr, _caller, ApprovalTypes.Auditor, _audId)) {\r\n            // only grant auditor update upon third different admin's call, to thwart a single malicious admin\r\n            auditors[_audId] = _addr;\r\n\r\n            // reset after auditor update\r\n            delete updateRequested[_addr];\r\n            emit AuditorUpdated(_addr, _audId);\r\n        }\r\n    }\r\n\r\n    /// @notice admin may designate new fee award amounts globally (pass address(0) as _tokenAddr), or token-specifically. All fees should correspond to 18 decimals regardless of underlying token contact decimal amount\r\n    /** @dev if a 0 fee for a certain asset is desired, set that fee to 1 without decimals, as checks for an asset-specific fee in other functions\r\n     *** will use the global fees if the mapping returns a 0 for that asset. If one of the two fees should remain unchanged, pass the existing value */\r\n    /// @param _tokenAddr: address of token whose fees are being updated. Leave as zero address for global changes (native token always has global fees)\r\n    /// @param _newDepositFee: new per-asset percentage fee from user upon successful shielding, in 18 decimals. Must be < 5e17.\r\n    /// @param _newWithdrawFee: new per-asset percentage fee from eNFT burner upon successful eNFT burning/withdrawal, in 18 decimals. Must be < 5e17.\r\n    function updateFees(\r\n        address _tokenAddr,\r\n        uint256 _newDepositFee,\r\n        uint256 _newWithdrawFee\r\n    ) external onlyAdmin(msg.sender) {\r\n        if (_newDepositFee >= FEE_LIMIT || _newWithdrawFee >= FEE_LIMIT)\r\n            revert Enshroud_FeeTooLarge();\r\n        assetDepositFee[_tokenAddr] = _newDepositFee;\r\n        assetWithdrawFee[_tokenAddr] = _newWithdrawFee;\r\n    }\r\n\r\n    /// @notice allows an admin to designate another admin or revoke an active admin; can be used in event of malicious admin/exploit, to remove initial admins, add DAO voting addresses, etc.\r\n    /// @param _addr: address whose admin status is being updated\r\n    /// @param _status: true for admin status grant, false for revocation\r\n    function updateAdmin(\r\n        address _addr,\r\n        bool _status\r\n    ) external onlyAdmin(msg.sender) {\r\n        adminStatus[_addr] = _status;\r\n        emit AdminUpdated(_addr, _status);\r\n    }\r\n\r\n    /// @notice upon agreement of >= 3 admins, designate a new treasury contract address, including to DAO governance. adminStatus mapping also updated accordingly.\r\n    /** @dev in case of treasury exploit or subsequently deployed treasury contract. Note this also uses the updateRequests mapping,\r\n     ** as a new treasury will also receive admin status, and no issue (though unnecessary) if the new treasury address is passed as a new admin first */\r\n    /// @param _newTreasury: new treasury address\r\n    function updateTreasury(\r\n        address payable _newTreasury\r\n    ) external onlyAdmin(msg.sender) {\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        if (_isRequestApproved(_newTreasury, _caller, ApprovalTypes.Treasury, \"\")) {\r\n            // only grant treasury update upon third different admin's call, to thwart a single malicious admin\r\n            adminStatus[_newTreasury] = true;\r\n            // remove admin status of prior treasury address and update treasury variable\r\n            delete adminStatus[treasury];\r\n            treasury = _newTreasury;\r\n\r\n            // reset after treasury variable update\r\n            delete updateRequested[_newTreasury];\r\n        }\r\n    }\r\n\r\n    /// @notice upon agreement of >= 3 admins, designate a new Dao Pool contract address, including to DAO governance. adminStatus mapping also updated accordingly.\r\n    /** @dev in case of exploit or subsequently deployed DAO contract. Note this also uses the updateRequests mapping,\r\n     ** as a new daoPool will also receive admin status, and no issue (though unnecessary) if the new daoPool address is passed as a new admin first */\r\n    /// @param _newDaoPool: new DAO Pool address\r\n    function updateDaoPool(\r\n        address payable _newDaoPool\r\n    ) external onlyAdmin(msg.sender) {\r\n        bytes8 _caller = bytes8(uint64(uint160(msg.sender)));\r\n        if (_isRequestApproved(_newDaoPool, _caller, ApprovalTypes.DaoPool, \"\"))\r\n\t\t{\r\n            // only grant daoPool update upon third different admin's call, to thwart a single malicious admin\r\n            adminStatus[_newDaoPool] = true;\r\n\r\n            // remove admin status of prior daoPool address and update daoPool variable\r\n            delete adminStatus[daoPool];\r\n            daoPool = _newDaoPool;\r\n\r\n            // reset after daoPool variable update\r\n            delete updateRequested[_newDaoPool];\r\n        }\r\n    }\r\n\r\n    /// @param _metadata: eNFT token metadata\r\n    /// @return uri for the supplied '_metadata'; see notes on baseURI in the constructor natSpec\r\n    function uri(\r\n        string calldata _metadata\r\n    ) public view override returns (string memory) {\r\n        return string.concat(baseURI, _metadata);\r\n    }\r\n\r\n    /// @notice internal function which causes all necessary token and fee transfers upon valid 'depositTokens()' or 'depositTokensWithPermit()' call\r\n    /// @param _depositor: depositing address (msg.sender unless called by daoPool)\r\n    /// @param _tokenContract: token contract address, ERC20 compliance (including permit, if applicable) checks completed in preceding function call\r\n    /// @param _amount: amount of tokens deposited\r\n    /// @param _fee: deposit fee for _tokenContract\r\n    function _depositTokens(\r\n        address _depositor,\r\n        address _tokenContract,\r\n        uint256 _amount,\r\n        uint256 _fee\r\n    ) internal {\r\n\t\tuint256 _netAmount;\r\n\r\n\t\tif (msg.sender == _depositor) {\r\n\t\t\t// account for possibility this ERC20 is fee-on-transfer or deflationary\r\n\t\t\tuint256 _ourBalanceBefore = IERC20Permit_EnshroudProtocol(_tokenContract).balanceOf(address(this));\r\n        \t/// @dev safeTransferFrom will revert on failure (for example if lacking proper permit or approve() from '_depositor')\r\n        \t_tokenContract.safeTransferFrom(_depositor, address(this), _amount);\r\n\t\t\tuint256 _ourBalanceAfter = IERC20Permit_EnshroudProtocol(_tokenContract).balanceOf(address(this));\r\n\t\t\trequire(_ourBalanceAfter >= _ourBalanceBefore);\r\n\t\t\t_netAmount = _ourBalanceAfter - _ourBalanceBefore;\r\n\t\t} else if (msg.sender == daoPool) {\r\n\t\t\t/// @dev occurs when called via DAOPool.claimTokenYieldAsENFTs()\r\n\t\t\t/// in this case DAOPool has already safeTransfer'd the tokens to this contract and accounted for any fee-on-transfer issues\r\n\t\t\t_netAmount = _amount;\r\n\t\t} else {\r\n\t\t\t/// @dev third-party deposits are not otherwise permitted\r\n\t\t\trevert Enshroud_OnlyDAOPool();\r\n\t\t}\r\n\r\n\t\t// calculate net deposit after fees\r\n        uint256 _tokenDepositFeeAmount = _mulWadDown(_netAmount, _fee);\r\n        uint256 _netDeposit = _netAmount - _tokenDepositFeeAmount;\r\n        if (_netDeposit == 0) revert Enshroud_ZeroMsgValue();\r\n\r\n        // transfer tokenDepositFeeAmount for token to treasury and daoPool and retain net deposit for eventual withdrawal\r\n        uint256 _treasuryFeeAmount = _mulWadDown(\r\n            _tokenDepositFeeAmount,\r\n            treasuryFee\r\n        );\r\n\r\n        unchecked {\r\n            // add to _depositor's 'assetBalances' for '_tokenContract'\r\n            assetBalances[_depositor][_tokenContract] += _netDeposit;\r\n\r\n\t\t\t// will not underflow due to preceding _treasuryFeeAmount division operation (no fee can be >= 5e17)\r\n\t\t\t_tokenContract.safeTransfer(treasury, _treasuryFeeAmount);\r\n\r\n            // will not underflow due to _tokenDepositFeeAmount division operation above\r\n            _tokenContract.safeTransfer(\r\n                daoPool,\r\n                _tokenDepositFeeAmount - _treasuryFeeAmount\r\n            );\r\n\r\n            emit DepositERC20(\r\n                _depositor,\r\n                _tokenContract,\r\n                _netDeposit,\r\n                block.chainid\r\n            );\r\n        }\r\n    }\r\n\r\n    /// @notice mints eNFTs to designated recipients\r\n    /** @dev only callable by functions in this contract which already have reentrancy protection ('mintENFTsFromDeposit() and 'spendENFTs()');\r\n     ** internal mint logic of the ERC1155 abstract contract checks whether the recipient is a contract address (and thus calls onERC1155Received())\r\n     ** see https://github.com/Sol-DAO/solbase/blob/2572d3a1bfb45d4082501ba1a550a2d093a4cca5/src/tokens/ERC1155/ERC1155.sol#L168 */\r\n    /// @param _enftInfo: OpsInfo struct containing all of the necessary Operations Block information\r\n    /// @param _mints: number of eNFTs to be minted for use in for loop (saves a storage read, and array lengths are checked)\r\n    /// @param _flag: Flag enum corresponding to MintFromDeposit, Spend, or Withdraw context (0, 1, or 2)\r\n    function _mintENFTs(\r\n        OpsInfo calldata _enftInfo,\r\n        uint256 _mints,\r\n        Flag _flag\r\n    ) internal {\r\n        if (\r\n            _mints != _enftInfo.outputIds.length ||\r\n            _mints != _enftInfo.detailsHashes.length ||\r\n            _mints != _enftInfo.recipients.length ||\r\n            _mints != _enftInfo.metadata.length\r\n        ) revert LengthMismatch();\r\n\r\n        // mint each eNFT with its corresponding info\r\n        for (uint256 i = 0; i < _mints; ) {\r\n            uint256 _id = _enftInfo.outputIds[i];\r\n            if (bytes(idToAuditorGreylist[_id]).length != 0)\r\n                revert Enshroud_Greylisted(_id); // ensure each _id isn't greylisted by checking if the mapped string has a length of 0 when cast to bytes\r\n            if (nftIdUsed[_id]) revert Enshroud_InvalidID(); // ensure each _id isn't already in use\r\n            nftIdUsed[_id] = true;\r\n            detailsHash[_id] = _enftInfo.detailsHashes[i];\r\n            unchecked {\r\n                enftUnlockTime[_id] = block.number + confirmationBlocks;\r\n            }\r\n\r\n            address _recipient = _enftInfo.recipients[i];\r\n            if (_flag == Flag.Withdraw) {\r\n                // on a Withdraw operation, the mintee must be msg.sender\r\n                _recipient = msg.sender;\r\n            }\r\n            // mint eNFT, amount is always 1\r\n            _mint(_recipient, _id, 1, bytes(_enftInfo.metadata[i]));\r\n\r\n            emit URI(uri(_enftInfo.metadata[i]), _id);\r\n            unchecked {\r\n                ++i; // will not overflow, limited by '_mints'\r\n            }\r\n        }\r\n    }\r\n\r\n    /// @notice withdrawal functionality for redeemed eNFTs\r\n    /// @dev reentrancy-protected by 'redeemENFTsAndWithdraw()'\r\n    /// @param _amountTotal: total amount of tokens/asset (across all eNFTs being redeemed) requesting for withdraw in proper decimals\r\n    /// @param _recipient: address which receives the withdrawn assets\r\n    /// @param _tokenContract: token contract address, ERC20 compliance (including permit, if applicable) checks completed in preceding function call\r\n    function _withdraw(\r\n        uint256 _amountTotal,\r\n        address _recipient,\r\n        address _tokenContract\r\n    ) internal {\r\n        address _daoPool = daoPool;\r\n        uint256 _tokenWithdrawFeeAmount;\r\n        // fee is either the global amount (if no specific assetWithdrawFee set) or specific amount for the _tokenContract\r\n        if (assetWithdrawFee[_tokenContract] == 0) {\r\n            _tokenWithdrawFeeAmount = _mulWadDown(\r\n                _amountTotal,\r\n                assetWithdrawFee[address(0)]\r\n            );\r\n        } else {\r\n            _tokenWithdrawFeeAmount = _mulWadDown(\r\n                _amountTotal,\r\n                assetWithdrawFee[_tokenContract]\r\n            );\r\n        }\r\n\r\n        uint256 _treasuryFeeAmount = _mulWadDown(\r\n            _tokenWithdrawFeeAmount,\r\n            treasuryFee\r\n        );\r\n\r\n        uint256 _netWithdrawal;\r\n        unchecked {\r\n            // will not underflow due to preceding _tokenWithdrawFeeAmount division operation (no fee can be >= 5e17)\r\n            _netWithdrawal = _amountTotal - _tokenWithdrawFeeAmount;\r\n        }\r\n\r\n        // pay withdrawal fees and transfer remainder to _recipient\r\n        if (_tokenContract == address(0) || _tokenContract == weth) {\r\n            // withdraw requests for either ETH/native token or WETH will receive ETH/native token, _amountTotal is properly 18 decimals whether wei or WETH tokens\r\n            // all ETH deposits are converted to WETH, so WETH must be withdrawn whether ETH or WETH is requested to withdraw\r\n            iWeth.withdraw(_amountTotal); // call withdraw with amount of WETH to send ETH to this address\r\n\r\n            // safeTransfer ETH fee to treasury and daoPool, and rest to _recipient\r\n            SafeTransferLib.safeTransferETH(treasury, _treasuryFeeAmount);\r\n            // will not underflow due to preceding _treasuryFeeAmount division operation (no fee can be >= 5e17)\r\n            unchecked {\r\n                SafeTransferLib.safeTransferETH(\r\n                    _daoPool,\r\n                    _tokenWithdrawFeeAmount - _treasuryFeeAmount\r\n                );\r\n            }\r\n            SafeTransferLib.safeTransferETH(_recipient, _netWithdrawal);\r\n\r\n            emit WithdrawETH(_recipient, _netWithdrawal, block.chainid);\r\n        } else {\r\n            // safeTransfer fees for token to treasury and daoPool, and rest to _recipient\r\n            // ERC20 compliance (including permit, if applicable) checks completed in detailsHash condition check\r\n            _tokenContract.safeTransfer(treasury, _treasuryFeeAmount);\r\n            // will not underflow due to preceding _treasuryFeeAmount division operation (no fee can be >= 5e17)\r\n            unchecked {\r\n                _tokenContract.safeTransfer(\r\n                    _daoPool,\r\n                    _tokenWithdrawFeeAmount - _treasuryFeeAmount\r\n                );\r\n            }\r\n            _tokenContract.safeTransfer(_recipient, _netWithdrawal);\r\n            emit WithdrawERC20(\r\n                _recipient,\r\n                _tokenContract,\r\n                _netWithdrawal,\r\n                block.chainid\r\n            );\r\n        }\r\n    }\r\n\r\n    /// @notice reverts on any violation of input constraints\r\n    /// @param _enftInfo: OpsInfo struct containing all of the necessary Operations Block information\r\n    /// @param _mvoInfo: MVOinfo struct containing array of signatures and IDs of MVOs that supplied encrypted metadata. One struct for entire operation.\r\n    /// @param _flag: Flag enum corresponding to MintFromDeposit, Spend, or Withdraw context (0, 1, or 2)\r\n    function _validateInputs(\r\n        OpsInfo calldata _enftInfo,\r\n        MVOinfo calldata _mvoInfo,\r\n        Flag _flag\r\n    ) internal {\r\n        // check required number of MVO signatures were submitted\r\n        uint256 _sigLen = _mvoInfo.mvoSigs.length;\r\n        uint256 _outputIdsLength = _enftInfo.outputIds.length;\r\n        if (_sigLen < requiredSigs) revert Enshroud_MVOSignaturesMissing();\r\n        if (\r\n            _enftInfo.inputIds.length > ARRAY_LIMIT ||\r\n            _outputIdsLength > ARRAY_LIMIT\r\n        ) revert Enshroud_ArrayTooLong();\r\n\r\n        bytes32 _argsHash;\r\n\r\n        // check size limits and build hash from passed arguments\r\n        if (_flag == Flag.MintFromDeposit) {\r\n            _argsHash = keccak256(\r\n                abi.encode(\r\n                    _enftInfo.amount,\r\n                    _enftInfo.outputIds,\r\n                    _enftInfo.detailsHashes\r\n                )\r\n            );\r\n        } else if (_flag == Flag.Spend) {\r\n            _argsHash = keccak256(\r\n                abi.encode(\r\n                    _enftInfo.inputIds,\r\n                    _enftInfo.outputIds,\r\n                    _enftInfo.detailsHashes\r\n                )\r\n            );\r\n        } else if (_flag == Flag.Withdraw) {\r\n            if (_outputIdsLength > 1) revert Enshroud_ArrayTooLong();\r\n            if (_outputIdsLength == 1) {\r\n                // must include \"change\" eNFT minted for overage\r\n                _argsHash = keccak256(\r\n                    abi.encode(\r\n                        _enftInfo.inputIds,\r\n                        _enftInfo.amount,\r\n                        _enftInfo.outputIds,\r\n                        _enftInfo.detailsHashes\r\n                    )\r\n                );\r\n            } else {\r\n                _argsHash = keccak256(\r\n                    abi.encode(_enftInfo.inputIds, _enftInfo.amount)\r\n                );\r\n            }\r\n        }\r\n\r\n        // this computed hash must match the value passed from the MVO layer\r\n        if (_argsHash != _enftInfo.obHash) revert Enshroud_HashDoesNotMatch();\r\n\r\n        // Now validate all MVO signatures on the passed obHash value.\r\n        // Ensure all signatures in '_mvoInfo' are valid, or revert - no need to check for a length mismatch, thanks to the earlier check that there are\r\n        // at least 'requiredSigs' number of mvoSigs and if there are too few mvoIDs, the 'checkMVOSig' call will revert\r\n        for (uint256 x = 0; x < _sigLen; ) {\r\n            string memory _mvoID = _mvoInfo.mvoIDs[x];\r\n            // ensure the MVO is still active and has a high enough tokenQuantum, will revert otherwise\r\n            iMVOStaking.checkMVO(_mvoID);\r\n\r\n            // now check the MVO's sig\r\n            iMVOStaking.checkMVOSig(\r\n                _mvoID,\r\n                _mvoInfo.mvoSigs[x],\r\n                _enftInfo.obHash\r\n            );\r\n            unchecked {\r\n                ++x; // limited by number of sigs, will not overflow\r\n            }\r\n        }\r\n    }\r\n\r\n    /// @notice for variable updates that require update requests from three unique admins\r\n\t/// @param _reqAddr: address value looked up in updateRequested mapping\r\n    /// @param _caller: admin invoking one of the update*() methods (truncated)\r\n\t/// @param _reqType: which type of approval (identifies update*() caller)\r\n\t/// @param _audId: optional auditors[] index for ApprovalTypes.Auditor case\r\n    function _isRequestApproved(\r\n        address _reqAddr,\r\n        bytes8 _caller,\r\n\t\tApprovalTypes _reqType,\r\n\t\tstring memory _audId\r\n    ) internal returns (bool) {\r\n        bytes8 _default;\r\n\t\tbytes memory _aId = bytes(_audId);\r\n\r\n        if (updateRequested[_reqAddr].requester1 == _default) {\r\n            updateRequested[_reqAddr].requester1 = _caller;\r\n\t\t\tupdateRequested[_reqAddr].requestType = _reqType;\r\n\t\t\tif (_reqType == ApprovalTypes.Auditor) {\r\n\t\t\t\t// must also record associated auditor ID\r\n\t\t\t\tupdateRequested[_reqAddr].audID = _aId;\r\n\t\t\t}\r\n\t\t} else if (\r\n            updateRequested[_reqAddr].requester1 != _default &&\r\n            updateRequested[_reqAddr].requester2 == _default &&\r\n            _caller != updateRequested[_reqAddr].requester1 &&\r\n\t\t\t_reqType == updateRequested[_reqAddr].requestType &&\r\n\t\t\t(_reqType != ApprovalTypes.Auditor\r\n\t\t\t || keccak256(updateRequested[_reqAddr].audID) == keccak256(_aId))\r\n        ) updateRequested[_reqAddr].requester2 = _caller;\r\n        else if (\r\n            updateRequested[_reqAddr].requester1 != _default &&\r\n            updateRequested[_reqAddr].requester2 != _default &&\r\n            _caller != updateRequested[_reqAddr].requester1 &&\r\n            _caller != updateRequested[_reqAddr].requester2 &&\r\n\t\t\t_reqType == updateRequested[_reqAddr].requestType &&\r\n\t\t\t(_reqType != ApprovalTypes.Auditor\r\n\t\t\t || keccak256(updateRequested[_reqAddr].audID) == keccak256(_aId))\r\n        ) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    /// @dev Solbase mulDiv operation with WAD as denominator. Equivalent to `(x * y) / WAD` rounded down. source: https://github.com/Sol-DAO/solbase/blob/main/src/utils/FixedPointMathLib.sol\r\n    function _mulWadDown(\r\n        uint256 x,\r\n        uint256 y\r\n    ) internal pure returns (uint256 z) {\r\n        assembly {\r\n            // Equivalent to `require(y == 0 || x <= type(uint256).max / y)`.\r\n            if mul(y, gt(x, div(not(0), y))) {\r\n                // Store the function selector of `MulWadFailed()`.\r\n                mstore(0x00, 0xbac65e5b)\r\n                // Revert with (offset, size).\r\n                revert(0x1c, 0x04)\r\n            }\r\n            z := div(mul(x, y), WAD)\r\n        }\r\n    }\r\n}\r\n",
  "sourcePath": "/home/ensh/dapp/truffle/contracts/EnshroudProtocol.sol",
  "ast": {
    "absolutePath": "project:/contracts/EnshroudProtocol.sol",
    "exportedSymbols": {
      "ERC1155": [
        3579
      ],
      "ERC1155TokenReceiver": [
        3623
      ],
      "EnshroudProtocol": [
        5834
      ],
      "IERC20Permit_EnshroudProtocol": [
        3382
      ],
      "IMVOStaking_EnshroudProtocol": [
        3412
      ],
      "IWETH": [
        3391
      ],
      "ReentrancyGuard": [
        7830
      ],
      "SafeTransferLib": [
        7894
      ]
    },
    "id": 5835,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 3334,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".18"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:24:2"
      },
      {
        "absolutePath": "project:/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 3336,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5835,
        "sourceUnit": 7831,
        "src": "582:54:2",
        "symbolAliases": [
          {
            "foreign": {
              "id": 3335,
              "name": "ReentrancyGuard",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 7830,
              "src": "590:15:2",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/SafeTransferLib.sol",
        "file": "./SafeTransferLib.sol",
        "id": 3338,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 5835,
        "sourceUnit": 7895,
        "src": "745:54:2",
        "symbolAliases": [
          {
            "foreign": {
              "id": 3337,
              "name": "SafeTransferLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 7894,
              "src": "753:15:2",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IERC20Permit_EnshroudProtocol",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 3382,
        "linearizedBaseContracts": [
          3382
        ],
        "name": "IERC20Permit_EnshroudProtocol",
        "nameLocation": "988:29:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "d505accf",
            "id": 3355,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "permit",
            "nameLocation": "1034:6:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3340,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1059:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1051:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3339,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1051:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3342,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "1083:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1075:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3341,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1075:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3344,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "1109:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1101:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3343,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1101:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3346,
                  "mutability": "mutable",
                  "name": "deadline",
                  "nameLocation": "1133:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1125:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3345,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1125:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3348,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "1158:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1152:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3347,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1152:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3350,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1178:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1170:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3349,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1170:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3352,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "1198:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3355,
                  "src": "1190:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3351,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1190:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1040:166:2"
            },
            "returnParameters": {
              "id": 3354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1215:0:2"
            },
            "scope": 3382,
            "src": "1025:191:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "8fcbaf0c",
            "id": 3374,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "permit",
            "nameLocation": "1252:6:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3372,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3357,
                  "mutability": "mutable",
                  "name": "holder",
                  "nameLocation": "1277:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1269:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1269:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3359,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "1302:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1294:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3358,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1294:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3361,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "1328:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1320:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1320:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3363,
                  "mutability": "mutable",
                  "name": "expiry",
                  "nameLocation": "1352:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1344:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3362,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1344:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3365,
                  "mutability": "mutable",
                  "name": "allowed",
                  "nameLocation": "1374:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1369:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3364,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1369:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3367,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "1398:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1392:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 3366,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1392:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3369,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1418:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1410:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3368,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1410:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3371,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "1438:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3374,
                  "src": "1430:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3370,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1430:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1258:188:2"
            },
            "returnParameters": {
              "id": 3373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1455:0:2"
            },
            "scope": 3382,
            "src": "1243:213:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "70a08231",
            "id": 3381,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "1470:9:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3377,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3376,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "1488:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3381,
                  "src": "1480:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3375,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1480:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1479:15:2"
            },
            "returnParameters": {
              "id": 3380,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3379,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3381,
                  "src": "1518:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3378,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1518:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1517:9:2"
            },
            "scope": 3382,
            "src": "1461:66:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 5835,
        "src": "978:552:2",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IWETH",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 3391,
        "linearizedBaseContracts": [
          3391
        ],
        "name": "IWETH",
        "nameLocation": "1544:5:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "d0e30db0",
            "id": 3385,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nameLocation": "1566:7:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3383,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1573:2:2"
            },
            "returnParameters": {
              "id": 3384,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1592:0:2"
            },
            "scope": 3391,
            "src": "1557:36:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "2e1a7d4d",
            "id": 3390,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nameLocation": "1610:8:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3388,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3387,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3390,
                  "src": "1619:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3386,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1619:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1618:9:2"
            },
            "returnParameters": {
              "id": 3389,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1636:0:2"
            },
            "scope": 3391,
            "src": "1601:36:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 5835,
        "src": "1534:106:2",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IMVOStaking_EnshroudProtocol",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 3412,
        "linearizedBaseContracts": [
          3412
        ],
        "name": "IMVOStaking_EnshroudProtocol",
        "nameLocation": "1654:28:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "c38b84a1",
            "id": 3397,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "awardPoints",
            "nameLocation": "1699:11:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3394,
                  "mutability": "mutable",
                  "name": "mvoIDs",
                  "nameLocation": "1729:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3397,
                  "src": "1711:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "string[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3392,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "1711:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "id": 3393,
                    "nodeType": "ArrayTypeName",
                    "src": "1711:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                      "typeString": "string[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1710:26:2"
            },
            "returnParameters": {
              "id": 3396,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1745:0:2"
            },
            "scope": 3412,
            "src": "1690:56:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "bb21aa52",
            "id": 3402,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkMVO",
            "nameLocation": "1763:8:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3400,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3399,
                  "mutability": "mutable",
                  "name": "mvoID",
                  "nameLocation": "1788:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3402,
                  "src": "1772:21:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3398,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1772:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1771:23:2"
            },
            "returnParameters": {
              "id": 3401,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1803:0:2"
            },
            "scope": 3412,
            "src": "1754:50:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "c4df873f",
            "id": 3411,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "checkMVOSig",
            "nameLocation": "1821:11:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3409,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3404,
                  "mutability": "mutable",
                  "name": "mvoID",
                  "nameLocation": "1859:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3411,
                  "src": "1843:21:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3403,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1843:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3406,
                  "mutability": "mutable",
                  "name": "mvoSig",
                  "nameLocation": "1890:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3411,
                  "src": "1875:21:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3405,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1875:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3408,
                  "mutability": "mutable",
                  "name": "obHash",
                  "nameLocation": "1915:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3411,
                  "src": "1907:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3407,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1907:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1832:96:2"
            },
            "returnParameters": {
              "id": 3410,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1942:0:2"
            },
            "scope": 3412,
            "src": "1812:131:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 5835,
        "src": "1644:302:2",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": true,
        "baseContracts": [],
        "canonicalName": "ERC1155",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 3413,
          "nodeType": "StructuredDocumentation",
          "src": "2191:463:2",
          "text": "@dev the following were removed from the Sol-DAO implementation for non-transferability or because they are unused: ApprovalForAll() event, Unauthorized() custom error,*** 'isApprovedForAll[]' mapping, 'setApprovalForAll()', 'safeTransferFrom()', 'safeBatchTransferFrom()', 'balanceOfBatch()'; '_batchMint()'; 'batchBurn()'; 'TransferBatch' event*** therefore this is intentionally not fully compliant with the (usually transferable) ERC1155 standard "
        },
        "fullyImplemented": false,
        "id": 3579,
        "linearizedBaseContracts": [
          3579
        ],
        "name": "ERC1155",
        "nameLocation": "2674:7:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 3414,
              "nodeType": "StructuredDocumentation",
              "src": "2689:174:2",
              "text": "-----------------------------------------------------------------------\n Events\n -----------------------------------------------------------------------"
            },
            "eventSelector": "c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62",
            "id": 3426,
            "name": "TransferSingle",
            "nameLocation": "2875:14:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3425,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3416,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "2916:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3426,
                  "src": "2900:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3415,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2900:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3418,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "2951:4:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3426,
                  "src": "2935:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3417,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2935:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3420,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2982:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3426,
                  "src": "2966:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3419,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2966:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3422,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "3003:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3426,
                  "src": "2995:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3421,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2995:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3424,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "3024:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3426,
                  "src": "3016:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3423,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3016:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2889:148:2"
            },
            "src": "2869:169:2"
          },
          {
            "anonymous": false,
            "eventSelector": "6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b",
            "id": 3432,
            "name": "URI",
            "nameLocation": "3052:3:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3428,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "3063:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3432,
                  "src": "3056:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3427,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3056:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3430,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "3086:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3432,
                  "src": "3070:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3429,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3070:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3055:34:2"
            },
            "src": "3046:44:2"
          },
          {
            "documentation": {
              "id": 3433,
              "nodeType": "StructuredDocumentation",
              "src": "3098:181:2",
              "text": "-----------------------------------------------------------------------\n Custom Errors\n -----------------------------------------------------------------------"
            },
            "errorSelector": "3da63931",
            "id": 3435,
            "name": "UnsafeRecipient",
            "nameLocation": "3291:15:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3434,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3306:2:2"
            },
            "src": "3285:24:2"
          },
          {
            "errorSelector": "9c8d2cd2",
            "id": 3437,
            "name": "InvalidRecipient",
            "nameLocation": "3323:16:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3436,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3339:2:2"
            },
            "src": "3317:25:2"
          },
          {
            "errorSelector": "ff633a38",
            "id": 3439,
            "name": "LengthMismatch",
            "nameLocation": "3356:14:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3438,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3370:2:2"
            },
            "src": "3350:23:2"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3440,
              "nodeType": "StructuredDocumentation",
              "src": "3381:183:2",
              "text": "-----------------------------------------------------------------------\n ERC1155 Storage\n -----------------------------------------------------------------------"
            },
            "functionSelector": "00fdd58e",
            "id": 3446,
            "mutability": "mutable",
            "name": "balanceOf",
            "nameLocation": "3625:9:2",
            "nodeType": "VariableDeclaration",
            "scope": 3579,
            "src": "3570:64:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(uint256 => uint256))"
            },
            "typeName": {
              "id": 3445,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3441,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3578:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3570:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(uint256 => uint256))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3444,
                "keyName": "",
                "keyNameLocation": "-1:-1:-1",
                "keyType": {
                  "id": 3442,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3597:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "nodeType": "Mapping",
                "src": "3589:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                  "typeString": "mapping(uint256 => uint256)"
                },
                "valueName": "",
                "valueNameLocation": "-1:-1:-1",
                "valueType": {
                  "id": 3443,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "3608:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "documentation": {
              "id": 3447,
              "nodeType": "StructuredDocumentation",
              "src": "3643:182:2",
              "text": "-----------------------------------------------------------------------\n Metadata Logic\n -----------------------------------------------------------------------"
            },
            "functionSelector": "0de72b7e",
            "id": 3454,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "uri",
            "nameLocation": "3840:3:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3449,
                  "mutability": "mutable",
                  "name": "metadata",
                  "nameLocation": "3870:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3454,
                  "src": "3854:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3448,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3854:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3843:42:2"
            },
            "returnParameters": {
              "id": 3453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3452,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3454,
                  "src": "3915:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3451,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3915:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3914:15:2"
            },
            "scope": 3579,
            "src": "3831:99:2",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3474,
              "nodeType": "Block",
              "src": "4222:263:2",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 3468,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 3464,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3462,
                          "name": "interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3457,
                          "src": "4253:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30783031666663396137",
                          "id": 3463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4268:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_33540519_by_1",
                            "typeString": "int_const 33540519"
                          },
                          "value": "0x01ffc9a7"
                        },
                        "src": "4253:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 3467,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 3465,
                          "name": "interfaceId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3457,
                          "src": "4329:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30786439623637613236",
                          "id": 3466,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4344:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_3652614694_by_1",
                            "typeString": "int_const 3652614694"
                          },
                          "value": "0xd9b67a26"
                        },
                        "src": "4329:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "4253:101:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "id": 3471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3469,
                        "name": "interfaceId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3457,
                        "src": "4406:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30783065383933343163",
                        "id": 3470,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4421:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_243872796_by_1",
                          "typeString": "int_const 243872796"
                        },
                        "value": "0x0e89341c"
                      },
                      "src": "4406:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4253:178:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 3461,
                  "id": 3473,
                  "nodeType": "Return",
                  "src": "4233:198:2"
                }
              ]
            },
            "documentation": {
              "id": 3455,
              "nodeType": "StructuredDocumentation",
              "src": "3938:180:2",
              "text": "-----------------------------------------------------------------------\n ERC165 Logic\n -----------------------------------------------------------------------"
            },
            "functionSelector": "01ffc9a7",
            "id": 3475,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "supportsInterface",
            "nameLocation": "4133:17:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3458,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3457,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "4168:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3475,
                  "src": "4161:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 3456,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4161:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4150:36:2"
            },
            "returnParameters": {
              "id": 3461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3460,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3475,
                  "src": "4216:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3459,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4216:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4215:6:2"
            },
            "scope": 3579,
            "src": "4124:361:2",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 3546,
              "nodeType": "Block",
              "src": "5011:617:2",
              "statements": [
                {
                  "expression": {
                    "id": 3493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 3487,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3446,
                          "src": "5022:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(uint256 => uint256))"
                          }
                        },
                        "id": 3490,
                        "indexExpression": {
                          "id": 3488,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3478,
                          "src": "5032:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5022:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 3491,
                      "indexExpression": {
                        "id": 3489,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3480,
                        "src": "5036:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5022:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 3492,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3482,
                      "src": "5043:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5022:27:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3494,
                  "nodeType": "ExpressionStatement",
                  "src": "5022:27:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3496,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5142:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3497,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5146:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5142:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 3500,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5162:1:2",
                            "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": 3499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5154:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3498,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5154:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3501,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5154:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3502,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3478,
                        "src": "5166:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3503,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3480,
                        "src": "5170:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3504,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3482,
                        "src": "5174:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3495,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3426,
                      "src": "5127:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 3505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5127:54:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3506,
                  "nodeType": "EmitStatement",
                  "src": "5122:59:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3511,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 3507,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3478,
                          "src": "5198:2:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5201:4:2",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "5198:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 3509,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5206:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5198:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 3510,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5216:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5198:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 3540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3535,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3478,
                        "src": "5577:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 3538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5591:1:2",
                            "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": 3537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5583:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3536,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5583:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5583:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "5577:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 3544,
                    "nodeType": "IfStatement",
                    "src": "5573:47:2",
                    "trueBody": {
                      "errorCall": {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 3541,
                          "name": "InvalidRecipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3437,
                          "src": "5602:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                            "typeString": "function () pure returns (error)"
                          }
                        },
                        "id": 3542,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5602:18:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_error",
                          "typeString": "error"
                        }
                      },
                      "id": 3543,
                      "nodeType": "RevertStatement",
                      "src": "5595:25:2"
                    }
                  },
                  "id": 3545,
                  "nodeType": "IfStatement",
                  "src": "5194:426:2",
                  "trueBody": {
                    "id": 3534,
                    "nodeType": "Block",
                    "src": "5219:348:2",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "id": 3529,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 3516,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "5321:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 3517,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "5325:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "5321:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 3520,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "5362:1:2",
                                    "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": 3519,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "5354:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3518,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "5354:7:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3521,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5354:10:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3522,
                                "name": "id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3480,
                                "src": "5387:2:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3523,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3482,
                                "src": "5412:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 3524,
                                "name": "data",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3484,
                                "src": "5441:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 3513,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3478,
                                    "src": "5277:2:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 3512,
                                  "name": "ERC1155TokenReceiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3623,
                                  "src": "5256:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$3623_$",
                                    "typeString": "type(contract ERC1155TokenReceiver)"
                                  }
                                },
                                "id": 3514,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5256:24:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC1155TokenReceiver_$3623",
                                  "typeString": "contract ERC1155TokenReceiver"
                                }
                              },
                              "id": 3515,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "5281:17:2",
                              "memberName": "onERC1155Received",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3600,
                              "src": "5256:42:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                "typeString": "function (address,address,uint256,uint256,bytes memory) external returns (bytes4)"
                              }
                            },
                            "id": 3525,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5256:208:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "id": 3526,
                                "name": "ERC1155TokenReceiver",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3623,
                                "src": "5468:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$3623_$",
                                  "typeString": "type(contract ERC1155TokenReceiver)"
                                }
                              },
                              "id": 3527,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "5489:17:2",
                              "memberName": "onERC1155Received",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3600,
                              "src": "5468:38:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                                "typeString": "function ERC1155TokenReceiver.onERC1155Received(address,address,uint256,uint256,bytes calldata) returns (bytes4)"
                              }
                            },
                            "id": 3528,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "5507:8:2",
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "src": "5468:47:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "5256:259:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3533,
                        "nodeType": "IfStatement",
                        "src": "5234:321:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 3530,
                              "name": "UnsafeRecipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3435,
                              "src": "5538:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 3531,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5538:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 3532,
                          "nodeType": "RevertStatement",
                          "src": "5531:24:2"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 3476,
              "nodeType": "StructuredDocumentation",
              "src": "4691:180:2",
              "text": "@param to: owning address\n @param id: unique ID of eNFT\n @param amount: always 1 (quantity is specified within the eNFT)\n @param data: encrypted eNFT metadata"
            },
            "id": 3547,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "4886:5:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3478,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "4910:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3547,
                  "src": "4902:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3477,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4902:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3480,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "4931:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3547,
                  "src": "4923:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3479,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4923:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3482,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4952:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3547,
                  "src": "4944:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3481,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4944:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3484,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4982:4:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3547,
                  "src": "4969:17:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3483,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4969:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4891:102:2"
            },
            "returnParameters": {
              "id": 3486,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5011:0:2"
            },
            "scope": 3579,
            "src": "4877:751:2",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 3577,
              "nodeType": "Block",
              "src": "5858:182:2",
              "statements": [
                {
                  "expression": {
                    "id": 3563,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 3557,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3446,
                          "src": "5869:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(uint256 => uint256))"
                          }
                        },
                        "id": 3560,
                        "indexExpression": {
                          "id": 3558,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3550,
                          "src": "5879:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5869:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 3561,
                      "indexExpression": {
                        "id": 3559,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3552,
                        "src": "5885:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5869:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 3562,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3554,
                      "src": "5892:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5869:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3564,
                  "nodeType": "ExpressionStatement",
                  "src": "5869:29:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 3566,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5991:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 3567,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5995:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "5991:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3568,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3550,
                        "src": "6003:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 3571,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6017:1:2",
                            "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": 3570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6009:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3569,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6009:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3572,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6009:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 3573,
                        "name": "id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3552,
                        "src": "6021:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 3574,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3554,
                        "src": "6025:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 3565,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3426,
                      "src": "5976:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 3575,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5976:56:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3576,
                  "nodeType": "EmitStatement",
                  "src": "5971:61:2"
                }
              ]
            },
            "documentation": {
              "id": 3548,
              "nodeType": "StructuredDocumentation",
              "src": "5636:142:2",
              "text": "@param from: owning address burning the eNFT\n @param id: unique ID of eNFT\n @param amount: always 1 (results in 0 balance)"
            },
            "id": 3578,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "5793:5:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3550,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "5807:4:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3578,
                  "src": "5799:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3549,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5799:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3552,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "5821:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3578,
                  "src": "5813:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3551,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5813:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3554,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5833:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3578,
                  "src": "5825:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5825:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5798:42:2"
            },
            "returnParameters": {
              "id": 3556,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5858:0:2"
            },
            "scope": 3579,
            "src": "5784:256:2",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 5835,
        "src": "2656:3387:2",
        "usedErrors": [
          3435,
          3437,
          3439
        ],
        "usedEvents": [
          3426,
          3432
        ]
      },
      {
        "abstract": true,
        "baseContracts": [],
        "canonicalName": "ERC1155TokenReceiver",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 3580,
          "nodeType": "StructuredDocumentation",
          "src": "6047:348:2",
          "text": "@author Solbase (https://github.com/Sol-DAO/solbase/blob/main/src/tokens/ERC1155/ERC1155.sol)\n @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155/ERC1155.sol)\n @dev while the ERC1155-like tokens in this protocol are non-transferable, the below are included for minted eNFT receivers"
        },
        "fullyImplemented": true,
        "id": 3623,
        "linearizedBaseContracts": [
          3623
        ],
        "name": "ERC1155TokenReceiver",
        "nameLocation": "6413:20:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 3599,
              "nodeType": "Block",
              "src": "6606:73:2",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "expression": {
                        "id": 3595,
                        "name": "ERC1155TokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3623,
                        "src": "6624:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$3623_$",
                          "typeString": "type(contract ERC1155TokenReceiver)"
                        }
                      },
                      "id": 3596,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "6645:17:2",
                      "memberName": "onERC1155Received",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3600,
                      "src": "6624:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                        "typeString": "function ERC1155TokenReceiver.onERC1155Received(address,address,uint256,uint256,bytes calldata) returns (bytes4)"
                      }
                    },
                    "id": 3597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "6663:8:2",
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "src": "6624:47:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 3594,
                  "id": 3598,
                  "nodeType": "Return",
                  "src": "6617:54:2"
                }
              ]
            },
            "functionSelector": "f23a6e61",
            "id": 3600,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onERC1155Received",
            "nameLocation": "6450:17:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3582,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3600,
                  "src": "6478:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3581,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6478:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3584,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3600,
                  "src": "6496:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3583,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6496:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3586,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3600,
                  "src": "6514:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3585,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6514:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3588,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3600,
                  "src": "6532:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3587,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6532:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3590,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3600,
                  "src": "6550:14:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3589,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6550:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6467:104:2"
            },
            "returnParameters": {
              "id": 3594,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3593,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3600,
                  "src": "6598:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 3592,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "6598:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6597:8:2"
            },
            "scope": 3623,
            "src": "6441:238:2",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 3621,
              "nodeType": "Block",
              "src": "6879:78:2",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "expression": {
                        "id": 3617,
                        "name": "ERC1155TokenReceiver",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3623,
                        "src": "6897:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC1155TokenReceiver_$3623_$",
                          "typeString": "type(contract ERC1155TokenReceiver)"
                        }
                      },
                      "id": 3618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "6918:22:2",
                      "memberName": "onERC1155BatchReceived",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3622,
                      "src": "6897:43:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_declaration_nonpayable$_t_address_$_t_address_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_array$_t_uint256_$dyn_calldata_ptr_$_t_bytes_calldata_ptr_$returns$_t_bytes4_$",
                        "typeString": "function ERC1155TokenReceiver.onERC1155BatchReceived(address,address,uint256[] calldata,uint256[] calldata,bytes calldata) returns (bytes4)"
                      }
                    },
                    "id": 3619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberLocation": "6941:8:2",
                    "memberName": "selector",
                    "nodeType": "MemberAccess",
                    "src": "6897:52:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 3616,
                  "id": 3620,
                  "nodeType": "Return",
                  "src": "6890:59:2"
                }
              ]
            },
            "functionSelector": "bc197c81",
            "id": 3622,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onERC1155BatchReceived",
            "nameLocation": "6696:22:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3613,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3602,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3622,
                  "src": "6729:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3601,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6729:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3604,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3622,
                  "src": "6747:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3603,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6747:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3607,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3622,
                  "src": "6765:18:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3605,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6765:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3606,
                    "nodeType": "ArrayTypeName",
                    "src": "6765:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3610,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3622,
                  "src": "6794:18:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3608,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "6794:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3609,
                    "nodeType": "ArrayTypeName",
                    "src": "6794:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3612,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3622,
                  "src": "6823:14:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3611,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6823:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6718:126:2"
            },
            "returnParameters": {
              "id": 3616,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3615,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3622,
                  "src": "6871:6:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 3614,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "6871:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6870:8:2"
            },
            "scope": 3623,
            "src": "6687:270:2",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          }
        ],
        "scope": 5835,
        "src": "6395:565:2",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 3625,
              "name": "ERC1155",
              "nameLocations": [
                "7033:7:2"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3579,
              "src": "7033:7:2"
            },
            "id": 3626,
            "nodeType": "InheritanceSpecifier",
            "src": "7033:7:2"
          },
          {
            "baseName": {
              "id": 3627,
              "name": "ERC1155TokenReceiver",
              "nameLocations": [
                "7042:20:2"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 3623,
              "src": "7042:20:2"
            },
            "id": 3628,
            "nodeType": "InheritanceSpecifier",
            "src": "7042:20:2"
          },
          {
            "baseName": {
              "id": 3629,
              "name": "ReentrancyGuard",
              "nameLocations": [
                "7064:15:2"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7830,
              "src": "7064:15:2"
            },
            "id": 3630,
            "nodeType": "InheritanceSpecifier",
            "src": "7064:15:2"
          }
        ],
        "canonicalName": "EnshroudProtocol",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 3624,
          "nodeType": "StructuredDocumentation",
          "src": "6964:40:2",
          "text": "@notice Enshroud protocol contract"
        },
        "fullyImplemented": true,
        "id": 5834,
        "linearizedBaseContracts": [
          5834,
          7830,
          3623,
          3579
        ],
        "name": "EnshroudProtocol",
        "nameLocation": "7013:16:2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 3633,
            "libraryName": {
              "id": 3631,
              "name": "SafeTransferLib",
              "nameLocations": [
                "7093:15:2"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7894,
              "src": "7093:15:2"
            },
            "nodeType": "UsingForDirective",
            "src": "7087:34:2",
            "typeName": {
              "id": 3632,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "7113:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "canonicalName": "EnshroudProtocol.Flag",
            "documentation": {
              "id": 3634,
              "nodeType": "StructuredDocumentation",
              "src": "7126:28:2",
              "text": "types of eNFT operations"
            },
            "id": 3638,
            "members": [
              {
                "id": 3635,
                "name": "MintFromDeposit",
                "nameLocation": "7181:15:2",
                "nodeType": "EnumValue",
                "src": "7181:15:2"
              },
              {
                "id": 3636,
                "name": "Spend",
                "nameLocation": "7207:5:2",
                "nodeType": "EnumValue",
                "src": "7207:5:2"
              },
              {
                "id": 3637,
                "name": "Withdraw",
                "nameLocation": "7223:8:2",
                "nodeType": "EnumValue",
                "src": "7223:8:2"
              }
            ],
            "name": "Flag",
            "nameLocation": "7165:4:2",
            "nodeType": "EnumDefinition",
            "src": "7160:78:2"
          },
          {
            "canonicalName": "EnshroudProtocol.OpsInfo",
            "documentation": {
              "id": 3639,
              "nodeType": "StructuredDocumentation",
              "src": "7246:836:2",
              "text": "@notice struct of necessary Operations Block information to properly cause eNFT mint(s)\n @param recipients: array of addresses to receive minted eNFTs\n @param detailsHashes: supplied by MVO layer, hash of address owner, uint256 id, address asset, uint256 amount, and (optional) bytes rand for each eNFT\n @param inputIds: array of token IDs of eNFTs to be redeemed and burned\n @param outputIds: array of token IDs of eNFTs to be minted -- unique and assigned randomly by the lead MVO\n @param metadata: array of metadata strings for each corresponding eNFT ID, passed to uri function\n @param amount: amount of tokens to which the Operations Block corresponds\n @param obHash: keccak256 hash of the Operations Block\n @dev each array must be in the same corresponding order"
            },
            "id": 3659,
            "members": [
              {
                "constant": false,
                "id": 3642,
                "mutability": "mutable",
                "name": "recipients",
                "nameLocation": "8124:10:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8114:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                  "typeString": "address[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3640,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8114:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3641,
                  "nodeType": "ArrayTypeName",
                  "src": "8114:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                    "typeString": "address[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3645,
                "mutability": "mutable",
                "name": "detailsHashes",
                "nameLocation": "8155:13:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8145:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                  "typeString": "bytes32[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3643,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8145:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 3644,
                  "nodeType": "ArrayTypeName",
                  "src": "8145:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                    "typeString": "bytes32[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3648,
                "mutability": "mutable",
                "name": "inputIds",
                "nameLocation": "8189:8:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8179:18:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                  "typeString": "uint256[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3646,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8179:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3647,
                  "nodeType": "ArrayTypeName",
                  "src": "8179:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                    "typeString": "uint256[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3651,
                "mutability": "mutable",
                "name": "outputIds",
                "nameLocation": "8218:9:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8208:19:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                  "typeString": "uint256[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3649,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8208:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3650,
                  "nodeType": "ArrayTypeName",
                  "src": "8208:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                    "typeString": "uint256[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3654,
                "mutability": "mutable",
                "name": "metadata",
                "nameLocation": "8247:8:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8238:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                  "typeString": "string[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3652,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "8238:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "id": 3653,
                  "nodeType": "ArrayTypeName",
                  "src": "8238:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                    "typeString": "string[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3656,
                "mutability": "mutable",
                "name": "amount",
                "nameLocation": "8274:6:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8266:14:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 3655,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "8266:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3658,
                "mutability": "mutable",
                "name": "obHash",
                "nameLocation": "8299:6:2",
                "nodeType": "VariableDeclaration",
                "scope": 3659,
                "src": "8291:14:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 3657,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "8291:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "OpsInfo",
            "nameLocation": "8095:7:2",
            "nodeType": "StructDefinition",
            "scope": 5834,
            "src": "8088:225:2",
            "visibility": "public"
          },
          {
            "canonicalName": "EnshroudProtocol.MVOinfo",
            "documentation": {
              "id": 3660,
              "nodeType": "StructuredDocumentation",
              "src": "8321:203:2",
              "text": "@notice 'mvoSigs' is an array of MVO signatures provided by the MVO server (first is lead MVO); 'mvoIDs' are the IDs of the MVOs, the first of which is the lead MVO which receives the deposit message"
            },
            "id": 3667,
            "members": [
              {
                "constant": false,
                "id": 3663,
                "mutability": "mutable",
                "name": "mvoSigs",
                "nameLocation": "8564:7:2",
                "nodeType": "VariableDeclaration",
                "scope": 3667,
                "src": "8556:15:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                  "typeString": "bytes[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3661,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8556:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "id": 3662,
                  "nodeType": "ArrayTypeName",
                  "src": "8556:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes_storage_$dyn_storage_ptr",
                    "typeString": "bytes[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3666,
                "mutability": "mutable",
                "name": "mvoIDs",
                "nameLocation": "8591:6:2",
                "nodeType": "VariableDeclaration",
                "scope": 3667,
                "src": "8582:15:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                  "typeString": "string[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 3664,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "8582:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "id": 3665,
                  "nodeType": "ArrayTypeName",
                  "src": "8582:8:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                    "typeString": "string[]"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "MVOinfo",
            "nameLocation": "8537:7:2",
            "nodeType": "StructDefinition",
            "scope": 5834,
            "src": "8530:75:2",
            "visibility": "public"
          },
          {
            "canonicalName": "EnshroudProtocol.ApprovalTypes",
            "documentation": {
              "id": 3668,
              "nodeType": "StructuredDocumentation",
              "src": "8610:54:2",
              "text": "types of approvals handled by _isRequestApproved()"
            },
            "id": 3674,
            "members": [
              {
                "id": 3669,
                "name": "MVOStaking",
                "nameLocation": "8688:10:2",
                "nodeType": "EnumValue",
                "src": "8688:10:2"
              },
              {
                "id": 3670,
                "name": "GreyList",
                "nameLocation": "8700:8:2",
                "nodeType": "EnumValue",
                "src": "8700:8:2"
              },
              {
                "id": 3671,
                "name": "Auditor",
                "nameLocation": "8710:7:2",
                "nodeType": "EnumValue",
                "src": "8710:7:2"
              },
              {
                "id": 3672,
                "name": "Treasury",
                "nameLocation": "8719:8:2",
                "nodeType": "EnumValue",
                "src": "8719:8:2"
              },
              {
                "id": 3673,
                "name": "DaoPool",
                "nameLocation": "8729:7:2",
                "nodeType": "EnumValue",
                "src": "8729:7:2"
              }
            ],
            "name": "ApprovalTypes",
            "nameLocation": "8672:13:2",
            "nodeType": "EnumDefinition",
            "src": "8667:71:2"
          },
          {
            "canonicalName": "EnshroudProtocol.Requests",
            "documentation": {
              "id": 3675,
              "nodeType": "StructuredDocumentation",
              "src": "8746:101:2",
              "text": "@notice to track admin update requests; addresses truncated to bytes8 for size/gas considerations"
            },
            "id": 3685,
            "members": [
              {
                "constant": false,
                "id": 3677,
                "mutability": "mutable",
                "name": "requester1",
                "nameLocation": "8887:10:2",
                "nodeType": "VariableDeclaration",
                "scope": 3685,
                "src": "8880:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes8",
                  "typeString": "bytes8"
                },
                "typeName": {
                  "id": 3676,
                  "name": "bytes8",
                  "nodeType": "ElementaryTypeName",
                  "src": "8880:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3679,
                "mutability": "mutable",
                "name": "requester2",
                "nameLocation": "8915:10:2",
                "nodeType": "VariableDeclaration",
                "scope": 3685,
                "src": "8908:17:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes8",
                  "typeString": "bytes8"
                },
                "typeName": {
                  "id": 3678,
                  "name": "bytes8",
                  "nodeType": "ElementaryTypeName",
                  "src": "8908:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3682,
                "mutability": "mutable",
                "name": "requestType",
                "nameLocation": "8944:11:2",
                "nodeType": "VariableDeclaration",
                "scope": 3685,
                "src": "8930:25:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                  "typeString": "enum EnshroudProtocol.ApprovalTypes"
                },
                "typeName": {
                  "id": 3681,
                  "nodeType": "UserDefinedTypeName",
                  "pathNode": {
                    "id": 3680,
                    "name": "ApprovalTypes",
                    "nameLocations": [
                      "8930:13:2"
                    ],
                    "nodeType": "IdentifierPath",
                    "referencedDeclaration": 3674,
                    "src": "8930:13:2"
                  },
                  "referencedDeclaration": 3674,
                  "src": "8930:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                    "typeString": "enum EnshroudProtocol.ApprovalTypes"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 3684,
                "mutability": "mutable",
                "name": "audID",
                "nameLocation": "8966:5:2",
                "nodeType": "VariableDeclaration",
                "scope": 3685,
                "src": "8960:11:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 3683,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "8960:5:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Requests",
            "nameLocation": "8860:8:2",
            "nodeType": "StructDefinition",
            "scope": 5834,
            "src": "8853:126:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3686,
              "nodeType": "StructuredDocumentation",
              "src": "9169:71:2",
              "text": "@dev to enable dai-pattern permit (ETH mainnet, possibly elsewhere)"
            },
            "id": 3688,
            "mutability": "immutable",
            "name": "daiToken",
            "nameLocation": "9270:8:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9243:35:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3687,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "9243:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3691,
            "mutability": "constant",
            "name": "ARRAY_LIMIT",
            "nameLocation": "9350:11:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9324:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3689,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "9324:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "3230",
              "id": 3690,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9364:2:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3694,
            "mutability": "constant",
            "name": "FEE_LIMIT",
            "nameLocation": "9399:9:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9373:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3692,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "9373:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "35653137",
              "id": 3693,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9411:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_500000000000000000_by_1",
                "typeString": "int_const 500000000000000000"
              },
              "value": "5e17"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 3697,
            "mutability": "constant",
            "name": "WAD",
            "nameLocation": "9448:3:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9422:36:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3695,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "9422:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31653138",
              "id": 3696,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9454:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3699,
            "mutability": "immutable",
            "name": "weth",
            "nameLocation": "9494:4:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9467:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 3698,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "9467:7:2",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "460a58aa",
            "id": 3701,
            "mutability": "immutable",
            "name": "confirmationBlocks",
            "nameLocation": "9530:18:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9505:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3700,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "9505:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "33e0ff5d",
            "id": 3703,
            "mutability": "mutable",
            "name": "daoPool",
            "nameLocation": "9580:7:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9557:30:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 3702,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "9557:15:2",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "61d027b3",
            "id": 3705,
            "mutability": "mutable",
            "name": "treasury",
            "nameLocation": "9617:8:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9594:31:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 3704,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "9594:15:2",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "6c0360eb",
            "id": 3707,
            "mutability": "mutable",
            "name": "baseURI",
            "nameLocation": "9648:7:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9634:21:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 3706,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "9634:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "7c0bbd5c",
            "id": 3709,
            "mutability": "mutable",
            "name": "requiredSigs",
            "nameLocation": "9679:12:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9664:27:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3708,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "9664:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3710,
              "nodeType": "StructuredDocumentation",
              "src": "9700:156:2",
              "text": "@notice initial treasury fee is 5%. To remove, DAO voting app (once added as admin) and two other admins can vote to change treasury address to DAO pool"
            },
            "functionSelector": "cc32d176",
            "id": 3713,
            "mutability": "mutable",
            "name": "treasuryFee",
            "nameLocation": "9877:11:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9862:33:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 3711,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "9862:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "35653136",
              "id": 3712,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "9891:4:2",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_50000000000000000_by_1",
                "typeString": "int_const 50000000000000000"
              },
              "value": "5e16"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 3716,
            "mutability": "mutable",
            "name": "iMVOStaking",
            "nameLocation": "9942:11:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9904:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
              "typeString": "contract IMVOStaking_EnshroudProtocol"
            },
            "typeName": {
              "id": 3715,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 3714,
                "name": "IMVOStaking_EnshroudProtocol",
                "nameLocations": [
                  "9904:28:2"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3412,
                "src": "9904:28:2"
              },
              "referencedDeclaration": 3412,
              "src": "9904:28:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                "typeString": "contract IMVOStaking_EnshroudProtocol"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3719,
            "mutability": "immutable",
            "name": "iWeth",
            "nameLocation": "9985:5:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9960:30:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IWETH_$3391",
              "typeString": "contract IWETH"
            },
            "typeName": {
              "id": 3718,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 3717,
                "name": "IWETH",
                "nameLocations": [
                  "9960:5:2"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 3391,
                "src": "9960:5:2"
              },
              "referencedDeclaration": 3391,
              "src": "9960:5:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IWETH_$3391",
                "typeString": "contract IWETH"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 3724,
            "mutability": "mutable",
            "name": "updateRequested",
            "nameLocation": "10037:15:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "9999:53:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
              "typeString": "mapping(address => struct EnshroudProtocol.Requests)"
            },
            "typeName": {
              "id": 3723,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3720,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "10007:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "9999:28:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                "typeString": "mapping(address => struct EnshroudProtocol.Requests)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3722,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 3721,
                  "name": "Requests",
                  "nameLocations": [
                    "10018:8:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3685,
                  "src": "10018:8:2"
                },
                "referencedDeclaration": 3685,
                "src": "10018:8:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Requests_$3685_storage_ptr",
                  "typeString": "struct EnshroudProtocol.Requests"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "3e4a89d1",
            "id": 3728,
            "mutability": "mutable",
            "name": "adminStatus",
            "nameLocation": "10091:11:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10059:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 3727,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3725,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "10067:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "10059:24:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3726,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "10078:4:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3729,
              "nodeType": "StructuredDocumentation",
              "src": "10109:90:2",
              "text": "@notice maps a user to a mapping of tokenContract to amount deposited in this contract"
            },
            "functionSelector": "bdfce5bf",
            "id": 3735,
            "mutability": "mutable",
            "name": "assetBalances",
            "nameLocation": "10260:13:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10205:68:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 3734,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3730,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "10213:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "10205:47:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3733,
                "keyName": "",
                "keyNameLocation": "-1:-1:-1",
                "keyType": {
                  "id": 3731,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "10232:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "10224:27:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueName": "",
                "valueNameLocation": "-1:-1:-1",
                "valueType": {
                  "id": 3732,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "10243:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "82073743",
            "id": 3739,
            "mutability": "mutable",
            "name": "assetDepositFee",
            "nameLocation": "10315:15:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10280:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 3738,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3736,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "10288:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "10280:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3737,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "10299:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8175cece",
            "id": 3743,
            "mutability": "mutable",
            "name": "assetWithdrawFee",
            "nameLocation": "10372:16:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10337:51:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 3742,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3740,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "10345:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "10337:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3741,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "10356:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3744,
              "nodeType": "StructuredDocumentation",
              "src": "10395:88:2",
              "text": "@notice maps auditor Id to their address. Zero address means no such auditor exists."
            },
            "functionSelector": "b6ef564a",
            "id": 3748,
            "mutability": "mutable",
            "name": "auditors",
            "nameLocation": "10523:8:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10489:42:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_address_$",
              "typeString": "mapping(string => address)"
            },
            "typeName": {
              "id": 3747,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3745,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "10497:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              },
              "nodeType": "Mapping",
              "src": "10489:26:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_address_$",
                "typeString": "mapping(string => address)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3746,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "10507:7:2",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3749,
              "nodeType": "StructuredDocumentation",
              "src": "10538:84:2",
              "text": "@notice maps an id number to a bool of whether such id has been used for an eNFT"
            },
            "id": 3753,
            "mutability": "mutable",
            "name": "nftIdUsed",
            "nameLocation": "10662:9:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10628:43:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$",
              "typeString": "mapping(uint256 => bool)"
            },
            "typeName": {
              "id": 3752,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3750,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "10636:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "10628:24:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$",
                "typeString": "mapping(uint256 => bool)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3751,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "10647:4:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3754,
              "nodeType": "StructuredDocumentation",
              "src": "10678:55:2",
              "text": "@notice maps an eNFT's id number to its detailsHash"
            },
            "id": 3758,
            "mutability": "mutable",
            "name": "detailsHash",
            "nameLocation": "10776:11:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10739:48:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
              "typeString": "mapping(uint256 => bytes32)"
            },
            "typeName": {
              "id": 3757,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3755,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "10747:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "10739:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                "typeString": "mapping(uint256 => bytes32)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3756,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "10758:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3759,
              "nodeType": "StructuredDocumentation",
              "src": "10794:141:2",
              "text": "@notice maps an eNFT's id number to error string; contains the AudId of the Auditor node who so marked it, and may contain a reason code."
            },
            "functionSelector": "7da7283b",
            "id": 3763,
            "mutability": "mutable",
            "name": "idToAuditorGreylist",
            "nameLocation": "10975:19:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "10941:53:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
              "typeString": "mapping(uint256 => string)"
            },
            "typeName": {
              "id": 3762,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3760,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "10949:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "10941:26:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                "typeString": "mapping(uint256 => string)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3761,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "10960:6:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 3764,
              "nodeType": "StructuredDocumentation",
              "src": "11001:122:2",
              "text": "@notice sets dwell time for an eNFT before redemption by mapping eNFT id to (mint block.number + 'confirmationBlocks')"
            },
            "functionSelector": "a4ef5162",
            "id": 3768,
            "mutability": "mutable",
            "name": "enftUnlockTime",
            "nameLocation": "11164:14:2",
            "nodeType": "VariableDeclaration",
            "scope": 5834,
            "src": "11129:49:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 3767,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 3765,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "11137:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "11129:27:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 3766,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "11148:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 3769,
              "nodeType": "StructuredDocumentation",
              "src": "11366:132:2",
              "text": "certain events excluded for contract size considerations, such as unlikely/rare variable updates (iMVOStaking, treasury, etc.)"
            },
            "eventSelector": "235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133",
            "id": 3775,
            "name": "AdminUpdated",
            "nameLocation": "11510:12:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3771,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "admin",
                  "nameLocation": "11531:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3775,
                  "src": "11523:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3770,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11523:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3773,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "status",
                  "nameLocation": "11543:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3775,
                  "src": "11538:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3772,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11538:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11522:28:2"
            },
            "src": "11504:47:2"
          },
          {
            "anonymous": false,
            "eventSelector": "bf9e968c6a35f832352c8dfb5236ab1ce4a6dd21df144cd8c490951c1b08133a",
            "id": 3781,
            "name": "AuditorUpdated",
            "nameLocation": "11565:14:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3780,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3777,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "auditor",
                  "nameLocation": "11588:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3781,
                  "src": "11580:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3776,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11580:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3779,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "audId",
                  "nameLocation": "11604:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3781,
                  "src": "11597:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3778,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11597:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11579:31:2"
            },
            "src": "11559:52:2"
          },
          {
            "anonymous": false,
            "eventSelector": "228adef123a7fe6b727889b4d24b39b39de663428214fd757c6c501fb98d8494",
            "id": 3791,
            "name": "DepositERC20",
            "nameLocation": "11625:12:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3783,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "11664:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3791,
                  "src": "11648:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3782,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11648:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3785,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenContract",
                  "nameLocation": "11689:13:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3791,
                  "src": "11681:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11681:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3787,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "11721:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3791,
                  "src": "11713:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11713:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3789,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "11746:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3791,
                  "src": "11738:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11738:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11637:123:2"
            },
            "src": "11619:142:2"
          },
          {
            "anonymous": false,
            "eventSelector": "57e8e547a3ef8d890c570ca885b0a8c441be3070e36b7ad4c7d6b9d9316ff2ce",
            "id": 3799,
            "name": "DepositETH",
            "nameLocation": "11775:10:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3798,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3793,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "11812:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3799,
                  "src": "11796:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3792,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11796:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3795,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "weiAmount",
                  "nameLocation": "11837:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3799,
                  "src": "11829:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3794,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11829:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3797,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "11865:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3799,
                  "src": "11857:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3796,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11857:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11785:94:2"
            },
            "src": "11769:111:2"
          },
          {
            "anonymous": false,
            "eventSelector": "a2e8a919645449f1c07cb9a6c38ec0709a2b4fd6655a4514db6cb4db0dbccb40",
            "id": 3806,
            "name": "GreyListAdd",
            "nameLocation": "11894:11:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3805,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3801,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "audId",
                  "nameLocation": "11913:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3806,
                  "src": "11906:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3800,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "11906:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3804,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "ids",
                  "nameLocation": "11930:3:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3806,
                  "src": "11920:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3802,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "11920:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3803,
                    "nodeType": "ArrayTypeName",
                    "src": "11920:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11905:29:2"
            },
            "src": "11888:47:2"
          },
          {
            "anonymous": false,
            "eventSelector": "cb212940a2702565ddce0f677e5a8584ed288e9afad36654df10f548b05a6d48",
            "id": 3810,
            "name": "GreyListDeletion",
            "nameLocation": "11949:16:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3808,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "11974:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3810,
                  "src": "11966:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11966:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11965:12:2"
            },
            "src": "11943:35:2"
          },
          {
            "anonymous": false,
            "eventSelector": "96568b8cd8bec3b3f1734539526708d2164d43d3fc86a093a56d6b936665839e",
            "id": 3820,
            "name": "WithdrawERC20",
            "nameLocation": "11992:13:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3819,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3812,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "withdrawer",
                  "nameLocation": "12032:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3820,
                  "src": "12016:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3811,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12016:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3814,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tokenContract",
                  "nameLocation": "12061:13:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3820,
                  "src": "12053:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3813,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12053:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3816,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12093:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3820,
                  "src": "12085:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3815,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12085:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3818,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "12118:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3820,
                  "src": "12110:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3817,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12110:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12005:127:2"
            },
            "src": "11986:147:2"
          },
          {
            "anonymous": false,
            "eventSelector": "33414635cb2f2957fad92617dadad2a2a914b1914a9db56a5836fe13d56ef6f5",
            "id": 3828,
            "name": "WithdrawETH",
            "nameLocation": "12147:11:2",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 3827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3822,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "withdrawer",
                  "nameLocation": "12185:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3828,
                  "src": "12169:26:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3821,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12169:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3824,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "weiAmount",
                  "nameLocation": "12214:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3828,
                  "src": "12206:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12206:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3826,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "12242:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3828,
                  "src": "12234:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12234:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12158:98:2"
            },
            "src": "12141:116:2"
          },
          {
            "body": {
              "id": 3842,
              "nodeType": "Block",
              "src": "12690:82:2",
              "statements": [
                {
                  "condition": {
                    "id": 3836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "12705:19:2",
                    "subExpression": {
                      "baseExpression": {
                        "id": 3833,
                        "name": "adminStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3728,
                        "src": "12706:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 3835,
                      "indexExpression": {
                        "id": 3834,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3831,
                        "src": "12718:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "12706:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3840,
                  "nodeType": "IfStatement",
                  "src": "12701:51:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3837,
                        "name": "Enshroud_NotAdmin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3867,
                        "src": "12733:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 3838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12733:19:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 3839,
                    "nodeType": "RevertStatement",
                    "src": "12726:26:2"
                  }
                },
                {
                  "id": 3841,
                  "nodeType": "PlaceholderStatement",
                  "src": "12763:1:2"
                }
              ]
            },
            "documentation": {
              "id": 3829,
              "nodeType": "StructuredDocumentation",
              "src": "12447:203:2",
              "text": "@notice requires \"_addr\" to have a true 'adminStatus' mapping\n @dev implemented in this manner to allow external contracts to pass an address (i.e. MVOStaking) rather than assuming msg.sender"
            },
            "id": 3843,
            "name": "onlyAdmin",
            "nameLocation": "12665:9:2",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 3832,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3831,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nameLocation": "12683:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3843,
                  "src": "12675:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3830,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12675:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12674:15:2"
            },
            "src": "12656:116:2",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "errorSelector": "367ccb18",
            "id": 3845,
            "name": "Enshroud_AmountMismatch",
            "nameLocation": "12965:23:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3844,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12988:2:2"
            },
            "src": "12959:32:2"
          },
          {
            "errorSelector": "57b109fe",
            "id": 3847,
            "name": "Enshroud_ArrayTooLong",
            "nameLocation": "13003:21:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3846,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13024:2:2"
            },
            "src": "12997:30:2"
          },
          {
            "errorSelector": "9021b570",
            "id": 3849,
            "name": "Enshroud_ENFTStillLocked",
            "nameLocation": "13039:24:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3848,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13063:2:2"
            },
            "src": "13033:33:2"
          },
          {
            "errorSelector": "5c7c4916",
            "id": 3851,
            "name": "Enshroud_FeeTooLarge",
            "nameLocation": "13078:20:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3850,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13098:2:2"
            },
            "src": "13072:29:2"
          },
          {
            "errorSelector": "5e064ec5",
            "id": 3855,
            "name": "Enshroud_Greylisted",
            "nameLocation": "13113:19:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3853,
                  "mutability": "mutable",
                  "name": "id",
                  "nameLocation": "13141:2:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3855,
                  "src": "13133:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3852,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13133:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13132:12:2"
            },
            "src": "13107:38:2"
          },
          {
            "errorSelector": "b5602927",
            "id": 3857,
            "name": "Enshroud_HashDoesNotMatch",
            "nameLocation": "13189:25:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3856,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13214:2:2"
            },
            "src": "13183:34:2"
          },
          {
            "errorSelector": "4b954e42",
            "id": 3859,
            "name": "Enshroud_InvalidID",
            "nameLocation": "13229:18:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3858,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13247:2:2"
            },
            "src": "13223:27:2"
          },
          {
            "errorSelector": "6a358631",
            "id": 3861,
            "name": "Enshroud_MVOSignaturesMissing",
            "nameLocation": "13262:29:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3860,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13291:2:2"
            },
            "src": "13256:38:2"
          },
          {
            "errorSelector": "b3c187af",
            "id": 3863,
            "name": "Enshroud_NoENFT",
            "nameLocation": "13306:15:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3862,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13321:2:2"
            },
            "src": "13300:24:2"
          },
          {
            "errorSelector": "759cb799",
            "id": 3865,
            "name": "Enshroud_NotAuditor",
            "nameLocation": "13336:19:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3864,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13355:2:2"
            },
            "src": "13330:28:2"
          },
          {
            "errorSelector": "4ba27c09",
            "id": 3867,
            "name": "Enshroud_NotAdmin",
            "nameLocation": "13370:17:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3866,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13387:2:2"
            },
            "src": "13364:26:2"
          },
          {
            "errorSelector": "d4de6b4b",
            "id": 3869,
            "name": "Enshroud_OnlyWETH",
            "nameLocation": "13402:17:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3868,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13419:2:2"
            },
            "src": "13396:26:2"
          },
          {
            "errorSelector": "41237e87",
            "id": 3871,
            "name": "Enshroud_ZeroMsgValue",
            "nameLocation": "13434:21:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3870,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13455:2:2"
            },
            "src": "13428:30:2"
          },
          {
            "errorSelector": "7769dad7",
            "id": 3873,
            "name": "Enshroud_OnlyDAOPool",
            "nameLocation": "13467:20:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13487:2:2"
            },
            "src": "13461:29:2"
          },
          {
            "errorSelector": "bac65e5b",
            "id": 3875,
            "name": "MulWadFailed",
            "nameLocation": "13502:12:2",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 3874,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13514:2:2"
            },
            "src": "13496:21:2"
          },
          {
            "body": {
              "id": 3994,
              "nodeType": "Block",
              "src": "15536:756:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 3904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3898,
                        "name": "_depositFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3887,
                        "src": "15551:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 3899,
                        "name": "FEE_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3694,
                        "src": "15566:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "15551:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 3903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 3901,
                        "name": "_withdrawFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3889,
                        "src": "15579:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 3902,
                        "name": "FEE_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3694,
                        "src": "15595:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "15579:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "15551:53:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3908,
                  "nodeType": "IfStatement",
                  "src": "15547:101:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 3905,
                        "name": "Enshroud_FeeTooLarge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3851,
                        "src": "15626:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 3906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15626:22:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 3907,
                    "nodeType": "RevertStatement",
                    "src": "15619:29:2"
                  }
                },
                {
                  "expression": {
                    "id": 3911,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3909,
                      "name": "treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3705,
                      "src": "15704:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3910,
                      "name": "_treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3878,
                      "src": "15715:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "15704:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 3912,
                  "nodeType": "ExpressionStatement",
                  "src": "15704:20:2"
                },
                {
                  "expression": {
                    "id": 3915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3913,
                      "name": "weth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3699,
                      "src": "15735:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3914,
                      "name": "_weth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3880,
                      "src": "15742:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15735:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3916,
                  "nodeType": "ExpressionStatement",
                  "src": "15735:12:2"
                },
                {
                  "expression": {
                    "id": 3919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3917,
                      "name": "daiToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3688,
                      "src": "15752:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3918,
                      "name": "_dai",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3882,
                      "src": "15763:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15752:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 3920,
                  "nodeType": "ExpressionStatement",
                  "src": "15752:15:2"
                },
                {
                  "expression": {
                    "id": 3923,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3921,
                      "name": "confirmationBlocks",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3701,
                      "src": "15778:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3922,
                      "name": "_confBlocks",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3893,
                      "src": "15799:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15778:32:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3924,
                  "nodeType": "ExpressionStatement",
                  "src": "15778:32:2"
                },
                {
                  "expression": {
                    "id": 3927,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3925,
                      "name": "baseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3707,
                      "src": "15821:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3926,
                      "name": "_baseUri",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3895,
                      "src": "15831:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "15821:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 3928,
                  "nodeType": "ExpressionStatement",
                  "src": "15821:18:2"
                },
                {
                  "expression": {
                    "id": 3936,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3929,
                        "name": "assetDepositFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3739,
                        "src": "15850:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3934,
                      "indexExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 3932,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15874:1:2",
                            "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": 3931,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15866:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3930,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15866:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15866:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15850:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3935,
                      "name": "_depositFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3887,
                      "src": "15880:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15850:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3937,
                  "nodeType": "ExpressionStatement",
                  "src": "15850:41:2"
                },
                {
                  "expression": {
                    "id": 3945,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3938,
                        "name": "assetWithdrawFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3743,
                        "src": "15902:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 3943,
                      "indexExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 3941,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15927:1:2",
                            "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": 3940,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "15919:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3939,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "15919:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3942,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15919:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15902:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3944,
                      "name": "_withdrawFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3889,
                      "src": "15933:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15902:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3946,
                  "nodeType": "ExpressionStatement",
                  "src": "15902:43:2"
                },
                {
                  "expression": {
                    "id": 3949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3947,
                      "name": "requiredSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3709,
                      "src": "15956:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3948,
                      "name": "_requiredSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3891,
                      "src": "15971:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15956:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 3950,
                  "nodeType": "ExpressionStatement",
                  "src": "15956:28:2"
                },
                {
                  "expression": {
                    "id": 3958,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3951,
                        "name": "adminStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3728,
                        "src": "15995:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 3956,
                      "indexExpression": {
                        "arguments": [
                          {
                            "id": 3954,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "16015:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                              "typeString": "contract EnshroudProtocol"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                              "typeString": "contract EnshroudProtocol"
                            }
                          ],
                          "id": 3953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "16007:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 3952,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "16007:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 3955,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16007:13:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15995:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 3957,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16024:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "15995:33:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3959,
                  "nodeType": "ExpressionStatement",
                  "src": "15995:33:2"
                },
                {
                  "expression": {
                    "id": 3964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 3960,
                        "name": "adminStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3728,
                        "src": "16039:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 3962,
                      "indexExpression": {
                        "id": 3961,
                        "name": "_treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3878,
                        "src": "16051:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16039:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 3963,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16064:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "16039:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3965,
                  "nodeType": "ExpressionStatement",
                  "src": "16039:29:2"
                },
                {
                  "expression": {
                    "id": 3970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 3966,
                      "name": "iWeth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3719,
                      "src": "16079:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWETH_$3391",
                        "typeString": "contract IWETH"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 3968,
                          "name": "_weth",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3880,
                          "src": "16093:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 3967,
                        "name": "IWETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3391,
                        "src": "16087:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IWETH_$3391_$",
                          "typeString": "type(contract IWETH)"
                        }
                      },
                      "id": 3969,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16087:12:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWETH_$3391",
                        "typeString": "contract IWETH"
                      }
                    },
                    "src": "16079:20:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWETH_$3391",
                      "typeString": "contract IWETH"
                    }
                  },
                  "id": 3971,
                  "nodeType": "ExpressionStatement",
                  "src": "16079:20:2"
                },
                {
                  "body": {
                    "id": 3992,
                    "nodeType": "Block",
                    "src": "16159:126:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 3986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3980,
                              "name": "adminStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3728,
                              "src": "16174:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 3984,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 3981,
                                "name": "_initialAdmins",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3885,
                                "src": "16186:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 3983,
                              "indexExpression": {
                                "id": 3982,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3973,
                                "src": "16201:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16186:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "16174:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 3985,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "16207:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "16174:37:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3987,
                        "nodeType": "ExpressionStatement",
                        "src": "16174:37:2"
                      },
                      {
                        "id": 3991,
                        "nodeType": "UncheckedBlock",
                        "src": "16226:48:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 3989,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "16255:3:2",
                              "subExpression": {
                                "id": 3988,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3973,
                                "src": "16257:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 3990,
                            "nodeType": "ExpressionStatement",
                            "src": "16255:3:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3979,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3976,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3973,
                      "src": "16130:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 3977,
                        "name": "_initialAdmins",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3885,
                        "src": "16134:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 3978,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16149:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16134:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16130:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3993,
                  "initializationExpression": {
                    "assignments": [
                      3973
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 3973,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "16123:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 3993,
                        "src": "16115:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3972,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16115:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 3975,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 3974,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16127:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16115:13:2"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "16110:175:2"
                }
              ]
            },
            "documentation": {
              "id": 3876,
              "nodeType": "StructuredDocumentation",
              "src": "13707:1515:2",
              "text": "@param _treasury: treasury address to receive 5% of deposit and withdraw fees for project operations.\n @param _weth: token contract address for WETH. Immutable. 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 for WETH9 on ETH mainnet.\n @param _dai: token contract address for DAI. Immutable. 0x6B175474E89094C44Da98b954EedeAC495271d0F for DAI on ETH mainnet.\n @param _initialAdmins: array of initial addresses with admin status. Should be at least 3 total initial admins, in order to initialise the MVOStaking address\n @param _depositFee: initial per-asset percentage fee from user upon successful shielding, in 18 decimals (which also corresponds to wei). Must be < 5e17.\n @param _withdrawFee: initial per-asset percentage fee from eNFT burner upon successful eNFT burning/withdrawal, in 18 decimals (which also corresponds to wei). Must be < 5e17.\n @param _requiredSigs: immutable required number of MVO signatures for a valid Operations Block\n @param _confBlocks: set immutable variable 'confirmationBlocks', which provides the minimum \"dwell time\" for an eNFT before redemption\n @param _baseUri: baseURI for eNFTs, which does not operate as a normal \"baseURI\" but as a notification to check the event log of this protocol contract for the eNFT's id. This constructor-passed baseURI also removes the need for a uriFetcher\n @dev note math of fees. Currently a 5e16 fee corresponds to 5%, as all fees are calculated with a denominator of 1e18."
            },
            "id": 3995,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3896,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3878,
                  "mutability": "mutable",
                  "name": "_treasury",
                  "nameLocation": "15266:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15250:25:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 3877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15250:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3880,
                  "mutability": "mutable",
                  "name": "_weth",
                  "nameLocation": "15294:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15286:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15286:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3882,
                  "mutability": "mutable",
                  "name": "_dai",
                  "nameLocation": "15318:4:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15310:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3881,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15310:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3885,
                  "mutability": "mutable",
                  "name": "_initialAdmins",
                  "nameLocation": "15350:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15333:31:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 3883,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15333:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 3884,
                    "nodeType": "ArrayTypeName",
                    "src": "15333:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3887,
                  "mutability": "mutable",
                  "name": "_depositFee",
                  "nameLocation": "15383:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15375:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3886,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15375:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3889,
                  "mutability": "mutable",
                  "name": "_withdrawFee",
                  "nameLocation": "15413:12:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15405:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3888,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15405:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3891,
                  "mutability": "mutable",
                  "name": "_requiredSigs",
                  "nameLocation": "15444:13:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15436:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3890,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15436:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3893,
                  "mutability": "mutable",
                  "name": "_confBlocks",
                  "nameLocation": "15476:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15468:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3892,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15468:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3895,
                  "mutability": "mutable",
                  "name": "_baseUri",
                  "nameLocation": "15512:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 3995,
                  "src": "15498:22:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 3894,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "15498:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15239:288:2"
            },
            "returnParameters": {
              "id": 3897,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15536:0:2"
            },
            "scope": 5834,
            "src": "15228:1064:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4007,
              "nodeType": "Block",
              "src": "16558:69:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 3999,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "16573:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4000,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16577:6:2",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "16573:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 4001,
                      "name": "weth",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3699,
                      "src": "16587:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16573:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4006,
                  "nodeType": "IfStatement",
                  "src": "16569:50:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4003,
                        "name": "Enshroud_OnlyWETH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3869,
                        "src": "16600:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4004,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16600:19:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4005,
                    "nodeType": "RevertStatement",
                    "src": "16593:26:2"
                  }
                }
              ]
            },
            "documentation": {
              "id": 3996,
              "nodeType": "StructuredDocumentation",
              "src": "16300:225:2",
              "text": "@dev address(this) accepts ETH only from the WETH contract; 'depositEth()' must be used for ETH deposits, as ETH sent directly to address(this) will not cause an eNFT mint (and thus its ability to be eventually withdrawn)"
            },
            "id": 4008,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 3997,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16538:2:2"
            },
            "returnParameters": {
              "id": 3998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16558:0:2"
            },
            "scope": 5834,
            "src": "16531:96:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4058,
              "nodeType": "Block",
              "src": "17002:519:2",
              "statements": [
                {
                  "assignments": [
                    4019
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4019,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "17020:7:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4058,
                      "src": "17013:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 4018,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "17013:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4031,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4026,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "17052:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4027,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "17056:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "17052:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4025,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "17044:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 4024,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "17044:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4028,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17044:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 4023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "17037:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 4022,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "17037:6:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4029,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17037:27:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "17030:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 4020,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "17030:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17030:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17013:52:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 4033,
                        "name": "_mvoStaking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4011,
                        "src": "17099:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4034,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4019,
                        "src": "17112:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 4035,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3674,
                          "src": "17121:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                            "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                          }
                        },
                        "id": 4036,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "17135:10:2",
                        "memberName": "MVOStaking",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3669,
                        "src": "17121:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 4037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17147:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 4032,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5821,
                      "src": "17080:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$3674_$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum EnshroudProtocol.ApprovalTypes,string memory) returns (bool)"
                      }
                    },
                    "id": 4038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17080:70:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4057,
                  "nodeType": "IfStatement",
                  "src": "17076:438:2",
                  "trueBody": {
                    "id": 4056,
                    "nodeType": "Block",
                    "src": "17152:362:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 4043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 4039,
                              "name": "adminStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3728,
                              "src": "17305:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4041,
                            "indexExpression": {
                              "id": 4040,
                              "name": "_mvoStaking",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4011,
                              "src": "17317:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "17305:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 4042,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17332:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "17305:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4044,
                        "nodeType": "ExpressionStatement",
                        "src": "17305:31:2"
                      },
                      {
                        "expression": {
                          "id": 4049,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4045,
                            "name": "iMVOStaking",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3716,
                            "src": "17351:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                              "typeString": "contract IMVOStaking_EnshroudProtocol"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 4047,
                                "name": "_mvoStaking",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4011,
                                "src": "17394:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4046,
                              "name": "IMVOStaking_EnshroudProtocol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3412,
                              "src": "17365:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IMVOStaking_EnshroudProtocol_$3412_$",
                                "typeString": "type(contract IMVOStaking_EnshroudProtocol)"
                              }
                            },
                            "id": 4048,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "17365:41:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                              "typeString": "contract IMVOStaking_EnshroudProtocol"
                            }
                          },
                          "src": "17351:55:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                            "typeString": "contract IMVOStaking_EnshroudProtocol"
                          }
                        },
                        "id": 4050,
                        "nodeType": "ExpressionStatement",
                        "src": "17351:55:2"
                      },
                      {
                        "expression": {
                          "id": 4054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "17467:35:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4051,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3724,
                              "src": "17474:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                              }
                            },
                            "id": 4053,
                            "indexExpression": {
                              "id": 4052,
                              "name": "_mvoStaking",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4011,
                              "src": "17490:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "17474:28:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$3685_storage",
                              "typeString": "struct EnshroudProtocol.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4055,
                        "nodeType": "ExpressionStatement",
                        "src": "17467:35:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4009,
              "nodeType": "StructuredDocumentation",
              "src": "16635:263:2",
              "text": "@notice initialise (or replace) the MVOStaking contract address, by three different admins\n @dev must be set after mvoStaking contract is deployed, and before the protocol is used\n @param _mvoStaking: contract address for MVO storage and logic"
            },
            "functionSelector": "828492b0",
            "id": 4059,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4014,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "16990:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "16994:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "16990:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4016,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4013,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "16980:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "16980:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "16980:21:2"
              }
            ],
            "name": "setMVOStakingAddress",
            "nameLocation": "16913:20:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4012,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4011,
                  "mutability": "mutable",
                  "name": "_mvoStaking",
                  "nameLocation": "16952:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4059,
                  "src": "16944:19:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16944:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16933:37:2"
            },
            "returnParameters": {
              "id": 4017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17002:0:2"
            },
            "scope": 5834,
            "src": "16904:617:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4145,
              "nodeType": "Block",
              "src": "18051:1365:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4067,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "18066:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4068,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "18070:5:2",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "18066:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "18079:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "18066:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4074,
                  "nodeType": "IfStatement",
                  "src": "18062:50:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4071,
                        "name": "Enshroud_ZeroMsgValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3871,
                        "src": "18089:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4072,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18089:23:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4073,
                    "nodeType": "RevertStatement",
                    "src": "18082:30:2"
                  }
                },
                {
                  "assignments": [
                    4076
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4076,
                      "mutability": "mutable",
                      "name": "_depositFeeAmount",
                      "nameLocation": "18133:17:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4145,
                      "src": "18125:25:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4075,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18125:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4087,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4078,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "18179:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4079,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18183:5:2",
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "src": "18179:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 4080,
                          "name": "assetDepositFee",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3739,
                          "src": "18203:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 4085,
                        "indexExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 4083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "18227:1:2",
                              "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": 4082,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "18219:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 4081,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "18219:7:2",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 4084,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18219:10:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "18203:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4077,
                      "name": "_mulWadDown",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5833,
                      "src": "18153:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18153:88:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18125:116:2"
                },
                {
                  "assignments": [
                    4089
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4089,
                      "mutability": "mutable",
                      "name": "_treasuryFeeAmount",
                      "nameLocation": "18260:18:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4145,
                      "src": "18252:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4088,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18252:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4094,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4091,
                        "name": "_depositFeeAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4076,
                        "src": "18307:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 4092,
                        "name": "treasuryFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3713,
                        "src": "18339:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4090,
                      "name": "_mulWadDown",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5833,
                      "src": "18281:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 4093,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18281:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18252:109:2"
                },
                {
                  "assignments": [
                    4096
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4096,
                      "mutability": "mutable",
                      "name": "_netDeposit",
                      "nameLocation": "18380:11:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4145,
                      "src": "18372:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4095,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "18372:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4097,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18372:19:2"
                },
                {
                  "id": 4113,
                  "nodeType": "UncheckedBlock",
                  "src": "18404:303:2",
                  "statements": [
                    {
                      "expression": {
                        "id": 4103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 4098,
                          "name": "_netDeposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4096,
                          "src": "18542:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4102,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 4099,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "18556:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 4100,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18560:5:2",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "18556:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 4101,
                            "name": "_depositFeeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4076,
                            "src": "18568:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18556:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "18542:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4104,
                      "nodeType": "ExpressionStatement",
                      "src": "18542:43:2"
                    },
                    {
                      "expression": {
                        "id": 4111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4105,
                              "name": "assetBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3735,
                              "src": "18649:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 4108,
                            "indexExpression": {
                              "id": 4106,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4062,
                              "src": "18663:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "18649:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4109,
                          "indexExpression": {
                            "id": 4107,
                            "name": "weth",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3699,
                            "src": "18675:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "18649:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 4110,
                          "name": "_netDeposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4096,
                          "src": "18684:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "18649:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4112,
                      "nodeType": "ExpressionStatement",
                      "src": "18649:46:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 4114,
                          "name": "iWeth",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3719,
                          "src": "18874:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWETH_$3391",
                            "typeString": "contract IWETH"
                          }
                        },
                        "id": 4116,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18880:7:2",
                        "memberName": "deposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3385,
                        "src": "18874:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$__$returns$__$",
                          "typeString": "function () payable external"
                        }
                      },
                      "id": 4118,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 4117,
                          "name": "_netDeposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4096,
                          "src": "18895:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "18874:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_payable$__$returns$__$value",
                        "typeString": "function () payable external"
                      }
                    },
                    "id": 4119,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18874:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4120,
                  "nodeType": "ExpressionStatement",
                  "src": "18874:35:2"
                },
                {
                  "id": 4137,
                  "nodeType": "UncheckedBlock",
                  "src": "18987:356:2",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "id": 4124,
                            "name": "treasury",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3705,
                            "src": "19044:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 4125,
                            "name": "_treasuryFeeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4089,
                            "src": "19054:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 4121,
                            "name": "SafeTransferLib",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7894,
                            "src": "19012:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                              "typeString": "type(library SafeTransferLib)"
                            }
                          },
                          "id": 4123,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19028:15:2",
                          "memberName": "safeTransferETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7855,
                          "src": "19012:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,uint256)"
                          }
                        },
                        "id": 4126,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19012:61:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4127,
                      "nodeType": "ExpressionStatement",
                      "src": "19012:61:2"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "id": 4131,
                            "name": "daoPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3703,
                            "src": "19252:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 4134,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 4132,
                              "name": "_depositFeeAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4076,
                              "src": "19278:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 4133,
                              "name": "_treasuryFeeAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4089,
                              "src": "19298:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "19278:38:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 4128,
                            "name": "SafeTransferLib",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 7894,
                            "src": "19202:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                              "typeString": "type(library SafeTransferLib)"
                            }
                          },
                          "id": 4130,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "19218:15:2",
                          "memberName": "safeTransferETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7855,
                          "src": "19202:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,uint256)"
                          }
                        },
                        "id": 4135,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "19202:129:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 4136,
                      "nodeType": "ExpressionStatement",
                      "src": "19202:129:2"
                    }
                  ]
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4139,
                        "name": "_depositor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4062,
                        "src": "19369:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4140,
                        "name": "_netDeposit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4096,
                        "src": "19381:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4141,
                          "name": "block",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -4,
                          "src": "19394:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_block",
                            "typeString": "block"
                          }
                        },
                        "id": 4142,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19400:7:2",
                        "memberName": "chainid",
                        "nodeType": "MemberAccess",
                        "src": "19394:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 4138,
                      "name": "DepositETH",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3799,
                      "src": "19358:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 4143,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19358:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4144,
                  "nodeType": "EmitStatement",
                  "src": "19353:55:2"
                }
              ]
            },
            "documentation": {
              "id": 4060,
              "nodeType": "StructuredDocumentation",
              "src": "17529:446:2",
              "text": "@notice deposit ETH/applicable native token. Msg.value is amount of deposit, which is in wei (18 decimals).\n @dev deposited ETH is immediately converted to WETH to address(this) (except for deposit fee sent to treasury and daoPool, which remains in ETH)\n @param _depositor: address of depositor (msg.sender if calling this directly, or can be a specified user if an external contract is calling this function, such as daoPool)"
            },
            "functionSelector": "ad9d4ba3",
            "id": 4146,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4065,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4064,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "18038:12:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7829,
                  "src": "18038:12:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "18038:12:2"
              }
            ],
            "name": "depositEth",
            "nameLocation": "17990:10:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4062,
                  "mutability": "mutable",
                  "name": "_depositor",
                  "nameLocation": "18009:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4146,
                  "src": "18001:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18001:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18000:20:2"
            },
            "returnParameters": {
              "id": 4066,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18051:0:2"
            },
            "scope": 5834,
            "src": "17981:1435:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4187,
              "nodeType": "Block",
              "src": "20268:581:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 4158,
                        "name": "assetDepositFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3739,
                        "src": "20414:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4160,
                      "indexExpression": {
                        "id": 4159,
                        "name": "_tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4151,
                        "src": "20430:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "20414:31:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20449:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "20414:36:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4185,
                    "nodeType": "Block",
                    "src": "20648:194:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4177,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4149,
                              "src": "20696:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4178,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4151,
                              "src": "20725:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4179,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4153,
                              "src": "20758:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 4180,
                                "name": "assetDepositFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3739,
                                "src": "20784:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 4182,
                              "indexExpression": {
                                "id": 4181,
                                "name": "_tokenContract",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4151,
                                "src": "20800:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20784:31:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4176,
                            "name": "_depositTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5176,
                            "src": "20663:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 4183,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20663:167:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4184,
                        "nodeType": "ExpressionStatement",
                        "src": "20663:167:2"
                      }
                    ]
                  },
                  "id": 4186,
                  "nodeType": "IfStatement",
                  "src": "20410:432:2",
                  "trueBody": {
                    "id": 4175,
                    "nodeType": "Block",
                    "src": "20452:190:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4164,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4149,
                              "src": "20500:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4165,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4151,
                              "src": "20529:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4166,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4153,
                              "src": "20562:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 4167,
                                "name": "assetDepositFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3739,
                                "src": "20588:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 4172,
                              "indexExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 4170,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20612:1:2",
                                    "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": 4169,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "20604:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4168,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "20604:7:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20604:10:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "20588:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4163,
                            "name": "_depositTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5176,
                            "src": "20467:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 4173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20467:163:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4174,
                        "nodeType": "ExpressionStatement",
                        "src": "20467:163:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4147,
              "nodeType": "StructuredDocumentation",
              "src": "19424:698:2",
              "text": "@notice deposit ERC20-compatible tokens after '_depositor' approved address(this) for '_amount' of tokens in the '_tokenContract'\n @dev _amount of tokens must first be approved for transferFrom by address(this). While there is no token validity check here, the MVO layer will check when later generating operations block\n @param _depositor: address of depositor (msg.sender if calling this directly, or can be a specified user if an external contract is calling this function, such as daoPool)\n @param _tokenContract: ERC20-compatible token contract address\n @param _amount: amount of tokens deposited, 18 decimals (hardcoded into mulWadDown in _depositTokens())"
            },
            "functionSelector": "39dc5ef2",
            "id": 4188,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4156,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4155,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "20255:12:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7829,
                  "src": "20255:12:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "20255:12:2"
              }
            ],
            "name": "depositTokens",
            "nameLocation": "20137:13:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4149,
                  "mutability": "mutable",
                  "name": "_depositor",
                  "nameLocation": "20169:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4188,
                  "src": "20161:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4148,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20161:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4151,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "20198:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4188,
                  "src": "20190:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20190:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4153,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "20231:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4188,
                  "src": "20223:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4152,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20223:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20150:95:2"
            },
            "returnParameters": {
              "id": 4157,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20268:0:2"
            },
            "scope": 5834,
            "src": "20128:721:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4282,
              "nodeType": "Block",
              "src": "21813:1223:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4210,
                      "name": "_tokenContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4191,
                      "src": "21919:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 4211,
                      "name": "daiToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3688,
                      "src": "21937:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "21919:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4247,
                    "nodeType": "Block",
                    "src": "22244:269:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4235,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4193,
                              "src": "22330:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 4238,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "22367:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                ],
                                "id": 4237,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "22359:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4236,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22359:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4239,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22359:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4240,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4195,
                              "src": "22391:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4241,
                              "name": "_deadline",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4199,
                              "src": "22417:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4242,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4201,
                              "src": "22445:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 4243,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4203,
                              "src": "22465:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4244,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4205,
                              "src": "22485:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4232,
                                  "name": "_tokenContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4191,
                                  "src": "22289:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4231,
                                "name": "IERC20Permit_EnshroudProtocol",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3382,
                                "src": "22259:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20Permit_EnshroudProtocol_$3382_$",
                                  "typeString": "type(contract IERC20Permit_EnshroudProtocol)"
                                }
                              },
                              "id": 4233,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22259:45:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Permit_EnshroudProtocol_$3382",
                                "typeString": "contract IERC20Permit_EnshroudProtocol"
                              }
                            },
                            "id": 4234,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "22305:6:2",
                            "memberName": "permit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3355,
                            "src": "22259:52:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"
                            }
                          },
                          "id": 4245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22259:242:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4246,
                        "nodeType": "ExpressionStatement",
                        "src": "22259:242:2"
                      }
                    ]
                  },
                  "id": 4248,
                  "nodeType": "IfStatement",
                  "src": "21915:598:2",
                  "trueBody": {
                    "id": 4230,
                    "nodeType": "Block",
                    "src": "21947:291:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4217,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4193,
                              "src": "22033:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 4220,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "22070:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                ],
                                "id": 4219,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "22062:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 4218,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22062:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4221,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22062:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4222,
                              "name": "_nonce",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4197,
                              "src": "22094:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4223,
                              "name": "_deadline",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4199,
                              "src": "22119:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "74727565",
                              "id": 4224,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "22147:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            {
                              "id": 4225,
                              "name": "v",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4201,
                              "src": "22170:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "id": 4226,
                              "name": "r",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4203,
                              "src": "22190:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 4227,
                              "name": "s",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4205,
                              "src": "22210:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 4214,
                                  "name": "_tokenContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4191,
                                  "src": "21992:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4213,
                                "name": "IERC20Permit_EnshroudProtocol",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3382,
                                "src": "21962:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20Permit_EnshroudProtocol_$3382_$",
                                  "typeString": "type(contract IERC20Permit_EnshroudProtocol)"
                                }
                              },
                              "id": 4215,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "21962:45:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Permit_EnshroudProtocol_$3382",
                                "typeString": "contract IERC20Permit_EnshroudProtocol"
                              }
                            },
                            "id": 4216,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "22008:6:2",
                            "memberName": "permit",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3374,
                            "src": "21962:52:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bool_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256,bool,uint8,bytes32,bytes32) external"
                            }
                          },
                          "id": 4228,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21962:264:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4229,
                        "nodeType": "ExpressionStatement",
                        "src": "21962:264:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    4250
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4250,
                      "mutability": "mutable",
                      "name": "_depositFee",
                      "nameLocation": "22664:11:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4282,
                      "src": "22656:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4249,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "22656:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4254,
                  "initialValue": {
                    "baseExpression": {
                      "id": 4251,
                      "name": "assetDepositFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3739,
                      "src": "22678:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 4253,
                    "indexExpression": {
                      "id": 4252,
                      "name": "_tokenContract",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4191,
                      "src": "22694:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "22678:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22656:53:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4257,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4255,
                      "name": "_depositFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4250,
                      "src": "22724:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4256,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22739:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22724:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4280,
                    "nodeType": "Block",
                    "src": "22938:91:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4273,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "22968:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4274,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22972:6:2",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "22968:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4275,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4191,
                              "src": "22980:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4276,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4195,
                              "src": "22996:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 4277,
                              "name": "_depositFee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4250,
                              "src": "23005:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4272,
                            "name": "_depositTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5176,
                            "src": "22953:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 4278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22953:64:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4279,
                        "nodeType": "ExpressionStatement",
                        "src": "22953:64:2"
                      }
                    ]
                  },
                  "id": 4281,
                  "nodeType": "IfStatement",
                  "src": "22720:309:2",
                  "trueBody": {
                    "id": 4271,
                    "nodeType": "Block",
                    "src": "22742:190:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4259,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "22790:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22794:6:2",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "22790:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4261,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4191,
                              "src": "22819:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4262,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4195,
                              "src": "22852:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 4263,
                                "name": "assetDepositFee",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3739,
                                "src": "22878:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 4268,
                              "indexExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 4266,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "22902:1:2",
                                    "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": 4265,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "22894:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4264,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "22894:7:2",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4267,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22894:10:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22878:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4258,
                            "name": "_depositTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5176,
                            "src": "22757:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 4269,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22757:163:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4270,
                        "nodeType": "ExpressionStatement",
                        "src": "22757:163:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4189,
              "nodeType": "StructuredDocumentation",
              "src": "20857:689:2",
              "text": "@notice deposit an ERC20-compatible asset which supports gasless ERC20Permit via EIP2612 to approve this address for transferFrom msg.sender\n @param _tokenContract: ERC20-compatible token contract address\n @param _depositor: address of depositor, to whom the EIP712 signature corresponds (often, msg.sender)\n @param _amount: amount of tokens deposited, 18 decimals (hardcoded into mulWadDown in _depositTokens())\n @param _nonce: user's nonce on the erc20 contract, for replay protection\n @param _deadline: deadline for permit approval usage\n @param v: ECDSA sig param\n @param r: ECDSA sig param\n @param s: ECDSA sig param"
            },
            "functionSelector": "4f79a0a6",
            "id": 4283,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4208,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4207,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "21800:12:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7829,
                  "src": "21800:12:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "21800:12:2"
              }
            ],
            "name": "depositTokensWithPermit",
            "nameLocation": "21561:23:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4191,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "21603:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21595:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4190,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21595:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4193,
                  "mutability": "mutable",
                  "name": "_depositor",
                  "nameLocation": "21636:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21628:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4192,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "21628:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4195,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "21665:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21657:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21657:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4197,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nameLocation": "21691:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21683:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4196,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21683:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4199,
                  "mutability": "mutable",
                  "name": "_deadline",
                  "nameLocation": "21716:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21708:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "21708:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4201,
                  "mutability": "mutable",
                  "name": "v",
                  "nameLocation": "21742:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21736:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 4200,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "21736:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4203,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "21762:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21754:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4202,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "21754:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4205,
                  "mutability": "mutable",
                  "name": "s",
                  "nameLocation": "21782:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4283,
                  "src": "21774:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4204,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "21774:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21584:206:2"
            },
            "returnParameters": {
              "id": 4209,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "21813:0:2"
            },
            "scope": 5834,
            "src": "21552:1484:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4342,
              "nodeType": "Block",
              "src": "23917:542:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4303,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 4295,
                          "name": "assetBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3735,
                          "src": "23932:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 4298,
                        "indexExpression": {
                          "expression": {
                            "id": 4296,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "23946:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 4297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "23950:6:2",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "23946:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23932:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4300,
                      "indexExpression": {
                        "id": 4299,
                        "name": "_tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4292,
                        "src": "23958:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "23932:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 4301,
                        "name": "_opsInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4287,
                        "src": "23976:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      "id": 4302,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "23985:6:2",
                      "memberName": "amount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3656,
                      "src": "23976:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23932:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4307,
                  "nodeType": "IfStatement",
                  "src": "23928:110:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4304,
                        "name": "Enshroud_AmountMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3845,
                        "src": "24013:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24013:25:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4306,
                    "nodeType": "RevertStatement",
                    "src": "24006:32:2"
                  }
                },
                {
                  "id": 4318,
                  "nodeType": "UncheckedBlock",
                  "src": "24049:97:2",
                  "statements": [
                    {
                      "expression": {
                        "id": 4316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 4308,
                              "name": "assetBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3735,
                              "src": "24074:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 4312,
                            "indexExpression": {
                              "expression": {
                                "id": 4309,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "24088:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4310,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "24092:6:2",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "24088:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "24074:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 4313,
                          "indexExpression": {
                            "id": 4311,
                            "name": "_tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4292,
                            "src": "24100:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "24074:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "-=",
                        "rightHandSide": {
                          "expression": {
                            "id": 4314,
                            "name": "_opsInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4287,
                            "src": "24119:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                              "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                            }
                          },
                          "id": 4315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24128:6:2",
                          "memberName": "amount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3656,
                          "src": "24119:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24074:60:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 4317,
                      "nodeType": "ExpressionStatement",
                      "src": "24074:60:2"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4320,
                        "name": "_opsInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4287,
                        "src": "24200:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      {
                        "id": 4321,
                        "name": "_mvoInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4290,
                        "src": "24210:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 4322,
                          "name": "Flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3638,
                          "src": "24220:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                            "typeString": "type(enum EnshroudProtocol.Flag)"
                          }
                        },
                        "id": 4323,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "24225:15:2",
                        "memberName": "MintFromDeposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3635,
                        "src": "24220:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        },
                        {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      ],
                      "id": 4319,
                      "name": "_validateInputs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5651,
                      "src": "24184:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpsInfo_$3659_calldata_ptr_$_t_struct$_MVOinfo_$3667_calldata_ptr_$_t_enum$_Flag_$3638_$returns$__$",
                        "typeString": "function (struct EnshroudProtocol.OpsInfo calldata,struct EnshroudProtocol.MVOinfo calldata,enum EnshroudProtocol.Flag)"
                      }
                    },
                    "id": 4324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24184:57:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4325,
                  "nodeType": "ExpressionStatement",
                  "src": "24184:57:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4327,
                        "name": "_opsInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4287,
                        "src": "24286:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 4328,
                            "name": "_opsInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4287,
                            "src": "24296:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                              "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                            }
                          },
                          "id": 4329,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "24305:9:2",
                          "memberName": "outputIds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3651,
                          "src": "24296:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                            "typeString": "uint256[] calldata"
                          }
                        },
                        "id": 4330,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24315:6:2",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "24296:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4331,
                          "name": "Flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3638,
                          "src": "24323:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                            "typeString": "type(enum EnshroudProtocol.Flag)"
                          }
                        },
                        "id": 4332,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "24328:15:2",
                        "memberName": "MintFromDeposit",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3635,
                        "src": "24323:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      ],
                      "id": 4326,
                      "name": "_mintENFTs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5323,
                      "src": "24275:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpsInfo_$3659_calldata_ptr_$_t_uint256_$_t_enum$_Flag_$3638_$returns$__$",
                        "typeString": "function (struct EnshroudProtocol.OpsInfo calldata,uint256,enum EnshroudProtocol.Flag)"
                      }
                    },
                    "id": 4333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24275:69:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4334,
                  "nodeType": "ExpressionStatement",
                  "src": "24275:69:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4338,
                          "name": "_mvoInfo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4290,
                          "src": "24435:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                            "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                          }
                        },
                        "id": 4339,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24444:6:2",
                        "memberName": "mvoIDs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3666,
                        "src": "24435:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 4335,
                        "name": "iMVOStaking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "24411:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                          "typeString": "contract IMVOStaking_EnshroudProtocol"
                        }
                      },
                      "id": 4337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "24423:11:2",
                      "memberName": "awardPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3397,
                      "src": "24411:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_string_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (string memory[] memory) external"
                      }
                    },
                    "id": 4340,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24411:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4341,
                  "nodeType": "ExpressionStatement",
                  "src": "24411:40:2"
                }
              ]
            },
            "documentation": {
              "id": 4284,
              "nodeType": "StructuredDocumentation",
              "src": "23044:716:2",
              "text": "@notice called by an address which has already deposited assets into this contract to mintENFTs based on some amount of those assets up to msg.sender's 'assetBalances'\n @param _opsInfo: OpsInfo struct containing all of the necessary Operations Block information\n @param _mvoInfo: MVOinfo struct containing array of signatures and IDs by MVOs that supplied encrypted metadata\n @param _tokenContract: ERC20-compatible token contract address; pass the 'weth' address to mint an eNFT for ETH deposits\n @dev because msg.sender is used to check the 'assetBalances' mapping (to prevent spoofing on a _depositor variable), other contracts using this function will have to use delegatecall"
            },
            "functionSelector": "90976e39",
            "id": 4343,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mintENFTsFromDeposit",
            "nameLocation": "23775:20:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4287,
                  "mutability": "mutable",
                  "name": "_opsInfo",
                  "nameLocation": "23823:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4343,
                  "src": "23806:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.OpsInfo"
                  },
                  "typeName": {
                    "id": 4286,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4285,
                      "name": "OpsInfo",
                      "nameLocations": [
                        "23806:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3659,
                      "src": "23806:7:2"
                    },
                    "referencedDeclaration": 3659,
                    "src": "23806:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OpsInfo_$3659_storage_ptr",
                      "typeString": "struct EnshroudProtocol.OpsInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4290,
                  "mutability": "mutable",
                  "name": "_mvoInfo",
                  "nameLocation": "23859:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4343,
                  "src": "23842:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.MVOinfo"
                  },
                  "typeName": {
                    "id": 4289,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4288,
                      "name": "MVOinfo",
                      "nameLocations": [
                        "23842:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3667,
                      "src": "23842:7:2"
                    },
                    "referencedDeclaration": 3667,
                    "src": "23842:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVOinfo_$3667_storage_ptr",
                      "typeString": "struct EnshroudProtocol.MVOinfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4292,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "23886:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4343,
                  "src": "23878:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23878:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23795:112:2"
            },
            "returnParameters": {
              "id": 4294,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23917:0:2"
            },
            "scope": 5834,
            "src": "23766:693:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4453,
              "nodeType": "Block",
              "src": "25308:1332:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4356,
                        "name": "_enftInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4347,
                        "src": "25360:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      {
                        "id": 4357,
                        "name": "_mvoInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4350,
                        "src": "25371:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 4358,
                          "name": "Flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3638,
                          "src": "25381:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                            "typeString": "type(enum EnshroudProtocol.Flag)"
                          }
                        },
                        "id": 4359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "25386:5:2",
                        "memberName": "Spend",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3636,
                        "src": "25381:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        },
                        {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      ],
                      "id": 4355,
                      "name": "_validateInputs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5651,
                      "src": "25344:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpsInfo_$3659_calldata_ptr_$_t_struct$_MVOinfo_$3667_calldata_ptr_$_t_enum$_Flag_$3638_$returns$__$",
                        "typeString": "function (struct EnshroudProtocol.OpsInfo calldata,struct EnshroudProtocol.MVOinfo calldata,enum EnshroudProtocol.Flag)"
                      }
                    },
                    "id": 4360,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25344:48:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4361,
                  "nodeType": "ExpressionStatement",
                  "src": "25344:48:2"
                },
                {
                  "body": {
                    "id": 4435,
                    "nodeType": "Block",
                    "src": "25571:853:2",
                    "statements": [
                      {
                        "assignments": [
                          4372
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4372,
                            "mutability": "mutable",
                            "name": "_spendID",
                            "nameLocation": "25594:8:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 4435,
                            "src": "25586:16:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4371,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25586:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4377,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 4373,
                              "name": "_enftInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4347,
                              "src": "25605:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                              }
                            },
                            "id": 4374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "25615:8:2",
                            "memberName": "inputIds",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3648,
                            "src": "25605:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4376,
                          "indexExpression": {
                            "id": 4375,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4363,
                            "src": "25624:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25605:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25586:40:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4383,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 4378,
                              "name": "enftUnlockTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3768,
                              "src": "25645:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4380,
                            "indexExpression": {
                              "id": 4379,
                              "name": "_spendID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4372,
                              "src": "25660:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "25645:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "id": 4381,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "25672:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 4382,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "25678:6:2",
                            "memberName": "number",
                            "nodeType": "MemberAccess",
                            "src": "25672:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25645:39:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4387,
                        "nodeType": "IfStatement",
                        "src": "25641:95:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4384,
                              "name": "Enshroud_ENFTStillLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3849,
                              "src": "25710:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 4385,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25710:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4386,
                          "nodeType": "RevertStatement",
                          "src": "25703:33:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4396,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 4390,
                                    "name": "idToAuditorGreylist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3763,
                                    "src": "25761:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                      "typeString": "mapping(uint256 => string storage ref)"
                                    }
                                  },
                                  "id": 4392,
                                  "indexExpression": {
                                    "id": 4391,
                                    "name": "_spendID",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4372,
                                    "src": "25781:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "25761:29:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                ],
                                "id": 4389,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "25755:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 4388,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "25755:5:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4393,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "25755:36:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes storage pointer"
                              }
                            },
                            "id": 4394,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "25792:6:2",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "25755:43:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4395,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25802:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "25755:48:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4401,
                        "nodeType": "IfStatement",
                        "src": "25751:107:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 4398,
                                "name": "_spendID",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4372,
                                "src": "25849:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4397,
                              "name": "Enshroud_Greylisted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3855,
                              "src": "25829:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$",
                                "typeString": "function (uint256) pure returns (error)"
                              }
                            },
                            "id": 4399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25829:29:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4400,
                          "nodeType": "RevertStatement",
                          "src": "25822:36:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4409,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4402,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3446,
                                "src": "26105:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 4405,
                              "indexExpression": {
                                "expression": {
                                  "id": 4403,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "26115:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4404,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "26119:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "26115:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "26105:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4407,
                            "indexExpression": {
                              "id": 4406,
                              "name": "_spendID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4372,
                              "src": "26127:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26105:31:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4408,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26140:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "26105:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "documentation": "@dev entire transaction will revert if msg.sender does not have corresponding eNFT for a _spendID",
                        "id": 4413,
                        "nodeType": "IfStatement",
                        "src": "26101:66:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4410,
                              "name": "Enshroud_NoENFT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3863,
                              "src": "26150:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 4411,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "26150:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4412,
                          "nodeType": "RevertStatement",
                          "src": "26143:24:2"
                        }
                      },
                      {
                        "id": 4417,
                        "nodeType": "UncheckedBlock",
                        "src": "26184:48:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 4415,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "26213:3:2",
                              "subExpression": {
                                "id": 4414,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4363,
                                "src": "26215:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4416,
                            "nodeType": "ExpressionStatement",
                            "src": "26213:3:2"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "id": 4421,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "26293:28:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4418,
                              "name": "detailsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3758,
                              "src": "26300:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                                "typeString": "mapping(uint256 => bytes32)"
                              }
                            },
                            "id": 4420,
                            "indexExpression": {
                              "id": 4419,
                              "name": "_spendID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4372,
                              "src": "26312:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "26300:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4422,
                        "nodeType": "ExpressionStatement",
                        "src": "26293:28:2"
                      },
                      {
                        "expression": {
                          "id": 4426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "26336:31:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4423,
                              "name": "enftUnlockTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3768,
                              "src": "26343:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4425,
                            "indexExpression": {
                              "id": 4424,
                              "name": "_spendID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4372,
                              "src": "26358:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "26343:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4427,
                        "nodeType": "ExpressionStatement",
                        "src": "26336:31:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4429,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "26388:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "26392:6:2",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "26388:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4431,
                              "name": "_spendID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4372,
                              "src": "26400:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 4432,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26410:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 4428,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3578,
                            "src": "26382:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 4433,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26382:30:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4434,
                        "nodeType": "ExpressionStatement",
                        "src": "26382:30:2"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4370,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4366,
                      "name": "x",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4363,
                      "src": "25538:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "expression": {
                          "id": 4367,
                          "name": "_enftInfo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4347,
                          "src": "25542:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                            "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                          }
                        },
                        "id": 4368,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "25552:8:2",
                        "memberName": "inputIds",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3648,
                        "src": "25542:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 4369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "25561:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "25542:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25538:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4436,
                  "initializationExpression": {
                    "assignments": [
                      4363
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4363,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "25531:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 4436,
                        "src": "25523:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4362,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "25523:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4365,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 4364,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25535:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25523:13:2"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "25518:906:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4438,
                        "name": "_enftInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4347,
                        "src": "26474:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      {
                        "expression": {
                          "expression": {
                            "id": 4439,
                            "name": "_enftInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4347,
                            "src": "26485:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                              "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                            }
                          },
                          "id": 4440,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "26495:10:2",
                          "memberName": "recipients",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3642,
                          "src": "26485:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 4441,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26506:6:2",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "26485:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4442,
                          "name": "Flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3638,
                          "src": "26514:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                            "typeString": "type(enum EnshroudProtocol.Flag)"
                          }
                        },
                        "id": 4443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "26519:5:2",
                        "memberName": "Spend",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3636,
                        "src": "26514:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      ],
                      "id": 4437,
                      "name": "_mintENFTs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5323,
                      "src": "26463:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpsInfo_$3659_calldata_ptr_$_t_uint256_$_t_enum$_Flag_$3638_$returns$__$",
                        "typeString": "function (struct EnshroudProtocol.OpsInfo calldata,uint256,enum EnshroudProtocol.Flag)"
                      }
                    },
                    "id": 4444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26463:62:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4445,
                  "nodeType": "ExpressionStatement",
                  "src": "26463:62:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4449,
                          "name": "_mvoInfo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4350,
                          "src": "26616:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                            "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                          }
                        },
                        "id": 4450,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "26625:6:2",
                        "memberName": "mvoIDs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3666,
                        "src": "26616:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 4446,
                        "name": "iMVOStaking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "26592:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                          "typeString": "contract IMVOStaking_EnshroudProtocol"
                        }
                      },
                      "id": 4448,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "26604:11:2",
                      "memberName": "awardPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3397,
                      "src": "26592:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_string_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (string memory[] memory) external"
                      }
                    },
                    "id": 4451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26592:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4452,
                  "nodeType": "ExpressionStatement",
                  "src": "26592:40:2"
                }
              ]
            },
            "documentation": {
              "id": 4344,
              "nodeType": "StructuredDocumentation",
              "src": "24467:713:2",
              "text": "@notice for a holder of eNFT(s) to spend their eNFT(s) (after receiving new OperationsBlock) for new eNFT(s) to be subsequently minted, without publicly compromising the corresponding asset or amount in the subsequently minted eNFTs\n @dev only necessary to check msg.sender's balanceOf to burn the spent eNFT -- the new eNFTs will be produced by calling _mintNewENFTs(). Call only after new OperationsBlock received for subsequent eNFT mints.\n @param _enftInfo: OpsInfo struct containing all of the necessary OperationsBlock information to mint new eNFTs\n @param _mvoInfo: MVOinfo struct containing array of signatures and IDs by MVOs that supplied encrypted metadata to mint new eNFTs"
            },
            "functionSelector": "d02121a8",
            "id": 4454,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4353,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4352,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "25295:12:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7829,
                  "src": "25295:12:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "25295:12:2"
              }
            ],
            "name": "spendENFTs",
            "nameLocation": "25195:10:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4347,
                  "mutability": "mutable",
                  "name": "_enftInfo",
                  "nameLocation": "25233:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4454,
                  "src": "25216:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.OpsInfo"
                  },
                  "typeName": {
                    "id": 4346,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4345,
                      "name": "OpsInfo",
                      "nameLocations": [
                        "25216:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3659,
                      "src": "25216:7:2"
                    },
                    "referencedDeclaration": 3659,
                    "src": "25216:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OpsInfo_$3659_storage_ptr",
                      "typeString": "struct EnshroudProtocol.OpsInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4350,
                  "mutability": "mutable",
                  "name": "_mvoInfo",
                  "nameLocation": "25270:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4454,
                  "src": "25253:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.MVOinfo"
                  },
                  "typeName": {
                    "id": 4349,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4348,
                      "name": "MVOinfo",
                      "nameLocations": [
                        "25253:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3667,
                      "src": "25253:7:2"
                    },
                    "referencedDeclaration": 3667,
                    "src": "25253:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVOinfo_$3667_storage_ptr",
                      "typeString": "struct EnshroudProtocol.MVOinfo"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25205:80:2"
            },
            "returnParameters": {
              "id": 4354,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25308:0:2"
            },
            "scope": 5834,
            "src": "25186:1454:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4642,
              "nodeType": "Block",
              "src": "27706:2654:2",
              "statements": [
                {
                  "assignments": [
                    4475
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4475,
                      "mutability": "mutable",
                      "name": "_amt",
                      "nameLocation": "27791:4:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4642,
                      "src": "27783:12:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4474,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27783:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4476,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27783:12:2"
                },
                {
                  "assignments": [
                    4478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4478,
                      "mutability": "mutable",
                      "name": "_redeems",
                      "nameLocation": "27816:8:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4642,
                      "src": "27808:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4477,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "27808:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4482,
                  "initialValue": {
                    "expression": {
                      "expression": {
                        "id": 4479,
                        "name": "_opsInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4458,
                        "src": "27827:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      "id": 4480,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "27836:8:2",
                      "memberName": "inputIds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3648,
                      "src": "27827:17:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                        "typeString": "uint256[] calldata"
                      }
                    },
                    "id": 4481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "27845:6:2",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "27827:24:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "27808:43:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4491,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4483,
                        "name": "_redeems",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4478,
                        "src": "27868:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "id": 4484,
                          "name": "_rand",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4467,
                          "src": "27880:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes16_$dyn_calldata_ptr",
                            "typeString": "bytes16[] calldata"
                          }
                        },
                        "id": 4485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "27886:6:2",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "27880:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "27868:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4490,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4487,
                        "name": "_redeems",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4478,
                        "src": "27896:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "id": 4488,
                          "name": "_amounts",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4464,
                          "src": "27908:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                            "typeString": "uint256[] calldata"
                          }
                        },
                        "id": 4489,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "27917:6:2",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "27908:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "27896:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "27868:55:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4495,
                  "nodeType": "IfStatement",
                  "src": "27864:97:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4492,
                        "name": "LengthMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3439,
                        "src": "27945:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "27945:16:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4494,
                    "nodeType": "RevertStatement",
                    "src": "27938:23:2"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4497,
                        "name": "_opsInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4458,
                        "src": "28015:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      {
                        "id": 4498,
                        "name": "_mvoInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4461,
                        "src": "28025:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 4499,
                          "name": "Flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3638,
                          "src": "28035:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                            "typeString": "type(enum EnshroudProtocol.Flag)"
                          }
                        },
                        "id": 4500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "28040:8:2",
                        "memberName": "Withdraw",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3637,
                        "src": "28035:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        },
                        {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      ],
                      "id": 4496,
                      "name": "_validateInputs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5651,
                      "src": "27999:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpsInfo_$3659_calldata_ptr_$_t_struct$_MVOinfo_$3667_calldata_ptr_$_t_enum$_Flag_$3638_$returns$__$",
                        "typeString": "function (struct EnshroudProtocol.OpsInfo calldata,struct EnshroudProtocol.MVOinfo calldata,enum EnshroudProtocol.Flag)"
                      }
                    },
                    "id": 4501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27999:50:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4502,
                  "nodeType": "ExpressionStatement",
                  "src": "27999:50:2"
                },
                {
                  "body": {
                    "id": 4603,
                    "nodeType": "Block",
                    "src": "28098:1332:2",
                    "statements": [
                      {
                        "assignments": [
                          4511
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4511,
                            "mutability": "mutable",
                            "name": "_xId",
                            "nameLocation": "28121:4:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 4603,
                            "src": "28113:12:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4510,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "28113:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4516,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 4512,
                              "name": "_opsInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4458,
                              "src": "28128:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                              }
                            },
                            "id": 4513,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "28137:8:2",
                            "memberName": "inputIds",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3648,
                            "src": "28128:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4515,
                          "indexExpression": {
                            "id": 4514,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4504,
                            "src": "28146:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "28128:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "28113:35:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4524,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 4517,
                                "name": "balanceOf",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3446,
                                "src": "28167:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_uint256_$_$",
                                  "typeString": "mapping(address => mapping(uint256 => uint256))"
                                }
                              },
                              "id": 4520,
                              "indexExpression": {
                                "expression": {
                                  "id": 4518,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "28177:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4519,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "28181:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "28177:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "28167:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4522,
                            "indexExpression": {
                              "id": 4521,
                              "name": "_xId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "28189:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28167:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4523,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "28198:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "28167:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4528,
                        "nodeType": "IfStatement",
                        "src": "28163:62:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4525,
                              "name": "Enshroud_NoENFT",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3863,
                              "src": "28208:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 4526,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28208:17:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4527,
                          "nodeType": "RevertStatement",
                          "src": "28201:24:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 4529,
                              "name": "enftUnlockTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3768,
                              "src": "28244:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4531,
                            "indexExpression": {
                              "id": 4530,
                              "name": "_xId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "28259:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28244:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "expression": {
                              "id": 4532,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "28267:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 4533,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "28273:6:2",
                            "memberName": "number",
                            "nodeType": "MemberAccess",
                            "src": "28267:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28244:35:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4538,
                        "nodeType": "IfStatement",
                        "src": "28240:91:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4535,
                              "name": "Enshroud_ENFTStillLocked",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3849,
                              "src": "28305:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 4536,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28305:26:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4537,
                          "nodeType": "RevertStatement",
                          "src": "28298:33:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 4541,
                                    "name": "idToAuditorGreylist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3763,
                                    "src": "28356:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                      "typeString": "mapping(uint256 => string storage ref)"
                                    }
                                  },
                                  "id": 4543,
                                  "indexExpression": {
                                    "id": 4542,
                                    "name": "_xId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4511,
                                    "src": "28376:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "28356:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                ],
                                "id": 4540,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "28350:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 4539,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "28350:5:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4544,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "28350:32:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes storage pointer"
                              }
                            },
                            "id": 4545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "28383:6:2",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "28350:39:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "28393:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "28350:44:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4552,
                        "nodeType": "IfStatement",
                        "src": "28346:99:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 4549,
                                "name": "_xId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4511,
                                "src": "28440:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 4548,
                              "name": "Enshroud_Greylisted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3855,
                              "src": "28420:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$",
                                "typeString": "function (uint256) pure returns (error)"
                              }
                            },
                            "id": 4550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28420:25:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4551,
                          "nodeType": "RevertStatement",
                          "src": "28413:32:2"
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 4571,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 4553,
                              "name": "detailsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3758,
                              "src": "28705:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                                "typeString": "mapping(uint256 => bytes32)"
                              }
                            },
                            "id": 4555,
                            "indexExpression": {
                              "id": 4554,
                              "name": "_xId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "28717:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "28705:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 4559,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "28812:3:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 4560,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "28816:6:2",
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "28812:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 4561,
                                    "name": "_xId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4511,
                                    "src": "28849:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 4562,
                                    "name": "_tokenContract",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4469,
                                    "src": "28880:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 4563,
                                      "name": "_amounts",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4464,
                                      "src": "28921:8:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    "id": 4565,
                                    "indexExpression": {
                                      "id": 4564,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4504,
                                      "src": "28930:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "28921:11:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "baseExpression": {
                                      "id": 4566,
                                      "name": "_rand",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4467,
                                      "src": "28959:5:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes16_$dyn_calldata_ptr",
                                        "typeString": "bytes16[] calldata"
                                      }
                                    },
                                    "id": 4568,
                                    "indexExpression": {
                                      "id": 4567,
                                      "name": "x",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4504,
                                      "src": "28965:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "28959:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes16",
                                      "typeString": "bytes16"
                                    }
                                  ],
                                  "expression": {
                                    "id": 4557,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "28775:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 4558,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "28779:6:2",
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "28775:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 4569,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28775:215:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 4556,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "28743:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 4570,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28743:266:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "28705:304:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4575,
                        "nodeType": "IfStatement",
                        "src": "28683:376:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 4572,
                              "name": "Enshroud_HashDoesNotMatch",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3857,
                              "src": "29032:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 4573,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "29032:27:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 4574,
                          "nodeType": "RevertStatement",
                          "src": "29025:34:2"
                        }
                      },
                      {
                        "expression": {
                          "id": 4579,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "29122:24:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4576,
                              "name": "detailsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3758,
                              "src": "29129:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                                "typeString": "mapping(uint256 => bytes32)"
                              }
                            },
                            "id": 4578,
                            "indexExpression": {
                              "id": 4577,
                              "name": "_xId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "29141:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "29129:17:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4580,
                        "nodeType": "ExpressionStatement",
                        "src": "29122:24:2"
                      },
                      {
                        "expression": {
                          "id": 4584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "29161:27:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4581,
                              "name": "enftUnlockTime",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3768,
                              "src": "29168:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 4583,
                            "indexExpression": {
                              "id": 4582,
                              "name": "_xId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "29183:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "29168:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4585,
                        "nodeType": "ExpressionStatement",
                        "src": "29161:27:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 4587,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "29209:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 4588,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "29213:6:2",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "29209:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4589,
                              "name": "_xId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4511,
                              "src": "29221:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 4590,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "29227:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 4586,
                            "name": "_burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3578,
                            "src": "29203:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 4591,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "29203:26:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4592,
                        "nodeType": "ExpressionStatement",
                        "src": "29203:26:2"
                      },
                      {
                        "id": 4602,
                        "nodeType": "UncheckedBlock",
                        "src": "29246:173:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 4597,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 4593,
                                "name": "_amt",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4475,
                                "src": "29275:4:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "+=",
                              "rightHandSide": {
                                "baseExpression": {
                                  "id": 4594,
                                  "name": "_amounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4464,
                                  "src": "29283:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                    "typeString": "uint256[] calldata"
                                  }
                                },
                                "id": 4596,
                                "indexExpression": {
                                  "id": 4595,
                                  "name": "x",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4504,
                                  "src": "29292:1:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "29283:11:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "29275:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4598,
                            "nodeType": "ExpressionStatement",
                            "src": "29275:19:2"
                          },
                          {
                            "expression": {
                              "id": 4600,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "29400:3:2",
                              "subExpression": {
                                "id": 4599,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4504,
                                "src": "29402:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4601,
                            "nodeType": "ExpressionStatement",
                            "src": "29400:3:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4507,
                      "name": "x",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4504,
                      "src": "28082:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 4508,
                      "name": "_redeems",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4478,
                      "src": "28086:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28082:12:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4604,
                  "initializationExpression": {
                    "assignments": [
                      4504
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4504,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "28075:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 4604,
                        "src": "28067:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4503,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "28067:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4506,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 4505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "28079:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "28067:13:2"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "28062:1368:2"
                },
                {
                  "assignments": [
                    4606
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4606,
                      "mutability": "mutable",
                      "name": "_amountTotal",
                      "nameLocation": "29632:12:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4642,
                      "src": "29624:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 4605,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "29624:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4609,
                  "initialValue": {
                    "expression": {
                      "id": 4607,
                      "name": "_opsInfo",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4458,
                      "src": "29647:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                        "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                      }
                    },
                    "id": 4608,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "29656:6:2",
                    "memberName": "amount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 3656,
                    "src": "29647:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "29624:38:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4610,
                      "name": "_amt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "29677:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 4611,
                      "name": "_amountTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4606,
                      "src": "29684:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "29677:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4616,
                  "nodeType": "IfStatement",
                  "src": "29673:57:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4613,
                        "name": "Enshroud_AmountMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3845,
                        "src": "29705:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29705:25:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4615,
                    "nodeType": "RevertStatement",
                    "src": "29698:32:2"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4617,
                      "name": "_amt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4475,
                      "src": "30122:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 4618,
                      "name": "_amountTotal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4606,
                      "src": "30129:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "30122:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "documentation": "@dev all relevant members (recipients, detailsHashes, outputIds, metadata) of the _opsInfo struct will have a length of 1, the number of mints is 1, and the Flag value is Withdraw",
                  "id": 4627,
                  "nodeType": "IfStatement",
                  "src": "30118:63:2",
                  "trueBody": {
                    "expression": {
                      "arguments": [
                        {
                          "id": 4621,
                          "name": "_opsInfo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4458,
                          "src": "30154:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                            "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                          }
                        },
                        {
                          "hexValue": "31",
                          "id": 4622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "30164:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        {
                          "expression": {
                            "id": 4623,
                            "name": "Flag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3638,
                            "src": "30167:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                              "typeString": "type(enum EnshroudProtocol.Flag)"
                            }
                          },
                          "id": 4624,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "30172:8:2",
                          "memberName": "Withdraw",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3637,
                          "src": "30167:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Flag_$3638",
                            "typeString": "enum EnshroudProtocol.Flag"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                            "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                          },
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          {
                            "typeIdentifier": "t_enum$_Flag_$3638",
                            "typeString": "enum EnshroudProtocol.Flag"
                          }
                        ],
                        "id": 4620,
                        "name": "_mintENFTs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5323,
                        "src": "30143:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_OpsInfo_$3659_calldata_ptr_$_t_uint256_$_t_enum$_Flag_$3638_$returns$__$",
                          "typeString": "function (struct EnshroudProtocol.OpsInfo calldata,uint256,enum EnshroudProtocol.Flag)"
                        }
                      },
                      "id": 4625,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30143:38:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 4626,
                    "nodeType": "ExpressionStatement",
                    "src": "30143:38:2"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 4629,
                        "name": "_amountTotal",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4606,
                        "src": "30204:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 4630,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "30218:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 4631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "30222:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "30218:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4632,
                        "name": "_tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4469,
                        "src": "30230:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 4628,
                      "name": "_withdraw",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5469,
                      "src": "30194:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (uint256,address,address)"
                      }
                    },
                    "id": 4633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30194:51:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4634,
                  "nodeType": "ExpressionStatement",
                  "src": "30194:51:2"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 4638,
                          "name": "_mvoInfo",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4461,
                          "src": "30336:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                            "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                          }
                        },
                        "id": 4639,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "30345:6:2",
                        "memberName": "mvoIDs",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3666,
                        "src": "30336:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      ],
                      "expression": {
                        "id": 4635,
                        "name": "iMVOStaking",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3716,
                        "src": "30312:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                          "typeString": "contract IMVOStaking_EnshroudProtocol"
                        }
                      },
                      "id": 4637,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "30324:11:2",
                      "memberName": "awardPoints",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3397,
                      "src": "30312:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_array$_t_string_memory_ptr_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (string memory[] memory) external"
                      }
                    },
                    "id": 4640,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "30312:40:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4641,
                  "nodeType": "ExpressionStatement",
                  "src": "30312:40:2"
                }
              ]
            },
            "documentation": {
              "id": 4455,
              "nodeType": "StructuredDocumentation",
              "src": "26648:813:2",
              "text": "@notice for eNFT holder to redeem their eNFT(s) for asset withdrawal via their decrypted eNFT metadata\n @param _opsInfo: OpsInfo struct containing all of the necessary Operations Block information\n @param _mvoInfo: MVOinfo struct containing array of signatures and IDs by MVOs that supplied encrypted metadata to mint new eNFTs\n @param _amounts: array of amounts of tokens/asset requested for withdrawal, in order by _id\n @param _rand: array of optional randomly generated bytes, represented in base64, generated client-side.\n @param _tokenContract: token contract address requested for withdraw. Provide zero address for ETH/native token withdrawal.\n @dev caller will be able to access decrypted eNFT metadata off chain in order to supply info to this function"
            },
            "functionSelector": "a1cbb281",
            "id": 4643,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 4472,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4471,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "27693:12:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7829,
                  "src": "27693:12:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "27693:12:2"
              }
            ],
            "name": "redeemENFTsAndWithdraw",
            "nameLocation": "27476:22:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4470,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4458,
                  "mutability": "mutable",
                  "name": "_opsInfo",
                  "nameLocation": "27526:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4643,
                  "src": "27509:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.OpsInfo"
                  },
                  "typeName": {
                    "id": 4457,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4456,
                      "name": "OpsInfo",
                      "nameLocations": [
                        "27509:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3659,
                      "src": "27509:7:2"
                    },
                    "referencedDeclaration": 3659,
                    "src": "27509:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OpsInfo_$3659_storage_ptr",
                      "typeString": "struct EnshroudProtocol.OpsInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4461,
                  "mutability": "mutable",
                  "name": "_mvoInfo",
                  "nameLocation": "27562:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4643,
                  "src": "27545:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.MVOinfo"
                  },
                  "typeName": {
                    "id": 4460,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4459,
                      "name": "MVOinfo",
                      "nameLocations": [
                        "27545:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3667,
                      "src": "27545:7:2"
                    },
                    "referencedDeclaration": 3667,
                    "src": "27545:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVOinfo_$3667_storage_ptr",
                      "typeString": "struct EnshroudProtocol.MVOinfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4464,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "27600:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4643,
                  "src": "27581:27:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4462,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "27581:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4463,
                    "nodeType": "ArrayTypeName",
                    "src": "27581:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4467,
                  "mutability": "mutable",
                  "name": "_rand",
                  "nameLocation": "27638:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4643,
                  "src": "27619:24:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes16_$dyn_calldata_ptr",
                    "typeString": "bytes16[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4465,
                      "name": "bytes16",
                      "nodeType": "ElementaryTypeName",
                      "src": "27619:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes16",
                        "typeString": "bytes16"
                      }
                    },
                    "id": 4466,
                    "nodeType": "ArrayTypeName",
                    "src": "27619:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes16_$dyn_storage_ptr",
                      "typeString": "bytes16[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4469,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "27662:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4643,
                  "src": "27654:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4468,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27654:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27498:185:2"
            },
            "returnParameters": {
              "id": 4473,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27706:0:2"
            },
            "scope": 5834,
            "src": "27467:2893:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4725,
              "nodeType": "Block",
              "src": "30843:714:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 4660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4655,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "30858:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 4656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "30862:6:2",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "30858:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 4657,
                        "name": "auditors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3748,
                        "src": "30872:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_address_$",
                          "typeString": "mapping(string memory => address)"
                        }
                      },
                      "id": 4659,
                      "indexExpression": {
                        "id": 4658,
                        "name": "_audId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4646,
                        "src": "30881:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "30872:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "30858:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4664,
                  "nodeType": "IfStatement",
                  "src": "30854:64:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4661,
                        "name": "Enshroud_NotAuditor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3865,
                        "src": "30897:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4662,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30897:21:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4663,
                    "nodeType": "RevertStatement",
                    "src": "30890:28:2"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4665,
                        "name": "_ids",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4649,
                        "src": "30933:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 4666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "30938:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "30933:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 4667,
                      "name": "ARRAY_LIMIT",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3691,
                      "src": "30947:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "30933:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4672,
                  "nodeType": "IfStatement",
                  "src": "30929:61:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4669,
                        "name": "Enshroud_ArrayTooLong",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3847,
                        "src": "30967:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4670,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "30967:23:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4671,
                    "nodeType": "RevertStatement",
                    "src": "30960:30:2"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 4673,
                        "name": "_ids",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4649,
                        "src": "31005:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 4674,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "31010:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "31005:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 4675,
                        "name": "_reasons",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4652,
                        "src": "31020:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                          "typeString": "string calldata[] calldata"
                        }
                      },
                      "id": 4676,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "31029:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "31020:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31005:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4681,
                  "nodeType": "IfStatement",
                  "src": "31001:59:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4678,
                        "name": "LengthMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3439,
                        "src": "31044:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4679,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "31044:16:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4680,
                    "nodeType": "RevertStatement",
                    "src": "31037:23:2"
                  }
                },
                {
                  "body": {
                    "id": 4718,
                    "nodeType": "Block",
                    "src": "31112:341:2",
                    "statements": [
                      {
                        "assignments": [
                          4691
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 4691,
                            "mutability": "mutable",
                            "name": "_id",
                            "nameLocation": "31135:3:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 4718,
                            "src": "31127:11:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 4690,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "31127:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 4695,
                        "initialValue": {
                          "baseExpression": {
                            "id": 4692,
                            "name": "_ids",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4649,
                            "src": "31141:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 4694,
                          "indexExpression": {
                            "id": 4693,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4683,
                            "src": "31146:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "31141:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "31127:21:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 4704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 4698,
                                    "name": "idToAuditorGreylist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3763,
                                    "src": "31226:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                      "typeString": "mapping(uint256 => string storage ref)"
                                    }
                                  },
                                  "id": 4700,
                                  "indexExpression": {
                                    "id": 4699,
                                    "name": "_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4691,
                                    "src": "31246:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "31226:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                ],
                                "id": 4697,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "31220:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 4696,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "31220:5:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4701,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "31220:31:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes storage pointer"
                              }
                            },
                            "id": 4702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "31252:6:2",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "31220:38:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 4703,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "31262:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "31220:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4713,
                        "nodeType": "IfStatement",
                        "src": "31216:101:2",
                        "trueBody": {
                          "expression": {
                            "id": 4711,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "baseExpression": {
                                "id": 4705,
                                "name": "idToAuditorGreylist",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3763,
                                "src": "31279:19:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                  "typeString": "mapping(uint256 => string storage ref)"
                                }
                              },
                              "id": 4707,
                              "indexExpression": {
                                "id": 4706,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4691,
                                "src": "31299:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "31279:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage",
                                "typeString": "string storage ref"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "baseExpression": {
                                "id": 4708,
                                "name": "_reasons",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4652,
                                "src": "31306:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "string calldata[] calldata"
                                }
                              },
                              "id": 4710,
                              "indexExpression": {
                                "id": 4709,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4683,
                                "src": "31315:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "31306:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "src": "31279:38:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "id": 4712,
                          "nodeType": "ExpressionStatement",
                          "src": "31279:38:2"
                        }
                      },
                      {
                        "id": 4717,
                        "nodeType": "UncheckedBlock",
                        "src": "31394:48:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 4715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "31423:3:2",
                              "subExpression": {
                                "id": 4714,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4683,
                                "src": "31425:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 4716,
                            "nodeType": "ExpressionStatement",
                            "src": "31423:3:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 4686,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4683,
                      "src": "31093:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 4687,
                        "name": "_ids",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4649,
                        "src": "31097:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      },
                      "id": 4688,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "31102:6:2",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "31097:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "31093:15:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4719,
                  "initializationExpression": {
                    "assignments": [
                      4683
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 4683,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "31086:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 4719,
                        "src": "31078:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 4682,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "31078:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 4685,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 4684,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "31090:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "31078:13:2"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "31073:380:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4721,
                        "name": "_audId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4646,
                        "src": "31536:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      },
                      {
                        "id": 4722,
                        "name": "_ids",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4649,
                        "src": "31544:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        },
                        {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                          "typeString": "uint256[] calldata"
                        }
                      ],
                      "id": 4720,
                      "name": "GreyListAdd",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3806,
                      "src": "31524:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,uint256[] memory)"
                      }
                    },
                    "id": 4723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31524:25:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4724,
                  "nodeType": "EmitStatement",
                  "src": "31519:30:2"
                }
              ]
            },
            "documentation": {
              "id": 4644,
              "nodeType": "StructuredDocumentation",
              "src": "30368:324:2",
              "text": "@notice for an auditor to change eNFT(s) greylist status\n @param _audId: ID of the auditor calling this function\n @param _ids: array of eNFT IDs for which the auditor is altering greylist status\n @param _reasons: array of strings corresponding to the reason for each respective '_ids' greylisting"
            },
            "functionSelector": "2e2805dd",
            "id": 4726,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "auditorGreyList",
            "nameLocation": "30707:15:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4653,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4646,
                  "mutability": "mutable",
                  "name": "_audId",
                  "nameLocation": "30749:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4726,
                  "src": "30733:22:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4645,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "30733:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4649,
                  "mutability": "mutable",
                  "name": "_ids",
                  "nameLocation": "30785:4:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4726,
                  "src": "30766:23:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4647,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "30766:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 4648,
                    "nodeType": "ArrayTypeName",
                    "src": "30766:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4652,
                  "mutability": "mutable",
                  "name": "_reasons",
                  "nameLocation": "30818:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4726,
                  "src": "30800:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "string[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 4650,
                      "name": "string",
                      "nodeType": "ElementaryTypeName",
                      "src": "30800:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage_ptr",
                        "typeString": "string"
                      }
                    },
                    "id": 4651,
                    "nodeType": "ArrayTypeName",
                    "src": "30800:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_string_storage_$dyn_storage_ptr",
                      "typeString": "string[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "30722:111:2"
            },
            "returnParameters": {
              "id": 4654,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "30843:0:2"
            },
            "scope": 5834,
            "src": "30698:859:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4783,
              "nodeType": "Block",
              "src": "31788:621:2",
              "statements": [
                {
                  "assignments": [
                    4737
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4737,
                      "mutability": "mutable",
                      "name": "_addr",
                      "nameLocation": "31928:5:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4783,
                      "src": "31920:13:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4736,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "31920:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4745,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 4742,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4729,
                            "src": "31952:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31944:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": {
                            "id": 4740,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "31944:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31944:12:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 4739,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "31936:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4738,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "31936:7:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31936:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31920:37:2"
                },
                {
                  "assignments": [
                    4747
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4747,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "31975:7:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4783,
                      "src": "31968:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 4746,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "31968:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4759,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4754,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "32007:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4755,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "32011:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "32007:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4753,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "31999:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 4752,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "31999:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4756,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "31999:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 4751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "31992:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 4750,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "31992:6:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4757,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "31992:27:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4749,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "31985:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 4748,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "31985:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4758,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "31985:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "31968:52:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 4761,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4737,
                        "src": "32054:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4762,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4747,
                        "src": "32061:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 4763,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3674,
                          "src": "32070:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                            "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                          }
                        },
                        "id": 4764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "32084:8:2",
                        "memberName": "GreyList",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3670,
                        "src": "32070:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 4765,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "32094:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 4760,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5821,
                      "src": "32035:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$3674_$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum EnshroudProtocol.ApprovalTypes,string memory) returns (bool)"
                      }
                    },
                    "id": 4766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32035:62:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4782,
                  "nodeType": "IfStatement",
                  "src": "32031:371:2",
                  "trueBody": {
                    "id": 4781,
                    "nodeType": "Block",
                    "src": "32099:303:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 4770,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "32228:31:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4767,
                              "name": "idToAuditorGreylist",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3763,
                              "src": "32235:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 4769,
                            "indexExpression": {
                              "id": 4768,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4729,
                              "src": "32255:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "32235:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4771,
                        "nodeType": "ExpressionStatement",
                        "src": "32228:31:2"
                      },
                      {
                        "expression": {
                          "id": 4775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "32320:29:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4772,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3724,
                              "src": "32327:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                              }
                            },
                            "id": 4774,
                            "indexExpression": {
                              "id": 4773,
                              "name": "_addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4737,
                              "src": "32343:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "32327:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$3685_storage",
                              "typeString": "struct EnshroudProtocol.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4776,
                        "nodeType": "ExpressionStatement",
                        "src": "32320:29:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 4778,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4729,
                              "src": "32386:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 4777,
                            "name": "GreyListDeletion",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3810,
                            "src": "32369:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256)"
                            }
                          },
                          "id": 4779,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "32369:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4780,
                        "nodeType": "EmitStatement",
                        "src": "32364:26:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4727,
              "nodeType": "StructuredDocumentation",
              "src": "31565:143:2",
              "text": "@notice upon call by three admins, remove an eNFT's greylist status\n @param _id: ID of greylisted eNFT, to be removed from greylist"
            },
            "functionSelector": "c46ee844",
            "id": 4784,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4732,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "31776:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4733,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "31780:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "31776:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4734,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4731,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "31766:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "31766:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "31766:21:2"
              }
            ],
            "name": "removeGreylistStatus",
            "nameLocation": "31723:20:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4730,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4729,
                  "mutability": "mutable",
                  "name": "_id",
                  "nameLocation": "31752:3:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4784,
                  "src": "31744:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4728,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "31744:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "31743:13:2"
            },
            "returnParameters": {
              "id": 4735,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "31788:0:2"
            },
            "scope": 5834,
            "src": "31714:695:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4845,
              "nodeType": "Block",
              "src": "32744:491:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 4803,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "id": 4799,
                                "name": "_audId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4789,
                                "src": "32763:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              ],
                              "id": 4798,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "32757:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 4797,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "32757:5:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4800,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32757:13:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 4801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "32771:6:2",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "32757:20:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 4802,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "32780:1:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "32757:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4796,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "32749:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 4804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32749:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4805,
                  "nodeType": "ExpressionStatement",
                  "src": "32749:33:2"
                },
                {
                  "assignments": [
                    4807
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4807,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "32800:7:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4845,
                      "src": "32793:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 4806,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "32793:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4819,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4814,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "32832:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4815,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "32836:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "32832:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4813,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "32824:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 4812,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "32824:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4816,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "32824:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 4811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "32817:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 4810,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "32817:6:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4817,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "32817:27:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4809,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "32810:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 4808,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "32810:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32810:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "32793:52:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 4821,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4787,
                        "src": "32879:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4822,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4807,
                        "src": "32886:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 4823,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3674,
                          "src": "32895:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                            "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                          }
                        },
                        "id": 4824,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "32909:7:2",
                        "memberName": "Auditor",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3671,
                        "src": "32895:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        }
                      },
                      {
                        "id": 4825,
                        "name": "_audId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4789,
                        "src": "32918:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "id": 4820,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5821,
                      "src": "32860:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$3674_$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum EnshroudProtocol.ApprovalTypes,string memory) returns (bool)"
                      }
                    },
                    "id": 4826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "32860:65:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4844,
                  "nodeType": "IfStatement",
                  "src": "32856:372:2",
                  "trueBody": {
                    "id": 4843,
                    "nodeType": "Block",
                    "src": "32927:301:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 4831,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 4827,
                              "name": "auditors",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3748,
                              "src": "33054:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_string_memory_ptr_$_t_address_$",
                                "typeString": "mapping(string memory => address)"
                              }
                            },
                            "id": 4829,
                            "indexExpression": {
                              "id": 4828,
                              "name": "_audId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4789,
                              "src": "33063:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "33054:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4830,
                            "name": "_addr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4787,
                            "src": "33073:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "33054:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4832,
                        "nodeType": "ExpressionStatement",
                        "src": "33054:24:2"
                      },
                      {
                        "expression": {
                          "id": 4836,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "33138:29:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4833,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3724,
                              "src": "33145:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                              }
                            },
                            "id": 4835,
                            "indexExpression": {
                              "id": 4834,
                              "name": "_addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4787,
                              "src": "33161:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "33145:22:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$3685_storage",
                              "typeString": "struct EnshroudProtocol.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4837,
                        "nodeType": "ExpressionStatement",
                        "src": "33138:29:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 4839,
                              "name": "_addr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4787,
                              "src": "33202:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 4840,
                              "name": "_audId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4789,
                              "src": "33209:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            ],
                            "id": 4838,
                            "name": "AuditorUpdated",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3781,
                            "src": "33187:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (address,string memory)"
                            }
                          },
                          "id": 4841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "33187:29:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4842,
                        "nodeType": "EmitStatement",
                        "src": "33182:34:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4785,
              "nodeType": "StructuredDocumentation",
              "src": "32417:203:2",
              "text": "@notice for three admins to update an auditor's status\n @param _addr: address of auditor, or zero address to remove an auditor\n @param _audId: ID of the auditor being updated by admin"
            },
            "functionSelector": "1e6b8080",
            "id": 4846,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4792,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "32732:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "32736:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "32732:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4794,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4791,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "32722:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "32722:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "32722:21:2"
              }
            ],
            "name": "updateAuditor",
            "nameLocation": "32635:13:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4787,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nameLocation": "32667:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4846,
                  "src": "32659:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "32659:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4789,
                  "mutability": "mutable",
                  "name": "_audId",
                  "nameLocation": "32699:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4846,
                  "src": "32683:22:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4788,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "32683:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "32648:64:2"
            },
            "returnParameters": {
              "id": 4795,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "32744:0:2"
            },
            "scope": 5834,
            "src": "32626:609:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4883,
              "nodeType": "Block",
              "src": "34354:238:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 4866,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4860,
                        "name": "_newDepositFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4851,
                        "src": "34369:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 4861,
                        "name": "FEE_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3694,
                        "src": "34387:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "34369:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 4865,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 4863,
                        "name": "_newWithdrawFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4853,
                        "src": "34400:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">=",
                      "rightExpression": {
                        "id": 4864,
                        "name": "FEE_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3694,
                        "src": "34419:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "34400:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "34369:59:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4870,
                  "nodeType": "IfStatement",
                  "src": "34365:107:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 4867,
                        "name": "Enshroud_FeeTooLarge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3851,
                        "src": "34450:20:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 4868,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "34450:22:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 4869,
                    "nodeType": "RevertStatement",
                    "src": "34443:29:2"
                  }
                },
                {
                  "expression": {
                    "id": 4875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4871,
                        "name": "assetDepositFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3739,
                        "src": "34483:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4873,
                      "indexExpression": {
                        "id": 4872,
                        "name": "_tokenAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4849,
                        "src": "34499:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "34483:27:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4874,
                      "name": "_newDepositFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4851,
                      "src": "34513:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "34483:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4876,
                  "nodeType": "ExpressionStatement",
                  "src": "34483:44:2"
                },
                {
                  "expression": {
                    "id": 4881,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4877,
                        "name": "assetWithdrawFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3743,
                        "src": "34538:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 4879,
                      "indexExpression": {
                        "id": 4878,
                        "name": "_tokenAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4849,
                        "src": "34555:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "34538:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4880,
                      "name": "_newWithdrawFee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4853,
                      "src": "34569:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "34538:46:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4882,
                  "nodeType": "ExpressionStatement",
                  "src": "34538:46:2"
                }
              ]
            },
            "documentation": {
              "id": 4847,
              "nodeType": "StructuredDocumentation",
              "src": "33764:430:2",
              "text": "@param _tokenAddr: address of token whose fees are being updated. Leave as zero address for global changes (native token always has global fees)\n @param _newDepositFee: new per-asset percentage fee from user upon successful shielding, in 18 decimals. Must be < 5e17.\n @param _newWithdrawFee: new per-asset percentage fee from eNFT burner upon successful eNFT burning/withdrawal, in 18 decimals. Must be < 5e17."
            },
            "functionSelector": "f898c94b",
            "id": 4884,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4856,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "34342:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "34346:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "34342:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4858,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4855,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "34332:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "34332:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "34332:21:2"
              }
            ],
            "name": "updateFees",
            "nameLocation": "34209:10:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4849,
                  "mutability": "mutable",
                  "name": "_tokenAddr",
                  "nameLocation": "34238:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4884,
                  "src": "34230:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4848,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34230:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4851,
                  "mutability": "mutable",
                  "name": "_newDepositFee",
                  "nameLocation": "34267:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4884,
                  "src": "34259:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4850,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34259:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4853,
                  "mutability": "mutable",
                  "name": "_newWithdrawFee",
                  "nameLocation": "34300:15:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4884,
                  "src": "34292:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 4852,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "34292:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "34219:103:2"
            },
            "returnParameters": {
              "id": 4859,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "34354:0:2"
            },
            "scope": 5834,
            "src": "34200:392:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4907,
              "nodeType": "Block",
              "src": "35041:91:2",
              "statements": [
                {
                  "expression": {
                    "id": 4900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 4896,
                        "name": "adminStatus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3728,
                        "src": "35052:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 4898,
                      "indexExpression": {
                        "id": 4897,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4887,
                        "src": "35064:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "35052:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 4899,
                      "name": "_status",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4889,
                      "src": "35073:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "35052:28:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4901,
                  "nodeType": "ExpressionStatement",
                  "src": "35052:28:2"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 4903,
                        "name": "_addr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4887,
                        "src": "35109:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 4904,
                        "name": "_status",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4889,
                        "src": "35116:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 4902,
                      "name": "AdminUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3775,
                      "src": "35096:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,bool)"
                      }
                    },
                    "id": 4905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35096:28:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4906,
                  "nodeType": "EmitStatement",
                  "src": "35091:33:2"
                }
              ]
            },
            "documentation": {
              "id": 4885,
              "nodeType": "StructuredDocumentation",
              "src": "34600:329:2",
              "text": "@notice allows an admin to designate another admin or revoke an active admin; can be used in event of malicious admin/exploit, to remove initial admins, add DAO voting addresses, etc.\n @param _addr: address whose admin status is being updated\n @param _status: true for admin status grant, false for revocation"
            },
            "functionSelector": "670a6fd9",
            "id": 4908,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4892,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "35029:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "35033:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "35029:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4894,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4891,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "35019:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "35019:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "35019:21:2"
              }
            ],
            "name": "updateAdmin",
            "nameLocation": "34944:11:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4890,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4887,
                  "mutability": "mutable",
                  "name": "_addr",
                  "nameLocation": "34974:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4908,
                  "src": "34966:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4886,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "34966:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4889,
                  "mutability": "mutable",
                  "name": "_status",
                  "nameLocation": "34995:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4908,
                  "src": "34990:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 4888,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "34990:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "34955:54:2"
            },
            "returnParameters": {
              "id": 4895,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35041:0:2"
            },
            "scope": 5834,
            "src": "34935:197:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 4961,
              "nodeType": "Block",
              "src": "35747:606:2",
              "statements": [
                {
                  "assignments": [
                    4919
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4919,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "35765:7:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 4961,
                      "src": "35758:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 4918,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "35758:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4931,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4926,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "35797:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4927,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "35801:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "35797:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4925,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "35789:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 4924,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "35789:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "35789:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 4923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "35782:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 4922,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "35782:6:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "35782:27:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4921,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "35775:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 4920,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "35775:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35775:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "35758:52:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 4933,
                        "name": "_newTreasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4911,
                        "src": "35844:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4934,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4919,
                        "src": "35858:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 4935,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3674,
                          "src": "35867:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                            "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                          }
                        },
                        "id": 4936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "35881:8:2",
                        "memberName": "Treasury",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3672,
                        "src": "35867:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 4937,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "35891:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 4932,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5821,
                      "src": "35825:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$3674_$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum EnshroudProtocol.ApprovalTypes,string memory) returns (bool)"
                      }
                    },
                    "id": 4938,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "35825:69:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4960,
                  "nodeType": "IfStatement",
                  "src": "35821:525:2",
                  "trueBody": {
                    "id": 4959,
                    "nodeType": "Block",
                    "src": "35896:450:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 4943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 4939,
                              "name": "adminStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3728,
                              "src": "36024:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4941,
                            "indexExpression": {
                              "id": 4940,
                              "name": "_newTreasury",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4911,
                              "src": "36036:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "36024:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 4942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "36052:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "36024:32:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4944,
                        "nodeType": "ExpressionStatement",
                        "src": "36024:32:2"
                      },
                      {
                        "expression": {
                          "id": 4948,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "36162:28:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4945,
                              "name": "adminStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3728,
                              "src": "36169:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4947,
                            "indexExpression": {
                              "id": 4946,
                              "name": "treasury",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3705,
                              "src": "36181:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "36169:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4949,
                        "nodeType": "ExpressionStatement",
                        "src": "36162:28:2"
                      },
                      {
                        "expression": {
                          "id": 4952,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 4950,
                            "name": "treasury",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3705,
                            "src": "36205:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 4951,
                            "name": "_newTreasury",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4911,
                            "src": "36216:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "36205:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 4953,
                        "nodeType": "ExpressionStatement",
                        "src": "36205:23:2"
                      },
                      {
                        "expression": {
                          "id": 4957,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "36298:36:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4954,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3724,
                              "src": "36305:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                              }
                            },
                            "id": 4956,
                            "indexExpression": {
                              "id": 4955,
                              "name": "_newTreasury",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4911,
                              "src": "36321:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "36305:29:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$3685_storage",
                              "typeString": "struct EnshroudProtocol.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4958,
                        "nodeType": "ExpressionStatement",
                        "src": "36298:36:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4909,
              "nodeType": "StructuredDocumentation",
              "src": "35595:45:2",
              "text": "@param _newTreasury: new treasury address"
            },
            "functionSelector": "7f51bb1f",
            "id": 4962,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4914,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "35735:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "35739:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "35735:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4916,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4913,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "35725:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "35725:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "35725:21:2"
              }
            ],
            "name": "updateTreasury",
            "nameLocation": "35655:14:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4912,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4911,
                  "mutability": "mutable",
                  "name": "_newTreasury",
                  "nameLocation": "35696:12:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 4962,
                  "src": "35680:28:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4910,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "35680:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "35669:46:2"
            },
            "returnParameters": {
              "id": 4917,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "35747:0:2"
            },
            "scope": 5834,
            "src": "35646:707:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 5015,
              "nodeType": "Block",
              "src": "36949:600:2",
              "statements": [
                {
                  "assignments": [
                    4973
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4973,
                      "mutability": "mutable",
                      "name": "_caller",
                      "nameLocation": "36967:7:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5015,
                      "src": "36960:14:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 4972,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "36960:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4985,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 4980,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "36999:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 4981,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "37003:6:2",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "36999:10:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 4979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "36991:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint160_$",
                                "typeString": "type(uint160)"
                              },
                              "typeName": {
                                "id": 4978,
                                "name": "uint160",
                                "nodeType": "ElementaryTypeName",
                                "src": "36991:7:2",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4982,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "36991:19:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint160",
                              "typeString": "uint160"
                            }
                          ],
                          "id": 4977,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "36984:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint64_$",
                            "typeString": "type(uint64)"
                          },
                          "typeName": {
                            "id": 4976,
                            "name": "uint64",
                            "nodeType": "ElementaryTypeName",
                            "src": "36984:6:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4983,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "36984:27:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 4975,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "36977:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes8_$",
                        "typeString": "type(bytes8)"
                      },
                      "typeName": {
                        "id": 4974,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "36977:6:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "36977:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "36960:52:2"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 4987,
                        "name": "_newDaoPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4965,
                        "src": "37046:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 4988,
                        "name": "_caller",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4973,
                        "src": "37059:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      {
                        "expression": {
                          "id": 4989,
                          "name": "ApprovalTypes",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3674,
                          "src": "37068:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                            "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                          }
                        },
                        "id": 4990,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "37082:7:2",
                        "memberName": "DaoPool",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3673,
                        "src": "37068:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 4991,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "37091:2:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        },
                        {
                          "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                          "typeString": "enum EnshroudProtocol.ApprovalTypes"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 4986,
                      "name": "_isRequestApproved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5821,
                      "src": "37027:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes8_$_t_enum$_ApprovalTypes_$3674_$_t_string_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (address,bytes8,enum EnshroudProtocol.ApprovalTypes,string memory) returns (bool)"
                      }
                    },
                    "id": 4992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37027:67:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5014,
                  "nodeType": "IfStatement",
                  "src": "37023:519:2",
                  "trueBody": {
                    "id": 5013,
                    "nodeType": "Block",
                    "src": "37099:443:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 4997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 4993,
                              "name": "adminStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3728,
                              "src": "37226:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 4995,
                            "indexExpression": {
                              "id": 4994,
                              "name": "_newDaoPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4965,
                              "src": "37238:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "37226:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 4996,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "37253:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "37226:31:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4998,
                        "nodeType": "ExpressionStatement",
                        "src": "37226:31:2"
                      },
                      {
                        "expression": {
                          "id": 5002,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "37363:27:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 4999,
                              "name": "adminStatus",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3728,
                              "src": "37370:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 5001,
                            "indexExpression": {
                              "id": 5000,
                              "name": "daoPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3703,
                              "src": "37382:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "37370:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5003,
                        "nodeType": "ExpressionStatement",
                        "src": "37363:27:2"
                      },
                      {
                        "expression": {
                          "id": 5006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5004,
                            "name": "daoPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3703,
                            "src": "37405:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5005,
                            "name": "_newDaoPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4965,
                            "src": "37415:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "37405:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "id": 5007,
                        "nodeType": "ExpressionStatement",
                        "src": "37405:21:2"
                      },
                      {
                        "expression": {
                          "id": 5011,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "37495:35:2",
                          "subExpression": {
                            "baseExpression": {
                              "id": 5008,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3724,
                              "src": "37502:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                              }
                            },
                            "id": 5010,
                            "indexExpression": {
                              "id": 5009,
                              "name": "_newDaoPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4965,
                              "src": "37518:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "37502:28:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$3685_storage",
                              "typeString": "struct EnshroudProtocol.Requests storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5012,
                        "nodeType": "ExpressionStatement",
                        "src": "37495:35:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4963,
              "nodeType": "StructuredDocumentation",
              "src": "36800:44:2",
              "text": "@param _newDaoPool: new DAO Pool address"
            },
            "functionSelector": "6d127c68",
            "id": 5016,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "expression": {
                      "id": 4968,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "36937:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 4969,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "36941:6:2",
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "src": "36937:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 4970,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 4967,
                  "name": "onlyAdmin",
                  "nameLocations": [
                    "36927:9:2"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 3843,
                  "src": "36927:9:2"
                },
                "nodeType": "ModifierInvocation",
                "src": "36927:21:2"
              }
            ],
            "name": "updateDaoPool",
            "nameLocation": "36859:13:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4965,
                  "mutability": "mutable",
                  "name": "_newDaoPool",
                  "nameLocation": "36899:11:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5016,
                  "src": "36883:27:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 4964,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "36883:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "36872:45:2"
            },
            "returnParameters": {
              "id": 4971,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "36949:0:2"
            },
            "scope": 5834,
            "src": "36850:699:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3454
            ],
            "body": {
              "id": 5032,
              "nodeType": "Block",
              "src": "37804:59:2",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5028,
                        "name": "baseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3707,
                        "src": "37836:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 5029,
                        "name": "_metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5019,
                        "src": "37845:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_calldata_ptr",
                          "typeString": "string calldata"
                        }
                      ],
                      "expression": {
                        "id": 5026,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "37822:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        },
                        "typeName": {
                          "id": 5025,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "37822:6:2",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 5027,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "37829:6:2",
                      "memberName": "concat",
                      "nodeType": "MemberAccess",
                      "src": "37822:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$",
                        "typeString": "function () pure returns (string memory)"
                      }
                    },
                    "id": 5030,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "37822:33:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5024,
                  "id": 5031,
                  "nodeType": "Return",
                  "src": "37815:40:2"
                }
              ]
            },
            "documentation": {
              "id": 5017,
              "nodeType": "StructuredDocumentation",
              "src": "37557:140:2",
              "text": "@param _metadata: eNFT token metadata\n @return uri for the supplied '_metadata'; see notes on baseURI in the constructor natSpec"
            },
            "functionSelector": "0de72b7e",
            "id": 5033,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "uri",
            "nameLocation": "37712:3:2",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5021,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "37771:8:2"
            },
            "parameters": {
              "id": 5020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5019,
                  "mutability": "mutable",
                  "name": "_metadata",
                  "nameLocation": "37742:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5033,
                  "src": "37726:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5018,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "37726:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37715:43:2"
            },
            "returnParameters": {
              "id": 5024,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5023,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5033,
                  "src": "37789:13:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5022,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "37789:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "37788:15:2"
            },
            "scope": 5834,
            "src": "37703:160:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5175,
              "nodeType": "Block",
              "src": "38514:2298:2",
              "statements": [
                {
                  "assignments": [
                    5046
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5046,
                      "mutability": "mutable",
                      "name": "_netAmount",
                      "nameLocation": "38527:10:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5175,
                      "src": "38519:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5045,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "38519:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5047,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "38519:18:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 5051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 5048,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "38548:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 5049,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "38552:6:2",
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "38548:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 5050,
                      "name": "_depositor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5036,
                      "src": "38562:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "38548:24:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 5103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 5100,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "39189:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 5101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "39193:6:2",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "39189:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 5102,
                        "name": "daoPool",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3703,
                        "src": "39203:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "39189:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 5112,
                      "nodeType": "Block",
                      "src": "39448:103:2",
                      "statements": [
                        {
                          "documentation": "@dev third-party deposits are not otherwise permitted",
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5109,
                              "name": "Enshroud_OnlyDAOPool",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3873,
                              "src": "39523:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 5110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "39523:22:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 5111,
                          "nodeType": "RevertStatement",
                          "src": "39516:29:2"
                        }
                      ]
                    },
                    "id": 5113,
                    "nodeType": "IfStatement",
                    "src": "39185:366:2",
                    "trueBody": {
                      "id": 5108,
                      "nodeType": "Block",
                      "src": "39212:230:2",
                      "statements": [
                        {
                          "documentation": "@dev occurs when called via DAOPool.claimTokenYieldAsENFTs()\n in this case DAOPool has already safeTransfer'd the tokens to this contract and accounted for any fee-on-transfer issues",
                          "expression": {
                            "id": 5106,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 5104,
                              "name": "_netAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5046,
                              "src": "39416:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "id": 5105,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5040,
                              "src": "39429:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "39416:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 5107,
                          "nodeType": "ExpressionStatement",
                          "src": "39416:20:2"
                        }
                      ]
                    }
                  },
                  "id": 5114,
                  "nodeType": "IfStatement",
                  "src": "38544:1007:2",
                  "trueBody": {
                    "id": 5099,
                    "nodeType": "Block",
                    "src": "38574:605:2",
                    "statements": [
                      {
                        "assignments": [
                          5053
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5053,
                            "mutability": "mutable",
                            "name": "_ourBalanceBefore",
                            "nameLocation": "38665:17:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 5099,
                            "src": "38657:25:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5052,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "38657:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5063,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 5060,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "38749:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                ],
                                "id": 5059,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "38741:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5058,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "38741:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5061,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38741:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5055,
                                  "name": "_tokenContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5038,
                                  "src": "38715:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5054,
                                "name": "IERC20Permit_EnshroudProtocol",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3382,
                                "src": "38685:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20Permit_EnshroudProtocol_$3382_$",
                                  "typeString": "type(contract IERC20Permit_EnshroudProtocol)"
                                }
                              },
                              "id": 5056,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38685:45:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Permit_EnshroudProtocol_$3382",
                                "typeString": "contract IERC20Permit_EnshroudProtocol"
                              }
                            },
                            "id": 5057,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "38731:9:2",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3381,
                            "src": "38685:55:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38685:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "38657:98:2"
                      },
                      {
                        "documentation": "@dev safeTransferFrom will revert on failure (for example if lacking proper permit or approve() from '_depositor')",
                        "expression": {
                          "arguments": [
                            {
                              "id": 5067,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5036,
                              "src": "38928:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 5070,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "38948:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                ],
                                "id": 5069,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "38940:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5068,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "38940:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5071,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38940:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5072,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5040,
                              "src": "38955:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5064,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5038,
                              "src": "38896:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5066,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "38911:16:2",
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7893,
                            "src": "38896:31:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 5073,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38896:67:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5074,
                        "nodeType": "ExpressionStatement",
                        "src": "38896:67:2"
                      },
                      {
                        "assignments": [
                          5076
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5076,
                            "mutability": "mutable",
                            "name": "_ourBalanceAfter",
                            "nameLocation": "38977:16:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 5099,
                            "src": "38969:24:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5075,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "38969:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5086,
                        "initialValue": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 5083,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "39060:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_EnshroudProtocol_$5834",
                                    "typeString": "contract EnshroudProtocol"
                                  }
                                ],
                                "id": 5082,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "39052:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 5081,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "39052:7:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5084,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "39052:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5078,
                                  "name": "_tokenContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5038,
                                  "src": "39026:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 5077,
                                "name": "IERC20Permit_EnshroudProtocol",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3382,
                                "src": "38996:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20Permit_EnshroudProtocol_$3382_$",
                                  "typeString": "type(contract IERC20Permit_EnshroudProtocol)"
                                }
                              },
                              "id": 5079,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "38996:45:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20Permit_EnshroudProtocol_$3382",
                                "typeString": "contract IERC20Permit_EnshroudProtocol"
                              }
                            },
                            "id": 5080,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "39042:9:2",
                            "memberName": "balanceOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3381,
                            "src": "38996:55:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view external returns (uint256)"
                            }
                          },
                          "id": 5085,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "38996:70:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "38969:97:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5090,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5088,
                                "name": "_ourBalanceAfter",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5076,
                                "src": "39080:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 5089,
                                "name": "_ourBalanceBefore",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5053,
                                "src": "39100:17:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "39080:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 5087,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "39072:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                              "typeString": "function (bool) pure"
                            }
                          },
                          "id": 5091,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "39072:46:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5092,
                        "nodeType": "ExpressionStatement",
                        "src": "39072:46:2"
                      },
                      {
                        "expression": {
                          "id": 5097,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5093,
                            "name": "_netAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5046,
                            "src": "39124:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5094,
                              "name": "_ourBalanceAfter",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5076,
                              "src": "39137:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 5095,
                              "name": "_ourBalanceBefore",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5053,
                              "src": "39156:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "39137:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "39124:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5098,
                        "nodeType": "ExpressionStatement",
                        "src": "39124:49:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5116
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5116,
                      "mutability": "mutable",
                      "name": "_tokenDepositFeeAmount",
                      "nameLocation": "39610:22:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5175,
                      "src": "39602:30:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5115,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "39602:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5121,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5118,
                        "name": "_netAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5046,
                        "src": "39647:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5119,
                        "name": "_fee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5042,
                        "src": "39659:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5117,
                      "name": "_mulWadDown",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5833,
                      "src": "39635:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 5120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39635:29:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39602:62:2"
                },
                {
                  "assignments": [
                    5123
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5123,
                      "mutability": "mutable",
                      "name": "_netDeposit",
                      "nameLocation": "39683:11:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5175,
                      "src": "39675:19:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5122,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "39675:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5127,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5126,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5124,
                      "name": "_netAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5046,
                      "src": "39697:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 5125,
                      "name": "_tokenDepositFeeAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5116,
                      "src": "39710:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "39697:35:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39675:57:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5128,
                      "name": "_netDeposit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5123,
                      "src": "39747:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5129,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "39762:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "39747:16:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5134,
                  "nodeType": "IfStatement",
                  "src": "39743:52:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5131,
                        "name": "Enshroud_ZeroMsgValue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3871,
                        "src": "39772:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 5132,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "39772:23:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 5133,
                    "nodeType": "RevertStatement",
                    "src": "39765:30:2"
                  }
                },
                {
                  "assignments": [
                    5136
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5136,
                      "mutability": "mutable",
                      "name": "_treasuryFeeAmount",
                      "nameLocation": "39940:18:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5175,
                      "src": "39932:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5135,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "39932:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5141,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5138,
                        "name": "_tokenDepositFeeAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5116,
                        "src": "39987:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5139,
                        "name": "treasuryFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3713,
                        "src": "40024:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5137,
                      "name": "_mulWadDown",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5833,
                      "src": "39961:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 5140,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "39961:85:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "39932:114:2"
                },
                {
                  "id": 5174,
                  "nodeType": "UncheckedBlock",
                  "src": "40059:746:2",
                  "statements": [
                    {
                      "expression": {
                        "id": 5148,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 5142,
                              "name": "assetBalances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3735,
                              "src": "40157:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 5145,
                            "indexExpression": {
                              "id": 5143,
                              "name": "_depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5036,
                              "src": "40171:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "40157:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 5146,
                          "indexExpression": {
                            "id": 5144,
                            "name": "_tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5038,
                            "src": "40183:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "40157:41:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "+=",
                        "rightHandSide": {
                          "id": 5147,
                          "name": "_netDeposit",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5123,
                          "src": "40202:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "40157:56:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5149,
                      "nodeType": "ExpressionStatement",
                      "src": "40157:56:2"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "id": 5153,
                            "name": "treasury",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3705,
                            "src": "40354:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 5154,
                            "name": "_treasuryFeeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5136,
                            "src": "40364:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 5150,
                            "name": "_tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5038,
                            "src": "40326:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 5152,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40341:12:2",
                          "memberName": "safeTransfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7879,
                          "src": "40326:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 5155,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "40326:57:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5156,
                      "nodeType": "ExpressionStatement",
                      "src": "40326:57:2"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "id": 5160,
                            "name": "daoPool",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3703,
                            "src": "40536:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 5163,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5161,
                              "name": "_tokenDepositFeeAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5116,
                              "src": "40562:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 5162,
                              "name": "_treasuryFeeAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5136,
                              "src": "40587:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "40562:43:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 5157,
                            "name": "_tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5038,
                            "src": "40490:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 5159,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "40505:12:2",
                          "memberName": "safeTransfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 7879,
                          "src": "40490:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                            "typeString": "function (address,address,uint256)"
                          }
                        },
                        "id": 5164,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "40490:130:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5165,
                      "nodeType": "ExpressionStatement",
                      "src": "40490:130:2"
                    },
                    {
                      "eventCall": {
                        "arguments": [
                          {
                            "id": 5167,
                            "name": "_depositor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5036,
                            "src": "40673:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 5168,
                            "name": "_tokenContract",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5038,
                            "src": "40702:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 5169,
                            "name": "_netDeposit",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5123,
                            "src": "40735:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "expression": {
                              "id": 5170,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -4,
                              "src": "40765:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 5171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "40771:7:2",
                            "memberName": "chainid",
                            "nodeType": "MemberAccess",
                            "src": "40765:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5166,
                          "name": "DepositERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3791,
                          "src": "40642:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                            "typeString": "function (address,address,uint256,uint256)"
                          }
                        },
                        "id": 5172,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "40642:151:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 5173,
                      "nodeType": "EmitStatement",
                      "src": "40637:156:2"
                    }
                  ]
                }
              ]
            },
            "documentation": {
              "id": 5034,
              "nodeType": "StructuredDocumentation",
              "src": "37871:486:2",
              "text": "@notice internal function which causes all necessary token and fee transfers upon valid 'depositTokens()' or 'depositTokensWithPermit()' call\n @param _depositor: depositing address (msg.sender unless called by daoPool)\n @param _tokenContract: token contract address, ERC20 compliance (including permit, if applicable) checks completed in preceding function call\n @param _amount: amount of tokens deposited\n @param _fee: deposit fee for _tokenContract"
            },
            "id": 5176,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_depositTokens",
            "nameLocation": "38372:14:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5043,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5036,
                  "mutability": "mutable",
                  "name": "_depositor",
                  "nameLocation": "38405:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5176,
                  "src": "38397:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5035,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "38397:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5038,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "38434:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5176,
                  "src": "38426:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5037,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "38426:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5040,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "38467:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5176,
                  "src": "38459:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38459:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5042,
                  "mutability": "mutable",
                  "name": "_fee",
                  "nameLocation": "38493:4:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5176,
                  "src": "38485:12:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5041,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "38485:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "38386:118:2"
            },
            "returnParameters": {
              "id": 5044,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "38514:0:2"
            },
            "scope": 5834,
            "src": "38363:2449:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5322,
              "nodeType": "Block",
              "src": "41758:1479:2",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5198,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5188,
                            "name": "_mints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5182,
                            "src": "41787:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "id": 5189,
                                "name": "_enftInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5180,
                                "src": "41797:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                }
                              },
                              "id": 5190,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "41807:9:2",
                              "memberName": "outputIds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3651,
                              "src": "41797:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                "typeString": "uint256[] calldata"
                              }
                            },
                            "id": 5191,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "41817:6:2",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "41797:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "41787:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5197,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5193,
                            "name": "_mints",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5182,
                            "src": "41840:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "expression": {
                              "expression": {
                                "id": 5194,
                                "name": "_enftInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5180,
                                "src": "41850:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                }
                              },
                              "id": 5195,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "41860:13:2",
                              "memberName": "detailsHashes",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3645,
                              "src": "41850:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            "id": 5196,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "41874:6:2",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "41850:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "41840:40:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "41787:93:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 5203,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5199,
                          "name": "_mints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5182,
                          "src": "41897:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "expression": {
                            "expression": {
                              "id": 5200,
                              "name": "_enftInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5180,
                              "src": "41907:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                              }
                            },
                            "id": 5201,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "41917:10:2",
                            "memberName": "recipients",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3642,
                            "src": "41907:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 5202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "41928:6:2",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "41907:27:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "41897:37:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "41787:147:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5205,
                        "name": "_mints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5182,
                        "src": "41951:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "expression": {
                            "id": 5206,
                            "name": "_enftInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5180,
                            "src": "41961:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                              "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                            }
                          },
                          "id": 5207,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "41971:8:2",
                          "memberName": "metadata",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3654,
                          "src": "41961:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                            "typeString": "string calldata[] calldata"
                          }
                        },
                        "id": 5208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "41980:6:2",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "41961:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "41951:35:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "41787:199:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5214,
                  "nodeType": "IfStatement",
                  "src": "41769:252:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5211,
                        "name": "LengthMismatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3439,
                        "src": "42005:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 5212,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "42005:16:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 5213,
                    "nodeType": "RevertStatement",
                    "src": "41998:23:2"
                  }
                },
                {
                  "body": {
                    "id": 5320,
                    "nodeType": "Block",
                    "src": "42123:1107:2",
                    "statements": [
                      {
                        "assignments": [
                          5223
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5223,
                            "mutability": "mutable",
                            "name": "_id",
                            "nameLocation": "42146:3:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 5320,
                            "src": "42138:11:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 5222,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "42138:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5228,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 5224,
                              "name": "_enftInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5180,
                              "src": "42152:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                              }
                            },
                            "id": 5225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "42162:9:2",
                            "memberName": "outputIds",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3651,
                            "src": "42152:19:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                              "typeString": "uint256[] calldata"
                            }
                          },
                          "id": 5227,
                          "indexExpression": {
                            "id": 5226,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5216,
                            "src": "42172:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "42152:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "42138:36:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5237,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "id": 5231,
                                    "name": "idToAuditorGreylist",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3763,
                                    "src": "42199:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                      "typeString": "mapping(uint256 => string storage ref)"
                                    }
                                  },
                                  "id": 5233,
                                  "indexExpression": {
                                    "id": 5232,
                                    "name": "_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5223,
                                    "src": "42219:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "42199:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                ],
                                "id": 5230,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "42193:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 5229,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "42193:5:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "42193:31:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes storage pointer"
                              }
                            },
                            "id": 5235,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "42225:6:2",
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "42193:38:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 5236,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "42235:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "42193:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5242,
                        "nodeType": "IfStatement",
                        "src": "42189:97:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [
                              {
                                "id": 5239,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5223,
                                "src": "42282:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5238,
                              "name": "Enshroud_Greylisted",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3855,
                              "src": "42262:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$_t_error_$",
                                "typeString": "function (uint256) pure returns (error)"
                              }
                            },
                            "id": 5240,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42262:24:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 5241,
                          "nodeType": "RevertStatement",
                          "src": "42255:31:2"
                        }
                      },
                      {
                        "condition": {
                          "baseExpression": {
                            "id": 5243,
                            "name": "nftIdUsed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3753,
                            "src": "42411:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$",
                              "typeString": "mapping(uint256 => bool)"
                            }
                          },
                          "id": 5245,
                          "indexExpression": {
                            "id": 5244,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5223,
                            "src": "42421:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "42411:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5249,
                        "nodeType": "IfStatement",
                        "src": "42407:47:2",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5246,
                              "name": "Enshroud_InvalidID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3859,
                              "src": "42434:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 5247,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "42434:20:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 5248,
                          "nodeType": "RevertStatement",
                          "src": "42427:27:2"
                        }
                      },
                      {
                        "expression": {
                          "id": 5254,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5250,
                              "name": "nftIdUsed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3753,
                              "src": "42509:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_bool_$",
                                "typeString": "mapping(uint256 => bool)"
                              }
                            },
                            "id": 5252,
                            "indexExpression": {
                              "id": 5251,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5223,
                              "src": "42519:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "42509:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 5253,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "42526:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "42509:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5255,
                        "nodeType": "ExpressionStatement",
                        "src": "42509:21:2"
                      },
                      {
                        "expression": {
                          "id": 5263,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 5256,
                              "name": "detailsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3758,
                              "src": "42545:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_bytes32_$",
                                "typeString": "mapping(uint256 => bytes32)"
                              }
                            },
                            "id": 5258,
                            "indexExpression": {
                              "id": 5257,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5223,
                              "src": "42557:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "42545:16:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "expression": {
                                "id": 5259,
                                "name": "_enftInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5180,
                                "src": "42564:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                }
                              },
                              "id": 5260,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "42574:13:2",
                              "memberName": "detailsHashes",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3645,
                              "src": "42564:23:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            "id": 5262,
                            "indexExpression": {
                              "id": 5261,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5216,
                              "src": "42588:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "42564:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "42545:45:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 5264,
                        "nodeType": "ExpressionStatement",
                        "src": "42545:45:2"
                      },
                      {
                        "id": 5274,
                        "nodeType": "UncheckedBlock",
                        "src": "42605:100:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 5272,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 5265,
                                  "name": "enftUnlockTime",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3768,
                                  "src": "42634:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 5267,
                                "indexExpression": {
                                  "id": 5266,
                                  "name": "_id",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5223,
                                  "src": "42649:3:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "42634:19:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 5271,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "expression": {
                                    "id": 5268,
                                    "name": "block",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -4,
                                    "src": "42656:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_block",
                                      "typeString": "block"
                                    }
                                  },
                                  "id": 5269,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "42662:6:2",
                                  "memberName": "number",
                                  "nodeType": "MemberAccess",
                                  "src": "42656:12:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 5270,
                                  "name": "confirmationBlocks",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3701,
                                  "src": "42671:18:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "42656:33:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "42634:55:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5273,
                            "nodeType": "ExpressionStatement",
                            "src": "42634:55:2"
                          }
                        ]
                      },
                      {
                        "assignments": [
                          5276
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5276,
                            "mutability": "mutable",
                            "name": "_recipient",
                            "nameLocation": "42729:10:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 5320,
                            "src": "42721:18:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 5275,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "42721:7:2",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5281,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 5277,
                              "name": "_enftInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5180,
                              "src": "42742:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                              }
                            },
                            "id": 5278,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "42752:10:2",
                            "memberName": "recipients",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3642,
                            "src": "42742:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                              "typeString": "address[] calldata"
                            }
                          },
                          "id": 5280,
                          "indexExpression": {
                            "id": 5279,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5216,
                            "src": "42763:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "42742:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "42721:44:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_enum$_Flag_$3638",
                            "typeString": "enum EnshroudProtocol.Flag"
                          },
                          "id": 5285,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5282,
                            "name": "_flag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5185,
                            "src": "42784:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Flag_$3638",
                              "typeString": "enum EnshroudProtocol.Flag"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 5283,
                              "name": "Flag",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3638,
                              "src": "42793:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                                "typeString": "type(enum EnshroudProtocol.Flag)"
                              }
                            },
                            "id": 5284,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "42798:8:2",
                            "memberName": "Withdraw",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3637,
                            "src": "42793:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Flag_$3638",
                              "typeString": "enum EnshroudProtocol.Flag"
                            }
                          },
                          "src": "42784:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5292,
                        "nodeType": "IfStatement",
                        "src": "42780:161:2",
                        "trueBody": {
                          "id": 5291,
                          "nodeType": "Block",
                          "src": "42808:133:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 5289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 5286,
                                  "name": "_recipient",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5276,
                                  "src": "42902:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 5287,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "42915:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 5288,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "42919:6:2",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "42915:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "42902:23:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 5290,
                              "nodeType": "ExpressionStatement",
                              "src": "42902:23:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5294,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5276,
                              "src": "43007:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5295,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5223,
                              "src": "43019:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "hexValue": "31",
                              "id": 5296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "43024:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 5299,
                                      "name": "_enftInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5180,
                                      "src": "43033:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                        "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                      }
                                    },
                                    "id": 5300,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "43043:8:2",
                                    "memberName": "metadata",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3654,
                                    "src": "43033:18:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                                      "typeString": "string calldata[] calldata"
                                    }
                                  },
                                  "id": 5302,
                                  "indexExpression": {
                                    "id": 5301,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5216,
                                    "src": "43052:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "43033:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_calldata_ptr",
                                    "typeString": "string calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_calldata_ptr",
                                    "typeString": "string calldata"
                                  }
                                ],
                                "id": 5298,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "43027:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                  "typeString": "type(bytes storage pointer)"
                                },
                                "typeName": {
                                  "id": 5297,
                                  "name": "bytes",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "43027:5:2",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 5303,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "43027:28:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 5293,
                            "name": "_mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3547,
                            "src": "43001:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,uint256,uint256,bytes memory)"
                            }
                          },
                          "id": 5304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43001:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5305,
                        "nodeType": "ExpressionStatement",
                        "src": "43001:55:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "baseExpression": {
                                    "expression": {
                                      "id": 5308,
                                      "name": "_enftInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5180,
                                      "src": "43086:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                        "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                      }
                                    },
                                    "id": 5309,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "43096:8:2",
                                    "memberName": "metadata",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3654,
                                    "src": "43086:18:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                                      "typeString": "string calldata[] calldata"
                                    }
                                  },
                                  "id": 5311,
                                  "indexExpression": {
                                    "id": 5310,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5216,
                                    "src": "43105:1:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "43086:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_calldata_ptr",
                                    "typeString": "string calldata"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_calldata_ptr",
                                    "typeString": "string calldata"
                                  }
                                ],
                                "id": 5307,
                                "name": "uri",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [
                                  5033
                                ],
                                "referencedDeclaration": 5033,
                                "src": "43082:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_string_calldata_ptr_$returns$_t_string_memory_ptr_$",
                                  "typeString": "function (string calldata) view returns (string memory)"
                                }
                              },
                              "id": 5312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "43082:26:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "id": 5313,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5223,
                              "src": "43110:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5306,
                            "name": "URI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3432,
                            "src": "43078:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_uint256_$returns$__$",
                              "typeString": "function (string memory,uint256)"
                            }
                          },
                          "id": 5314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "43078:36:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5315,
                        "nodeType": "EmitStatement",
                        "src": "43073:41:2"
                      },
                      {
                        "id": 5319,
                        "nodeType": "UncheckedBlock",
                        "src": "43129:90:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 5317,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "43158:3:2",
                              "subExpression": {
                                "id": 5316,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5216,
                                "src": "43160:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5318,
                            "nodeType": "ExpressionStatement",
                            "src": "43158:3:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5221,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5219,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5216,
                      "src": "42109:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 5220,
                      "name": "_mints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5182,
                      "src": "42113:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "42109:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5321,
                  "initializationExpression": {
                    "assignments": [
                      5216
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5216,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "42102:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 5321,
                        "src": "42094:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5215,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "42094:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5218,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5217,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "42106:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "42094:13:2"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "42089:1141:2"
                }
              ]
            },
            "documentation": {
              "id": 5177,
              "nodeType": "StructuredDocumentation",
              "src": "41302:331:2",
              "text": "@param _enftInfo: OpsInfo struct containing all of the necessary Operations Block information\n @param _mints: number of eNFTs to be minted for use in for loop (saves a storage read, and array lengths are checked)\n @param _flag: Flag enum corresponding to MintFromDeposit, Spend, or Withdraw context (0, 1, or 2)"
            },
            "id": 5323,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mintENFTs",
            "nameLocation": "41648:10:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5180,
                  "mutability": "mutable",
                  "name": "_enftInfo",
                  "nameLocation": "41686:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5323,
                  "src": "41669:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.OpsInfo"
                  },
                  "typeName": {
                    "id": 5179,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5178,
                      "name": "OpsInfo",
                      "nameLocations": [
                        "41669:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3659,
                      "src": "41669:7:2"
                    },
                    "referencedDeclaration": 3659,
                    "src": "41669:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OpsInfo_$3659_storage_ptr",
                      "typeString": "struct EnshroudProtocol.OpsInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5182,
                  "mutability": "mutable",
                  "name": "_mints",
                  "nameLocation": "41714:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5323,
                  "src": "41706:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5181,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "41706:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5185,
                  "mutability": "mutable",
                  "name": "_flag",
                  "nameLocation": "41736:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5323,
                  "src": "41731:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Flag_$3638",
                    "typeString": "enum EnshroudProtocol.Flag"
                  },
                  "typeName": {
                    "id": 5184,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5183,
                      "name": "Flag",
                      "nameLocations": [
                        "41731:4:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3638,
                      "src": "41731:4:2"
                    },
                    "referencedDeclaration": 3638,
                    "src": "41731:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Flag_$3638",
                      "typeString": "enum EnshroudProtocol.Flag"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "41658:90:2"
            },
            "returnParameters": {
              "id": 5187,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "41758:0:2"
            },
            "scope": 5834,
            "src": "41639:1598:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5468,
              "nodeType": "Block",
              "src": "43858:3018:2",
              "statements": [
                {
                  "assignments": [
                    5334
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5334,
                      "mutability": "mutable",
                      "name": "_daoPool",
                      "nameLocation": "43877:8:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5468,
                      "src": "43869:16:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5333,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "43869:7:2",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5336,
                  "initialValue": {
                    "id": 5335,
                    "name": "daoPool",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 3703,
                    "src": "43888:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "43869:26:2"
                },
                {
                  "assignments": [
                    5338
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5338,
                      "mutability": "mutable",
                      "name": "_tokenWithdrawFeeAmount",
                      "nameLocation": "43914:23:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5468,
                      "src": "43906:31:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5337,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "43906:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5339,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "43906:31:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 5340,
                        "name": "assetWithdrawFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3743,
                        "src": "44076:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 5342,
                      "indexExpression": {
                        "id": 5341,
                        "name": "_tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5330,
                        "src": "44093:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "44076:32:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5343,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "44112:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "44076:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5367,
                    "nodeType": "Block",
                    "src": "44278:161:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5358,
                            "name": "_tokenWithdrawFeeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5338,
                            "src": "44293:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5360,
                                "name": "_amountTotal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5326,
                                "src": "44349:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 5361,
                                  "name": "assetWithdrawFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3743,
                                  "src": "44380:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5363,
                                "indexExpression": {
                                  "id": 5362,
                                  "name": "_tokenContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5330,
                                  "src": "44397:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "44380:32:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5359,
                              "name": "_mulWadDown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5833,
                              "src": "44319:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5364,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "44319:108:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "44293:134:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5366,
                        "nodeType": "ExpressionStatement",
                        "src": "44293:134:2"
                      }
                    ]
                  },
                  "id": 5368,
                  "nodeType": "IfStatement",
                  "src": "44072:367:2",
                  "trueBody": {
                    "id": 5357,
                    "nodeType": "Block",
                    "src": "44115:157:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5355,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5345,
                            "name": "_tokenWithdrawFeeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5338,
                            "src": "44130:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "id": 5347,
                                "name": "_amountTotal",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5326,
                                "src": "44186:12:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 5348,
                                  "name": "assetWithdrawFee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3743,
                                  "src": "44217:16:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 5353,
                                "indexExpression": {
                                  "arguments": [
                                    {
                                      "hexValue": "30",
                                      "id": 5351,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "44242:1:2",
                                      "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": 5350,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "44234:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 5349,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "44234:7:2",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 5352,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "44234:10:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "44217:28:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 5346,
                              "name": "_mulWadDown",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5833,
                              "src": "44156:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 5354,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "44156:104:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "44130:130:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 5356,
                        "nodeType": "ExpressionStatement",
                        "src": "44130:130:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    5370
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5370,
                      "mutability": "mutable",
                      "name": "_treasuryFeeAmount",
                      "nameLocation": "44459:18:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5468,
                      "src": "44451:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5369,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "44451:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5375,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5372,
                        "name": "_tokenWithdrawFeeAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5338,
                        "src": "44506:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5373,
                        "name": "treasuryFee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3713,
                        "src": "44544:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5371,
                      "name": "_mulWadDown",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5833,
                      "src": "44480:11:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 5374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "44480:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "44451:115:2"
                },
                {
                  "assignments": [
                    5377
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5377,
                      "mutability": "mutable",
                      "name": "_netWithdrawal",
                      "nameLocation": "44587:14:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5468,
                      "src": "44579:22:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5376,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "44579:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5378,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "44579:22:2"
                },
                {
                  "id": 5385,
                  "nodeType": "UncheckedBlock",
                  "src": "44612:211:2",
                  "statements": [
                    {
                      "expression": {
                        "id": 5383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 5379,
                          "name": "_netWithdrawal",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5377,
                          "src": "44756:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 5382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5380,
                            "name": "_amountTotal",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5326,
                            "src": "44773:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 5381,
                            "name": "_tokenWithdrawFeeAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5338,
                            "src": "44788:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "44773:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "44756:55:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 5384,
                      "nodeType": "ExpressionStatement",
                      "src": "44756:55:2"
                    }
                  ]
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5395,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 5391,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5386,
                        "name": "_tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5330,
                        "src": "44908:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 5389,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "44934:1:2",
                            "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": 5388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "44926:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 5387,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "44926:7:2",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "44926:10:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "44908:28:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 5394,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5392,
                        "name": "_tokenContract",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5330,
                        "src": "44940:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 5393,
                        "name": "weth",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3699,
                        "src": "44958:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "44940:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "44908:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 5466,
                    "nodeType": "Block",
                    "src": "46016:853:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5437,
                              "name": "treasury",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3705,
                              "src": "46266:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5438,
                              "name": "_treasuryFeeAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5370,
                              "src": "46276:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5434,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5330,
                              "src": "46238:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5436,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "46253:12:2",
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7879,
                            "src": "46238:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "46238:57:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5440,
                        "nodeType": "ExpressionStatement",
                        "src": "46238:57:2"
                      },
                      {
                        "id": 5450,
                        "nodeType": "UncheckedBlock",
                        "src": "46424:189:2",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5444,
                                  "name": "_daoPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5334,
                                  "src": "46503:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5447,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5445,
                                    "name": "_tokenWithdrawFeeAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5338,
                                    "src": "46534:23:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 5446,
                                    "name": "_treasuryFeeAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5370,
                                    "src": "46560:18:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "46534:44:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 5441,
                                  "name": "_tokenContract",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5330,
                                  "src": "46453:14:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 5443,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "46468:12:2",
                                "memberName": "safeTransfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7879,
                                "src": "46453:27:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 5448,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "46453:144:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5449,
                            "nodeType": "ExpressionStatement",
                            "src": "46453:144:2"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5454,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5328,
                              "src": "46655:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5455,
                              "name": "_netWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5377,
                              "src": "46667:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5451,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5330,
                              "src": "46627:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 5453,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "46642:12:2",
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7879,
                            "src": "46627:27:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$attached_to$_t_address_$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 5456,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "46627:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5457,
                        "nodeType": "ExpressionStatement",
                        "src": "46627:55:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5459,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5328,
                              "src": "46734:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5460,
                              "name": "_tokenContract",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5330,
                              "src": "46763:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5461,
                              "name": "_netWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5377,
                              "src": "46796:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 5462,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "46829:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 5463,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "46835:7:2",
                              "memberName": "chainid",
                              "nodeType": "MemberAccess",
                              "src": "46829:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5458,
                            "name": "WithdrawERC20",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3820,
                            "src": "46702:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256,uint256)"
                            }
                          },
                          "id": 5464,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "46702:155:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5465,
                        "nodeType": "EmitStatement",
                        "src": "46697:160:2"
                      }
                    ]
                  },
                  "id": 5467,
                  "nodeType": "IfStatement",
                  "src": "44904:1965:2",
                  "trueBody": {
                    "id": 5433,
                    "nodeType": "Block",
                    "src": "44964:1046:2",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5399,
                              "name": "_amountTotal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5326,
                              "src": "45286:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5396,
                              "name": "iWeth",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3719,
                              "src": "45271:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IWETH_$3391",
                                "typeString": "contract IWETH"
                              }
                            },
                            "id": 5398,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "45277:8:2",
                            "memberName": "withdraw",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3390,
                            "src": "45271:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$returns$__$",
                              "typeString": "function (uint256) external"
                            }
                          },
                          "id": 5400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45271:28:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5401,
                        "nodeType": "ExpressionStatement",
                        "src": "45271:28:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5405,
                              "name": "treasury",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3705,
                              "src": "45498:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "id": 5406,
                              "name": "_treasuryFeeAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5370,
                              "src": "45508:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5402,
                              "name": "SafeTransferLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7894,
                              "src": "45466:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                                "typeString": "type(library SafeTransferLib)"
                              }
                            },
                            "id": 5404,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "45482:15:2",
                            "memberName": "safeTransferETH",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7855,
                            "src": "45466:31:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5407,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45466:61:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5408,
                        "nodeType": "ExpressionStatement",
                        "src": "45466:61:2"
                      },
                      {
                        "id": 5418,
                        "nodeType": "UncheckedBlock",
                        "src": "45656:193:2",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 5412,
                                  "name": "_daoPool",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5334,
                                  "src": "45739:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 5415,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 5413,
                                    "name": "_tokenWithdrawFeeAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5338,
                                    "src": "45770:23:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 5414,
                                    "name": "_treasuryFeeAmount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5370,
                                    "src": "45796:18:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "45770:44:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 5409,
                                  "name": "SafeTransferLib",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7894,
                                  "src": "45685:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                                    "typeString": "type(library SafeTransferLib)"
                                  }
                                },
                                "id": 5411,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "45701:15:2",
                                "memberName": "safeTransferETH",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7855,
                                "src": "45685:31:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256)"
                                }
                              },
                              "id": 5416,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "45685:148:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 5417,
                            "nodeType": "ExpressionStatement",
                            "src": "45685:148:2"
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5422,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5328,
                              "src": "45895:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5423,
                              "name": "_netWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5377,
                              "src": "45907:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 5419,
                              "name": "SafeTransferLib",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 7894,
                              "src": "45863:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                                "typeString": "type(library SafeTransferLib)"
                              }
                            },
                            "id": 5421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "45879:15:2",
                            "memberName": "safeTransferETH",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 7855,
                            "src": "45863:31:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 5424,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45863:59:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5425,
                        "nodeType": "ExpressionStatement",
                        "src": "45863:59:2"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 5427,
                              "name": "_recipient",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5328,
                              "src": "45956:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5428,
                              "name": "_netWithdrawal",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5377,
                              "src": "45968:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "id": 5429,
                                "name": "block",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -4,
                                "src": "45984:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_block",
                                  "typeString": "block"
                                }
                              },
                              "id": 5430,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "45990:7:2",
                              "memberName": "chainid",
                              "nodeType": "MemberAccess",
                              "src": "45984:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 5426,
                            "name": "WithdrawETH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3828,
                            "src": "45944:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,uint256)"
                            }
                          },
                          "id": 5431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "45944:54:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5432,
                        "nodeType": "EmitStatement",
                        "src": "45939:59:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 5324,
              "nodeType": "StructuredDocumentation",
              "src": "43245:479:2",
              "text": "@notice withdrawal functionality for redeemed eNFTs\n @dev reentrancy-protected by 'redeemENFTsAndWithdraw()'\n @param _amountTotal: total amount of tokens/asset (across all eNFTs being redeemed) requesting for withdraw in proper decimals\n @param _recipient: address which receives the withdrawn assets\n @param _tokenContract: token contract address, ERC20 compliance (including permit, if applicable) checks completed in preceding function call"
            },
            "id": 5469,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_withdraw",
            "nameLocation": "43739:9:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5326,
                  "mutability": "mutable",
                  "name": "_amountTotal",
                  "nameLocation": "43767:12:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5469,
                  "src": "43759:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5325,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "43759:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5328,
                  "mutability": "mutable",
                  "name": "_recipient",
                  "nameLocation": "43798:10:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5469,
                  "src": "43790:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5327,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "43790:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5330,
                  "mutability": "mutable",
                  "name": "_tokenContract",
                  "nameLocation": "43827:14:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5469,
                  "src": "43819:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5329,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "43819:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "43748:100:2"
            },
            "returnParameters": {
              "id": 5332,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "43858:0:2"
            },
            "scope": 5834,
            "src": "43730:3146:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5650,
              "nodeType": "Block",
              "src": "47447:2843:2",
              "statements": [
                {
                  "assignments": [
                    5483
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5483,
                      "mutability": "mutable",
                      "name": "_sigLen",
                      "nameLocation": "47533:7:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5650,
                      "src": "47525:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5482,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "47525:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5487,
                  "initialValue": {
                    "expression": {
                      "expression": {
                        "id": 5484,
                        "name": "_mvoInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5476,
                        "src": "47543:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                        }
                      },
                      "id": 5485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "47552:7:2",
                      "memberName": "mvoSigs",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3663,
                      "src": "47543:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                        "typeString": "bytes calldata[] calldata"
                      }
                    },
                    "id": 5486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "47560:6:2",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "47543:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "47525:41:2"
                },
                {
                  "assignments": [
                    5489
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5489,
                      "mutability": "mutable",
                      "name": "_outputIdsLength",
                      "nameLocation": "47585:16:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5650,
                      "src": "47577:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5488,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "47577:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5493,
                  "initialValue": {
                    "expression": {
                      "expression": {
                        "id": 5490,
                        "name": "_enftInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5473,
                        "src": "47604:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      "id": 5491,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "47614:9:2",
                      "memberName": "outputIds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3651,
                      "src": "47604:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                        "typeString": "uint256[] calldata"
                      }
                    },
                    "id": 5492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "47624:6:2",
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "src": "47604:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "47577:53:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5494,
                      "name": "_sigLen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5483,
                      "src": "47645:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 5495,
                      "name": "requiredSigs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3709,
                      "src": "47655:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "47645:22:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5500,
                  "nodeType": "IfStatement",
                  "src": "47641:66:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5497,
                        "name": "Enshroud_MVOSignaturesMissing",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3861,
                        "src": "47676:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 5498,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47676:31:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 5499,
                    "nodeType": "RevertStatement",
                    "src": "47669:38:2"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 5509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5505,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "expression": {
                            "id": 5501,
                            "name": "_enftInfo",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5473,
                            "src": "47736:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                              "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                            }
                          },
                          "id": 5502,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "47746:8:2",
                          "memberName": "inputIds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3648,
                          "src": "47736:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                            "typeString": "uint256[] calldata"
                          }
                        },
                        "id": 5503,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "47755:6:2",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "47736:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 5504,
                        "name": "ARRAY_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3691,
                        "src": "47764:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "47736:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 5508,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5506,
                        "name": "_outputIdsLength",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5489,
                        "src": "47792:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 5507,
                        "name": "ARRAY_LIMIT",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3691,
                        "src": "47811:11:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "47792:30:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "47736:86:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5513,
                  "nodeType": "IfStatement",
                  "src": "47718:146:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5510,
                        "name": "Enshroud_ArrayTooLong",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3847,
                        "src": "47841:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 5511,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "47841:23:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 5512,
                    "nodeType": "RevertStatement",
                    "src": "47834:30:2"
                  }
                },
                {
                  "assignments": [
                    5515
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5515,
                      "mutability": "mutable",
                      "name": "_argsHash",
                      "nameLocation": "47885:9:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5650,
                      "src": "47877:17:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 5514,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "47877:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5516,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "47877:17:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_enum$_Flag_$3638",
                      "typeString": "enum EnshroudProtocol.Flag"
                    },
                    "id": 5520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5517,
                      "name": "_flag",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5479,
                      "src": "47978:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Flag_$3638",
                        "typeString": "enum EnshroudProtocol.Flag"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 5518,
                        "name": "Flag",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3638,
                        "src": "47987:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                          "typeString": "type(enum EnshroudProtocol.Flag)"
                        }
                      },
                      "id": 5519,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "47992:15:2",
                      "memberName": "MintFromDeposit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3635,
                      "src": "47987:20:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_Flag_$3638",
                        "typeString": "enum EnshroudProtocol.Flag"
                      }
                    },
                    "src": "47978:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_enum$_Flag_$3638",
                        "typeString": "enum EnshroudProtocol.Flag"
                      },
                      "id": 5539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 5536,
                        "name": "_flag",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5479,
                        "src": "48257:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 5537,
                          "name": "Flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3638,
                          "src": "48266:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                            "typeString": "type(enum EnshroudProtocol.Flag)"
                          }
                        },
                        "id": 5538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "48271:5:2",
                        "memberName": "Spend",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 3636,
                        "src": "48266:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        }
                      },
                      "src": "48257:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_enum$_Flag_$3638",
                          "typeString": "enum EnshroudProtocol.Flag"
                        },
                        "id": 5558,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5555,
                          "name": "_flag",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5479,
                          "src": "48528:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Flag_$3638",
                            "typeString": "enum EnshroudProtocol.Flag"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 5556,
                            "name": "Flag",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3638,
                            "src": "48537:4:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_Flag_$3638_$",
                              "typeString": "type(enum EnshroudProtocol.Flag)"
                            }
                          },
                          "id": 5557,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "48542:8:2",
                          "memberName": "Withdraw",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3637,
                          "src": "48537:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_Flag_$3638",
                            "typeString": "enum EnshroudProtocol.Flag"
                          }
                        },
                        "src": "48528:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 5601,
                      "nodeType": "IfStatement",
                      "src": "48524:685:2",
                      "trueBody": {
                        "id": 5600,
                        "nodeType": "Block",
                        "src": "48552:657:2",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5561,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5559,
                                "name": "_outputIdsLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5489,
                                "src": "48571:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 5560,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "48590:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "48571:20:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 5565,
                            "nodeType": "IfStatement",
                            "src": "48567:56:2",
                            "trueBody": {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 5562,
                                  "name": "Enshroud_ArrayTooLong",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3847,
                                  "src": "48600:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                    "typeString": "function () pure returns (error)"
                                  }
                                },
                                "id": 5563,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "48600:23:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_error",
                                  "typeString": "error"
                                }
                              },
                              "id": 5564,
                              "nodeType": "RevertStatement",
                              "src": "48593:30:2"
                            }
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 5568,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5566,
                                "name": "_outputIdsLength",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5489,
                                "src": "48642:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 5567,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "48662:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "48642:21:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 5598,
                              "nodeType": "Block",
                              "src": "49052:146:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 5596,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 5586,
                                      "name": "_argsHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5515,
                                      "src": "49071:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "expression": {
                                                "id": 5590,
                                                "name": "_enftInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5473,
                                                "src": "49126:9:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                                }
                                              },
                                              "id": 5591,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "49136:8:2",
                                              "memberName": "inputIds",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3648,
                                              "src": "49126:18:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                "typeString": "uint256[] calldata"
                                              }
                                            },
                                            {
                                              "expression": {
                                                "id": 5592,
                                                "name": "_enftInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5473,
                                                "src": "49146:9:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                                }
                                              },
                                              "id": 5593,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "49156:6:2",
                                              "memberName": "amount",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3656,
                                              "src": "49146:16:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                "typeString": "uint256[] calldata"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            ],
                                            "expression": {
                                              "id": 5588,
                                              "name": "abi",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -1,
                                              "src": "49115:3:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_abi",
                                                "typeString": "abi"
                                              }
                                            },
                                            "id": 5589,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "49119:6:2",
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "src": "49115:10:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                              "typeString": "function () pure returns (bytes memory)"
                                            }
                                          },
                                          "id": 5594,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "49115:48:2",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "id": 5587,
                                        "name": "keccak256",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -8,
                                        "src": "49083:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                          "typeString": "function (bytes memory) pure returns (bytes32)"
                                        }
                                      },
                                      "id": 5595,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "49083:99:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "src": "49071:111:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "id": 5597,
                                  "nodeType": "ExpressionStatement",
                                  "src": "49071:111:2"
                                }
                              ]
                            },
                            "id": 5599,
                            "nodeType": "IfStatement",
                            "src": "48638:560:2",
                            "trueBody": {
                              "id": 5585,
                              "nodeType": "Block",
                              "src": "48665:381:2",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 5583,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 5569,
                                      "name": "_argsHash",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5515,
                                      "src": "48750:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "expression": {
                                                "id": 5573,
                                                "name": "_enftInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5473,
                                                "src": "48831:9:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                                }
                                              },
                                              "id": 5574,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "48841:8:2",
                                              "memberName": "inputIds",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3648,
                                              "src": "48831:18:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                "typeString": "uint256[] calldata"
                                              }
                                            },
                                            {
                                              "expression": {
                                                "id": 5575,
                                                "name": "_enftInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5473,
                                                "src": "48876:9:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                                }
                                              },
                                              "id": 5576,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "48886:6:2",
                                              "memberName": "amount",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3656,
                                              "src": "48876:16:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            {
                                              "expression": {
                                                "id": 5577,
                                                "name": "_enftInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5473,
                                                "src": "48919:9:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                                }
                                              },
                                              "id": 5578,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "48929:9:2",
                                              "memberName": "outputIds",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3651,
                                              "src": "48919:19:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                "typeString": "uint256[] calldata"
                                              }
                                            },
                                            {
                                              "expression": {
                                                "id": 5579,
                                                "name": "_enftInfo",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 5473,
                                                "src": "48965:9:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                                }
                                              },
                                              "id": 5580,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberLocation": "48975:13:2",
                                              "memberName": "detailsHashes",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 3645,
                                              "src": "48965:23:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                                "typeString": "bytes32[] calldata"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                "typeString": "uint256[] calldata"
                                              },
                                              {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              {
                                                "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                                "typeString": "uint256[] calldata"
                                              },
                                              {
                                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                                "typeString": "bytes32[] calldata"
                                              }
                                            ],
                                            "expression": {
                                              "id": 5571,
                                              "name": "abi",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": -1,
                                              "src": "48794:3:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_magic_abi",
                                                "typeString": "abi"
                                              }
                                            },
                                            "id": 5572,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "lValueRequested": false,
                                            "memberLocation": "48798:6:2",
                                            "memberName": "encode",
                                            "nodeType": "MemberAccess",
                                            "src": "48794:10:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                              "typeString": "function () pure returns (bytes memory)"
                                            }
                                          },
                                          "id": 5581,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "48794:217:2",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        ],
                                        "id": 5570,
                                        "name": "keccak256",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -8,
                                        "src": "48762:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                          "typeString": "function (bytes memory) pure returns (bytes32)"
                                        }
                                      },
                                      "id": 5582,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "nameLocations": [],
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "48762:268:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    },
                                    "src": "48750:280:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "id": 5584,
                                  "nodeType": "ExpressionStatement",
                                  "src": "48750:280:2"
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    "id": 5602,
                    "nodeType": "IfStatement",
                    "src": "48253:956:2",
                    "trueBody": {
                      "id": 5554,
                      "nodeType": "Block",
                      "src": "48278:240:2",
                      "statements": [
                        {
                          "expression": {
                            "id": 5552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 5540,
                              "name": "_argsHash",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5515,
                              "src": "48293:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "id": 5544,
                                        "name": "_enftInfo",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5473,
                                        "src": "48366:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                        }
                                      },
                                      "id": 5545,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "48376:8:2",
                                      "memberName": "inputIds",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3648,
                                      "src": "48366:18:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 5546,
                                        "name": "_enftInfo",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5473,
                                        "src": "48407:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                        }
                                      },
                                      "id": 5547,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "48417:9:2",
                                      "memberName": "outputIds",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3651,
                                      "src": "48407:19:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      }
                                    },
                                    {
                                      "expression": {
                                        "id": 5548,
                                        "name": "_enftInfo",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5473,
                                        "src": "48449:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                        }
                                      },
                                      "id": 5549,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "48459:13:2",
                                      "memberName": "detailsHashes",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3645,
                                      "src": "48449:23:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                        "typeString": "bytes32[] calldata"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      },
                                      {
                                        "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                        "typeString": "uint256[] calldata"
                                      },
                                      {
                                        "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                        "typeString": "bytes32[] calldata"
                                      }
                                    ],
                                    "expression": {
                                      "id": 5542,
                                      "name": "abi",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -1,
                                      "src": "48333:3:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_abi",
                                        "typeString": "abi"
                                      }
                                    },
                                    "id": 5543,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "memberLocation": "48337:6:2",
                                    "memberName": "encode",
                                    "nodeType": "MemberAccess",
                                    "src": "48333:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                      "typeString": "function () pure returns (bytes memory)"
                                    }
                                  },
                                  "id": 5550,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "48333:158:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "id": 5541,
                                "name": "keccak256",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -8,
                                "src": "48305:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                  "typeString": "function (bytes memory) pure returns (bytes32)"
                                }
                              },
                              "id": 5551,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "48305:201:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "src": "48293:213:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "id": 5553,
                          "nodeType": "ExpressionStatement",
                          "src": "48293:213:2"
                        }
                      ]
                    }
                  },
                  "id": 5603,
                  "nodeType": "IfStatement",
                  "src": "47974:1235:2",
                  "trueBody": {
                    "id": 5535,
                    "nodeType": "Block",
                    "src": "48009:238:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5533,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 5521,
                            "name": "_argsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5515,
                            "src": "48024:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 5525,
                                      "name": "_enftInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5473,
                                      "src": "48097:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                        "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                      }
                                    },
                                    "id": 5526,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "48107:6:2",
                                    "memberName": "amount",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3656,
                                    "src": "48097:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 5527,
                                      "name": "_enftInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5473,
                                      "src": "48136:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                        "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                      }
                                    },
                                    "id": 5528,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "48146:9:2",
                                    "memberName": "outputIds",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3651,
                                    "src": "48136:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                      "typeString": "uint256[] calldata"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 5529,
                                      "name": "_enftInfo",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5473,
                                      "src": "48178:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                        "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                      }
                                    },
                                    "id": 5530,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "48188:13:2",
                                    "memberName": "detailsHashes",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3645,
                                    "src": "48178:23:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                      "typeString": "uint256[] calldata"
                                    },
                                    {
                                      "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                      "typeString": "bytes32[] calldata"
                                    }
                                  ],
                                  "expression": {
                                    "id": 5523,
                                    "name": "abi",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -1,
                                    "src": "48064:3:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_abi",
                                      "typeString": "abi"
                                    }
                                  },
                                  "id": 5524,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "48068:6:2",
                                  "memberName": "encode",
                                  "nodeType": "MemberAccess",
                                  "src": "48064:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                    "typeString": "function () pure returns (bytes memory)"
                                  }
                                },
                                "id": 5531,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "48064:156:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "id": 5522,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "48036:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 5532,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "48036:199:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "48024:211:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 5534,
                        "nodeType": "ExpressionStatement",
                        "src": "48024:211:2"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 5607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5604,
                      "name": "_argsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5515,
                      "src": "49303:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 5605,
                        "name": "_enftInfo",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5473,
                        "src": "49316:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                          "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                        }
                      },
                      "id": 5606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "49326:6:2",
                      "memberName": "obHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3658,
                      "src": "49316:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "49303:29:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5611,
                  "nodeType": "IfStatement",
                  "src": "49299:69:2",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 5608,
                        "name": "Enshroud_HashDoesNotMatch",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3857,
                        "src": "49341:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 5609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "49341:27:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 5610,
                    "nodeType": "RevertStatement",
                    "src": "49334:34:2"
                  }
                },
                {
                  "body": {
                    "id": 5648,
                    "nodeType": "Block",
                    "src": "49764:519:2",
                    "statements": [
                      {
                        "assignments": [
                          5620
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 5620,
                            "mutability": "mutable",
                            "name": "_mvoID",
                            "nameLocation": "49793:6:2",
                            "nodeType": "VariableDeclaration",
                            "scope": 5648,
                            "src": "49779:20:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string"
                            },
                            "typeName": {
                              "id": 5619,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "49779:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_storage_ptr",
                                "typeString": "string"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 5625,
                        "initialValue": {
                          "baseExpression": {
                            "expression": {
                              "id": 5621,
                              "name": "_mvoInfo",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5476,
                              "src": "49802:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                                "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                              }
                            },
                            "id": 5622,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "49811:6:2",
                            "memberName": "mvoIDs",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3666,
                            "src": "49802:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_string_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "string calldata[] calldata"
                            }
                          },
                          "id": 5624,
                          "indexExpression": {
                            "id": 5623,
                            "name": "x",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5613,
                            "src": "49818:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "49802:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_calldata_ptr",
                            "typeString": "string calldata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "49779:41:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5629,
                              "name": "_mvoID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5620,
                              "src": "49961:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "expression": {
                              "id": 5626,
                              "name": "iMVOStaking",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3716,
                              "src": "49940:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                                "typeString": "contract IMVOStaking_EnshroudProtocol"
                              }
                            },
                            "id": 5628,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "49952:8:2",
                            "memberName": "checkMVO",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3402,
                            "src": "49940:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) external"
                            }
                          },
                          "id": 5630,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "49940:28:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5631,
                        "nodeType": "ExpressionStatement",
                        "src": "49940:28:2"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 5635,
                              "name": "_mvoID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5620,
                              "src": "50067:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            },
                            {
                              "baseExpression": {
                                "expression": {
                                  "id": 5636,
                                  "name": "_mvoInfo",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5476,
                                  "src": "50092:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                                    "typeString": "struct EnshroudProtocol.MVOinfo calldata"
                                  }
                                },
                                "id": 5637,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "50101:7:2",
                                "memberName": "mvoSigs",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3663,
                                "src": "50092:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "bytes calldata[] calldata"
                                }
                              },
                              "id": 5639,
                              "indexExpression": {
                                "id": 5638,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5613,
                                "src": "50109:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "50092:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "expression": {
                                "id": 5640,
                                "name": "_enftInfo",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5473,
                                "src": "50130:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                                  "typeString": "struct EnshroudProtocol.OpsInfo calldata"
                                }
                              },
                              "id": 5641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "50140:6:2",
                              "memberName": "obHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3658,
                              "src": "50130:16:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 5632,
                              "name": "iMVOStaking",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3716,
                              "src": "50025:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IMVOStaking_EnshroudProtocol_$3412",
                                "typeString": "contract IMVOStaking_EnshroudProtocol"
                              }
                            },
                            "id": 5634,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "50037:11:2",
                            "memberName": "checkMVOSig",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3411,
                            "src": "50025:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_string_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes32_$returns$__$",
                              "typeString": "function (string memory,bytes memory,bytes32) view external"
                            }
                          },
                          "id": 5642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "50025:136:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 5643,
                        "nodeType": "ExpressionStatement",
                        "src": "50025:136:2"
                      },
                      {
                        "id": 5647,
                        "nodeType": "UncheckedBlock",
                        "src": "50176:96:2",
                        "statements": [
                          {
                            "expression": {
                              "id": 5645,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": true,
                              "src": "50205:3:2",
                              "subExpression": {
                                "id": 5644,
                                "name": "x",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5613,
                                "src": "50207:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 5646,
                            "nodeType": "ExpressionStatement",
                            "src": "50205:3:2"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 5616,
                      "name": "x",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5613,
                      "src": "49749:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 5617,
                      "name": "_sigLen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5483,
                      "src": "49753:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "49749:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5649,
                  "initializationExpression": {
                    "assignments": [
                      5613
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 5613,
                        "mutability": "mutable",
                        "name": "x",
                        "nameLocation": "49742:1:2",
                        "nodeType": "VariableDeclaration",
                        "scope": 5649,
                        "src": "49734:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 5612,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "49734:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 5615,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 5614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "49746:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "49734:13:2"
                  },
                  "isSimpleCounterLoop": false,
                  "nodeType": "ForStatement",
                  "src": "49729:554:2"
                }
              ]
            },
            "documentation": {
              "id": 5470,
              "nodeType": "StructuredDocumentation",
              "src": "46884:422:2",
              "text": "@notice reverts on any violation of input constraints\n @param _enftInfo: OpsInfo struct containing all of the necessary Operations Block information\n @param _mvoInfo: MVOinfo struct containing array of signatures and IDs of MVOs that supplied encrypted metadata. One struct for entire operation.\n @param _flag: Flag enum corresponding to MintFromDeposit, Spend, or Withdraw context (0, 1, or 2)"
            },
            "id": 5651,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_validateInputs",
            "nameLocation": "47321:15:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5480,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5473,
                  "mutability": "mutable",
                  "name": "_enftInfo",
                  "nameLocation": "47364:9:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5651,
                  "src": "47347:26:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_OpsInfo_$3659_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.OpsInfo"
                  },
                  "typeName": {
                    "id": 5472,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5471,
                      "name": "OpsInfo",
                      "nameLocations": [
                        "47347:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3659,
                      "src": "47347:7:2"
                    },
                    "referencedDeclaration": 3659,
                    "src": "47347:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_OpsInfo_$3659_storage_ptr",
                      "typeString": "struct EnshroudProtocol.OpsInfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5476,
                  "mutability": "mutable",
                  "name": "_mvoInfo",
                  "nameLocation": "47401:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5651,
                  "src": "47384:25:2",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_MVOinfo_$3667_calldata_ptr",
                    "typeString": "struct EnshroudProtocol.MVOinfo"
                  },
                  "typeName": {
                    "id": 5475,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5474,
                      "name": "MVOinfo",
                      "nameLocations": [
                        "47384:7:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3667,
                      "src": "47384:7:2"
                    },
                    "referencedDeclaration": 3667,
                    "src": "47384:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_MVOinfo_$3667_storage_ptr",
                      "typeString": "struct EnshroudProtocol.MVOinfo"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5479,
                  "mutability": "mutable",
                  "name": "_flag",
                  "nameLocation": "47425:5:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5651,
                  "src": "47420:10:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_Flag_$3638",
                    "typeString": "enum EnshroudProtocol.Flag"
                  },
                  "typeName": {
                    "id": 5478,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5477,
                      "name": "Flag",
                      "nameLocations": [
                        "47420:4:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3638,
                      "src": "47420:4:2"
                    },
                    "referencedDeclaration": 3638,
                    "src": "47420:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_Flag_$3638",
                      "typeString": "enum EnshroudProtocol.Flag"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "47336:101:2"
            },
            "returnParameters": {
              "id": 5481,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "47447:0:2"
            },
            "scope": 5834,
            "src": "47312:2978:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5820,
              "nodeType": "Block",
              "src": "50862:1349:2",
              "statements": [
                {
                  "assignments": [
                    5667
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5667,
                      "mutability": "mutable",
                      "name": "_default",
                      "nameLocation": "50880:8:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5820,
                      "src": "50873:15:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      },
                      "typeName": {
                        "id": 5666,
                        "name": "bytes8",
                        "nodeType": "ElementaryTypeName",
                        "src": "50873:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5668,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "50873:15:2"
                },
                {
                  "assignments": [
                    5670
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5670,
                      "mutability": "mutable",
                      "name": "_aId",
                      "nameLocation": "50906:4:2",
                      "nodeType": "VariableDeclaration",
                      "scope": 5820,
                      "src": "50893:17:2",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 5669,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "50893:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5675,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5673,
                        "name": "_audId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5661,
                        "src": "50919:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 5672,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "50913:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                        "typeString": "type(bytes storage pointer)"
                      },
                      "typeName": {
                        "id": 5671,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "50913:5:2",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5674,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "50913:13:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "50893:33:2"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    },
                    "id": 5681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 5676,
                          "name": "updateRequested",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3724,
                          "src": "50943:15:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                            "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                          }
                        },
                        "id": 5678,
                        "indexExpression": {
                          "id": 5677,
                          "name": "_reqAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5654,
                          "src": "50959:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "50943:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Requests_$3685_storage",
                          "typeString": "struct EnshroudProtocol.Requests storage ref"
                        }
                      },
                      "id": 5679,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "50969:10:2",
                      "memberName": "requester1",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3677,
                      "src": "50943:36:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 5680,
                      "name": "_default",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5667,
                      "src": "50983:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes8",
                        "typeString": "bytes8"
                      }
                    },
                    "src": "50943:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 5753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5729,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 5722,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              },
                              "id": 5715,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 5710,
                                    "name": "updateRequested",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3724,
                                    "src": "51281:15:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                      "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                    }
                                  },
                                  "id": 5712,
                                  "indexExpression": {
                                    "id": 5711,
                                    "name": "_reqAddr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5654,
                                    "src": "51297:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "51281:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                    "typeString": "struct EnshroudProtocol.Requests storage ref"
                                  }
                                },
                                "id": 5713,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "51307:10:2",
                                "memberName": "requester1",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3677,
                                "src": "51281:36:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 5714,
                                "name": "_default",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5667,
                                "src": "51321:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "src": "51281:48:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              },
                              "id": 5721,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 5716,
                                    "name": "updateRequested",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3724,
                                    "src": "51346:15:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                      "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                    }
                                  },
                                  "id": 5718,
                                  "indexExpression": {
                                    "id": 5717,
                                    "name": "_reqAddr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5654,
                                    "src": "51362:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "51346:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                    "typeString": "struct EnshroudProtocol.Requests storage ref"
                                  }
                                },
                                "id": 5719,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "51372:10:2",
                                "memberName": "requester2",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3679,
                                "src": "51346:36:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "id": 5720,
                                "name": "_default",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5667,
                                "src": "51386:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "src": "51346:48:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "51281:113:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            },
                            "id": 5728,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5723,
                              "name": "_caller",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5656,
                              "src": "51411:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 5724,
                                  "name": "updateRequested",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3724,
                                  "src": "51422:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                    "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                  }
                                },
                                "id": 5726,
                                "indexExpression": {
                                  "id": 5725,
                                  "name": "_reqAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5654,
                                  "src": "51438:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "51422:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                  "typeString": "struct EnshroudProtocol.Requests storage ref"
                                }
                              },
                              "id": 5727,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "51448:10:2",
                              "memberName": "requester1",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3677,
                              "src": "51422:36:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              }
                            },
                            "src": "51411:47:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "51281:177:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                            "typeString": "enum EnshroudProtocol.ApprovalTypes"
                          },
                          "id": 5735,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5730,
                            "name": "_reqType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5659,
                            "src": "51466:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "baseExpression": {
                                "id": 5731,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "51478:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                  "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                }
                              },
                              "id": 5733,
                              "indexExpression": {
                                "id": 5732,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5654,
                                "src": "51494:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "51478:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                "typeString": "struct EnshroudProtocol.Requests storage ref"
                              }
                            },
                            "id": 5734,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "51504:11:2",
                            "memberName": "requestType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3682,
                            "src": "51478:37:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            }
                          },
                          "src": "51466:49:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "51281:234:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 5751,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                "typeString": "enum EnshroudProtocol.ApprovalTypes"
                              },
                              "id": 5740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5737,
                                "name": "_reqType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5659,
                                "src": "51524:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                  "typeString": "enum EnshroudProtocol.ApprovalTypes"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "expression": {
                                  "id": 5738,
                                  "name": "ApprovalTypes",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3674,
                                  "src": "51536:13:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                                    "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                                  }
                                },
                                "id": 5739,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "51550:7:2",
                                "memberName": "Auditor",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3671,
                                "src": "51536:21:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                  "typeString": "enum EnshroudProtocol.ApprovalTypes"
                                }
                              },
                              "src": "51524:33:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              "id": 5750,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "arguments": [
                                  {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 5742,
                                        "name": "updateRequested",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3724,
                                        "src": "51576:15:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                          "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                        }
                                      },
                                      "id": 5744,
                                      "indexExpression": {
                                        "id": 5743,
                                        "name": "_reqAddr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5654,
                                        "src": "51592:8:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "51576:25:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                        "typeString": "struct EnshroudProtocol.Requests storage ref"
                                      }
                                    },
                                    "id": 5745,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "51602:5:2",
                                    "memberName": "audID",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3684,
                                    "src": "51576:31:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_storage",
                                      "typeString": "bytes storage ref"
                                    }
                                  ],
                                  "id": 5741,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "51566:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 5746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "51566:42:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "id": 5748,
                                    "name": "_aId",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5670,
                                    "src": "51622:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 5747,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -8,
                                  "src": "51612:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 5749,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "51612:15:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "src": "51566:61:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "51524:103:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 5752,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "51523:105:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "51281:347:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5811,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5794,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 5787,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5780,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 5773,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  },
                                  "id": 5766,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 5761,
                                        "name": "updateRequested",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3724,
                                        "src": "51720:15:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                          "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                        }
                                      },
                                      "id": 5763,
                                      "indexExpression": {
                                        "id": 5762,
                                        "name": "_reqAddr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5654,
                                        "src": "51736:8:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "51720:25:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                        "typeString": "struct EnshroudProtocol.Requests storage ref"
                                      }
                                    },
                                    "id": 5764,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "51746:10:2",
                                    "memberName": "requester1",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3677,
                                    "src": "51720:36:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes8",
                                      "typeString": "bytes8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "id": 5765,
                                    "name": "_default",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5667,
                                    "src": "51760:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes8",
                                      "typeString": "bytes8"
                                    }
                                  },
                                  "src": "51720:48:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  },
                                  "id": 5772,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "baseExpression": {
                                        "id": 5767,
                                        "name": "updateRequested",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 3724,
                                        "src": "51785:15:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                          "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                        }
                                      },
                                      "id": 5769,
                                      "indexExpression": {
                                        "id": 5768,
                                        "name": "_reqAddr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 5654,
                                        "src": "51801:8:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "51785:25:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                        "typeString": "struct EnshroudProtocol.Requests storage ref"
                                      }
                                    },
                                    "id": 5770,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberLocation": "51811:10:2",
                                    "memberName": "requester2",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 3679,
                                    "src": "51785:36:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes8",
                                      "typeString": "bytes8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "!=",
                                  "rightExpression": {
                                    "id": 5771,
                                    "name": "_default",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5667,
                                    "src": "51825:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes8",
                                      "typeString": "bytes8"
                                    }
                                  },
                                  "src": "51785:48:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "51720:113:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&&",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                },
                                "id": 5779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5774,
                                  "name": "_caller",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5656,
                                  "src": "51850:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 5775,
                                      "name": "updateRequested",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3724,
                                      "src": "51861:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                        "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                      }
                                    },
                                    "id": 5777,
                                    "indexExpression": {
                                      "id": 5776,
                                      "name": "_reqAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5654,
                                      "src": "51877:8:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "51861:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                      "typeString": "struct EnshroudProtocol.Requests storage ref"
                                    }
                                  },
                                  "id": 5778,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "51887:10:2",
                                  "memberName": "requester1",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3677,
                                  "src": "51861:36:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes8",
                                    "typeString": "bytes8"
                                  }
                                },
                                "src": "51850:47:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "51720:177:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "commonType": {
                                "typeIdentifier": "t_bytes8",
                                "typeString": "bytes8"
                              },
                              "id": 5786,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 5781,
                                "name": "_caller",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5656,
                                "src": "51914:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "expression": {
                                  "baseExpression": {
                                    "id": 5782,
                                    "name": "updateRequested",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3724,
                                    "src": "51925:15:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                      "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                    }
                                  },
                                  "id": 5784,
                                  "indexExpression": {
                                    "id": 5783,
                                    "name": "_reqAddr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 5654,
                                    "src": "51941:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "51925:25:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                    "typeString": "struct EnshroudProtocol.Requests storage ref"
                                  }
                                },
                                "id": 5785,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "51951:10:2",
                                "memberName": "requester2",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 3679,
                                "src": "51925:36:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes8",
                                  "typeString": "bytes8"
                                }
                              },
                              "src": "51914:47:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "51720:241:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            },
                            "id": 5793,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5788,
                              "name": "_reqType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5659,
                              "src": "51969:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                "typeString": "enum EnshroudProtocol.ApprovalTypes"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "expression": {
                                "baseExpression": {
                                  "id": 5789,
                                  "name": "updateRequested",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3724,
                                  "src": "51981:15:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                    "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                  }
                                },
                                "id": 5791,
                                "indexExpression": {
                                  "id": 5790,
                                  "name": "_reqAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5654,
                                  "src": "51997:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "51981:25:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                  "typeString": "struct EnshroudProtocol.Requests storage ref"
                                }
                              },
                              "id": 5792,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "52007:11:2",
                              "memberName": "requestType",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 3682,
                              "src": "51981:37:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                "typeString": "enum EnshroudProtocol.ApprovalTypes"
                              }
                            },
                            "src": "51969:49:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "51720:298:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "components": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 5809,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                  "typeString": "enum EnshroudProtocol.ApprovalTypes"
                                },
                                "id": 5798,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 5795,
                                  "name": "_reqType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5659,
                                  "src": "52027:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                    "typeString": "enum EnshroudProtocol.ApprovalTypes"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "expression": {
                                    "id": 5796,
                                    "name": "ApprovalTypes",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3674,
                                    "src": "52039:13:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                                      "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                                    }
                                  },
                                  "id": 5797,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberLocation": "52053:7:2",
                                  "memberName": "Auditor",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3671,
                                  "src": "52039:21:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                                    "typeString": "enum EnshroudProtocol.ApprovalTypes"
                                  }
                                },
                                "src": "52027:33:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 5808,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "expression": {
                                        "baseExpression": {
                                          "id": 5800,
                                          "name": "updateRequested",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 3724,
                                          "src": "52079:15:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                            "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                          }
                                        },
                                        "id": 5802,
                                        "indexExpression": {
                                          "id": 5801,
                                          "name": "_reqAddr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 5654,
                                          "src": "52095:8:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "52079:25:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                          "typeString": "struct EnshroudProtocol.Requests storage ref"
                                        }
                                      },
                                      "id": 5803,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberLocation": "52105:5:2",
                                      "memberName": "audID",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 3684,
                                      "src": "52079:31:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_storage",
                                        "typeString": "bytes storage ref"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_storage",
                                        "typeString": "bytes storage ref"
                                      }
                                    ],
                                    "id": 5799,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "52069:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 5804,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "52069:42:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "arguments": [
                                    {
                                      "id": 5806,
                                      "name": "_aId",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5670,
                                      "src": "52125:4:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes_memory_ptr",
                                        "typeString": "bytes memory"
                                      }
                                    ],
                                    "id": 5805,
                                    "name": "keccak256",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -8,
                                    "src": "52115:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                      "typeString": "function (bytes memory) pure returns (bytes32)"
                                    }
                                  },
                                  "id": 5807,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "52115:15:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "52069:61:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "52027:103:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "id": 5810,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "52026:105:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "51720:411:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 5815,
                      "nodeType": "IfStatement",
                      "src": "51702:479:2",
                      "trueBody": {
                        "id": 5814,
                        "nodeType": "Block",
                        "src": "52143:38:2",
                        "statements": [
                          {
                            "expression": {
                              "hexValue": "74727565",
                              "id": 5812,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "52165:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "functionReturnParameters": 5665,
                            "id": 5813,
                            "nodeType": "Return",
                            "src": "52158:11:2"
                          }
                        ]
                      }
                    },
                    "id": 5816,
                    "nodeType": "IfStatement",
                    "src": "51263:918:2",
                    "trueBody": {
                      "expression": {
                        "id": 5759,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "expression": {
                            "baseExpression": {
                              "id": 5754,
                              "name": "updateRequested",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3724,
                              "src": "51640:15:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                              }
                            },
                            "id": 5756,
                            "indexExpression": {
                              "id": 5755,
                              "name": "_reqAddr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5654,
                              "src": "51656:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "51640:25:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Requests_$3685_storage",
                              "typeString": "struct EnshroudProtocol.Requests storage ref"
                            }
                          },
                          "id": 5757,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "memberLocation": "51666:10:2",
                          "memberName": "requester2",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 3679,
                          "src": "51640:36:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "id": 5758,
                          "name": "_caller",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5656,
                          "src": "51679:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        },
                        "src": "51640:46:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes8",
                          "typeString": "bytes8"
                        }
                      },
                      "id": 5760,
                      "nodeType": "ExpressionStatement",
                      "src": "51640:46:2"
                    }
                  },
                  "id": 5817,
                  "nodeType": "IfStatement",
                  "src": "50939:1242:2",
                  "trueBody": {
                    "id": 5709,
                    "nodeType": "Block",
                    "src": "50993:264:2",
                    "statements": [
                      {
                        "expression": {
                          "id": 5687,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 5682,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "51008:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                  "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                }
                              },
                              "id": 5684,
                              "indexExpression": {
                                "id": 5683,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5654,
                                "src": "51024:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "51008:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                "typeString": "struct EnshroudProtocol.Requests storage ref"
                              }
                            },
                            "id": 5685,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "51034:10:2",
                            "memberName": "requester1",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3677,
                            "src": "51008:36:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5686,
                            "name": "_caller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5656,
                            "src": "51047:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes8",
                              "typeString": "bytes8"
                            }
                          },
                          "src": "51008:46:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes8",
                            "typeString": "bytes8"
                          }
                        },
                        "id": 5688,
                        "nodeType": "ExpressionStatement",
                        "src": "51008:46:2"
                      },
                      {
                        "expression": {
                          "id": 5694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 5689,
                                "name": "updateRequested",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3724,
                                "src": "51060:15:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                  "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                }
                              },
                              "id": 5691,
                              "indexExpression": {
                                "id": 5690,
                                "name": "_reqAddr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5654,
                                "src": "51076:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "51060:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                "typeString": "struct EnshroudProtocol.Requests storage ref"
                              }
                            },
                            "id": 5692,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberLocation": "51086:11:2",
                            "memberName": "requestType",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3682,
                            "src": "51060:37:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 5693,
                            "name": "_reqType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5659,
                            "src": "51100:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            }
                          },
                          "src": "51060:48:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                            "typeString": "enum EnshroudProtocol.ApprovalTypes"
                          }
                        },
                        "id": 5695,
                        "nodeType": "ExpressionStatement",
                        "src": "51060:48:2"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                            "typeString": "enum EnshroudProtocol.ApprovalTypes"
                          },
                          "id": 5699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 5696,
                            "name": "_reqType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5659,
                            "src": "51118:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "expression": {
                              "id": 5697,
                              "name": "ApprovalTypes",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3674,
                              "src": "51130:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_ApprovalTypes_$3674_$",
                                "typeString": "type(enum EnshroudProtocol.ApprovalTypes)"
                              }
                            },
                            "id": 5698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberLocation": "51144:7:2",
                            "memberName": "Auditor",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3671,
                            "src": "51130:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                              "typeString": "enum EnshroudProtocol.ApprovalTypes"
                            }
                          },
                          "src": "51118:33:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 5708,
                        "nodeType": "IfStatement",
                        "src": "51114:138:2",
                        "trueBody": {
                          "id": 5707,
                          "nodeType": "Block",
                          "src": "51153:99:2",
                          "statements": [
                            {
                              "expression": {
                                "id": 5705,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "expression": {
                                    "baseExpression": {
                                      "id": 5700,
                                      "name": "updateRequested",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3724,
                                      "src": "51207:15:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Requests_$3685_storage_$",
                                        "typeString": "mapping(address => struct EnshroudProtocol.Requests storage ref)"
                                      }
                                    },
                                    "id": 5702,
                                    "indexExpression": {
                                      "id": 5701,
                                      "name": "_reqAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 5654,
                                      "src": "51223:8:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "51207:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Requests_$3685_storage",
                                      "typeString": "struct EnshroudProtocol.Requests storage ref"
                                    }
                                  },
                                  "id": 5703,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberLocation": "51233:5:2",
                                  "memberName": "audID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3684,
                                  "src": "51207:31:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_storage",
                                    "typeString": "bytes storage ref"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "id": 5704,
                                  "name": "_aId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5670,
                                  "src": "51241:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                },
                                "src": "51207:38:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_storage",
                                  "typeString": "bytes storage ref"
                                }
                              },
                              "id": 5706,
                              "nodeType": "ExpressionStatement",
                              "src": "51207:38:2"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 5818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "52198:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 5665,
                  "id": 5819,
                  "nodeType": "Return",
                  "src": "52191:12:2"
                }
              ]
            },
            "documentation": {
              "id": 5652,
              "nodeType": "StructuredDocumentation",
              "src": "50298:395:2",
              "text": "@notice for variable updates that require update requests from three unique admins\n @param _reqAddr: address value looked up in updateRequested mapping\n @param _caller: admin invoking one of the update*() methods (truncated)\n @param _reqType: which type of approval (identifies update*() caller)\n @param _audId: optional auditors[] index for ApprovalTypes.Auditor case"
            },
            "id": 5821,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isRequestApproved",
            "nameLocation": "50708:18:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5654,
                  "mutability": "mutable",
                  "name": "_reqAddr",
                  "nameLocation": "50745:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5821,
                  "src": "50737:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5653,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "50737:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5656,
                  "mutability": "mutable",
                  "name": "_caller",
                  "nameLocation": "50771:7:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5821,
                  "src": "50764:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes8",
                    "typeString": "bytes8"
                  },
                  "typeName": {
                    "id": 5655,
                    "name": "bytes8",
                    "nodeType": "ElementaryTypeName",
                    "src": "50764:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes8",
                      "typeString": "bytes8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5659,
                  "mutability": "mutable",
                  "name": "_reqType",
                  "nameLocation": "50797:8:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5821,
                  "src": "50783:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                    "typeString": "enum EnshroudProtocol.ApprovalTypes"
                  },
                  "typeName": {
                    "id": 5658,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 5657,
                      "name": "ApprovalTypes",
                      "nameLocations": [
                        "50783:13:2"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3674,
                      "src": "50783:13:2"
                    },
                    "referencedDeclaration": 3674,
                    "src": "50783:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ApprovalTypes_$3674",
                      "typeString": "enum EnshroudProtocol.ApprovalTypes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5661,
                  "mutability": "mutable",
                  "name": "_audId",
                  "nameLocation": "50824:6:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5821,
                  "src": "50810:20:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5660,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "50810:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "50726:111:2"
            },
            "returnParameters": {
              "id": 5665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5664,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 5821,
                  "src": "50856:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5663,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "50856:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "50855:6:2"
            },
            "scope": 5834,
            "src": "50699:1512:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5832,
              "nodeType": "Block",
              "src": "52514:414:2",
              "statements": [
                {
                  "AST": {
                    "nativeSrc": "52534:387:2",
                    "nodeType": "YulBlock",
                    "src": "52534:387:2",
                    "statements": [
                      {
                        "body": {
                          "nativeSrc": "52661:211:2",
                          "nodeType": "YulBlock",
                          "src": "52661:211:2",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "52756:4:2",
                                    "nodeType": "YulLiteral",
                                    "src": "52756:4:2",
                                    "type": "",
                                    "value": "0x00"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "52762:10:2",
                                    "nodeType": "YulLiteral",
                                    "src": "52762:10:2",
                                    "type": "",
                                    "value": "0xbac65e5b"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nativeSrc": "52749:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "52749:6:2"
                                },
                                "nativeSrc": "52749:24:2",
                                "nodeType": "YulFunctionCall",
                                "src": "52749:24:2"
                              },
                              "nativeSrc": "52749:24:2",
                              "nodeType": "YulExpressionStatement",
                              "src": "52749:24:2"
                            },
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "52846:4:2",
                                    "nodeType": "YulLiteral",
                                    "src": "52846:4:2",
                                    "type": "",
                                    "value": "0x1c"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "52852:4:2",
                                    "nodeType": "YulLiteral",
                                    "src": "52852:4:2",
                                    "type": "",
                                    "value": "0x04"
                                  }
                                ],
                                "functionName": {
                                  "name": "revert",
                                  "nativeSrc": "52839:6:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "52839:6:2"
                                },
                                "nativeSrc": "52839:18:2",
                                "nodeType": "YulFunctionCall",
                                "src": "52839:18:2"
                              },
                              "nativeSrc": "52839:18:2",
                              "nodeType": "YulExpressionStatement",
                              "src": "52839:18:2"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "y",
                              "nativeSrc": "52635:1:2",
                              "nodeType": "YulIdentifier",
                              "src": "52635:1:2"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nativeSrc": "52641:1:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "52641:1:2"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nativeSrc": "52652:1:2",
                                          "nodeType": "YulLiteral",
                                          "src": "52652:1:2",
                                          "type": "",
                                          "value": "0"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nativeSrc": "52648:3:2",
                                        "nodeType": "YulIdentifier",
                                        "src": "52648:3:2"
                                      },
                                      "nativeSrc": "52648:6:2",
                                      "nodeType": "YulFunctionCall",
                                      "src": "52648:6:2"
                                    },
                                    {
                                      "name": "y",
                                      "nativeSrc": "52656:1:2",
                                      "nodeType": "YulIdentifier",
                                      "src": "52656:1:2"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "div",
                                    "nativeSrc": "52644:3:2",
                                    "nodeType": "YulIdentifier",
                                    "src": "52644:3:2"
                                  },
                                  "nativeSrc": "52644:14:2",
                                  "nodeType": "YulFunctionCall",
                                  "src": "52644:14:2"
                                }
                              ],
                              "functionName": {
                                "name": "gt",
                                "nativeSrc": "52638:2:2",
                                "nodeType": "YulIdentifier",
                                "src": "52638:2:2"
                              },
                              "nativeSrc": "52638:21:2",
                              "nodeType": "YulFunctionCall",
                              "src": "52638:21:2"
                            }
                          ],
                          "functionName": {
                            "name": "mul",
                            "nativeSrc": "52631:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "52631:3:2"
                          },
                          "nativeSrc": "52631:29:2",
                          "nodeType": "YulFunctionCall",
                          "src": "52631:29:2"
                        },
                        "nativeSrc": "52628:244:2",
                        "nodeType": "YulIf",
                        "src": "52628:244:2"
                      },
                      {
                        "nativeSrc": "52886:24:2",
                        "nodeType": "YulAssignment",
                        "src": "52886:24:2",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "x",
                                  "nativeSrc": "52899:1:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "52899:1:2"
                                },
                                {
                                  "name": "y",
                                  "nativeSrc": "52902:1:2",
                                  "nodeType": "YulIdentifier",
                                  "src": "52902:1:2"
                                }
                              ],
                              "functionName": {
                                "name": "mul",
                                "nativeSrc": "52895:3:2",
                                "nodeType": "YulIdentifier",
                                "src": "52895:3:2"
                              },
                              "nativeSrc": "52895:9:2",
                              "nodeType": "YulFunctionCall",
                              "src": "52895:9:2"
                            },
                            {
                              "name": "WAD",
                              "nativeSrc": "52906:3:2",
                              "nodeType": "YulIdentifier",
                              "src": "52906:3:2"
                            }
                          ],
                          "functionName": {
                            "name": "div",
                            "nativeSrc": "52891:3:2",
                            "nodeType": "YulIdentifier",
                            "src": "52891:3:2"
                          },
                          "nativeSrc": "52891:19:2",
                          "nodeType": "YulFunctionCall",
                          "src": "52891:19:2"
                        },
                        "variableNames": [
                          {
                            "name": "z",
                            "nativeSrc": "52886:1:2",
                            "nodeType": "YulIdentifier",
                            "src": "52886:1:2"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "shanghai",
                  "externalReferences": [
                    {
                      "declaration": 3697,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52906:3:2",
                      "valueSize": 1
                    },
                    {
                      "declaration": 5824,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52641:1:2",
                      "valueSize": 1
                    },
                    {
                      "declaration": 5824,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52899:1:2",
                      "valueSize": 1
                    },
                    {
                      "declaration": 5826,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52635:1:2",
                      "valueSize": 1
                    },
                    {
                      "declaration": 5826,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52656:1:2",
                      "valueSize": 1
                    },
                    {
                      "declaration": 5826,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52902:1:2",
                      "valueSize": 1
                    },
                    {
                      "declaration": 5829,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "52886:1:2",
                      "valueSize": 1
                    }
                  ],
                  "id": 5831,
                  "nodeType": "InlineAssembly",
                  "src": "52525:396:2"
                }
              ]
            },
            "documentation": {
              "id": 5822,
              "nodeType": "StructuredDocumentation",
              "src": "52219:187:2",
              "text": "@dev Solbase mulDiv operation with WAD as denominator. Equivalent to `(x * y) / WAD` rounded down. source: https://github.com/Sol-DAO/solbase/blob/main/src/utils/FixedPointMathLib.sol"
            },
            "id": 5833,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mulWadDown",
            "nameLocation": "52421:11:2",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5824,
                  "mutability": "mutable",
                  "name": "x",
                  "nameLocation": "52451:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5833,
                  "src": "52443:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5823,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52443:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5826,
                  "mutability": "mutable",
                  "name": "y",
                  "nameLocation": "52471:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5833,
                  "src": "52463:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5825,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52463:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "52432:47:2"
            },
            "returnParameters": {
              "id": 5830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5829,
                  "mutability": "mutable",
                  "name": "z",
                  "nameLocation": "52511:1:2",
                  "nodeType": "VariableDeclaration",
                  "scope": 5833,
                  "src": "52503:9:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5828,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "52503:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "52502:11:2"
            },
            "scope": 5834,
            "src": "52412:516:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 5835,
        "src": "7004:45927:2",
        "usedErrors": [
          3435,
          3437,
          3439,
          3845,
          3847,
          3849,
          3851,
          3855,
          3857,
          3859,
          3861,
          3863,
          3865,
          3867,
          3869,
          3871,
          3873,
          3875,
          7807
        ],
        "usedEvents": [
          3426,
          3432,
          3775,
          3781,
          3791,
          3799,
          3806,
          3810,
          3820,
          3828
        ]
      }
    ],
    "src": "33:52900:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.28+commit.7893614a.Linux.g++"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-04-29T22:54:48.806Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}